taon 19.0.62 → 19.0.63
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/README.md +160 -160
- package/bin/start.js +281 -281
- package/bin/taon +6 -6
- package/bin/taon-debug +5 -5
- package/bin/taon-debug-brk +5 -5
- package/browser/README.md +24 -24
- package/browser/fesm2022/taon.mjs +177 -77
- package/browser/fesm2022/taon.mjs.map +1 -1
- package/browser/lib/base-classes/base-context.d.ts +6 -0
- package/browser/lib/base-classes/base-controller.d.ts +3 -3
- package/browser/lib/base-classes/base.d.ts +6 -0
- package/browser/lib/create-context.d.ts +12 -4
- package/browser/lib/endpoint-context-storage.d.ts +11 -0
- package/browser/lib/endpoint-context.d.ts +28 -8
- package/browser/lib/index.d.ts +19 -0
- package/browser/lib/models.d.ts +7 -8
- package/browser/package.json +1 -1
- package/icon-menu-taon.svg +15 -15
- package/lib/base-classes/base-context.d.ts +6 -0
- package/lib/base-classes/base-controller.d.ts +3 -3
- package/lib/base-classes/base-controller.js +2 -2
- package/lib/base-classes/base-controller.js.map +1 -1
- package/lib/base-classes/base.d.ts +6 -0
- package/lib/build-info._auto-generated_.d.ts +1 -1
- package/lib/build-info._auto-generated_.js +1 -1
- package/lib/context-db-migrations.js +5 -5
- package/lib/context-db-migrations.js.map +1 -1
- package/lib/create-context.d.ts +12 -4
- package/lib/create-context.js +35 -5
- package/lib/create-context.js.map +1 -1
- package/lib/endpoint-context-storage.d.ts +10 -0
- package/lib/endpoint-context-storage.js +34 -0
- package/lib/endpoint-context-storage.js.map +1 -0
- package/lib/endpoint-context.d.ts +28 -8
- package/lib/endpoint-context.js +96 -55
- package/lib/endpoint-context.js.map +1 -1
- package/lib/index.d.ts +19 -0
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/models.d.ts +7 -8
- package/lib/models.js.map +1 -1
- package/lib/realtime/realtime-client.js +12 -11
- package/lib/realtime/realtime-client.js.map +1 -1
- package/lib/realtime/realtime-core.js +6 -3
- package/lib/realtime/realtime-core.js.map +1 -1
- package/lib/realtime/realtime-server.js +6 -5
- package/lib/realtime/realtime-server.js.map +1 -1
- package/lib/ui/index.js +2 -2
- package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
- package/package.json +1 -1
- package/websql/README.md +24 -24
- package/websql/fesm2022/taon.mjs +184 -84
- package/websql/fesm2022/taon.mjs.map +1 -1
- package/websql/lib/base-classes/base-context.d.ts +6 -0
- package/websql/lib/base-classes/base-controller.d.ts +3 -3
- package/websql/lib/base-classes/base.d.ts +6 -0
- package/websql/lib/create-context.d.ts +12 -4
- package/websql/lib/endpoint-context-storage.d.ts +11 -0
- package/websql/lib/endpoint-context.d.ts +28 -8
- package/websql/lib/index.d.ts +19 -0
- package/websql/lib/models.d.ts +7 -8
- package/websql/package.json +1 -1
- package/lib/decorators/classes/controller-config.d.ts +0 -9
- package/lib/decorators/classes/controller-config.js +0 -11
- package/lib/decorators/classes/controller-config.js.map +0 -1
- package/lib/decorators/classes/controller-options.d.ts +0 -11
- package/lib/decorators/classes/controller-options.js +0 -16
- package/lib/decorators/classes/controller-options.js.map +0 -1
- package/lib/env.d.ts +0 -2
- package/lib/env.js +0 -7
- package/lib/env.js.map +0 -1
- package/lib/storage.d.ts +0 -1
- package/lib/storage.js +0 -6
- package/lib/storage.js.map +0 -1
- package/lib/ui/directives/index.d.ts +0 -3
- package/lib/ui/directives/index.js +0 -5
- package/lib/ui/directives/index.js.map +0 -1
- package/lib/ui/directives/safe.pipe.d.ts +0 -7
- package/lib/ui/directives/taon-inject-html.directive.d.ts +0 -6
- package/lib/ui/directives/taon-long-press.directive.d.ts +0 -22
- package/lib/ui/directives/view-mode.d.ts +0 -5
- package/lib/ui/directives/view-mode.js +0 -10
- package/lib/ui/directives/view-mode.js.map +0 -1
- package/lib/ui/taon-admin-mode-configuration/taon-admin-mode-configuration.component.d.ts +0 -43
- package/lib/ui/taon-admin-mode-configuration/taon-admin.models.d.ts +0 -5
- package/lib/ui/taon-admin-mode-configuration/taon-admin.models.js +0 -3
- package/lib/ui/taon-admin-mode-configuration/taon-admin.models.js.map +0 -1
- package/lib/ui/taon-full-material.module.d.ts +0 -5
- package/lib/ui/taon-github-fork-me-corner/index.d.ts +0 -2
- package/lib/ui/taon-github-fork-me-corner/index.js +0 -5
- package/lib/ui/taon-github-fork-me-corner/index.js.map +0 -1
- package/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.component.d.ts +0 -3
- package/lib/ui/taon-github-fork-me-corner/taon-github-fork-me-corner.module.d.ts +0 -2
- package/lib/ui/taon-github-fork-me-ribbon/index.d.ts +0 -2
- package/lib/ui/taon-github-fork-me-ribbon/index.js +0 -5
- package/lib/ui/taon-github-fork-me-ribbon/index.js.map +0 -1
- package/lib/ui/taon-github-fork-me-ribbon/taon-github-fork-me-ribbon.component.d.ts +0 -3
- package/lib/ui/taon-github-fork-me-ribbon/taon-github-fork-me-ribbon.module.d.ts +0 -2
- package/lib/ui/taon-notifications/index.d.ts +0 -4
- package/lib/ui/taon-notifications/index.js +0 -24
- package/lib/ui/taon-notifications/index.js.map +0 -1
- package/lib/ui/taon-notifications/taon-notifications.component.d.ts +0 -9
- package/lib/ui/taon-notifications/taon-notifications.models.d.ts +0 -6
- package/lib/ui/taon-notifications/taon-notifications.models.js +0 -5
- package/lib/ui/taon-notifications/taon-notifications.models.js.map +0 -1
- package/lib/ui/taon-notifications/taon-notifications.module.d.ts +0 -2
- package/lib/ui/taon-notifications/taon-notifications.service.d.ts +0 -11
- package/lib/ui/taon-progress-bar/index.d.ts +0 -2
- package/lib/ui/taon-progress-bar/index.js +0 -5
- package/lib/ui/taon-progress-bar/index.js.map +0 -1
- package/lib/ui/taon-progress-bar/taon-progress-bar.component.d.ts +0 -13
- package/lib/ui/taon-progress-bar/taon-progress-bar.module.d.ts +0 -2
- package/lib/ui/taon-session-passcode/index.d.ts +0 -1
- package/lib/ui/taon-session-passcode/index.js +0 -5
- package/lib/ui/taon-session-passcode/index.js.map +0 -1
- package/lib/ui/taon-session-passcode/taon-session-passcode.component.d.ts +0 -35
- package/lib/ui/taon-table/index.d.ts +0 -2
- package/lib/ui/taon-table/index.js +0 -5
- package/lib/ui/taon-table/index.js.map +0 -1
- package/lib/ui/taon-table/taon-table.component.d.ts +0 -34
- package/lib/ui/taon-table/taon-table.module.d.ts +0 -2
- package/lib/ui/taon.models.d.ts +0 -11
- package/lib/ui/taon.models.js +0 -3
- package/lib/ui/taon.models.js.map +0 -1
- package/tmp-environment.json +0 -39
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taon.mjs","sources":["../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/orm.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/decorator-abstract-opt.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/config/controller-options.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/config/controller-config.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/symbols.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/validators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/helpers/class-helpers.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/helpers/clone-obj.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-class.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-entity.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-abstract-entity.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/constants.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/inject.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-angular-service.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/models.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/context-db-migrations.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/dependency-injection/di-container.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/get-response-value.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/helpers/taon-helpers.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-subs-manager.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-client.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-server.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy-ipc.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy-mock.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy-socket-io.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-core.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/ui/taon-admin-mode-configuration/taon-admin.service.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/endpoint-context.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/create-context.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/middleware-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-injector.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-middleware.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-file-upload.middleware.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/repository-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-custom-repository.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-repository.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-context.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/controller-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/http/http-methods-decorators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/http/http-params-decorators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-controller.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-crud-controller.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-migration.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-provider.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/subscriber-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-subscriber-for-entity.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/entity-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/migration-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/provider-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/http/http-decorators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/index.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/taon.ts"],"sourcesContent":["//#region @websql\nimport * as tsorm from 'taon-typeorm/websql';\n//#endregion\nimport { _ } from 'tnp-core/websql';\n\n//#region orm\nexport namespace Orm {\n //#region @websql\n export const Repository = tsorm.Repository;\n export import Connection = tsorm.Connection;\n export namespace ListenEvent {\n export import AfterInsert = tsorm.AfterInsert;\n export import AfterLoad = tsorm.AfterLoad;\n export import AfterRecover = tsorm.AfterRecover;\n export import AfterRemove = tsorm.AfterRemove;\n export import AfterSoftRemove = tsorm.AfterSoftRemove;\n export import AfterUpdate = tsorm.AfterUpdate;\n export import BeforeInsert = tsorm.BeforeInsert;\n export import BeforeRecover = tsorm.BeforeRecover;\n export import BeforeRemove = tsorm.BeforeRemove;\n export import BeforeSoftRemove = tsorm.BeforeSoftRemove;\n export import BeforeUpdate = tsorm.BeforeUpdate;\n }\n\n export namespace Tree {\n export import Children = tsorm.TreeChildren;\n export import Parent = tsorm.TreeParent;\n }\n export namespace Column {\n export import Generated = tsorm.PrimaryGeneratedColumn;\n export import Primary = tsorm.PrimaryColumn;\n export import Index = tsorm.Index;\n export import CreateDate = tsorm.CreateDateColumn;\n export import UpdateDate = tsorm.UpdateDateColumn;\n export import DeleteDate = tsorm.DeleteDateColumn;\n export import Custom = tsorm.Column;\n\n /**\n * 100 default characters varchar\n */\n export const String = <T = string>(defaultValue: T = null, length = 100) =>\n tsorm.Column({\n type: 'varchar',\n length,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 100 characters varchar\n */\n export const String100 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 100,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 100 characters varchar\n */\n export const String45 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 45,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 500 characters varchar\n */\n export const String500 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 500,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 200 characters varchar\n */\n export const String200 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 200,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n export const Number = () => tsorm.Column({ type: 'int', nullable: true });\n\n export const DecimalNumber = () =>\n tsorm.Column({ type: 'float', nullable: true });\n\n export const SimpleJson = () =>\n tsorm.Column({ type: 'simple-json', nullable: true });\n\n export const Boolean = (defaultValue: boolean | null) =>\n tsorm.Column({ type: 'boolean', nullable: true, default: defaultValue });\n\n export const DateTIme = (defaultValue: boolean | null = null) =>\n tsorm.Column({ type: 'datetime', nullable: true, default: defaultValue });\n\n // TODO has limitation => comma in name\n // export const SimpleArray = () => tsorm.Column({ type: 'simple-array', nullable: true });\n export import Version = tsorm.VersionColumn;\n export import Virtual = tsorm.VirtualColumn;\n }\n\n export namespace Join {\n export import Table = tsorm.JoinTable;\n export import Column = tsorm.JoinColumn;\n }\n export namespace Relation {\n export import OneToMany = tsorm.OneToMany;\n export import OneToOne = tsorm.OneToOne;\n export import ManyToMany = tsorm.ManyToMany;\n export import ManyToOne = tsorm.ManyToOne;\n }\n //#endregion\n}\n\n//#endregion","import { BaseClass } from '../base-classes/base-class';\nexport class DecoratorAbstractOpt {\n declare className: string;\n}","import { DecoratorAbstractOpt } from '../decorators/decorator-abstract-opt';\nimport type { TaonMiddlewareFunction } from '../decorators/http/http-methods-decorators';\n\nexport class TaonControllerOptions<\n ControllerClass = any,\n> extends DecoratorAbstractOpt {\n /**\n * typeorm realtime subscribtion // TODO disabled for now, does not make sense ?s\n */\n declare realtime?: boolean;\n /**\n * override default path for controller api\n */\n declare path?: string;\n /**\n * Middlewares to be applied to all methods in the controller\n */\n declare middlewares?: TaonMiddlewareFunction;\n}","// import type { BaseMiddleware } from '../base-classes/base-middleware';\nimport { TaonMiddlewareInheritanceObj } from '../decorators/http/http-methods-decorators';\n// import { cloneObj } from '../helpers/clone-obj';\n\nimport { TaonControllerOptions } from './controller-options';\nimport { MethodConfig } from './method-config';\n// import { ParamConfig } from './param-config';\n\nexport class ControllerConfig extends TaonControllerOptions {\n declare methods: { [methodName: string]: Partial<MethodConfig> };\n /**\n * Calculated path from parents controllers\n */\n declare calculatedPath?: string;\n /**\n * a way to transform entity before sending to browser\n */\n declare browserTransformFn?: (entity: any) => any;\n /**\n * Calculated middlewares object from parents controllers\n */\n declare calculatedMiddlewaresControllerObj?: TaonMiddlewareInheritanceObj;\n\n // ! CLONING WILL CONE DESCRIPTOR OF METHOD AND I NEED IT!\n // public clone(override?: Partial<ControllerConfig>): ControllerConfig {\n // return cloneObj<ControllerConfig>(override, ControllerConfig);\n // }\n}\n\nexport const controllerConfigFrom = (\n partial: Partial<ControllerConfig>,\n): ControllerConfig => {\n const newObj: ControllerConfig = partial || ({} as any);\n newObj.methods = newObj.methods || {};\n for (const methodName in newObj.methods) {\n if (newObj.methods.hasOwnProperty(methodName)) {\n // newObj.methods[methodName] = new MethodConfig().clone(\n // newObj.methods[methodName],\n // );\n\n newObj.methods[methodName] = newObj.methods[methodName] || {};\n\n const params =\n (newObj.methods[methodName] as MethodConfig).parameters || {};\n (newObj.methods[methodName] as MethodConfig).parameters = params\n ? params\n : {};\n\n for (const paramName in params) {\n if (params.hasOwnProperty(paramName)) {\n params[paramName] = params[paramName] || {};\n // params[paramName] = new ParamConfig().clone(params[paramName]);\n }\n }\n }\n }\n return newObj;\n};","import { OrignalClassKey } from 'taon-typeorm/websql';\nimport { _ } from 'tnp-core/websql';\nimport { SYMBOL } from 'typescript-class-helpers/websql';\n\nexport namespace Symbols {\n export const ctxInClassOrClassObj = Symbol();\n export const classNameStaticProperty: string = SYMBOL.ClassNameStaticProperty;\n export const fullClassNameStaticProperty: string = `$$fullclassName$$`;\n export const orignalClass: string = OrignalClassKey;\n export const orignalClassClonesObj: string = `$$originalClassClonesObj$$`;\n export const classMethodsNames: string = `$$classMethodsNames$$`;\n\n /**\n * for backendSocket.in(ROOM_NAME).emit(EVENT)\n *\n * Room names are uniqe..\n * here I am limiting number of event for clients.\n */\n class Realtime {\n NAMESPACE(contextName: string) {\n return `${contextName}-taonRealtimeNsp`;\n }\n TABLE_CHANGE(contextName: string, tableName: string) {\n return `${contextName}:listentablename${tableName}`;\n }\n readonly KEYroomSubscribe = `roomSubscribe`;\n readonly KEYroomUnsubscribe = `roomUnsubscribe`;\n\n // /**\n // * TODO use it or not?\n // * @deprecated\n // */\n // ROOM_NAME_SUBSCRIBER_EVENT(\n // contextName: string,\n // className: string,\n // propertyName: string,\n // ) {\n // return `${contextName}:room${_.camelCase(className)}${propertyName}`.toLowerCase();\n // }\n\n //#region custom events in rooms\n ROOM_NAME_CUSTOM(contextName: string, customEvent: string) {\n return `${contextName}:CustomRoomEvent${customEvent}`;\n }\n\n ROOM_SUBSCRIBE_CUSTOM(contextName: string) {\n return `${contextName}:${this.KEYroomSubscribe}CustomRoomEvent`;\n }\n ROOM_UNSUBSCRIBE_CUSTOM(contextName: string) {\n return `${contextName}:${this.KEYroomUnsubscribe}CustomRoomEvent`;\n }\n //#endregion\n\n //#region entity events\n ROOM_NAME_UPDATE_ENTITY(\n contextName: string,\n className: string,\n entityId: number | string,\n ) {\n return `${contextName}:room${_.camelCase(className)}${entityId}`.toLowerCase();\n }\n ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomSubscribe}EntityEvents`;\n }\n\n ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomUnsubscribe}EntityEvents`;\n }\n //#endregion\n\n //#region entity property events\n ROOM_NAME_UPDATE_ENTITY_PROPERTY(\n contextName: string,\n className: string,\n property: string,\n entityId: number | string,\n ) {\n return `${contextName}:room${_.camelCase(className)}${_.camelCase(property)}${entityId}`.toLowerCase();\n }\n\n ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomSubscribe}EntityPropertyEvents`;\n }\n\n ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomUnsubscribe}EntityPropertyEvents`;\n }\n //#endregion\n }\n\n export const REALTIME = new Realtime();\n\n\n export const metadata = {\n className: `class:realname`,\n options: {\n controller: `controller:options`,\n entity: `entity:options`,\n repository: `repository:options`,\n provider: `provider:options`,\n subscriber: `subscriber:options`,\n migration: `migration:options`,\n },\n };\n\n export const old = {\n HAS_TABLE_IN_DB: Symbol(),\n MDC_KEY: `modeldataconfig`,\n WEBSQL_REST_PROGRESS_FUN: Symbol(),\n WEBSQL_REST_PROGRESS_FUN_START: Symbol(),\n WEBSQL_REST_PROGRESS_FUN_DONE: Symbol(),\n WEBSQL_REST_PROGRESS_TIMEOUT: Symbol(),\n\n X_TOTAL_COUNT: `x-total-count`,\n CIRCURAL_OBJECTS_MAP_BODY: `circuralmapbody`,\n CIRCURAL_OBJECTS_MAP_QUERY_PARAM: `circuralmapbody`,\n MAPPING_CONFIG_HEADER: `mappingheader`,\n MAPPING_CONFIG_HEADER_BODY_PARAMS: `mhbodyparams`,\n MAPPING_CONFIG_HEADER_QUERY_PARAMS: `mhqueryparams`,\n ENDPOINT_META_CONFIG: `ng2_rest_endpoint_config`,\n CLASS_DECORATOR_CONTEXT: `$$ng2_rest_class_context`,\n SOCKET_MSG: `socketmessageng2rest`,\n ANGULAR: {\n INPUT_NAMES: Symbol(),\n },\n ERROR_MESSAGES: {\n CLASS_NAME_MATCH: `Please check if your \"class name\" matches @Controller( className ) or @Entity( className )`,\n },\n };\n}","import { _ } from 'tnp-core/websql';\n\nimport { MethodConfig } from './config/method-config';\nimport { Models } from './models';\n\nexport namespace Validators {\n //#region vlidate class name\n export const classNameVlidation = (className, target: Function) => {\n setTimeout(() => {\n // console.log(`check after timeout ${className} , production mode: ${FrameworkContext.isProductionMode}`)\n if (_.isUndefined(className)) {\n throw `[Taon]\n Please provide \"className\" property for each Controller and Entity:\n\n @Taon.Controller({ className: 'MyExampleCtrl' })\n class MyExampleCtrl {\n ...\n }\n\n @Taon.Entity({ className: 'MyExampleEntity' })\n class MyExampleEntity {\n ...\n }\n\n Notice that minified javascript code does not preserve\n Functions/Classes names -this is only solution to preserve classes names.\n\n `;\n }\n });\n\n return _.isUndefined(className) ? target.name : className;\n };\n //#endregion\n\n //#region validate method config\n export const checkIfMethodsWithReponseTYpeAlowed = (\n methods: MethodConfig[],\n current: MethodConfig,\n ) => {\n const defaultResponseType = 'text or JSON';\n if (!current.responseType) {\n return;\n }\n for (let index = 0; index < methods.length; index++) {\n const m = methods[index];\n if (m.path === current.path && m.responseType !== current.responseType) {\n throw new Error(`\n [taon] you can have 2 methods with same path but differetn reponseType-s\n\n ${m.methodName}( ... path: ${m.path} ) -> responseType: ${m.responseType || defaultResponseType}\n ${current.methodName}( ... path: ${current.path} ) -> responseType: ${current.responseType}\n\n Please change path name on of the methods.\n\n `);\n }\n }\n };\n //#endregion\n\n //#region validate class functions\n // TODO\n export const validateClassFunctions = (\n controllers: any[],\n entities: any[],\n proviers: any[],\n repositories: any[],\n ) => {\n if (\n _.isArray(controllers) &&\n controllers.filter(f => !_.isFunction(f)).length > 0\n ) {\n console.error('controllers', controllers);\n throw `\n\n Incorect value for property \"controllers\" inside Taon.Init(...)\n\n `;\n }\n\n if (\n _.isArray(entities) &&\n entities.filter(f => !_.isFunction(f)).length > 0\n ) {\n console.error('entites', entities);\n throw `\n\n Incorect value for property \"entities\" inside Taon.Init(...)\n\n `;\n }\n };\n //#endregion\n\n export const preventUndefinedModel = (model, id) => {\n if (_.isUndefined(model)) {\n throw `Bad update by id, config, id: ${id}`;\n }\n };\n}","//#region imports\n/* */ \nimport { _, Utils } from 'tnp-core/websql';\nimport { CLASS } from 'typescript-class-helpers/websql';\n\nimport {\n controllerConfigFrom,\n ControllerConfig,\n} from '../config/controller-config';\nimport { MethodConfig } from '../config/method-config';\nimport { TaonEntityOptions } from '../decorators/classes/entity-decorator';\nimport { Models } from '../models';\nimport { Symbols } from '../symbols';\nimport { Validators } from '../validators';\n\nimport { TaonHelpers } from './taon-helpers';\n//#endregion\n\nexport namespace ClassHelpers {\n //#region get class from name\n /**\n * TODO - repalce in every place when getting class fn from object\n */\n export const getClassFnFromObject = (json: Object) => {\n if (_.isUndefined(json) || _.isNull(json)) {\n return;\n }\n if (json.constructor) {\n return json.constructor;\n }\n const p = Object.getPrototypeOf(json);\n return p && p.constructor && p.constructor.name !== 'Object'\n ? p.constructor\n : void 0;\n };\n //#endregion\n\n //#region get name\n export const getName = (classFnOrObject: any): string => {\n // exception for FormData\n if (classFnOrObject instanceof FormData) {\n return 'FormData';\n }\n if (!classFnOrObject) {\n console.error('OBJECT OR CLASS', classFnOrObject);\n throw new Error(`Cannot get name from this object or class.`);\n }\n return (\n (classFnOrObject[Symbols.classNameStaticProperty]\n ? classFnOrObject[Symbols.classNameStaticProperty]\n : classFnOrObject?.constructor[Symbols.classNameStaticProperty]) ||\n (_.isFunction(classFnOrObject) ? CLASS.getName(classFnOrObject) : void 0)\n );\n };\n //#endregion\n\n export const getOrginalClass = (classFnOrObject: any): any => {\n const org = classFnOrObject[Symbols.orignalClass];\n if (!org) {\n return classFnOrObject;\n }\n return getOrginalClass(org);\n };\n\n //#region get full internal name\n export const getFullInternalName = (classFnOrObject: any): string => {\n // exception for FormData\n\n if (!classFnOrObject) {\n throw new Error(`Cannot get name from: ${classFnOrObject}`);\n }\n return (\n (classFnOrObject[Symbols.fullClassNameStaticProperty]\n ? classFnOrObject[Symbols.fullClassNameStaticProperty]\n : classFnOrObject?.constructor[Symbols.fullClassNameStaticProperty]) ||\n void 0\n );\n };\n //#endregion\n\n //#region get unique key\n export const getUniqueKey = (classFnOrObject: any): string => {\n const classFn = _.isFunction(classFnOrObject)\n ? classFnOrObject\n : classFnOrObject.constructor;\n const config = Reflect.getMetadata(\n Symbols.metadata.options.entity,\n classFn,\n ) as TaonEntityOptions;\n\n return config.uniqueKeyProp;\n };\n //#endregion\n\n //#region is class object\n export const isContextClassObject = (obj: any): boolean => {\n if (\n !_.isObject(obj) ||\n _.isArray(obj) ||\n _.isRegExp(obj) ||\n _.isBuffer(obj) ||\n _.isArrayBuffer(obj)\n ) {\n return false;\n }\n if (_.isDate(obj)) {\n return true;\n }\n const className = getName(obj);\n return _.isString(className) && className !== 'Object';\n };\n //#endregion\n\n //#region get name\n\n export const setName = (target: Function, className: string): void => {\n // console.log('setName', className, target.name)\n Validators.classNameVlidation(className, target);\n target[Symbols.classNameStaticProperty] = className;\n };\n //#endregion\n\n //#region has parent with class name\n export const hasParentClassWithName = (\n target: Function,\n className: string,\n targets = [],\n ): boolean => {\n if (!target) {\n return false;\n }\n targets.push(target);\n let targetProto = Object.getPrototypeOf(target);\n\n if (\n _.isFunction(targetProto) &&\n ClassHelpers.getName(targetProto) === className\n ) {\n // console.log(`true \"${_.first(targets).name}\" for ${targets.map(d => d.name).join(',')}`)\n return true;\n }\n return hasParentClassWithName(targetProto, className, targets);\n };\n //#endregion\n\n //#region get methods name\n\n //#region not allowed as method name\n const notAllowedAsMethodName = [\n 'length',\n 'name',\n 'arguments',\n 'caller',\n 'constructor',\n 'apply',\n 'bind',\n 'call',\n 'toString',\n '__defineGetter__',\n '__defineSetter__',\n 'hasOwnProperty',\n '__lookupGetter__',\n '__lookupSetter__',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'valueOf',\n '__proto__',\n 'toLocaleString',\n ];\n //#endregion\n\n /**\n * Express async handler for middleware functions.\n */\n export const asyncHandler = fn => (req, res, next) => {\n Promise.resolve(fn(req, res, next)).catch(next);\n };\n\n export const getMethodsNames = (\n classOrClassInstance: any,\n allMethodsNames = [],\n ): string[] => {\n if (!classOrClassInstance) {\n return Utils.uniqArray(allMethodsNames);\n }\n\n const isClassFunction = _.isFunction(classOrClassInstance);\n const classFun = isClassFunction\n ? classOrClassInstance\n : Object.getPrototypeOf(classOrClassInstance);\n const objectToCheck = isClassFunction\n ? (classOrClassInstance as Function)?.prototype\n : classOrClassInstance;\n const prototypeObj = Object.getPrototypeOf(objectToCheck || {});\n\n const properties = _.uniq([\n ...Object.getOwnPropertyNames(objectToCheck || {}),\n ...Object.getOwnPropertyNames(prototypeObj || {}),\n ...Object.keys(objectToCheck || {}),\n ...Object.keys(prototypeObj || {}),\n ]).filter(f => !!f && !notAllowedAsMethodName.includes(f));\n\n properties\n .filter(methodName => typeof objectToCheck[methodName] === 'function')\n .forEach(p => allMethodsNames.push(p));\n\n if (\n !classFun ||\n !classFun.constructor ||\n classFun?.constructor?.name === 'Object'\n ) {\n return Utils.uniqArray(allMethodsNames);\n }\n return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);\n };\n //#endregion\n\n //#region get controller configs\n export const getControllerConfigs = (\n target: Function,\n configs: ControllerConfig[] = [],\n callerTarget?: Function,\n ): ControllerConfig[] => {\n if (!_.isFunction(target)) {\n throw `[typescript-class-helper][getControllerConfigs] Cannot get class config from: ${target}`;\n }\n\n let config: ControllerConfig;\n const parentClass = Object.getPrototypeOf(target);\n const parentName = parentClass ? ClassHelpers.getName(parentClass) : void 0;\n const isValidParent = _.isFunction(parentClass) && parentName !== '';\n\n config = controllerConfigFrom(getClassConfig(target));\n\n configs.push(config);\n\n return isValidParent\n ? getControllerConfigs(parentClass, configs, target)\n : configs;\n };\n //#endregion\n\n //#region ensure configs\n\n // Ensure ClassConfig on constructor, clone parent if needed\n export const ensureClassConfig = (\n target: Function,\n ): Partial<ControllerConfig> => {\n let cfg: Partial<ControllerConfig> = Reflect.getOwnMetadata(\n Symbols.metadata.options.controller, // META_KEYS.class,\n target,\n );\n\n if (!cfg) {\n cfg = { methods: {} };\n\n const parent = Object.getPrototypeOf(target);\n if (parent && parent !== Function.prototype) {\n const parentCfg: Partial<ControllerConfig> = Reflect.getMetadata(\n Symbols.metadata.options.controller, // META_KEYS.class,\n parent,\n );\n if (parentCfg) {\n // Deep copy each method config so child gets its own objects\n const clonedMethods: Record<\n string | symbol,\n Partial<MethodConfig>\n > = {};\n for (const [k, v] of Object.entries(parentCfg.methods)) {\n clonedMethods[k] = {\n ...v,\n parameters: { ...v.parameters }, // shallow clone parameters too\n };\n }\n\n cfg = {\n ...parentCfg,\n methods: clonedMethods,\n };\n }\n }\n\n Reflect.defineMetadata(Symbols.metadata.options.controller, cfg, target);\n }\n\n return cfg;\n };\n\n // Ensure MethodConfig inside ClassConfig\n export const ensureMethodConfig = (\n target: any,\n propertyKey: string | symbol,\n ): Partial<MethodConfig> => {\n const classCfg = ensureClassConfig(target.constructor);\n let methodCfg: Partial<MethodConfig> =\n classCfg.methods[propertyKey?.toString()];\n if (!methodCfg) {\n methodCfg = { methodName: propertyKey?.toString(), parameters: {} };\n classCfg.methods[propertyKey?.toString()] = methodCfg as MethodConfig;\n }\n return methodCfg;\n };\n\n export const getClassConfig = (\n constructor: Function,\n ): Partial<ControllerConfig> | undefined => {\n return Reflect.getMetadata(\n Symbols.metadata.options.controller,\n constructor,\n );\n };\n //#endregion\n}","import { walk } from 'lodash-walk-object/websql';\nimport { _ } from 'tnp-core/websql';\n\nexport const cloneObj = <CloneT>(\n override: Partial<CloneT>,\n classFn: Function,\n): CloneT => {\n const result = _.merge(new (classFn as any)(), _.cloneDeep(this));\n walk.Object(\n override || {},\n (value, lodashPath) => {\n if (_.isNil(value) || _.isFunction(value) || _.isObject(value)) {\n // skipping\n } else {\n _.set(result, lodashPath, value);\n }\n },\n {\n walkGetters: false,\n },\n );\n // console.log({result})\n return result;\n};","//#region imports\nimport { walk } from 'lodash-walk-object/websql';\nimport { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { cloneObj } from '../helpers/clone-obj';\n\n//#endregion\n\nexport class BaseClass<CloneT extends BaseClass = any> {\n //#region class initialization hook\n /**\n * class initialization hook\n * taon after class instance creation\n */\n async _(): Promise<void> {}\n //#endregion\n\n //#region clone\n public clone(override?: Partial<CloneT>): CloneT {\n const classFn = ClassHelpers.getClassFnFromObject(this);\n return cloneObj<CloneT>(override, classFn);\n }\n //#endregion\n}","import { Entity } from 'taon-typeorm/websql'; // @websql\nimport { RelationPath } from 'taon-typeorm/websql';\n\nimport { BaseClass } from './base-class';\n\nlet EntityDecorator = () => {\n return (target: any) => {};\n};\n\n//#region @websql\nEntityDecorator = Entity;\n//#endregion\n\n@EntityDecorator()\nexport abstract class BaseEntity<\n /**\n * type for cloning\n */\n CloneT extends BaseClass = any,\n> extends BaseClass<CloneT> {\n /**\n * simple check if relation is ok\n */\n relation(relationName: RelationPath<CloneT>): string {\n return relationName as string;\n }\n\n /**\n * simple check if relation is ok\n */\n relations(relationNames: RelationPath<CloneT>[]): string[] {\n return relationNames as string[];\n }\n}","//#region @websql\nimport { Entity } from 'taon-typeorm/websql';\n//#endregion\nimport { Orm } from '../orm';\nimport { BaseEntity } from './base-entity';\nimport type { BaseClass } from './base-class';\n\n// empty decorator\nlet EntityDecorator = () => {\n return (target: any) => {};\n};\n\n//#region @websql\nEntityDecorator = Entity;\n//#endregion\n\n@EntityDecorator()\nexport abstract class BaseAbstractEntity<\n CloneT extends BaseClass = any,\n> extends BaseEntity<CloneT> {\n //#region @websql\n @Orm.Column.Generated()\n //#endregion\n id: string;\n\n //#region @websql\n @Orm.Column.Version()\n //#endregion\n version: number;\n}\n\nexport type AbstractEntityOmitKeys<ENTITY> = Omit<ENTITY, 'id' | 'version'| '_' | 'clone'>;","export type TaonEntityKeysToOmit =\n | 'ctrl'\n | 'clone'\n | '__endpoint_context__'\n | 'ctx'\n | 'inject'\n | '_'\n | 'relation'\n | 'relations'\n | 'inject'\n | 'injectRepo'\n | 'injectCustomRepository'\n | 'injectCustomRepo'\n | 'injectController'\n | 'injectCtrl'\n | 'injectProvider'\n | 'injectMiddleware';\n\nexport const TaonEntityKeysToOmitArr: TaonEntityKeysToOmit[] = [\n 'ctrl',\n 'clone',\n '__endpoint_context__',\n 'ctx',\n 'inject',\n '_',\n 'relation',\n 'relations',\n 'inject',\n 'injectRepo',\n 'injectCustomRepository',\n 'injectCustomRepo',\n 'injectController',\n 'injectCtrl',\n 'injectProvider',\n 'injectMiddleware',\n];\n\nimport { InjectionToken } from '@angular/core';\n\nimport type { TaonContext } from './create-context';\n\nlet TAON_CONTEXT: InjectionToken<TaonContext>;\n//#region @browser\nTAON_CONTEXT = new InjectionToken<TaonContext>('TAON_CONTEXT');\n//#endregion\n\nlet CURRENT_HOST_BACKEND_PORT: InjectionToken<number>;\n//#region @browser\nCURRENT_HOST_BACKEND_PORT = new InjectionToken<number>(\n 'CURRENT_HOST_BACKEND_PORT',\n);\n//#endregion\n\nlet CURRENT_HOST_URL: InjectionToken<string>;\n//#region @browser\nCURRENT_HOST_URL = new InjectionToken<string>(\n 'CURRENT_HOST_URL',\n);\n//#endregion\n\nexport { TAON_CONTEXT, CURRENT_HOST_BACKEND_PORT, CURRENT_HOST_URL };\n\nexport const apiPrefix = 'api';","import type { BaseInjector } from './base-classes/base-injector';\nimport type { EndpointContext } from './endpoint-context';\nimport { Symbols } from './symbols';\n\nexport const inject = <T>(entity: () => new (...args: any[]) => T): T => {\n return new Proxy(\n {},\n {\n get: (_, propName) => {\n if (propName === 'hasOwnProperty') {\n return () => false;\n }\n\n const ctor = entity();\n const contextFromClass = ctor[\n Symbols.ctxInClassOrClassObj\n ] as EndpointContext;\n const resultContext = contextFromClass;\n if (resultContext) {\n let instance = resultContext.inject(ctor, {\n parentInstanceThatWillGetInjectedStuff: this,\n }) as BaseInjector;\n // console.log('instance', instance);\n\n if (propName === 'getOriginalPrototype') {\n return () => Object.getPrototypeOf(instance);\n }\n if (propName === 'getOriginalConstructor') {\n return () => instance.constructor;\n }\n\n const methods = ctor[Symbols.classMethodsNames] || [];\n const isMethods = methods.includes(propName);\n\n const methodOrProperty = isMethods\n ? instance[propName].bind(instance)\n : instance[propName];\n\n // console.log(\n // `methodOrProperty from proxy ${propName?.toString()} = isMethods:${isMethods}`,\n // methods,\n // );\n return methodOrProperty;\n }\n },\n },\n ) as T;\n};\n\n// export const injectController = inject;\n\n// export type SubscriptionEvent<T> = {\n// name: keyof T;\n// data: any;\n// };\n\n/**\n * TODO\n */\n// export const injectEntityEvents = <T>(\n// subscriberClassResolveFn: () => new (...args: any[]) => T,\n// eventName?: keyof Omit<EntitySubscriberInterface,'listenTo'> ,\n// ): Observable<SubscriptionEvent<T>> => {\n// const eventsSrc = new Subject<SubscriptionEvent<T>>();\n// const obs = eventsSrc.asObservable();\n\n// let isFirstSubscription = true;\n\n// const proxyObservable = new Proxy(obs, {\n// get(target, prop, receiver) {\n// if (prop === 'subscribe') {\n// return (...args: any[]) => {\n// if (isFirstSubscription) {\n// isFirstSubscription = false;\n// const subscriberClassFN: typeof BaseClass =\n// subscriberClassResolveFn() as any;\n// const ctx = subscriberClassFN[\n// Symbols.ctxInClassOrClassObj\n// ] as EndpointContext;\n// if (!ctx) {\n// throw new Error(\n// `You are trying to inject class without context. Use context like this:\n\n// class MyClassSubscriber extends BaseSubscriber {\n// ${eventName as any}() {\n// \\/\\/ your code here\n// }\n// }\n\n// Taon.injectSubscriberEvents( MyContext.getInstance(()=> MyClassSubscriber), '${eventName as any}' )\n\n// `,\n// );\n// }\n// const subscriberInstance = ctx.getInstanceBy(subscriberClassFN);\n// // subscriberInstance TODO @LAST subscriber event from instance\n// // const entity = subscriberClassFN.prototype.listenTo();\n// console.log('First subscription, you can access arguments here:', {\n// subscriberClassFN,\n// eventName,\n// });\n// }\n// return target.subscribe(...args);\n// };\n// }\n// return Reflect.get(target, prop, receiver);\n// },\n// });\n\n// return proxyObservable as Observable<SubscriptionEvent<T>>;\n// };","import { Injectable, inject } from '@angular/core'; // @browser\n\nimport {\n CURRENT_HOST_BACKEND_PORT,\n CURRENT_HOST_URL,\n TAON_CONTEXT,\n} from '../constants';\nimport { TaonContext } from '../create-context';\nimport { inject as taonInject } from '../inject';\n\n/**\n * TODO prevent calling methods when not initialized\n * with init(ctx)\n */\n//#region @browser\n@Injectable()\n//#endregion\nexport abstract class BaseAngularsService {\n //#region @browser\n protected readonly currentContext: TaonContext = inject(TAON_CONTEXT);\n /**\n * @deprecated\n * current context host backend port (for localhost backend)\n */\n protected readonly CURRENT_HOST_BACKEND_PORT: number | undefined;\n /**\n * @deprecated\n * current context host URL (for localhost backend)\n */\n protected readonly CURRENT_HOST_URL: string | undefined;\n //#endregion\n constructor() {\n //#region @browser\n this.CURRENT_HOST_BACKEND_PORT = inject(CURRENT_HOST_BACKEND_PORT, {\n optional: true,\n });\n this.CURRENT_HOST_URL = inject(CURRENT_HOST_URL, {\n optional: true,\n });\n // #endregion\n }\n\n /**\n * @deprecated\n * Returns the host URL for the backend service\n * that is running on localhost (normal NodeJS/ExpressJS mode).\n */\n get host(): string {\n //#region @browser\n if (this.CURRENT_HOST_URL) {\n return this.CURRENT_HOST_URL;\n }\n return `http://localhost:${this.CURRENT_HOST_BACKEND_PORT}`;\n //#endregion\n return void 0;\n }\n\n injectController<T>(\n ctor: new (...args: any[]) => T,\n /**\n * optional override context\n */\n overrideCurrentContext?: TaonContext,\n ): T {\n return taonInject(() => {\n let currentContext: TaonContext;\n //#region @browser\n currentContext = overrideCurrentContext\n ? overrideCurrentContext\n : this.currentContext;\n //#endregion\n if (!currentContext) {\n throw new Error(\n 'No context available. Make sure to initialize the context before injecting controllers.',\n );\n }\n return currentContext ? currentContext.getClass(ctor) : void 0;\n }) as T;\n }\n}","import type { RequestHandler } from 'express';\nimport {\n Response as ExpressResponse,\n Request as ExpressRequest,\n} from 'express';\nimport { Models as ModelsNg2Rest } from 'ng2-rest/websql';\nimport { _ } from 'tnp-core/websql';\nimport { CoreModels } from 'tnp-core/websql';\n\nimport { BaseClass } from './base-classes/base-class';\nimport type { BaseMiddleware } from './base-classes/base-middleware';\nimport type {\n TaonHttpDecoratorOptions,\n TaonMiddlewareFunction,\n TaonMiddlewareInheritanceObj,\n} from './decorators/http/http-methods-decorators';\nimport { ClassHelpers } from './helpers/class-helpers';\n\nexport namespace Models {\n export type FrameworkMode =\n | 'backend-frontend(tcp+udp)'\n | 'remote-backend(tcp+udp)'\n | 'backend-frontend(ipc-electron)'\n | 'backend-frontend(websql-electron)'\n | 'backend-frontend(websql)';\n\n //#region models / class types\n export enum ClassType {\n ENTITY = 'ENTITY',\n CONTROLLER = 'CONTROLLER',\n REPOSITORY = 'REPOSITORY',\n PROVIDER = 'PROVIDER',\n SUBSCRIBER = 'SUBSCRIBER',\n MIGRATION = 'MIGRATION',\n MIDDLEWARE = 'MIDDLEWARE',\n }\n\n export const ClassTypeKey = {\n [ClassType.ENTITY]: 'entities',\n [ClassType.CONTROLLER]: 'controllers',\n [ClassType.REPOSITORY]: 'repositories',\n [ClassType.PROVIDER]: 'providers',\n [ClassType.SUBSCRIBER]: 'subscribers',\n [ClassType.MIGRATION]: 'migrations',\n [ClassType.MIDDLEWARE]: 'middlewares',\n } as {\n [key in ClassType]: keyof ContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n };\n\n //#endregion\n\n //#region models / middleware type\n export type MiddlewareType = [Function, any[]];\n //#endregion\n\n //#region models / db recreate mode\n /**\n * DROP_DB+MIGRATIONS (default for development)\n * Drop all tables + recreate them + run migrations\n * synchronize: true , dropSchema: true\n * use migrations: true\n *\n * MIGRATIONS (default for production)\n * Do not drop tables, only run migrations\n * synchronize: false, dropSchema: false\n * use migrations: true\n */\n export type DBRecreateMode =\n | 'DROP_DB+MIGRATIONS'\n | 'PRESERVE_DATA+MIGRATIONS';\n //#endregion\n\n //#region models / database connection options\n export class DatabaseConfigTypeOrm {\n /**\n * database name\n */\n database?: string;\n /**\n * only for file base db: sqlite, sqljs\n */\n location?: string;\n synchronize: boolean;\n dropSchema: boolean;\n type?: CoreModels.DatabaseType;\n /**\n * Persists db on disk/local-storage if serverless db\n */\n autoSave?: boolean;\n /**\n * for websql db mode\n * true by default\n */\n useLocalForage?: boolean;\n logging: boolean;\n databasePort?: number;\n databaseHost?: string;\n databaseUsername?: string;\n databasePassword?: string;\n }\n //#endregion\n\n //#region models / database config\n export class DatabaseConfig extends DatabaseConfigTypeOrm {\n /**\n * Default value 'DROP_ALL'.\n *\n * Tell framework what is happening with db\n * when context is starting.\n */\n public recreateMode?: DBRecreateMode;\n\n static from(\n databasePartialConfig: Partial<\n Omit<\n DatabaseConfig,\n 'synchronize' | 'dropSchema' | 'databaseConfigTypeORM'\n >\n >,\n ): DatabaseConfig {\n return _.merge(new DatabaseConfig(), databasePartialConfig);\n }\n\n get databaseConfigTypeORM(): DatabaseConfigTypeOrm {\n //#region @websqlFunc\n const result = _.cloneDeep(this) as DatabaseConfig;\n if (result.recreateMode) {\n if (result.recreateMode === 'DROP_DB+MIGRATIONS') {\n result.synchronize = true;\n result.dropSchema = true;\n } else if (result.recreateMode === 'PRESERVE_DATA+MIGRATIONS') {\n result.synchronize = false;\n result.dropSchema = false;\n }\n }\n delete result.recreateMode;\n\n return result as any;\n //#endregion\n }\n }\n //#endregion\n\n //#region models / session\n\n export type ISession = {\n secret?: string;\n saveUninitialized?: boolean;\n /**\n * max age of session\n */\n cookieMaxAge?: number;\n secure?: boolean;\n resave?: boolean;\n };\n //#endregion\n\n //#region models / context options\n export type ConnectionOptionsLogs = {\n http?: boolean;\n realtime?: boolean;\n framework?: boolean;\n db?: boolean;\n migrations?: boolean;\n };\n export interface ContextOptions<\n CONTEXTS,\n CONTROLLERS,\n ENTITIES,\n REPOSITORIES,\n PROVIDERS,\n SUBSCRIBERS,\n MIGRATIONS,\n MIDDLEWARES,\n > {\n appId?: string;\n\n contextName: string;\n /**\n * if defined and different from contextName\n * - context will NOT be initialized\n */\n activeContext?: string | null;\n /**\n * IMPORTANT! provide full url that starts with http:// or https://\n * host/port for initing backend server\n */\n host?: string;\n\n /**\n * Needs to be specified in docker environment only\n */\n hostPortNumber?: number;\n /**\n * IMPORTANT! provide full url that starts with http:// or https://\n * frontend host only needed when we are\n * using withCredentials for axios\n * and session cookie\n * or realtime communication\n */\n frontendHost?: string;\n\n /**\n * Needs to be specified in docker environment only\n */\n frontendHostPortNumber?: number;\n /**\n * IMPORTANT! provide full url that starts with http:// or https://\n * backend way of communication\n * between taon backends/processes\n */\n remoteHost?: string;\n /**\n * User ipc for communication between BE/FE\n * when electron is used as a platform\n * Default: true\n */\n useIpcWhenElectron?: boolean;\n /**\n * taon contexts here\n * (module like structure)\n */\n contexts?: CONTEXTS;\n /**\n * taon controller here\n * (glue between frontend and backend)\n */\n controllers?: CONTROLLERS;\n /**\n * taon entities\n * (entities are used to create tables in db)\n */\n entities?: ENTITIES;\n /**\n * taon repositories\n * (repositories are used to access data from db)\n */\n repositories?: REPOSITORIES;\n /**\n * taon providers\n * (context singletons)\n */\n providers?: PROVIDERS;\n /**\n * taon subscribers\n * (subscribers are used to listen to db events)\n */\n subscribers?: SUBSCRIBERS;\n /**\n * taon migrations\n * (migrations are used to update db schema and achieve proper CI/CD)\n */\n migrations?: MIGRATIONS;\n /**\n * taon middlewares\n * middlewares are used to intercept requests\n * and responses in the context\n */\n middlewares?: MIDDLEWARES;\n /**\n * Config for express session\n */\n session?: ISession;\n /**\n * taon is not going to write .rest files to cwd()\n */\n skipWritingServerRoutes?: boolean;\n /**\n * TODO - this is still in progress\n * @deprecated\n */\n productionMode?: boolean;\n /**\n * If you want your context to never be started as separated server\n * use abstract: true\n * @default: false\n */\n abstract?: boolean;\n logs?: boolean | ConnectionOptionsLogs;\n database?: boolean | Partial<DatabaseConfig>;\n /**\n * disable default realtime communication through TCP upgrade sockets\n */\n disabledRealtime?: boolean;\n /**\n * Will be removed soon - cloud will handle certs and https\n * @deprecated\n */\n https?: {\n key: string;\n cert: string;\n };\n /**\n * TODO - will be removed soon\n * @deprecated\n */\n publicAssets?: { serverPath: string; locationOnDisk: string }[];\n /**\n * by default cwd === process.cwd()\n */\n cwd?: string;\n }\n //#endregion\n\n //#region models / http\n export namespace Http {\n export import Rest = ModelsNg2Rest;\n\n export type ContextENDPOINT = { target: Function; initFN: Function };\n\n export type FormlyFromType = 'material' | 'bootstrap';\n\n export type ExpressContext<T> = (\n req: ExpressRequest,\n res: ExpressResponse,\n ) => T;\n\n export type SyncResponse<T> = string | T;\n\n export type ResponseFuncOpt<T> = {\n limitSize?: (\n enties: Function | Function[],\n include: string[],\n exclude: string[],\n ) => void;\n };\n\n export type SyncResponseFunc<T> = (\n options?: ResponseFuncOpt<T>,\n ) => SyncResponse<T>;\n export type MixResponse<T> = SyncResponse<T> | ExpressContext<T>;\n\n export interface ClientAction<T> {\n /**\n * @deprecated use request() mehods instead\n */\n readonly received?: Rest.PromiseObservableMix<Rest.HttpResponse<T>>;\n request?(\n axiosConfig?: ModelsNg2Rest.Ng2RestAxiosRequestConfig,\n ): Rest.PromiseObservableMix<Rest.HttpResponse<T>>;\n }\n\n export interface AsyncResponse<T> {\n (\n req?: ExpressRequest,\n res?: ExpressResponse,\n ): Promise<SyncResponse<T> | SyncResponseFunc<T>>;\n }\n\n export type Response<T = string> = AsyncResponse<T> & ClientAction<T>;\n\n export class Errors {\n public toString = (): string => {\n return this.message;\n };\n\n private constructor(\n public message: string,\n private code: ModelsNg2Rest.HttpCode = 400,\n ) {}\n\n private static create(\n message: string,\n code: ModelsNg2Rest.HttpCode = 400,\n ) {\n return new Errors(message, code);\n }\n\n public static entityNotFound(entity?: Function) {\n return Errors.create(\n `Entity ${ClassHelpers.getName(entity)} not found`,\n );\n }\n\n public static custom(\n message: string,\n code: ModelsNg2Rest.HttpCode = 400,\n ) {\n return Errors.create(message, code);\n }\n }\n\n //#region @websql\n export interface AuthCallBack {\n (methodReference: Function): RequestHandler;\n }\n\n //#endregion\n }\n //#endregion\n\n //#region models / start params\n export interface StartParams {\n port: number;\n args: string[];\n onlyMigrationRun?: boolean;\n onlyMigrationRevertToTimestamp?: number;\n }\n\n export interface TaonInitializeParams {\n overrideHost?: string;\n overrideRemoteHost?: string;\n onlyMigrationRun?: boolean;\n onlyMigrationRevertToTimestamp?: number;\n }\n\n //#endregion\n}","//#region imports\nimport { Helpers, UtilsMigrations, _ } from 'tnp-core/websql';\nimport { BaseMigration } from './base-classes/base-migration';\nimport type { EndpointContext } from './endpoint-context';\nimport { Models } from './models';\nimport { ClassHelpers } from './helpers/class-helpers';\nimport {\n Column,\n DataSource,\n Entity,\n EntitySchema,\n Index,\n PrimaryGeneratedColumn,\n QueryRunner,\n Table,\n TableColumn,\n TableIndex,\n} from 'taon-typeorm/websql';\n//#endregion\n\n//#region models\nexport type MigrationStatus = 'completed' | 'pending';\n\nexport class ContextDbMigrations {\n //#region fields\n\n //#region fields / migration table name\n readonly DEFAULT_MIGRATION_TABLE_NAME = 'TAON_MIGRATION_META';\n //#endregion\n\n //#region fields / migration statuses\n readonly MIGRATION_STATUS_COMPLETED: MigrationStatus = 'completed';\n readonly MIGRATION_STATUS_PENDING: MigrationStatus = 'pending';\n //#endregion\n\n //#region fields / migration table schema\n readonly table = new Table({\n name: this.DEFAULT_MIGRATION_TABLE_NAME,\n columns: [\n {\n name: 'id',\n type: 'integer',\n isPrimary: true, // Mark it as the primary key\n isGenerated: true, // Enable auto-generation\n generationStrategy: 'increment', // Use auto-increment strategy\n },\n {\n name: 'name',\n type: 'varchar',\n length: '255',\n isUnique: true, // Ensure the name is unique\n isNullable: false, // Ensure this field is required\n },\n {\n // context is a part of name\n name: 'context',\n type: 'varchar',\n length: '255',\n isNullable: false, // Optional context for migrations (e.g., tenant or module name)\n },\n {\n name: 'applied_at',\n type: 'timestamp',\n default: 'CURRENT_TIMESTAMP', // Automatically set the timestamp\n isNullable: true,\n },\n {\n name: 'status',\n type: 'varchar',\n length: '50',\n default: `'${this.MIGRATION_STATUS_COMPLETED}'`,\n isNullable: false,\n },\n // { // TODO not needed for now\n // name: 'checksum',\n // type: 'varchar',\n // length: '64',\n // isNullable: true, // Optional field to store a hash/checksum of migration file\n // },\n ],\n });\n //#endregion\n\n //#endregion\n\n //#region constructor\n constructor(private ctx: EndpointContext) {}\n //#endregion\n\n //#region methods & getters / make sure migration table exists\n async ensureMigrationTableExists(): Promise<void> {\n //#region @websqlFunc\n if (this.ctx.remoteHost || !this.ctx.connection) {\n return;\n }\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n await queryRunner.startTransaction();\n\n // Check if the table already exists\n const hasTable = await queryRunner.hasTable(\n this.DEFAULT_MIGRATION_TABLE_NAME,\n );\n if (hasTable) {\n this.ctx.logMigrations &&\n console.log(\n `Table ${this.DEFAULT_MIGRATION_TABLE_NAME} already exists.`,\n );\n await queryRunner.commitTransaction();\n await queryRunner.release();\n return; // Exit early if the table exists\n }\n\n try {\n await queryRunner.createTable(this.table);\n await queryRunner.createIndex(\n this.DEFAULT_MIGRATION_TABLE_NAME,\n new TableIndex({\n name: 'IDX_NAME',\n columnNames: ['name'],\n }),\n );\n\n await queryRunner.commitTransaction();\n } catch (error) {\n this.ctx.logMigrations &&\n console.error(\n `Transaction failed [ensureMigrationTableExists]` + `, rolling back:`,\n error,\n );\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / revert migration to timestamp\n private async logSelectALl(name: string, queryRunner: QueryRunner) {\n console.log(\n name,\n (\n await queryRunner.query(\n `SELECT * FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} WHERE context = $1`,\n [this.ctx.contextName],\n )\n ).map(m => m.name),\n );\n }\n\n async revertMigrationToTimestamp(timestamp: number) {\n //#region @websqlFunc\n if (this.ctx.remoteHost || !this.ctx.connection) {\n return;\n }\n if (!UtilsMigrations.isValidTimestamp(timestamp)) {\n Helpers.throw(\n `Invalid timestamp provided for migration revert: ${timestamp}`,\n );\n }\n\n // Get all migration class functions and reverse the order\n const migrationsClassFns: Function[] = this.ctx\n .getClassFunByArr(Models.ClassType.MIGRATION)\n .reverse();\n\n // Filter migrations that need to be reverted\n const migrationClassesInstancesToRevert: BaseMigration[] =\n migrationsClassFns\n .map(classFn => {\n const timestampFromClassName = Number(\n UtilsMigrations.getTimestampFromClassName(\n ClassHelpers.getName(classFn),\n ),\n );\n\n if (timestampFromClassName <= timestamp) {\n // this.ctx.logMigrations &&\n // console.log(\n // `Stopping migration filter at: ${ClassHelpers.getName(classFn)} ` +\n // `with timestamp ${timestampFromClassName}`,\n // );\n return null;\n }\n\n return this.ctx.getInstanceBy(classFn as any) as any;\n })\n .filter(f => !!f)\n .map(f => f as BaseMigration)\n .filter(migrationInstance => migrationInstance.isReadyToRun());\n\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n\n try {\n await queryRunner.startTransaction();\n\n // Fetch applied migrations from the database\n const appliedMigrationsForContext = await queryRunner.query(\n `SELECT name FROM ${this.DEFAULT_MIGRATION_TABLE_NAME}\n WHERE status = $1 AND context = $2`,\n [this.MIGRATION_STATUS_COMPLETED, this.ctx.contextName],\n );\n\n const appliedMigrationsForContextNames = appliedMigrationsForContext.map(\n m => m.name,\n );\n // console.log({ appliedMigrationsForContextNames });\n\n for (const migrationClassInstance of migrationClassesInstancesToRevert) {\n const migrationName = ClassHelpers.getName(migrationClassInstance);\n\n if (!appliedMigrationsForContextNames.includes(migrationName)) {\n this.ctx.logMigrations &&\n console.warn(\n `Skipping migration not marked as applied: ${migrationName}`,\n );\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(\n `Reverting migration: ${migrationName} , context: ${this.ctx.contextName}`,\n );\n await migrationClassInstance.down(queryRunner);\n\n // Remove the reverted migration from the tracking table\n await queryRunner.query(\n `DELETE FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} WHERE name = $1`,\n [migrationName],\n );\n }\n\n await queryRunner.commitTransaction();\n this.ctx.logMigrations &&\n console.log(\n `Migrations successfully reverted ` +\n `to the specified timestamp ${timestamp} .`,\n );\n } catch (error) {\n this.ctx.logMigrations &&\n console.error('Transaction failed, rolling back:', error);\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / clear migration table\n async clearMigrationTable() {\n //#region @websqlFunc\n if (this.ctx.remoteHost || !this.ctx.connection) {\n return;\n }\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n await queryRunner.startTransaction();\n\n try {\n await queryRunner.clearTable(this.DEFAULT_MIGRATION_TABLE_NAME);\n await queryRunner.commitTransaction();\n } catch (error) {\n this.ctx.logMigrations &&\n console.error('Transaction failed, rolling back:', error);\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / mark all migrations as applied\n async markAllMigrationsAsApplied() {\n //#region @websqlFunc\n if (this.ctx.remoteHost || !this.ctx.connection) {\n return;\n }\n const migrationsClassFns: Function[] = this.ctx.getClassFunByArr(\n Models.ClassType.MIGRATION,\n );\n\n const migrationClassesInstances: BaseMigration[] = migrationsClassFns\n .map(classFn => this.ctx.getInstanceBy(classFn as any))\n .map(f => f as BaseMigration)\n .filter(migrationInstance => migrationInstance.isReadyToRun());\n\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n\n try {\n await queryRunner.startTransaction();\n\n // Fetch already applied migrations from the database\n const allMigrationsInDb = await queryRunner.query(\n `SELECT name FROM ${this.DEFAULT_MIGRATION_TABLE_NAME}`,\n );\n\n const allMigrationInDBNames = allMigrationsInDb.map(m => m.name);\n\n for (const instance of migrationClassesInstances) {\n const migrationName = ClassHelpers.getName(instance);\n\n if (allMigrationInDBNames.includes(migrationName)) {\n this.ctx.logMigrations &&\n console.log(`Skipping already applied migration: ${migrationName}`);\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(`Marking migration as applied: ${migrationName}`);\n\n // Insert migration as 'complete' without running\n await queryRunner.query(\n `INSERT INTO ${this.DEFAULT_MIGRATION_TABLE_NAME} (name, status, context, applied_at) ` +\n `VALUES ($1, $2, $3, CURRENT_TIMESTAMP)`,\n [\n migrationName,\n this.MIGRATION_STATUS_COMPLETED,\n instance.ctx.contextName,\n ],\n );\n }\n\n // update all pending migrations to completed\n await queryRunner.query(\n `UPDATE ${this.DEFAULT_MIGRATION_TABLE_NAME}\n SET status = $1, applied_at = CURRENT_TIMESTAMP\n WHERE status = $2`,\n [this.MIGRATION_STATUS_COMPLETED, this.MIGRATION_STATUS_PENDING],\n );\n\n await queryRunner.commitTransaction();\n this.ctx.logMigrations &&\n console.log('All migrations marked as applied.');\n } catch (error) {\n this.ctx.logMigrations &&\n console.error(\n 'Failed to mark all migrations as applied, rolling back:',\n error,\n );\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / run all migrations\n async runAllNotCompletedMigrations() {\n //#region @websqlFunc\n if (this.ctx.remoteHost || !this.ctx.connection) {\n return;\n }\n const migrationsClassFns: Function[] = this.ctx.getClassFunByArr(\n Models.ClassType.MIGRATION,\n );\n\n // console.log({\n // migrationClassesALl: migrationsClassFns.map(f => ClassHelpers.getName(f)),\n // });\n\n const migrationClassesInstances: BaseMigration[] = migrationsClassFns\n .map(classFn => this.ctx.getInstanceBy(classFn as any))\n .map(f => f as BaseMigration)\n .filter(migrationInstance => migrationInstance.isReadyToRun());\n\n // console.log({\n // migrationClassesInstances: migrationsClassFns.map(f =>\n // ClassHelpers.getName(f),\n // ),\n // });\n\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n\n try {\n await queryRunner.startTransaction();\n\n // Check if the migrations table exists\n // TODO: Implement check for migrations table existence here\n\n // Fetch applied migrations from the database\n const appliedMigrationsForContext = await queryRunner.query(\n `SELECT name, status FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} ` +\n `WHERE context = $1`,\n [this.ctx.contextName],\n );\n\n //#region check and update pending migrations\n const pendingMigrationsForContext = appliedMigrationsForContext.filter(\n m => m.status === this.MIGRATION_STATUS_PENDING,\n );\n\n // Run pending migrations first\n for (const pendingContextMigration of pendingMigrationsForContext) {\n const migrationInstance = migrationClassesInstances.find(\n instance =>\n ClassHelpers.getName(instance) === pendingContextMigration.name,\n );\n\n if (!migrationInstance) {\n this.ctx.logMigrations &&\n console.warn(\n `Pending migration ${pendingContextMigration.name} not found in loaded migrations.`,\n );\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(\n `Completing pending migration: ${pendingContextMigration.name}`,\n );\n await migrationInstance.up(queryRunner);\n\n // Update migration status to 'complete'\n await queryRunner.query(\n `UPDATE ${this.DEFAULT_MIGRATION_TABLE_NAME}\n SET status = $1, applied_at = CURRENT_TIMESTAMP\n WHERE name = $2`,\n [this.MIGRATION_STATUS_COMPLETED, pendingContextMigration.name],\n );\n }\n //#endregion\n\n //#region run new migrations\n for (const instance of migrationClassesInstances) {\n const migrationName = ClassHelpers.getName(instance);\n\n if (appliedMigrationsForContext.some(m => m.name === migrationName)) {\n this.ctx.logMigrations &&\n console.log(`Skipping already applied migration: ${migrationName}`);\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(`Applying new migration: ${migrationName}`);\n // Insert migration as 'pending' before execution\n await queryRunner.query(\n `INSERT INTO ${this.DEFAULT_MIGRATION_TABLE_NAME} (name, status, context, applied_at) ` +\n `VALUES ($1, $2, $3, NULL)`,\n [migrationName, this.MIGRATION_STATUS_PENDING, this.ctx.contextName],\n );\n\n try {\n // Apply migration\n await instance.up(queryRunner);\n\n // Update migration to 'complete' after successful execution\n await queryRunner.query(\n `UPDATE ${this.DEFAULT_MIGRATION_TABLE_NAME} ` +\n `SET status = '${this.MIGRATION_STATUS_COMPLETED}', applied_at = CURRENT_TIMESTAMP ` +\n `WHERE name = $1`,\n [migrationName],\n );\n } catch (error) {\n this.ctx.logMigrations &&\n console.error(`Failed to apply migration: ${migrationName}`, error);\n\n // Rollback pending migration entry\n await queryRunner.query(\n `DELETE FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} WHERE name = $1`,\n [migrationName],\n );\n\n throw error; // Rethrow to ensure the transaction is rolled back\n }\n }\n\n //#endregion\n\n await queryRunner.commitTransaction();\n } catch (error) {\n this.ctx.logMigrations &&\n console.error('Transaction failed, rolling back:', error);\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n}","export class DITaonContainer {\n private static instances = new Map();\n\n static resolve<T>(target: Function): T {\n if (DITaonContainer.instances.has(target)) {\n return DITaonContainer.instances.get(target);\n }\n\n // const tokens = Reflect.getMetadata('design:paramtypes', target) || [];\n const injections = []; // tokens.map(token => Container.inject<any>(token));\n\n const instance = new (target as any)(...injections);\n DITaonContainer.instances.set(target, instance);\n return instance;\n }\n\n static inject<T>(target: new (...args: any[]) => T): T {\n return new Proxy(\n {},\n {\n get: (_, propName) => {\n let instance: T =\n DITaonContainer.instances.get(target) ||\n DITaonContainer.resolve(target);\n return typeof instance[propName] === 'function'\n ? instance[propName].bind(instance)\n : instance[propName];\n },\n set: (_, propName, value) => {\n let instance: T =\n DITaonContainer.instances.get(target) ||\n DITaonContainer.resolve(target);\n instance[propName] = value;\n return true;\n },\n },\n ) as T;\n }\n}","import { Models } from './models';\nimport {\n Response as ExpressResponse,\n Request as ExpressRequest,\n} from 'express';\nimport { TaonHelpers } from './helpers/taon-helpers';\nimport { Helpers } from 'tnp-core/websql';\n\nexport const getResponseValue = <T>(\n response: Models.Http.Response<T>,\n options?: { req: ExpressRequest; res: ExpressResponse },\n): Promise<T> => {\n //#region @websqlFunc\n const { req, res } = options || {};\n return new Promise<T>(async (resolve, reject) => {\n //#region @websql\n\n if (typeof response === 'function') {\n const asyncResponse: Models.Http.AsyncResponse<T> = response as any;\n try {\n const result = await asyncResponse(req, res);\n resolve(result as any);\n } catch (e) {\n console.error(e);\n console.error('[taon] Error during function call inside controller');\n Helpers.renderError(e);\n reject(e);\n }\n } else {\n reject(`[taon] Not recognized type of response ${response}`);\n }\n //#endregion\n });\n //#endregion\n};","import * as JSON5 from 'json5';\nimport { _ } from 'tnp-core/websql';\n\nimport type { ControllerConfig } from '../config/controller-config';\nimport { MethodConfig } from '../config/method-config';\nimport { Models } from '../models';\n\nimport { ClassHelpers } from './class-helpers';\n\nexport namespace TaonHelpers {\n //#region fillUpTo string\n export const fillUpTo = (s: string, nCharacters: number) => {\n return _.times(nCharacters, n => {\n if (s.charAt(n)) {\n return s.charAt(n);\n }\n return ' ';\n }).join('');\n };\n //#endregion\n\n //#region is good path\n export const isGoodPath = (p: string) => {\n return p && typeof p === 'string' && p.trim() !== '';\n };\n //#endregion\n\n //#region try transform params\n export const tryTransformParam = param => {\n if (typeof param === 'string') {\n let n = Number(param);\n if (!isNaN(n)) return n;\n const bool = param.trim().toLowerCase();\n if (bool === 'true') {\n return true;\n }\n if (bool === 'false') {\n return false;\n }\n try {\n const t = JSON5.parse(param);\n return t;\n } catch (e) {\n return param;\n }\n }\n return param;\n };\n //#endregion\n\n //#region get expores path\n export const getExpressPath = (\n c: ControllerConfig,\n pathOrClassConfig: Partial<MethodConfig>,\n ) => {\n if (typeof pathOrClassConfig === 'string')\n return `${c.calculatedPath}${pathOrClassConfig}`.replace(/\\/$/, '');\n return `${c.calculatedPath}${pathOrClassConfig.path}`.replace(/\\/$/, '');\n };\n //#endregion\n\n //#region get default value tyep\n export const defaultType = value => {\n if (typeof value === 'string') return '';\n if (typeof value === 'boolean') return false;\n if (Array.isArray(value)) return {};\n if (typeof value === 'object') return {};\n };\n //#endregion\n\n //#region parse json with string jsons\n export const parseJSONwithStringJSONs = (\n object: Object,\n waring = false,\n ): Object => {\n // console.log('checking object', object)\n if (!_.isObject(object)) {\n if (waring) {\n console.error(\n `\n parseJSONwithStringJSONs(...)\n Parameter should be a object, but is ${typeof object}\n `,\n object,\n );\n }\n\n return object;\n }\n\n let res = _.cloneDeep(object);\n\n Object.keys(res).forEach(key => {\n let isJson = false;\n try {\n const possibleJSON = JSON.parse(res[key]);\n res[key] = possibleJSON;\n isJson = true;\n } catch (e) {\n isJson = false;\n }\n // console.log(`key ${key} is json `, isJson)\n if (isJson) {\n res[key] = parseJSONwithStringJSONs(res[key], false);\n }\n });\n\n return res;\n };\n //#endregion\n\n //#region is plain file or folder\n export const isPlainFileOrFolder = filePath => {\n return /^([a-zA-Z]|\\-|\\_|\\@|\\#|\\$|\\!|\\^|\\&|\\*|\\(|\\))+$/.test(filePath);\n };\n //#endregion\n\n //#region ips key name repsonse\n export const ipcKeyNameResponse = (\n target: Function,\n methodConfig: Partial<MethodConfig>,\n expressPath: string,\n ) => {\n return [\n 'response',\n ClassHelpers.getName(target),\n methodConfig.methodName,\n methodConfig.type,\n expressPath,\n ].join('--');\n };\n //#endregion\n\n //#region ipc key name request\n export const ipcKeyNameRequest = (\n target: Function,\n methodConfig: Partial<MethodConfig>,\n expressPath: string,\n ) => {\n return [\n 'request',\n ClassHelpers.getName(target),\n methodConfig.methodName,\n methodConfig.type,\n expressPath,\n ].join('--');\n };\n //#endregion\n\n //#region websql mocks\n export const websqlMocks = headers => {\n const response: Express.Response = {\n status(status: any) {\n // console.log({status})\n return {\n send(send: any) {\n // console.log({status})\n },\n };\n },\n setHeader(key: string, value: any) {\n // console.log('Dummy set header', arguments)\n headers[key] = value;\n },\n };\n const request: Express.Request = {};\n return { request, response };\n };\n //#endregion\n}","//#region imports\n/* */\n/* */\n \nimport { _ } from 'tnp-core/websql';\nimport { Subscriber } from 'rxjs';\nimport { Symbols } from '../symbols';\nimport { Socket as SocketClient } from 'socket.io-client';\nimport { DefaultEventsMap } from 'socket.io/dist/typed-events';\nimport { RealtimeModels } from './realtime.models';\n//#endregion\n\nexport class RealtimeSubsManager {\n private isListening = false;\n private observers: Subscriber<any>[] = [];\n constructor(private options: RealtimeModels.SubsManagerOpt) {}\n\n //#region methods & getters / start listen if not started\n startListenIfNotStarted(\n realtime: SocketClient<DefaultEventsMap, DefaultEventsMap>,\n ) {\n if (this.options.core.ctx.disabledRealtime) {\n console.warn(`[Taon][startListenIfNotStarted] sockets are disabled`);\n return;\n }\n\n if (!realtime) {\n console.warn(`[Taon][startListenIfNotStarted] invalid socket connection`);\n return;\n }\n\n if (!this.isListening) {\n // console.info(`[BROWSER]][IPC] subscribe to \"${this.options?.roomName}\" by sending event: \"${subscribeEvent}\"`, this.options);\n this.isListening = true;\n\n if (this.options.customEvent) {\n const subscribeEvent = Symbols.REALTIME.ROOM_SUBSCRIBE_CUSTOM(\n this.options.core.ctx.contextName,\n );\n // this means: send to current client custom event notification\n realtime.emit(subscribeEvent, this.options.roomName);\n } else {\n if (_.isString(this.options.property)) {\n const subscribeEvent =\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n );\n // this means: send to current client entity property events updates\n realtime.emit(subscribeEvent, this.options.roomName);\n } else {\n const subscribeEvent =\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n );\n // this means: send to current client entity update events\n realtime.emit(subscribeEvent, this.options.roomName);\n }\n }\n\n // subPath -> SYMBOL - (customevnet|entityupdatebyid){..}{..}\n realtime.on(this.options.roomName, data => {\n this.update(data);\n });\n }\n }\n //#endregion\n\n //#region methods & getters / add observer\n add(observer: Subscriber<any>) {\n // log.info('Add observer')\n this.observers.push(observer);\n }\n //#endregion\n\n //#region methods & getters / remove observer\n remove(observer: Subscriber<any>) {\n // log.info('Remove observer')\n this.observers = this.observers.filter(obs => obs !== observer);\n if (this.observers.length === 0) {\n // log.info('Emit unsubscribe to server SERVER')\n this.isListening = false;\n const { core, customEvent, roomName, property } = this.options;\n\n const realtime = core.socketFE;\n\n if (customEvent) {\n realtime.emit(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_CUSTOM(\n this.options.core.ctx.contextName,\n ),\n roomName,\n );\n } else {\n if (_.isString(property)) {\n realtime.emit(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n ),\n roomName,\n );\n } else {\n realtime.emit(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n ),\n roomName,\n );\n }\n }\n }\n }\n //#endregion\n\n //#region methods & getters / update\n private update(data: any) {\n // log.data(`realtime update!!!!! observers=${this.observers?.length} `)\n const ngZone = this.options.core.ctx.ngZone;\n // console.log('updating', data);\n // console.log('ngzone', ngZone);\n this.observers.forEach(observer => {\n // console.log(`observer closed: ${observer.closed}`,observer);\n if (!observer.closed) {\n if (ngZone) {\n ngZone.run(() => {\n observer.next(data);\n });\n } else {\n observer.next(data);\n }\n }\n });\n }\n //#endregion\n}","//#region imports\nimport { Observable } from 'rxjs';\nimport { _, UtilsOs } from 'tnp-core/websql';\nimport { Helpers } from 'tnp-core/websql';\n\nimport type { BaseEntity } from '../base-classes/base-entity';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Symbols } from '../symbols';\n\nimport { RealtimeCore } from './realtime-core';\nimport { RealtimeSubsManager } from './realtime-subs-manager';\nimport { RealtimeModels } from './realtime.models';\n\n//#endregion\n\nexport class RealtimeClient {\n private subsManagers: { [path: string]: RealtimeSubsManager } = {};\n constructor(private core: RealtimeCore) {\n this.core = core;\n if (!core.ctx.disabledRealtime) {\n this.init();\n }\n }\n\n //#region methods & getters / init\n private init() {\n //#region prepare naspaces pathes\n const nspPath = {\n global: this.core.pathFor(),\n realtime: this.core.pathFor(\n Symbols.REALTIME.NAMESPACE(this.core.ctx.contextName),\n ),\n };\n // console.log('[browser] nspPath', nspPath);\n\n if (\n this.core.ctx.config.frontendHost &&\n this.core.ctx.config.frontendHost !== '' &&\n this.core.ctx.isRunningInsideDocker\n ) {\n Helpers.logInfo(\n `[${this.core.ctx.contextName}] USING FRONTEND HOST` +\n ` ${this.core.ctx.config.frontendHost} FOR REALTIME`,\n );\n nspPath.global = new URL(\n `${this.core.ctx.frontendHostUri.origin}${nspPath.global.pathname}`,\n );\n nspPath.realtime = new URL(\n `${this.core.ctx.frontendHostUri.origin}${nspPath.realtime.pathname}`,\n );\n } else {\n Helpers.logInfo(\n `[${this.core.ctx.contextName}] Not using frontend host for realtime`,\n );\n }\n\n this.core.ctx.logRealtime &&\n console.info(\n '[CLIENT] NAMESPACE GLOBAL ',\n nspPath.global.href + ` host: ${this.core.ctx.host}`,\n );\n\n this.core.ctx.logRealtime &&\n console.info(\n '[CLIENT] NAMESPACE REALTIME',\n nspPath.realtime.href + ` host: ${this.core.ctx.host}`,\n );\n //#endregion\n\n //#region prepare globa FE socket\n this.core.conectSocketFE = this.core.strategy.ioClient(\n nspPath.global.origin,\n {\n path: nspPath.global.pathname,\n },\n );\n\n if (this.core.conectSocketFE.on) {\n this.core.conectSocketFE.on('connect', () => {\n // console.info(\n // `[CLIENT] connected to GLOBAL namespace ${global.nsp} of host: ${context.host}`,\n // );\n this.core.ctx.logRealtime &&\n console.info(\n `[CLIENT] connected to GLOBAL namespace ${nspPath.global.pathname}` +\n ` of host: ${this.core.ctx.host}`,\n );\n });\n }\n\n //#endregion\n\n //#region prepare realtime FE socket\n this.core.socketFE = this.core.strategy.ioClient(nspPath.realtime.origin, {\n path: nspPath.realtime.pathname,\n });\n\n if (this.core.socketFE.on) {\n this.core.socketFE.on('connect', () => {\n // console.info(\n // `[CLIENT] connected to REALTIME namespace ${realtime.nsp} host: ${context.host}`,\n // );\n this.core.ctx.logRealtime &&\n console.info(\n `[CLIENT] connected to REALTIME namespace ${nspPath.realtime.pathname}` +\n ` host: ${this.core.ctx.host}`,\n );\n });\n }\n\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / listen changes entity\n /**\n * Changes trigger on backend needs to be done manually.. example code:\n *\n * ...\n * Context.Realtime.Server.TrigggerEntityChanges(myEntityInstance);\n * ...\n */\n listenChangesEntity(\n entityClassFn: Function,\n idOrUniqValue: any,\n options: RealtimeModels.ChangeOption,\n ) {\n options = options || ({} as any);\n\n //#region parameters validation\n const { property, customEvent } = options;\n const className = !customEvent && ClassHelpers.getName(entityClassFn);\n\n if (_.isString(property)) {\n if (property.trim() === '') {\n throw new Error(\n `[Taon][listenChangesEntity.. incorect property '' for ${className}`,\n );\n }\n }\n //#endregion\n\n return new Observable(observer => {\n //#region prepare parameters for manager\n\n if (this.core.ctx.disabledRealtime) {\n console.error(`[Taon][realtime rxjs] remove taon config flag:\n\n ...\n disabledRealtime: true\n ...\n\nto use socket realtime connection;\n `);\n return () => {\n // empty nothing to do\n };\n }\n\n let roomName: string;\n\n if (customEvent) {\n roomName = Symbols.REALTIME.ROOM_NAME_CUSTOM(\n this.core.ctx.contextName,\n customEvent,\n );\n } else {\n roomName = _.isString(property)\n ? Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY_PROPERTY(\n this.core.ctx.contextName,\n className,\n property,\n idOrUniqValue,\n )\n : Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY(\n this.core.ctx.contextName,\n className,\n idOrUniqValue,\n );\n }\n\n const roomSubOptions: RealtimeModels.SubsManagerOpt = {\n core: this.core,\n property,\n roomName,\n customEvent,\n };\n //#endregion\n\n const subManagerId =\n this.getUniqueIdentifierForConnection(roomSubOptions);\n if (!this.subsManagers[subManagerId]) {\n this.subsManagers[subManagerId] = new RealtimeSubsManager(\n roomSubOptions,\n );\n }\n const inst = this.subsManagers[subManagerId];\n inst.add(observer);\n\n inst.startListenIfNotStarted(this.core.socketFE);\n\n return () => {\n inst.remove(observer);\n };\n });\n }\n\n //#endregion\n\n //#region listen changes entity table\n listenChangesEntityTable(entityClassFn: Function) {\n const className = ClassHelpers.getName(entityClassFn);\n return this.listenChangesEntity(entityClassFn, void 0, {\n customEvent: Symbols.REALTIME.TABLE_CHANGE(\n this.core.ctx.contextName,\n className,\n ),\n });\n }\n\n //#endregion\n\n //#region listen change entity object\n /**\n * Changes trigger on backend needs to be done manually.. example code:\n *\n * ...\n * Context.Realtime.Server.TrigggerEntityChanges(myEntityInstance);\n * // or\n * Context.Realtime.Server.TrigggerEntityPropertyChanges(myEntityInstance,{ property: 'geolocationX' });\n * ...\n */\n listenChangesEntityObj<T extends BaseEntity>(\n entity: T,\n options?: RealtimeModels.ChangeOption,\n ) {\n const classFn = ClassHelpers.getClassFnFromObject(entity);\n const uniqueKey = ClassHelpers.getUniqueKey(classFn);\n return this.listenChangesEntity(classFn, entity[uniqueKey], options);\n }\n //#endregion\n\n //#region listen changes custom event\n listenChangesCustomEvent(customEvent: string) {\n return this.listenChangesEntity(void 0, void 0, {\n customEvent,\n });\n }\n //#endregion\n\n //#region methods & getters / trigger custom event\\\n /**\n * Trigger custom event on backend\n * @param customEvent global event name\n * @param dataToPush\n */\n public triggerCustomEvent(customEvent: string, dataToPush?: any) {\n this.core.socketFE.emit(customEvent, dataToPush);\n }\n //#endregion\n\n //#region methods & getters / get room id from\n private getUniqueIdentifierForConnection(\n options: RealtimeModels.SubsManagerOpt,\n ) {\n let url: URL;\n if (UtilsOs.isBrowser) {\n url = new URL(options.core.ctx.host);\n } else {\n url = new URL(options.core.ctx.remoteHost); // backend-to-backend use remote host\n }\n return `${this.core.ctx.contextName}:${url.origin}|${options.roomName}|${options.property}|${options.customEvent}`;\n }\n //#endregion\n}","//#region imports\n/* */ \n\nimport { Observable, Subject } from 'rxjs';\nimport { Helpers, _ } from 'tnp-core/websql';\n\nimport type { BaseEntity } from '../base-classes/base-entity';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Symbols } from '../symbols';\n\nimport { RealtimeCore } from './realtime-core';\n\n//#endregion\n\nexport class RealtimeServer {\n // private jobs = {};\n constructor(private core: RealtimeCore) {\n this.core = core;\n if (!core.ctx.disabledRealtime) {\n //#region @websql\n this.init();\n //#endregion\n }\n }\n\n //#region methods & getters / init\n private init() {\n //#region @browser\n if (!this.core.ctx.config.frontendHost) {\n console.warn(`[Taon][Realtime]\n\n Frontend host is not defined\n REALTIME COMMUNICATION WILL NOT WORK\n\n provide \"frontendHost\" property in your taon config\n\n `);\n }\n //#endregion\n\n //#region @websql\n\n //#region prepare namespaces pathes\n const nspPathGlobal = this.core.pathFor();\n const nspPathRealtime = this.core.pathFor(\n Symbols.REALTIME.NAMESPACE(this.core.ctx.contextName),\n );\n\n //#endregion\n\n // console.log('[backend] nspPath', nspPath);\n\n const cors = {\n origin: this.core.ctx.frontendHostUri.origin, // only origin needs to be set - pathname not needed\n methods: this.core.allHttpMethods,\n };\n\n // console.log('frontendHost', this.core.ctx.config.frontendHost);\n // console.log('cors', cors);\n\n //#region prepare global BE socket\n this.core.connectSocketBE = this.core.strategy.ioServer(\n Helpers.isWebSQL ? this.core.ctx.uriOrigin : this.core.ctx.serverTcpUdp,\n {\n path: nspPathGlobal.pathname,\n cors,\n }, // @ts-ignore\n this.core.ctx,\n );\n\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] CREATE GLOBAL NAMESPACE: '${this.core.connectSocketBE.path()}'` +\n ` , path: '${nspPathGlobal.pathname}'`,\n );\n\n this.core.connectSocketBE.on('connection', clientSocket => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] client connected to namespace \"${nspPathGlobal.pathname}\", ` +\n ` host: ${this.core.ctx.host}`,\n );\n });\n\n //#endregion\n\n //#region prepare realtime BE socket\n this.core.socketBE = this.core.strategy.ioServer(\n Helpers.isWebSQL || Helpers.isElectron\n ? this.core.ctx.uriOrigin\n : this.core.ctx.serverTcpUdp,\n {\n path: nspPathRealtime.pathname,\n cors,\n }, // @ts-ignore\n this.core.ctx,\n );\n\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] CREATE REALTIME NAMESPACE: '${this.core.socketBE.path()}'` +\n ` , path: '${nspPathRealtime.pathname}' `,\n );\n\n this.core.socketBE.on('connection', backendSocketForClient => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] client connected to namespace \"${nspPathRealtime.pathname}\", ` +\n ` host: ${this.core.ctx.host}`,\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_SUBSCRIBE_CUSTOM(this.core.ctx.contextName),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `Joining room ${roomName} in namespace REALTIME` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.join(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Joining room ${roomName} in namespace REALTIME` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.join(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Joining room ${roomName} in namespace REALTIME ` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.join(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_CUSTOM(this.core.ctx.contextName),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Leaving room ${roomName} in namespace REALTIME` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.leave(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Leaving room ${roomName} in namespace REALTIME ` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.leave(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Leaving room ${roomName} in namespace REALTIME ` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.leave(roomName);\n },\n );\n });\n\n //#endregion\n\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / trigger changes\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private triggerChanges(\n entityObjOrClass: Function,\n property?: string,\n valueOfUniqueProperty?: number | string,\n customEvent?: string,\n customEventData?: any,\n ) {\n // console.log('customEventData', customEventData);\n // console.info('__triger entity changes');\n //#region @websql\n\n let roomName: string;\n\n if (this.core.ctx.disabledRealtime) {\n return;\n }\n\n if (customEvent) {\n roomName = Symbols.REALTIME.ROOM_NAME_CUSTOM(\n this.core.ctx.contextName,\n customEvent,\n );\n } else {\n let entityFn = entityObjOrClass as Function;\n const entityIsObject =\n !_.isFunction(entityObjOrClass) && _.isObject(entityObjOrClass);\n\n if (entityIsObject) {\n entityFn = ClassHelpers.getClassFnFromObject(entityObjOrClass);\n }\n\n const uniqueKey = ClassHelpers.getUniqueKey(entityFn);\n\n if (entityIsObject) {\n valueOfUniqueProperty = entityObjOrClass[uniqueKey];\n }\n\n if (!valueOfUniqueProperty) {\n Helpers.error(\n `[Taon][Realtime] Entity without iD ! ${ClassHelpers.getName(\n entityFn,\n )} `,\n true,\n true,\n );\n return;\n }\n\n roomName = _.isString(property)\n ? Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY_PROPERTY(\n this.core.ctx.contextName,\n ClassHelpers.getName(entityFn),\n property,\n valueOfUniqueProperty,\n )\n : Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY(\n this.core.ctx.contextName,\n ClassHelpers.getName(entityFn),\n valueOfUniqueProperty,\n );\n }\n\n this.core.socketBE.in(roomName).emit(\n roomName, // roomName == eventName in room na\n customEvent ? customEventData : '',\n );\n //#endregion\n }\n //#endregion\n\n //#region entity changes\n\n //#region methods & getters / trigger entity changes\n public triggerEntityChanges(\n entityObjOrClass: Function,\n idToTrigger?: number | string,\n ) {\n if (this.core.ctx.disabledRealtime) {\n const className = ClassHelpers.getName(entityObjOrClass);\n\n console.warn(\n `[Taon][TriggerEntityChanges] Entity \"${className}' is not realtime`,\n );\n return;\n }\n this.triggerChanges(entityObjOrClass as any, void 0, idToTrigger);\n }\n //#endregion\n\n //#region methods & getters / trigger entity property changes\n public triggerEntityPropertyChanges<ENTITY extends BaseEntity>(\n entityObjOrClass: new (...args) => ENTITY,\n property: keyof ENTITY | (keyof ENTITY)[],\n idToTrigger?: number | string,\n ) {\n if (this.core.ctx.disabledRealtime) {\n const className = ClassHelpers.getName(entityObjOrClass);\n\n console.warn(\n `[Taon][TriggerEntityPropertyChanges][property=${\n property as string\n }] Entity \"${className}' is not realtime`,\n );\n return;\n }\n\n if (_.isArray(property)) {\n property.forEach(propertyFromArr => {\n this.triggerChanges(\n entityObjOrClass,\n propertyFromArr as any,\n idToTrigger,\n );\n });\n } else {\n this.triggerChanges(entityObjOrClass, property as any, idToTrigger);\n }\n }\n //#endregion\n\n //#region methods & getters / trigger entity table changes\n public triggerEntityTableChanges(entityClassOrInstance: Function | object) {\n const className = ClassHelpers.getName(entityClassOrInstance);\n\n if (this.core.ctx.disabledRealtime) {\n console.warn(\n `[Taon][TriggerEntityTableChanges] Entity \"${className}' is not realtime`,\n );\n return;\n }\n\n this.triggerChanges(\n entityClassOrInstance as any,\n void 0,\n void 0,\n Symbols.REALTIME.TABLE_CHANGE(this.core.ctx.contextName, className),\n );\n }\n //#endregion\n\n //#endregion\n\n //#region custom changes\n\n //#region methods & getters / trigger custom event\n public triggerCustomEvent(customEvent: string, dataToPush: any) {\n this.triggerChanges(void 0, void 0, void 0, customEvent, dataToPush);\n }\n //#endregion\n\n //#region methods & getters / listen custom events from users\n /**\n * Listen to custom events from users\n * @param customEvent global event name\n */\n listenChangesCustomEvent(customEvent: string): Observable<any> {\n //#region @websqlFunc\n const sub = new Subject<any>();\n\n this.core.socketBE.on('connection', backendSocketForClient => {\n backendSocketForClient.on(customEvent, (data, ...args) => {\n sub.next(data);\n });\n });\n\n return sub.asObservable();\n //#endregion\n }\n //#endregion\n\n //#endregion\n}","import { EndpointContext } from '../../endpoint-context';\nimport type { Server, ServerOptions } from 'socket.io';\nimport type { io } from 'socket.io-client';\nimport { DefaultEventsMap } from 'socket.io/dist/typed-events';\n\nexport abstract class RealtimeStrategy {\n constructor(protected ctx: EndpointContext) {}\n\n get ioClient(): typeof io {\n throw new Error('Not implemented');\n }\n\n ioServer(\n url: string,\n opt: ServerOptions,\n ): Server<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any> {\n throw new Error('Not implemented');\n }\n\n abstract toString(): string;\n}","//#region imports\nimport type { ipcRenderer } from 'electron'; // @browser\n/* */ \n/* */ \nimport { Server, ServerOptions } from 'socket.io';\nimport type { io, ManagerOptions, SocketOptions } from 'socket.io-client';\n\nimport { EndpointContext } from '../../endpoint-context';\nimport { Symbols } from '../../symbols';\nimport { RealtimeModels } from '../realtime.models';\n\nimport { RealtimeStrategy } from './realtime-strategy';\n//#endregion\n\n//#region mock server ipc\nexport class MockServerIpc {\n static serverByContextName = new Map<string, MockServerIpc>();\n\n static from(contextName: string): MockServerIpc {\n if (!MockServerIpc.serverByContextName.has(contextName)) {\n MockServerIpc.serverByContextName.set(\n contextName,\n new MockServerIpc(contextName),\n );\n }\n return MockServerIpc.serverByContextName.get(contextName);\n }\n\n namespacesByName = new Map<string, MockNamespaceIpc>();\n\n //#region constructor\n constructor(public contextName: string) {\n MockServerIpc.serverByContextName.set(contextName, this);\n }\n //#endregion\n\n //#region of\n of(namespace: string): MockNamespaceIpc {\n if (!this.namespacesByName.has(namespace)) {\n this.namespacesByName.set(\n namespace,\n new MockNamespaceIpc(namespace, this),\n );\n }\n return this.namespacesByName.get(namespace);\n }\n //#endregion\n}\n//#endregion\n\n//#region mock namespace ipc\nexport class MockNamespaceIpc {\n //#region fields & getters\n electronClients = new Set<Electron.WebContents>();\n roomsByRoomName: {\n [roomName: string]: Set<Electron.WebContents>;\n } = {};\n\n private namespaceEventHandlers: {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n } = {};\n //#endregion\n\n //#region constructor\n constructor(\n /**\n * Namespace name\n */\n public name: string,\n public server: MockServerIpc,\n ) {}\n //#endregion\n\n //#region on\n on(eventName: string, callback: RealtimeModels.EventHandler) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region off\n off(event: string, callback?: RealtimeModels.EventHandler) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region emit\n emit(eventName: string, ...args: any[]) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region to\n to(roomName: string) {\n const electronClientsInroom = this.roomsByRoomName[roomName];\n return new RoomEmitterIpc(electronClientsInroom, this.name, true);\n }\n //#endregion\n\n //#region in\n in(roomName: string) {\n const electronClientsInroom = this.roomsByRoomName[roomName];\n return new RoomEmitterIpc(electronClientsInroom, this.name, false);\n }\n //#endregion\n\n //#region join\n join(webContents: Electron.WebContents, roomName: string) {\n if (!this.roomsByRoomName[roomName]) {\n this.roomsByRoomName[roomName] = new Set();\n }\n this.roomsByRoomName[roomName].add(webContents);\n }\n //#endregion\n\n //#region leave\n leave(webContents: Electron.WebContents, roomName: string) {\n if (this.roomsByRoomName[roomName]) {\n this.roomsByRoomName[roomName].delete(webContents);\n if (this.roomsByRoomName[roomName].size === 0) {\n delete this.roomsByRoomName[roomName];\n }\n }\n }\n //#endregion\n\n //#region path\n path() {\n return this.name;\n }\n //#endregion\n\n //#region get nsp\n get nsp() {\n const self = this;\n return {\n get name() {\n return self.name;\n },\n };\n }\n //#endregion\n}\n\n//#endregion\n\n//#region room emitter ipc\nclass RoomEmitterIpc {\n //#region constructor\n constructor(\n private electronClients: Set<Electron.WebContents>,\n /**\n * namespace name\n */\n private name: string,\n private includeSender: boolean = false,\n private sender: MockSocketIpc = null, // TODO QUICK FIX how to include sender\n ) {}\n //#endregion\n\n //#region emit in room\n emit(eventName: string, ...args: any[]): void {\n const emitEvent = `(${this.name}) \"${eventName}\"`;\n this.electronClients?.forEach(webContents => {\n webContents.send(emitEvent, ...args);\n });\n }\n //#endregion\n}\n//#endregion\n\n//#region mock socket ipc\nexport class MockSocketIpc {\n //#region fields & getters\n\n //#region fields & getters / ipc renderer\n //#region @browser\n ipcRenderer!: typeof ipcRenderer;\n //#endregion\n //#endregion\n\n //#region fields & getters / event handlers by name\n private socketEventHandlers = {} as {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n };\n //#endregion\n\n //#region fields & getters / name\n get name() {\n return this.namespaceName;\n }\n //#endregion\n\n //#endregion\n\n //#region constructor\n /**\n * @param namespaceName instead url for ipc\n */\n constructor(public namespaceName: string) {\n //#region @browser\n this.ipcRenderer = (window as any).require('electron').ipcRenderer;\n //#endregion\n }\n //#endregion\n\n //#region on\n on(eventName: string, callback: (event: any, ...args: any[]) => void) {\n //#region @browser\n if (!this.socketEventHandlers[eventName]) {\n this.socketEventHandlers[eventName] = new Set();\n }\n this.socketEventHandlers[eventName].add(callback);\n\n const listenToEvent = `(${this.name}) \"${eventName}\"`;\n this.ipcRenderer.on(listenToEvent, (rendereEvent, data) => {\n callback(data);\n });\n\n if (eventName === 'connect') {\n const connectionEventKey = `(${this.name}) \"connection\"`;\n this.ipcRenderer.send(connectionEventKey, this.name);\n }\n //#endregion\n }\n //#endregion\n\n //#region off\n off(event: string, callback?: (event: any, ...args: any[]) => void) {\n //#region @browser\n if (!this.socketEventHandlers[event]) {\n return;\n }\n\n if (callback) {\n this.socketEventHandlers[event].delete(callback);\n } else {\n delete this.socketEventHandlers[event];\n }\n const removeListener = `(${this.name}) \"${event}\"`;\n\n this.ipcRenderer.removeListener(removeListener, data => {\n callback(data);\n });\n //#endregion\n }\n //#endregion\n\n //#region emit\n emit(event: string, ...args: any[]) {\n //#region @browser\n const emitEvent = `(${this.name}) \"${event}\"`;\n this.ipcRenderer.send(emitEvent, ...args);\n //#endregion\n }\n //#endregion\n}\n//#endregion\n\n/**\n * Purpose:\n * - backend-browser communication between 2 processes in electron mode\n */\nexport class RealtimeStrategyIpc extends RealtimeStrategy {\n //#region to string\n toString(): string {\n return 'ipc';\n }\n //#endregion\n\n //#region constructor\n constructor(protected ctx: EndpointContext) {\n super(ctx);\n }\n //#endregion\n\n //#region server & io\n ioServer(__: string, opt: ServerOptions) {\n const namespace = opt?.path || '/';\n const server = MockServerIpc.from(this.ctx.contextName);\n return server.of(namespace) as any;\n }\n\n get ioClient() {\n const clientIo = (\n __: string,\n opt?: Partial<ManagerOptions & SocketOptions>,\n ): MockSocketIpc => {\n const namespace = opt?.path || '/';\n return new MockSocketIpc(namespace);\n };\n return clientIo as any;\n }\n //#endregion\n}","//#region imports\nimport type { EndpointContext } from '../../endpoint-context';\nimport { RealtimeStrategy } from './realtime-strategy';\nimport { Symbols } from '../../symbols';\nimport { ManagerOptions, SocketOptions } from 'socket.io-client';\nimport { RealtimeModels } from '../realtime.models';\nimport { ServerOptions } from 'socket.io';\n//#endregion\n\n//#region mock server\nclass MockServer {\n static serverByUrl = new Map<string, MockServer>();\n static from(url: string): MockServer {\n if (!MockServer.serverByUrl.has(url)) {\n MockServer.serverByUrl.set(url, new MockServer(url));\n }\n return MockServer.serverByUrl.get(url);\n }\n\n get allServers() {\n return Array.from(MockServer.serverByUrl.values());\n }\n\n namespacesByName = new Map<string, MockNamespace>();\n\n //#region constructor\n constructor(public url: string) {\n MockServer.serverByUrl.set(url, this);\n }\n //#endregion\n\n //#region of\n of(namespace: string): MockNamespace {\n if (!this.namespacesByName.has(namespace)) {\n this.namespacesByName.set(namespace, new MockNamespace(namespace, this));\n }\n return this.namespacesByName.get(namespace);\n }\n //#endregion\n\n //#region path\n path() {\n return this.url;\n }\n //#endregion\n}\n//#endregion\n\n//#region mock namespace\nclass MockNamespace {\n /**\n * All sockets connected to this namespace\n */\n public readonly allSocketsForNamespace = new Set<MockSocket>();\n /**\n * Rooms and their sockets\n */\n private socketByRoomName: {\n [roomName: string]: Set<MockSocket>;\n } = {};\n /**\n * Event handlers for this namespace\n */\n public namespaceEventHandlers: {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n } = {};\n\n //#region constructor\n constructor(\n /**\n * unique namespace name\n */\n public name: string,\n public server: MockServer,\n ) {}\n //#endregion\n\n //#region on\n on(eventName: string, handler: RealtimeModels.EventHandler): void {\n // console.log(`ON EVNET event \"${eventName}\"`);\n if (!this.namespaceEventHandlers[eventName]) {\n this.namespaceEventHandlers[eventName] =\n new Set<RealtimeModels.EventHandler>();\n }\n\n if (!this.namespaceEventHandlers[eventName].has(handler)) {\n this.namespaceEventHandlers[eventName].add(handler);\n }\n\n // QUICK_FIX Emit connection event for backend\n // TODO make it in emit\n if (eventName === 'connection') {\n setTimeout(() => {\n this.emit('connection', this);\n });\n }\n }\n //#endregion\n\n //#region emit\n emit(event: string, ...args: any[]): void {\n this.allSocketsForNamespace?.forEach(socket => {\n socket.emit(event, ...args);\n });\n }\n //#endregion\n\n //#region connect\n connect(socket: MockSocket): void {\n this.allSocketsForNamespace.add(socket);\n socket.namespaceInstance = this;\n }\n //#endregion\n\n //#region to\n to(roomName: string): RoomEmitter {\n const socketsInRoom = this.socketByRoomName[roomName];\n return new RoomEmitter(socketsInRoom, true);\n }\n //#endregion\n\n //#region to room\n in(roomName: string): RoomEmitter {\n const socketsInRoom = this.socketByRoomName[roomName];\n return new RoomEmitter(socketsInRoom, false);\n }\n //#endregion\n\n //#region join room\n joinRoom(roomName: string, socket: MockSocket): void {\n if (!this.socketByRoomName[roomName]) {\n this.socketByRoomName[roomName] = new Set<MockSocket>();\n }\n this.socketByRoomName[roomName].add(socket);\n }\n //#endregion\n\n //#region leave room\n leaveRoom(roomName: string, socket: MockSocket): void {\n const roomSockets = this.socketByRoomName[roomName];\n if (roomSockets) {\n this.socketByRoomName[roomName].delete(socket);\n }\n }\n //#endregion\n\n //#region nsp + name\n get nsp() {\n const self = this;\n return {\n get name() {\n return self.name;\n },\n };\n }\n //#endregion\n\n path() {\n return this.name;\n }\n}\n//#endregion\n\n//#region room emitter\nclass RoomEmitter {\n //#region constructor\n constructor(\n private sockets: Set<MockSocket>,\n private includeSender: boolean = false,\n private sender: MockSocket = null, // TODO QUICK FIX how to include sender\n ) {}\n //#endregion\n\n //#region emit in room\n emit(event: string, ...args: any[]): void {\n // console.log(\n // `emit room emiter ${event} , this.sockets ${this.sockets.length}`,\n // );\n this.sockets?.forEach(socket => {\n // console.log(`emit event ${event} to socket ${socket.id}`);\n if (this.includeSender || socket !== this.sender) {\n socket.emit(event, ...args);\n }\n });\n }\n //#endregion\n}\n//#endregion\n\n//#region mock socket\nclass MockSocket {\n public namespaceInstance: MockNamespace;\n private socketEventHandlers = {} as {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n };\n get id() {\n return this.nsp.name;\n }\n\n //#region constructor\n constructor(\n public url: string,\n opts?: Partial<ManagerOptions & SocketOptions>,\n ) {\n // @ts-ignore\n const [baseUrl, namespace] = [url, opts.path || '/'];\n // console.log({ url, baseUrl, namespace });\n const namespaceName = namespace || '/';\n\n // Look up the server instance from the registry\n const server = MockServer.from(url);\n\n const ns = server.of(namespaceName);\n ns.connect(this);\n }\n //#endregion\n\n //#region nsp + name\n get nsp() {\n const self = this;\n return {\n get name() {\n return self.namespaceInstance?.name;\n },\n };\n }\n //#endregion\n\n //#region path\n path() {\n return this.namespaceInstance?.name;\n }\n //#endregion\n\n //#region on\n on(eventName: string, handler: RealtimeModels.EventHandler): void {\n if (!this.socketEventHandlers[eventName]) {\n this.socketEventHandlers[eventName] =\n new Set<RealtimeModels.EventHandler>();\n }\n this.socketEventHandlers[eventName].add(handler);\n\n // QUICK_FIX client initing itself\n if (eventName === 'connect') {\n setTimeout(() => {\n this.emit('connect');\n // this.namespaceInstance.emit('connection', this); @UNCOMMNENT\n });\n }\n }\n //#endregion\n\n //#region emit\n emit(eventName: string, ...args: any[]): void {\n eventName = eventName || '';\n\n if (eventName.includes(`:${Symbols.REALTIME.KEYroomSubscribe}`)) {\n const room = args[0];\n this.join(room);\n } else if (eventName.includes(`:${Symbols.REALTIME.KEYroomUnsubscribe}`)) {\n const room = args[0];\n this.leave(room);\n } else {\n // console.log('try to emit event (to server)', event);\n if (this.namespaceInstance) {\n const namespaceEventHandlers =\n this.namespaceInstance.namespaceEventHandlers[eventName] || [];\n\n // emit to namespace events\n for (const namespaceEventHandler of namespaceEventHandlers) {\n if (namespaceEventHandler) {\n namespaceEventHandler(...args);\n }\n }\n\n const allSocketsForNamespaceExceptCurrent = Array.from(\n this.namespaceInstance.allSocketsForNamespace.values(),\n ).filter(socket => socket !== this);\n\n // emit to all sockets in namespace\n for (const socket of allSocketsForNamespaceExceptCurrent) {\n const socketEventHandlers = socket.socketEventHandlers[eventName];\n for (const socketEventHandler of socketEventHandlers) {\n if (socketEventHandler) {\n socketEventHandler(...args);\n }\n }\n }\n\n // Emit to current socket\n const socketEventHandlers = this.socketEventHandlers[eventName] || [];\n for (const clientHandler of socketEventHandlers) {\n if (clientHandler) {\n clientHandler(...args);\n }\n }\n }\n }\n }\n //#endregion\n\n //#region join room\n join(roomName: string): void {\n this.namespaceInstance.joinRoom(roomName, this);\n }\n //#endregion\n\n //#region leave room\n leave(roomName: string): void {\n this.namespaceInstance.leaveRoom(roomName, this);\n }\n //#endregion\n}\n//#endregion\n\n/**\n * Purpose:\n * - browser-browser communication mock (in websql mode)\n */\nexport class RealtimeStrategyMock extends RealtimeStrategy {\n //#region toString\n toString(): string {\n return 'mock';\n }\n //#endregion\n\n //#region constructor\n constructor(protected ctx: EndpointContext) {\n super(ctx);\n }\n //#endregion\n\n //#region server & io\n ioServer(url: string, opt: ServerOptions) {\n const server = MockServer.from(url || this.ctx.uriOrigin);\n return server.of(opt?.path || '/') as any;\n }\n\n get ioClient() {\n const clientIo = (\n uri: string,\n opts?: Partial<ManagerOptions & SocketOptions>,\n ): MockSocket => {\n return new MockSocket(uri || this.ctx.uriOrigin, opts as any);\n };\n return clientIo as any;\n }\n //#endregion\n}","import { DefaultEventsMap } from 'socket.io/dist/typed-events';\nimport { EndpointContext } from '../../endpoint-context';\nimport { RealtimeStrategy } from './realtime-strategy';\n/* */\n/* */\n \nimport { io, ManagerOptions, Socket, SocketOptions } from 'socket.io-client';\n\n/**\n * Purpose:\n * - backend-browser communication\n * - backend-backend communication\n */\nexport class RealtimeStrategySocketIO extends RealtimeStrategy {\n toString(): string {\n return 'socket-io';\n }\n constructor(protected ctx: EndpointContext) {\n super(ctx);\n }\n\n ioServer(...args) {\n/* */\n/* */\n return (void 0);\n }\n\n get ioClient() {\n return io;\n }\n}","//#region imports\nimport { Server } from 'socket.io';\nimport { DefaultEventsMap } from 'socket.io/dist/typed-events';\nimport { Socket as SocketClient } from 'socket.io-client';\nimport { Helpers } from 'tnp-core/websql';\n\nimport { apiPrefix } from '../constants';\nimport type { EndpointContext } from '../endpoint-context';\n\nimport { RealtimeClient } from './realtime-client';\nimport { RealtimeServer } from './realtime-server';\nimport type { RealtimeStrategy } from './realtime-strategy';\nimport {\n RealtimeStrategyIpc,\n RealtimeStrategyMock,\n RealtimeStrategySocketIO,\n} from './realtime-strategy';\n\n//#endregion\n\n/**\n * Realtime class\n * - mock (when browser-browser)\n * - sockets (from socket io when backend-browser)\n * - ipc (when electron is used or between processes)\n * - webworker (when webworker is used in browser or nodejs)\n */\nexport class RealtimeCore {\n //#region fields\n readonly allHttpMethods = [\n 'GET',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n 'OPTIONS',\n 'HEAD',\n ];\n public readonly client: RealtimeClient;\n public readonly server: RealtimeServer;\n public readonly strategy: RealtimeStrategy;\n\n /**\n * global FE socket - only for established connection\n */\n public conectSocketFE: SocketClient<DefaultEventsMap, DefaultEventsMap>;\n /**\n * socket for namespaces and rooms\n */\n public socketFE: SocketClient<DefaultEventsMap, DefaultEventsMap>;\n /**\n * global BE socket - only for established connection\n */\n public connectSocketBE: Server<\n DefaultEventsMap,\n DefaultEventsMap,\n DefaultEventsMap,\n any\n >;\n /**\n * socket for namespaces and rooms\n */\n public socketBE: Server<\n DefaultEventsMap,\n DefaultEventsMap,\n DefaultEventsMap,\n any\n >;\n //#endregion\n\n //#region constructor\n constructor(public ctx: EndpointContext) {\n this.ctx = ctx;\n this.strategy = this.resolveStrategy();\n\n this.ctx.logRealtime &&\n console.log(`[taon] realtime strategy: ${this.strategy}`);\n if (Helpers.isWebSQL) {\n this.server = new RealtimeServer(this as any);\n // console.log('DONE INITING SERVER');\n this.client = new RealtimeClient(this as any);\n // console.log('DONE INITING CLIENT');\n } else {\n this.client = new RealtimeClient(this as any);\n this.server = new RealtimeServer(this as any);\n }\n }\n //#endregion\n\n //#region methods & getters / resovle staraegy\n private resolveStrategy(): RealtimeStrategy {\n // console.log(`[taon] resolveStrategy for this.ctx.mode ${this.ctx.mode}`);\n if (\n this.ctx.mode === 'backend-frontend(websql)' ||\n this.ctx.mode === 'backend-frontend(websql-electron)'\n ) {\n // debugger\n return new RealtimeStrategyMock(this.ctx);\n }\n if (this.ctx.mode === 'backend-frontend(ipc-electron)') {\n return new RealtimeStrategyIpc(this.ctx);\n }\n // if (this.ctx.mode === 'backend-frontend(tcp+udp)') {\n // return new RealtimeStrategySocketIO(this.ctx);\n // }\n // if (this.ctx.mode === 'remote-backend(tcp+udp)') {\n // return new RealtimeStrategySocketIO(this.ctx);\n // }\n return new RealtimeStrategySocketIO(this.ctx);\n }\n //#endregion\n\n //#region path for\n public pathFor(namespace?: string) {\n let nsp = namespace ? namespace : '';\n nsp = nsp === '/' ? '' : nsp;\n let prefix = `${apiPrefix}/${this.ctx.contextName}/udp`;\n if (Helpers.isElectron) {\n prefix = ``;\n }\n const href =\n `${this.ctx.uriOrigin}${this.ctx.uriPathnameOrNothingIfRoot}` +\n `/${prefix}${prefix && nsp ? '-' + nsp : nsp}`;\n // console.log(`HREF: ${href}, nsp: ${nsp}`)\n return new URL(href) as URL;\n }\n //#endregion\n}","//#region import\nimport { Subject } from 'rxjs';\n// TODO @LAST fix taon storage for ssr\n// import { Stor } from 'taon-storage/src';\nimport { Helpers, _ } from 'tnp-core/websql';\n\n//#endregion\n\nconst ENV = globalThis['ENV'];\n\n// @Injectable({ providedIn: 'root' }) TODO make it angular service\nexport class TaonAdminService {\n //#region singleton\n private static _instance: TaonAdminService;\n public static get Instance() {\n if (!this._instance) {\n this._instance = new TaonAdminService();\n }\n return this._instance;\n }\n //#endregion\n\n //#region fields & getters\n public scrollableEnabled = false; // TOOD false by default\n private onEditMode = new Subject();\n onEditMode$ = this.onEditMode.asObservable();\n\n //#region fields & getters / popup is open\n\n // TODO @LAST fix taon storage for ssr\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public adminPanelIsOpen: boolean;\n //#endregion\n\n //#region fields & getters / draggable popup instead side view for admin\n\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public draggablePopupMode: boolean;\n //#endregion\n\n //#region fields & getters / draggable popup instead side view for admin\n\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public draggablePopupModeFullScreen: boolean;\n //#endregion\n\n //#region fields & getters / keep websql database data after reload\n /**\n * Property used in taon\n */\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public keepWebsqlDbDataAfterReload: boolean;\n //#endregion\n\n //#endregion\n\n //#region constructor\n constructor() {\n TaonAdminService._instance = this;\n this.scrollableEnabled = !!ENV?.useGlobalNgxScrollbar;\n }\n //#endregion\n\n //#region methods\n setEditMode(value: boolean) {\n this.onEditMode.next(value);\n }\n\n setKeepWebsqlDbDataAfterReload(value: boolean) {\n // if (value && !this.keepWebsqlDbDataAfterReload) {\n // this.firstTimeKeepWebsqlDbDataTrue = true;\n // }\n this.keepWebsqlDbDataAfterReload = value;\n }\n\n enabledTabs = [];\n\n hide() {\n this.draggablePopupMode = false;\n this.adminPanelIsOpen = false;\n }\n\n show() {\n this.draggablePopupMode = false;\n this.adminPanelIsOpen = true;\n }\n\n logout() {}\n //#endregion\n}","//#region imports\nimport type { Server } from 'http';\n/* */ \n/* */ \n\nimport type { NgZone } from '@angular/core'; // @browser\nimport axios from 'axios';\n/* */ \n/* */ \n/* */ \n/* */ \nimport * as express from 'express';\nimport type { Application } from 'express';\n// multer in taon middleware will do better job than express-fileupload\n// import * as fileUpload from 'express-fileupload'; // @backend\n/* */ \nimport { JSON10 } from 'json10/websql';\nimport { walk } from 'lodash-walk-object/websql';\n/* */ \nimport {\n Mapping,\n Models as ModelsNg2Rest,\n Resource,\n RestHeaders,\n} from 'ng2-rest/websql';\nimport { from, Subject } from 'rxjs';\nimport type {\n TransactionRollbackEvent,\n TransactionCommitEvent,\n TransactionStartEvent,\n RecoverEvent,\n SoftRemoveEvent,\n RemoveEvent,\n UpdateEvent,\n InsertEvent,\n Repository,\n} from 'taon-typeorm/websql'; // @websql\nimport { EventSubscriber } from 'taon-typeorm/websql'; // @websql\nimport { Entity as TypeormEntity, Tree } from 'taon-typeorm/websql'; // @websql\nimport {\n DataSource,\n DataSourceOptions,\n getMetadataArgsStorage,\n} from 'taon-typeorm/websql';\nimport { config } from 'tnp-config/websql';\n/* */ \nimport { UtilsOs, Utils } from 'tnp-core/websql';\nimport { crossPlatformPath } from 'tnp-core/websql';\nimport { _, Helpers } from 'tnp-core/websql';\nimport { path } from 'tnp-core/websql';\n\nimport type { BaseClass } from './base-classes/base-class';\nimport type { BaseController } from './base-classes/base-controller';\nimport type { BaseInjector } from './base-classes/base-injector';\nimport type { BaseMiddleware } from './base-classes/base-middleware';\nimport type { BaseMigration } from './base-classes/base-migration';\nimport { BaseSubscriberForEntity } from './base-classes/base-subscriber-for-entity';\nimport type { ControllerConfig } from './config/controller-config';\nimport { MethodConfig } from './config/method-config';\nimport { ParamConfig } from './config/param-config';\nimport { apiPrefix } from './constants';\nimport { ContextDbMigrations } from './context-db-migrations';\nimport { createContext } from './create-context';\nimport { TaonEntityOptions } from './decorators/classes/entity-decorator';\nimport { TaonSubscriberOptions } from './decorators/classes/subscriber-decorator';\nimport { DITaonContainer } from './dependency-injection/di-container';\nimport { EntityProcess } from './entity-process';\nimport { getResponseValue } from './get-response-value';\nimport { ClassHelpers } from './helpers/class-helpers';\nimport { TaonHelpers } from './helpers/taon-helpers';\nimport { Models } from './models';\nimport { RealtimeCore } from './realtime/realtime-core';\nimport { Symbols } from './symbols';\nimport { TaonAdminService } from './ui/taon-admin-mode-configuration/taon-admin.service'; // @browser\n//#endregion\n\nexport class EndpointContext {\n //#region static\n\n /**\n * JUST FOR TESTING PURPOSES\n */\n public readonly USE_MARIADB_MYSQL_IN_DOCKER: boolean = false;\n\n //#region @browser\n private static ngZone: NgZone;\n //#endregion\n\n //#region @browser\n static initNgZone(ngZone: NgZone): void {\n //#region @browser\n this.ngZone = ngZone;\n //#endregion\n }\n //#endregion\n\n // public static findForTraget(classFnOrObject: any): EndpointContext {\n // const obj = ClassHelpers.getClassFnFromObject(classFnOrObject) || {};\n // return (\n // classFnOrObject[Symbols.ctxInClassOrClassObj] ||\n // obj[Symbols.ctxInClassOrClassObj]\n // );\n // }\n //#endregion\n\n //#region fields\n\n //#region fields / flags\n disabledRealtime: boolean = false;\n /**\n * check whether context is inited\n * (with init() function )\n */\n public inited: boolean = false;\n //#endregion\n\n readonly dbMigrations = new ContextDbMigrations(this);\n\n private readonly localInstaceObjSymbol = Symbol('localInstaceObjSymbol');\n\n //#region fields / all instances of classes from context\n /**\n * all instances of classes from context\n * key is class name\n */\n public readonly allClassesInstances = {};\n //#endregion\n\n //#region fields / class instances by name\n private readonly classInstancesByNameObj = {};\n //#endregion\n\n //#region fields / obj with classes instances arr\n private readonly objWithClassesInstancesArr = {};\n //#endregion\n\n //#region fields / active routes\n public readonly activeRoutes: {\n expressPath: string;\n method: Models.Http.Rest.HttpMethod;\n }[] = [];\n //#endregion\n\n //#region fields / typeorm repositories\n //#region @websql\n public repos = new Map<string, Repository<any>>();\n //#endregion\n //#endregion\n\n public readonly skipWritingServerRoutes: boolean = false;\n\n //#region fields / types from contexts\n private injectableTypesfromContexts = [\n Models.ClassType.CONTROLLER,\n Models.ClassType.PROVIDER,\n Models.ClassType.MIDDLEWARE,\n Models.ClassType.REPOSITORY,\n Models.ClassType.SUBSCRIBER,\n Models.ClassType.MIGRATION,\n ];\n //#endregion\n\n private allTypesfromContexts = [\n ...this.injectableTypesfromContexts,\n Models.ClassType.ENTITY,\n ];\n\n // public __contextForControllerInstanceAccess?: EndpointContext;\n\n //#region fields / express app\n public expressApp: Application = {} as any;\n //#endregion\n\n //#region fields / server tcp udp\n public serverTcpUdp: Server;\n //#endregion\n\n //#region fields / database config\n databaseConfig?: Models.DatabaseConfigTypeOrm;\n //#endregion\n\n //#region fields / mode\n mode: Models.FrameworkMode;\n //#endregion\n\n //#region fields / only migration start\n readonly onlyMigrationRun?: boolean = false;\n readonly onlyMigrationRevertToTimestamp?: number = undefined;\n\n get isRunOrRevertOnlyMigrationAppStart(): boolean {\n return !!(this.onlyMigrationRun || this.onlyMigrationRevertToTimestamp);\n }\n //#endregion\n\n //#region fields / session\n session?: Models.ISession;\n //#endregion\n\n //#region fields / connection\n public connection: DataSource;\n //#endregion\n\n //#region fields / entities triggers\n private entitiesTriggers = {};\n //#endregion\n\n //#region fields / realtime\n private realtime: RealtimeCore;\n get realtimeClient() {\n return this.realtime.client;\n }\n get realtimeServer() {\n return this.realtime.server;\n }\n //#endregion\n\n //#region fields / config\n /**\n * available after init()\n */\n public config: Models.ContextOptions<any, any, any, any, any, any, any, any>;\n //#endregion\n\n //#region fields / logs\n get logHttp(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).http;\n }\n return this.config?.logs === true;\n }\n\n get logRealtime(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).realtime;\n }\n return this.config?.logs === true;\n }\n\n get logFramework(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).framework;\n }\n return this.config?.logs === true;\n }\n\n get logDb(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).db;\n }\n return this.config?.logs === true;\n }\n\n get logMigrations(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).migrations;\n }\n return this.config?.logs === true;\n }\n //#endregion\n\n //#endregion\n\n //#region constructor\n /**\n * Inside docker there is not need for https secure server\n */\n public readonly isRunningInsideDocker: boolean = false;\n constructor(\n private originalConfig: Models.ContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n private configFn: (\n env: any,\n ) => Models.ContextOptions<any, any, any, any, any, any, any, any>,\n ) {\n this.isRunningInsideDocker = UtilsOs.isRunningInDocker();\n }\n //#endregion\n\n //#region methods & getters / init\n public async init(options?: {\n initFromRecrusiveContextResovle?: boolean;\n overrideHost?: string | null;\n overrideRemoteHost?: string | null;\n onlyMigrationRun?: boolean;\n onlyMigrationRevertToTimestamp?: number;\n }) {\n const {\n initFromRecrusiveContextResovle,\n overrideHost,\n overrideRemoteHost,\n onlyMigrationRun,\n onlyMigrationRevertToTimestamp,\n } = options || {}; // TODO use it ?\n\n this.inited = true;\n // @ts-ignore\n this.onlyMigrationRun = onlyMigrationRun;\n // @ts-ignore\n this.onlyMigrationRevertToTimestamp = onlyMigrationRevertToTimestamp;\n this.config = this.configFn({});\n if (_.isObject(this.config.database)) {\n this.config.database = Models.DatabaseConfig.from(\n this.config.database as Models.DatabaseConfig,\n ).databaseConfigTypeORM;\n }\n if (overrideHost && overrideRemoteHost) {\n Helpers.throw(\n `[taon-config] You can't have overrideHost and overrideRemoteHost at the same time`,\n );\n }\n\n this.config.host = !_.isUndefined(overrideHost)\n ? overrideHost\n : this.config.host;\n this.config.remoteHost = !_.isUndefined(overrideRemoteHost)\n ? overrideRemoteHost\n : this.config.remoteHost;\n\n this.config.host = this.host === null ? void 0 : this.host;\n this.config.remoteHost =\n this.remoteHost === null ? void 0 : this.remoteHost;\n\n if (\n this.config.host &&\n !this.config.host.startsWith('http://') &&\n !this.config.host.startsWith('https://')\n ) {\n Helpers.throw(\n `[taon-config] Your 'host' must start with http:// or https://`,\n );\n }\n\n if (_.isUndefined(this.config.useIpcWhenElectron)) {\n this.config.useIpcWhenElectron = true;\n }\n\n if (\n this.config.remoteHost &&\n !this.config.remoteHost.startsWith('http://') &&\n !this.config.remoteHost.startsWith('https://')\n ) {\n Helpers.throw(\n `[taon-config] Your 'remoteHost' must start with http:// or https://`,\n );\n }\n\n // console.log(`config for ${this.contextName}`, this.config);\n\n //#region resolve if skipping writing server routes\n //@ts-expect-error overriding readonly\n this.skipWritingServerRoutes = _.isBoolean(\n this.config.skipWritingServerRoutes,\n )\n ? this.config.skipWritingServerRoutes\n : false;\n //#endregion\n\n //#region resolve mode\n if (this.config.host) {\n this.mode = 'backend-frontend(tcp+udp)';\n //#region @websqlOnly\n this.mode = 'backend-frontend(websql)';\n //#endregion\n }\n\n if (this.config.remoteHost) {\n if (this.config.host) {\n Helpers.throw(\n `[taon] You can't have remoteHost and host at the same time`,\n );\n }\n this.mode = 'remote-backend(tcp+udp)';\n }\n\n // console.log(`\n\n // useIpcWhenElectron: ${this.config.useIpcWhenElectron}\n // Helpers.isElectron: ${Helpers.isElectron}\n\n // `)\n if (this.config.useIpcWhenElectron && Helpers.isElectron) {\n if (Helpers.isWebSQL) {\n this.mode = 'backend-frontend(websql-electron)';\n } else {\n this.mode = 'backend-frontend(ipc-electron)';\n }\n }\n\n // mode === undefined for BaseContext => ok behavior\n // console.log(`Mode for BE/FE communication: ${this.mode}`);\n // if(!this.mode) {\n // console.log(this.config)\n // }\n\n if (!this.mode && !this.config.abstract) {\n const errMsg =\n `You need to provide host or remoteHost or ` +\n `useIpcWhenElectron (or mark it as abstract)`;\n Helpers.error(\n `[taon] Context \"${this.contextName}\": ${errMsg}`,\n false,\n true,\n );\n/* */\n/* */\n \n }\n //#endregion\n\n //#region resolve database config\n if (this.config.database === true) {\n this.logFramework &&\n console.log(`\n\n ASSIGNING AUTO GENERATED DATABASE CONFIG\n\n `);\n this.databaseConfig = this.getAutoGeneratedConfig();\n } else if (_.isObject(this.config.database)) {\n this.logFramework &&\n console.log(`\n\n OVERRIDE DATABASE CONFIG FROM CONFIGURATION\n\n `);\n this.databaseConfig = this.getAutoGeneratedConfig();\n walk.Object(\n this.config.database,\n (value, lodashPath) => {\n if (_.isNil(value) || _.isFunction(value) || _.isObject(value)) {\n // skipping\n } else {\n this.logFramework &&\n console.info(\n `Overriding database config: ${lodashPath}=${value}`,\n );\n _.set(this.databaseConfig, lodashPath, value);\n }\n },\n {\n walkGetters: false,\n },\n );\n }\n //#endregion\n\n //#region resolve session\n if (this.config.session) {\n this.session = _.cloneDeep(this.config.session);\n const oneHour = 1000 * 60 * 60 * 1; // 24;\n if (!this.session.cookieMaxAge) {\n this.session.cookieMaxAge = oneHour;\n }\n // serever and browser cookie authentication\n axios.defaults.withCredentials = true;\n }\n //#endregion\n\n //#region prepare & gather all classes recrusively\n this.config.contexts = this.config.contexts || {};\n this.config.entities = this.config.entities || {};\n this.config.controllers = this.config.controllers || {};\n this.config.repositories = this.config.repositories || {};\n this.config.providers = this.config.providers || {};\n this.config.subscribers = this.config.subscribers || {};\n this.config.migrations = this.config.migrations || {};\n\n this.config.entities = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.ENTITY,\n )),\n ...this.config.entities,\n };\n\n this.config.controllers = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.CONTROLLER,\n )),\n ...this.config.controllers,\n };\n\n this.config.providers = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.PROVIDER,\n )),\n ...this.config.providers,\n };\n\n this.config.middlewares = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.MIDDLEWARE,\n )),\n ...this.config.middlewares,\n };\n\n this.config.subscribers = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.SUBSCRIBER,\n )),\n ...this.config.subscribers,\n };\n\n this.config.repositories = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.REPOSITORY,\n )),\n ...this.config.repositories,\n };\n\n this.config.migrations = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.MIGRATION,\n )),\n ...this.config.migrations,\n };\n\n // console.log(this.config);\n // debugger;\n //#endregion\n\n //#region prepare classes instances/functions clones\n this.config.controllers = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.controllers,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.CONTROLLER,\n });\n this.config.repositories = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.repositories,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.REPOSITORY,\n });\n this.config.providers = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.providers,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.PROVIDER,\n });\n this.config.middlewares = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.middlewares,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.MIDDLEWARE,\n });\n\n this.config.subscribers = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.subscribers,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.SUBSCRIBER,\n });\n\n this.config.migrations = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.migrations,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.MIGRATION,\n });\n //#endregion\n\n //#region prepare instances\n for (const classTypeName of this.injectableTypesfromContexts) {\n this.classInstancesByNameObj[classTypeName] = {};\n this.objWithClassesInstancesArr[classTypeName] = [];\n }\n\n for (const classTypeName of this.injectableTypesfromContexts) {\n await this.createInstances(\n this.config[Models.ClassTypeKey[classTypeName]],\n classTypeName,\n );\n }\n //#endregion\n\n if (!this.isRunOrRevertOnlyMigrationAppStart) {\n //#region prepares server\n if (this.mode === 'backend-frontend(tcp+udp)' && !this.config.abstract) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n await this.initCustomClientMiddlewares();\n }\n //#endregion\n\n //#region prepare realtime\n if (!this.config.abstract) {\n this.disabledRealtime = this.config.disabledRealtime;\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n this.realtime = new RealtimeCore(this);\n }\n //#endregion\n }\n\n //#region show context info\n // console.log({ ref })\n if (this.config.abstract) {\n this.logFramework &&\n Helpers.info(\n `[taon] Create abstract context: ${this.config.contextName}`,\n );\n } else {\n if (this.config.remoteHost) {\n this.logFramework &&\n Helpers.info(\n `[taon] Create context for remote host: ${this.config.remoteHost}`,\n );\n } else {\n this.logFramework &&\n Helpers.info(`[taon] Create context for host: ${this.config.host}`);\n }\n }\n //#endregion\n\n // update first exposed config\n Object.keys(this.config).forEach(key => {\n this.originalConfig[key] = this.config[key];\n });\n }\n //#endregion\n\n //#region methods & getters / get auto generated config\n private getAutoGeneratedConfig(): Models.DatabaseConfigTypeOrm {\n this.logFramework &&\n console.log(`\n\n\n IS RUNNING IN DOCKER: ${this.isRunningInsideDocker}\n\n `);\n //#region @websqlFunc\n let databaseConfig: Models.DatabaseConfig = Models.DatabaseConfig.from({});\n if (this.isRunningInsideDocker) {\n if (this.USE_MARIADB_MYSQL_IN_DOCKER) {\n // Helpers.info('Running in docker, using in mysql database');\n // // TODO auto resolve database config in docker\n // databaseConfig = Models.DatabaseConfig.from({\n // database: `db-${this.contextName}.sqlite`,\n // type: 'mysql',\n // recreateMode: 'PRESERVE_DATA+MIGRATIONS',\n // logging: this.logDb,\n // databasePort: 3306,\n // databaseHost: 'localhost',\n // databaseUsername: 'root',\n // databasePassword: 'admin',\n // });\n } else {\n // TOOD @LAST for now.. just use sqljs in docker\n this.logFramework &&\n console.log(`\n\n USING GENERATED CONFIG FOR SQLJS IN DOCKER\n\n `);\n\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n databaseConfig = databaseConfig = Models.DatabaseConfig.from({\n location: `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n useLocalForage: false,\n recreateMode: 'PRESERVE_DATA+MIGRATIONS',\n logging: true,\n });\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n } else {\n //#region auto resolve db config\n this.logFramework &&\n Helpers.info(\n `[taon][database] Automatically resolving database config for mode ${this.mode}`,\n );\n switch (this.mode) {\n //#region resolve database config for backend-frontend(ipc-electron)\n case 'backend-frontend(ipc-electron)':\n let dbLocationInOs: string;\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n databaseConfig = Models.DatabaseConfig.from({\n location: UtilsOs.isElectron\n ? dbLocationInOs\n : `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n recreateMode: 'DROP_DB+MIGRATIONS',\n logging: this.logDb,\n });\n break;\n //#endregion\n\n //#region resolve database config for mode backend-frontend(websql)\n case 'backend-frontend(websql-electron)':\n case 'backend-frontend(websql)':\n let keepWebsqlDbDataAfterReload = false;\n //#region @browser\n keepWebsqlDbDataAfterReload =\n TaonAdminService.Instance?.keepWebsqlDbDataAfterReload; // TODO @LAST\n //#endregion\n\n databaseConfig = databaseConfig = Models.DatabaseConfig.from({\n location: `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n useLocalForage: true, // !!window['localforage'], // TODO this need to be checked in runtime\n recreateMode: keepWebsqlDbDataAfterReload\n ? 'PRESERVE_DATA+MIGRATIONS'\n : 'DROP_DB+MIGRATIONS',\n logging: this.logDb,\n });\n break;\n //#endregion\n\n //#region resolve database config for mode backend-frontend(tcp+udp)\n case 'backend-frontend(tcp+udp)':\n databaseConfig = Models.DatabaseConfig.from({\n database: `context-db-${this.contextName}`,\n location: `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n recreateMode: 'DROP_DB+MIGRATIONS',\n logging: this.logDb,\n });\n break;\n //#endregion\n }\n //#endregion\n }\n return databaseConfig.databaseConfigTypeORM;\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / ng zone\n get ngZone(): any {\n //#region @browser\n return EndpointContext.ngZone;\n //#endregion\n return;\n }\n //#endregion\n\n //#region methods & getters / start server\n async startServer(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / display express routes\n displayRoutes(app) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n //#endregion\n\n //#region methods & getters / mode allows database creation\n get modeAllowsDatabaseCreation() {\n return (\n this.mode === 'backend-frontend(tcp+udp)' ||\n this.mode === 'backend-frontend(websql)' ||\n this.mode === 'backend-frontend(ipc-electron)'\n );\n }\n //#endregion\n\n //#region methods & getters / clone class\n private cloneClassWithNewMetadata = <\n T extends { new (...args: any[]): any },\n >({\n BaseClass,\n className,\n config,\n ctx,\n classType,\n }: {\n BaseClass: T;\n className: string;\n config: Models.ContextOptions<any, any, any, any, any, any, any, any>;\n ctx: EndpointContext;\n classType: Models.ClassType;\n }): T => {\n // Return a new class that extends the base class\n const cloneClass = () => {\n if (\n BaseClass[Symbols.fullClassNameStaticProperty] ===\n `${ctx.contextName}.${className}`\n ) {\n return BaseClass;\n }\n return class extends BaseClass {\n // static ['_'] = BaseClass['_'];\n\n // @ts-ignore\n static [Symbols.orignalClass] = BaseClass;\n\n // @ts-ignore\n static [Symbols.fullClassNameStaticProperty] = `${ctx.contextName}.${className}`;\n\n // @ts-ignore\n static [Symbols.classNameStaticProperty] = className;\n\n static [Symbols.ctxInClassOrClassObj] = ctx;\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n static __getFullPathForClass__(arr = []) {\n const name = this[Symbols.fullClassNameStaticProperty];\n arr.push(name);\n // @ts-ignore\n if (\n this[Symbols.orignalClass] && // @ts-ignore\n this[Symbols.orignalClass].__getFullPathForClass__\n ) {\n // @ts-ignore\n this[Symbols.orignalClass].__getFullPathForClass__(arr);\n }\n return arr.join('/');\n }\n static get fullPathForClass(): string {\n return this.__getFullPathForClass__();\n }\n [Symbols.ctxInClassOrClassObj] = ctx;\n // You can override prototype properties or methods here if needed\n // static properties override allowed\n };\n };\n\n const cloneClassFunction = cloneClass();\n\n //#region gather all instances for all contexts\n // TODO this is not needed anymore - for typeorm I use normal entities\n // this thinng belowe is nice for debugging purpose\n // if (_.isUndefined(cloneClassFunction[Symbols.orignalClassClonesObj])) {\n // cloneClassFunction[Symbols.orignalClassClonesObj] = {};\n // }\n // if (_.isUndefined(BaseClass[Symbols.orignalClassClonesObj])) {\n // BaseClass[Symbols.orignalClassClonesObj] = {};\n // }\n // const all = {\n // ...BaseClass[Symbols.orignalClassClonesObj],\n // ...cloneClassFunction[Symbols.orignalClassClonesObj],\n // };\n // all[ctx.contextName] = cloneClassFunction;\n // cloneClassFunction[Symbols.orignalClassClonesObj] = all;\n // BaseClass[Symbols.orignalClassClonesObj] = all;\n //#endregion\n\n return cloneClassFunction;\n };\n\n //#endregion\n\n //#region methods & getters / clone classes obj with new metadata\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private cloneClassesObjWithNewMetadata = ({\n classesInput,\n config,\n ctx,\n classType,\n }: {\n classesInput: any;\n config: Models.ContextOptions<any, any, any, any, any, any, any, any>;\n ctx: EndpointContext;\n classType: Models.ClassType;\n }) => {\n const classes = {};\n // console.log(Object.keys(classesInput))\n for (const key of Object.keys(classesInput || {})) {\n const BaseClass = classesInput[key];\n\n if (!BaseClass) {\n Helpers.error(`Class ${key} is not defined in context ${ctx.contextName}\n\n Please check if you have correct import in context file\n\n `);\n }\n\n var className = Reflect.getMetadata(\n Symbols.metadata.className,\n BaseClass,\n );\n\n // console.log('Metadata className', className, BaseClass);\n // if (!className) {\n // console.warn(`Please provide className for ${BaseClass.name} class`);\n // }\n className = className || key;\n BaseClass[Symbols.classNameStaticProperty] = className;\n\n const clonedClass = this.cloneClassWithNewMetadata({\n BaseClass,\n className,\n config,\n ctx,\n classType,\n });\n classes[className] = clonedClass;\n }\n return classes;\n };\n //#endregion\n\n //#region methods & getters / get recursive classes from contexts\n private async getRecrusiveClassesfromContextsObj(\n classType: Models.ClassType,\n ) {\n const arr = await this.getRecrusiveClassesfromContexts(classType);\n return arr.reduce((acc, c) => {\n acc[ClassHelpers.getName(c)] = c;\n return acc;\n }, {});\n }\n\n private async getRecrusiveClassesfromContexts(\n classType: Models.ClassType,\n arr = [],\n ) {\n const contexts = Object.values(this.config.contexts || {}) as ReturnType<\n typeof createContext\n >[];\n // console.log({\n // contexts,\n // });\n for (const ctx of contexts) {\n // console.log(`STARTING ${ctx.contextName}`);\n const ref = await ctx.__ref();\n // console.log(`CTX FROM ${ctx.contextName}`, ref.contextName);\n const classesInput = ref.getClassFunBy(classType);\n // console.log(`${ref.contextName} - ${classType}`, { classesInput });\n\n const clonedClasses = Object.values(\n this.cloneClassesObjWithNewMetadata({\n classesInput,\n config: this.config,\n ctx: this,\n classType,\n }),\n );\n // console.log(`${classType} clonedClasses`, clonedClasses);\n clonedClasses.forEach(c => arr.push(c));\n\n await ref.getRecrusiveClassesfromContexts(classType, arr);\n }\n return arr as Function[];\n }\n //#endregion\n\n //#region methods & getters / get class instances by class type\n getClassInstanceObjBy(classType: Models.ClassType): any {\n return this.classInstancesByNameObj[classType];\n }\n //#endregion\n\n //#region methods & getters / get class instances arr\n private getClassesInstancesArrBy(classType: Models.ClassType): any[] {\n return this.objWithClassesInstancesArr[classType];\n }\n //#endregion\n\n //#region methods & getters / inject\n inject<T>(\n ctor: new (...args: any[]) => T,\n options: {\n localInstance?: boolean;\n contextClassInstance?: BaseInjector;\n locaInstanceConstructorArgs?: ConstructorParameters<typeof ctor>;\n parentInstanceThatWillGetInjectedStuff: object;\n },\n ): T {\n const className = ClassHelpers.getName(ctor);\n\n const locaInstanceConstructorArgs =\n options.locaInstanceConstructorArgs || [];\n\n if (this.isCLassType(Models.ClassType.REPOSITORY, ctor)) {\n options.localInstance = true;\n }\n\n if (options?.localInstance) {\n const ctxClassFn = this.getClassFunByClassName(className);\n let entityName: string = '';\n\n // entity thing is only for repositories local repositories\n // if (className === 'BaseRepository') {\n const entityFn = _.first(locaInstanceConstructorArgs);\n const entity = entityFn && entityFn();\n entityName = (entity && ClassHelpers.getName(entity)) || '';\n // console.log(`entityName `, entityName);\n // }\n\n if (!options.contextClassInstance[this.localInstaceObjSymbol]) {\n options.contextClassInstance[this.localInstaceObjSymbol] = {};\n }\n const instanceKey = className + (entityName ? `.${entityName}` : '');\n\n const existed =\n options.contextClassInstance[this.localInstaceObjSymbol][instanceKey];\n\n if (existed) {\n // console.log(\n // `EXISTED ${ClassHelpers.getName(options.parentInstanceThatWillGetInjectedStuff)} Inject ${className} instanceKey \"${instanceKey}\"`,\n // );\n return existed;\n }\n\n // console.log(\n // `NEW ${ClassHelpers.getName(options.parentInstanceThatWillGetInjectedStuff)} Inject ${className} instanceKey \"${instanceKey}\"`,\n // );\n\n if (!ctxClassFn) {\n throw new Error(`Not able to inject \"${className}\" inside context \"${this.contextName}\"\n\n Make sure they share the same context or import context where \"${className}\" is defined.\n\n `);\n }\n\n const injectedInstance = new (ctxClassFn as any)(\n ...locaInstanceConstructorArgs,\n );\n options.contextClassInstance[this.localInstaceObjSymbol][instanceKey] =\n injectedInstance;\n // console.log(`injectedInstance `, existed)\n return injectedInstance;\n }\n\n const contextScopeInstance = this.allClassesInstances[className];\n // if (className === 'TopicController') {\n // debugger;\n // }\n return contextScopeInstance;\n }\n\n /**\n * alias for inject\n */\n getInstanceBy<T>(ctor: new (...args: any[]) => T): T {\n // if (!!this.__contextForControllerInstanceAccess) {\n // const className = ClassHelpers.getName(ctor);\n // const allControllers = this.getClassFunByArr(Models.ClassType.CONTROLLER);\n\n // // TODO QUICK_FIX cache controllers\n // for (const ctrl of allControllers) {\n // if (ClassHelpers.getName(ctrl) === className) {\n // // console.log('injecting from contextForControllerInstanceAcesss', className);\n // return this.__contextForControllerInstanceAccess.inject(ctor, {\n // localInstance: false,\n // });\n // }\n // }\n // }\n\n return this.inject(ctor, {\n localInstance: false,\n parentInstanceThatWillGetInjectedStuff: this,\n });\n }\n //#endregion\n\n //#region methods & getters / check if context initialized\n checkIfContextInitialized() {\n if (_.isUndefined(this.config)) {\n throw new Error(`Please check if your context has been initialized.\n\n // ...\n await Context.initialize();\n // ...\n\n\n `);\n }\n }\n //#endregion\n\n //#region methods & getters / get class function by class type name\n getClassFunBy(classType: Models.ClassType) {\n this.checkIfContextInitialized();\n switch (classType) {\n case Models.ClassType.CONTROLLER:\n return this.config.controllers;\n case Models.ClassType.ENTITY:\n return this.config.entities;\n case Models.ClassType.PROVIDER:\n return this.config.providers;\n case Models.ClassType.MIDDLEWARE:\n return this.config.middlewares;\n case Models.ClassType.REPOSITORY:\n return this.config.repositories;\n case Models.ClassType.SUBSCRIBER:\n return this.config.subscribers;\n case Models.ClassType.MIGRATION:\n return this.config.migrations;\n }\n }\n\n isCLassType(classType: Models.ClassType, classFn: Function): boolean {\n return !!this.getClassFunBy(classType)[ClassHelpers.getName(classFn)];\n }\n\n /**\n * Only for injectable types\n * Only for classType: CONTROLLER, REPOSITORY, PROVIDER, MIDDLEWARES\n */\n getClassFunByClassName(className: string): Function {\n for (const classTypeName of this.allTypesfromContexts) {\n const classesForInjectableType =\n this.config[Models.ClassTypeKey[classTypeName]];\n\n if (classesForInjectableType[className]) {\n return classesForInjectableType[className];\n }\n }\n }\n\n getClassFunByClass(classFunction: Function): Function {\n const className = ClassHelpers.getName(classFunction);\n return this.getClassFunByClassName(className);\n }\n\n getClassFunByArr(classType: Models.ClassType) {\n return Object.values(this.getClassFunBy(classType) || {}) as Function[];\n }\n //#endregion\n\n //#region methods & getters / create class instances\n private async createInstances(classes: any, classType: Models.ClassType) {\n // const recrusiveValuesFromContext =\n // await this.getRecrusiveClassesfromContexts(classType);\n // console.log(this.config.contexts);\n // console.log('recrusiveValuesFromContext', recrusiveValuesFromContext);\n\n for (const classFn of [\n // ...recrusiveValuesFromContext,\n ...Object.values(classes),\n ]) {\n const instance = DITaonContainer.resolve(classFn as any) as any;\n const classInstancesByNameObj = this.classInstancesByNameObj[classType];\n const className = ClassHelpers.getName(classFn);\n // console.log({ classFn, classType, instance, place, className, 'classInstancesByNameObj': this.classInstancesByNameObj });\n classInstancesByNameObj[className] = instance;\n // update config\n this.config[Models.ClassTypeKey[classType]][className] = classFn;\n this.objWithClassesInstancesArr[classType].push(instance);\n this.allClassesInstances[className] = instance;\n }\n }\n //#endregion\n\n //#region methods & getters / init classes\n async initClasses(): Promise<void> {\n if (this.remoteHost) {\n return;\n }\n\n //#region @websql\n for (const classFun of this.getClassFunByArr(\n Models.ClassType.ENTITY,\n ) as any[]) {\n const repo = (await this.connection.getRepository(\n ClassHelpers.getOrginalClass(classFun),\n )) as any;\n this.repos.set(ClassHelpers.getName(classFun), repo);\n }\n //#endregion\n\n for (const classTypeName of [\n Models.ClassType.MIDDLEWARE,\n Models.ClassType.PROVIDER,\n Models.ClassType.REPOSITORY,\n Models.ClassType.CONTROLLER,\n Models.ClassType.ENTITY,\n Models.ClassType.MIGRATION,\n ]) {\n //#region init class static _ property\n for (const classFun of this.getClassFunByArr(classTypeName) as any[]) {\n if (_.isFunction(classFun._)) {\n await classFun._();\n }\n }\n //#endregion\n }\n\n for (const classTypeName of [\n Models.ClassType.MIDDLEWARE,\n Models.ClassType.PROVIDER,\n Models.ClassType.REPOSITORY,\n Models.ClassType.CONTROLLER,\n Models.ClassType.MIGRATION,\n ]) {\n //#region init providers, repositories _ property\n // Helpers.taskStarted(\n // `[taon] REINITING _ INS FN ${classTypeName} ${this.contextName} STARTED`,\n // );\n for (const ctrl of this.getClassesInstancesArrBy(classTypeName)) {\n if (_.isFunction(ctrl._)) {\n await ctrl._();\n }\n }\n // Helpers.taskStarted(\n // `[taon] REINITING _ INS FN ${classTypeName} ${this.contextName} DONE`,\n // );\n //#endregion\n }\n }\n //#endregion\n\n //#region methods & getters / is active on\n isActiveOn(classInstance: object): boolean {\n let contextRef: EndpointContext =\n classInstance[Symbols.ctxInClassOrClassObj];\n return this === contextRef;\n }\n //#endregion\n\n //#region methods & getters / uri\n get frontendHostUri() {\n const url = this.config?.frontendHost?.startsWith('http')\n ? this.config.frontendHost\n : `${globalThis?.location?.protocol || 'http:'}//${\n this.config?.frontendHost\n }`;\n const uri = new URL(url.replace(/\\/$/, ''));\n return uri;\n }\n\n get uri() {\n const url = this.host\n ? new URL(this.host)\n : this.remoteHost\n ? new URL(this.remoteHost)\n : void 0;\n\n return url;\n }\n //#endregion\n\n //#region methods & getters / host uri protocol\n get uriProtocol(): string | undefined {\n return this.uri?.protocol;\n }\n //#endregion\n\n //#region methods & getters / host uri origin\n /**\n * Examples\n * http://localhost:3000\n * https://localhost (from localhost:80) *\n */\n get uriOrigin(): string | undefined {\n return this.uri?.origin;\n }\n //#endregion\n\n //#region methods & getters / host uri pathname\n /**\n * Exampels\n * http://localhost:3000/path/to/somewhere\n * https://localhost/path/to/somewhere (from localhost:80)\n */\n // get uriOriginWithPathname(): string | undefined {\n // return this.uri?.origin\n // ? this.uri?.origin + this.uriPathnameOrNothingIfRoot.replace(/\\/$/, '')\n // : undefined;\n // }\n\n get uriPathname(): string | undefined {\n return this.uri?.pathname;\n }\n //#endregion\n\n //#region methods & getters / uri pathname or nothing if root\n /**\n * Examples\n * http://localhost:3000/path/to/somewhere -> '/path/to/somewhere'\n * http://localhost:3000 -> '' #\n * https://localhost/path/to/ -> '/path/to/somewhere' # remove last slash\n */\n get uriPathnameOrNothingIfRoot(): string {\n const isNonRootProperPathName =\n this.uri?.pathname && this.uri.pathname !== '/';\n return isNonRootProperPathName ? this.uri.pathname.replace(/\\/$/, '') : '';\n }\n //#endregion\n\n //#region port from uri\n get uriPort(): string | undefined {\n if (!this.uri?.origin?.includes('localhost')) {\n return this.config?.hostPortNumber?.toString();\n }\n return this.uri?.port;\n }\n // TODO do i need 2 getters for port?\n\n /**\n * Port from uri as number\n * @returns {Number | undefined}\n */\n get port(): Number | undefined {\n return this.uri?.port ? Number(this.uriPort) : undefined;\n }\n //#endregion\n\n //#region methods & getters / is https server\n get isHttpServer() {\n return this.uriProtocol === 'https:';\n }\n //#endregion\n\n //#region methods & getters / public assets\n /**\n * ipc/udp needs this\n */\n public get contextName(): string {\n return this.config.contextName;\n }\n //#endregion\n\n //#region methods & getters / current working directory\n public get cwd(): string {\n return this.config.cwd || process.cwd();\n }\n //#endregion\n\n //#region methods & getters / active context\n public get activeContext(): string | null {\n return this.config.activeContext || null;\n }\n //#endregion\n\n //#region methods & getters / app id\n public get appId(): string {\n return this.config.appId;\n }\n //#endregion\n\n //#region methods & getters / public assets\n public get publicAssets() {\n return this.config?.publicAssets || [];\n }\n //#endregion\n\n //#region methods & getters / is production mode\n get isProductionMode() {\n return this.config.productionMode;\n }\n //#endregion\n\n //#region methods & getters / remote host\n get remoteHost() {\n return this.config.remoteHost;\n }\n //#endregion\n\n //#region methods & getters / host\n get host() {\n return this.config.host;\n }\n //#endregion\n\n //#region methods & getters / host\n get orgin() {\n return this.uri?.origin;\n }\n //#endregion\n\n //#region methods & getters / init subscribers\n async initSubscribers() {\n //#region @websqlFunc\n if (this.remoteHost) {\n return;\n }\n const subscriberClasses = this.getClassFunByArr(\n Models.ClassType.SUBSCRIBER,\n );\n for (const subscriberClassFn of subscriberClasses) {\n const options = Reflect.getMetadata(\n Symbols.metadata.options.subscriber,\n subscriberClassFn,\n ) as TaonSubscriberOptions;\n // console.log('subscriber options', options);\n // const nameForSubscriber = ClassHelpers.getName(subscriber);\n EventSubscriber()(subscriberClassFn);\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / init entities\n async initEntities() {\n //#region @websql\n if (this.remoteHost) {\n return;\n }\n const entities = this.getClassFunByArr(Models.ClassType.ENTITY);\n\n for (const entity of entities) {\n const options = Reflect.getMetadata(\n Symbols.metadata.options.entity,\n entity,\n ) as TaonEntityOptions;\n const createTable = _.isUndefined(options.createTable)\n ? true\n : options.createTable;\n\n const nameForEntity = ClassHelpers.getName(entity);\n\n if (createTable) {\n this.logDb &&\n console.info(\n `[taon][typeorm] create table for entity \"${nameForEntity}\" ? '${createTable}'`,\n );\n // console.log('TypeormEntity', { TypeormEntity });\n TypeormEntity(nameForEntity)(entity);\n } else {\n this.logDb &&\n console.info(\n `[taon][typeorm] create table for entity \"${nameForEntity}\" ? '${createTable}'`,\n );\n }\n }\n //#endregion\n }\n\n //#endregion\n\n //#region methods & getters / destroy\n async destroy(): Promise<void> {\n //#region @websqlFunc\n if (this.connection) {\n await this.connection?.destroy();\n delete this.connection;\n }\n\n if (this.serverTcpUdp) {\n await new Promise(resolve => {\n this.serverTcpUdp?.close(() => {\n resolve(true);\n });\n });\n delete this.serverTcpUdp;\n }\n delete this.expressApp;\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / init connection\n async initDatabaseConnection(): Promise<void> {\n //#region @websqlFunc\n if (this.remoteHost || !this.databaseConfig) {\n return;\n }\n const entities = this.getClassFunByArr(Models.ClassType.ENTITY).map(\n entityFn => {\n return ClassHelpers.getOrginalClass(entityFn);\n },\n );\n\n const subscribers = this.getClassFunByArr(Models.ClassType.SUBSCRIBER);\n\n let autoSave = false;\n if (!_.isNil(this.databaseConfig.autoSave)) {\n autoSave = this.databaseConfig.autoSave;\n } else {\n if (this.USE_MARIADB_MYSQL_IN_DOCKER) {\n autoSave = !this.isRunningInsideDocker; // in docker I am using mysql or posgress\n } else {\n autoSave = true; // on docker with sqljs I need to save db\n }\n }\n\n const dataSourceDbConfig = _.isObject(this.databaseConfig)\n ? ({\n type: this.databaseConfig.type,\n port: this.databaseConfig.databasePort,\n host: this.databaseConfig.databaseHost,\n database: this.databaseConfig.database as any,\n username: this.databaseConfig.databaseUsername,\n password: this.databaseConfig.databasePassword,\n useLocalForage: this.databaseConfig.useLocalForage,\n // I am not using typeorm migration system\n entities,\n subscribers,\n synchronize: this.isRunOrRevertOnlyMigrationAppStart\n ? false\n : this.databaseConfig.synchronize,\n autoSave,\n dropSchema: this.isRunOrRevertOnlyMigrationAppStart\n ? false\n : this.databaseConfig.dropSchema,\n logging: !!this.databaseConfig.logging,\n location: this.databaseConfig.location,\n } as DataSourceOptions)\n : ({} as DataSourceOptions);\n\n // debugger;\n this.logFramework &&\n console.log(\n `[Context: \"${this.contextName}\"] dataSourceDbConfig`,\n dataSourceDbConfig,\n );\n\n if (this.modeAllowsDatabaseCreation && this.databaseConfig) {\n this.logDb &&\n this.logFramework &&\n Helpers.info('[taon][database] prepare typeorm connection...');\n try {\n const connection = new DataSource(dataSourceDbConfig);\n this.connection = connection;\n await this.connection.initialize();\n } catch (error) {\n console.error(\n `[taon][typeorm] Error while initializing connection for ${this.contextName}, ERROR STARTED `,\n );\n console.error(error?.stack || '< No stack trace > ');\n console.error(error?.message || error);\n console.error(\n `[taon][typeorm] Error while initializing connection for ${this.contextName}, ERROR ENDS `,\n );\n }\n\n if (!this.connection?.isInitialized) {\n console.log('WRONG CONFIG', dataSourceDbConfig);\n throw new Error(`Something wrong with connection init in ${this.mode}`);\n/* */\n/* */\n \n }\n\n if (this.logDb || this.logFramework) {\n console.info(\n `\n\n CONTECTION OK for ${this.contextName} - ${this.mode}\n\n [taon][typeorm] db prepration done.. db initialize=${this.connection?.isInitialized}\n\n\n `,\n // dataSourceDbConfig,\n { 'this.connection': !!this.connection },\n );\n console.log(\n `Database file location: ${this.connection.options.database}`,\n );\n }\n // const entityMetadata = getMetadataArgsStorage();\n // console.log(\n // `\n\n // entityMetadata after connection init for ${this.contextName} - ${this.mode}\n\n // `,\n // entityMetadata,\n // );\n // debugger;\n } else {\n Helpers.info(`[taon][typeorm] Not initing db for mode ${this.mode}`);\n }\n //#endregion\n }\n\n //#endregion\n\n //#region methods & getters / initialize metadata\n\n //#region methods & getters / update class calculate path\n private updateCalculatedPathsForControllers(\n rawConfigs: ControllerConfig[],\n classConfig: ControllerConfig,\n controllerClassFn: Function,\n ): void {\n const parentsCalculatedPath = _.slice(rawConfigs, 1)\n .reverse()\n .map(bc => {\n if (TaonHelpers.isGoodPath(bc.path)) {\n return bc.path;\n }\n return bc.className;\n })\n .join('/');\n\n if (TaonHelpers.isGoodPath(classConfig.path)) {\n classConfig.calculatedPath = classConfig.path;\n } else {\n classConfig.calculatedPath = (\n `${this.uriPathnameOrNothingIfRoot}` +\n `/${apiPrefix}/${this.contextName}/tcp${parentsCalculatedPath}/` +\n `${ClassHelpers.getName(controllerClassFn)}`\n )\n .replace(/\\/\\//g, '/')\n .split('/')\n .reduce((acc, bc) => {\n return _.last(acc) === bc ? acc : [...acc, bc];\n }, [])\n .join('/');\n }\n\n // console.log('calculatedPath', classConfig.calculatedPath);\n }\n //#endregion\n\n //#region methods & getters / dedupe class configs\n private mergeControllerMethodsConfigs(\n rawConfigs: ControllerConfig[],\n classConfig: ControllerConfig,\n controllerClassFn: Function,\n ): void {\n const currentControllerMethodsConfig = classConfig.methods;\n\n _.slice(rawConfigs, 1).forEach(bc => {\n const parentControllerMethods = _.cloneDeep(bc.methods);\n\n for (const methodsName in parentControllerMethods) {\n if (parentControllerMethods.hasOwnProperty(methodsName)) {\n if (!currentControllerMethodsConfig[methodsName]) {\n //#region add non existed method\n const methodConfig = parentControllerMethods[methodsName];\n currentControllerMethodsConfig[methodsName] = methodConfig;\n //#endregion\n }\n }\n }\n });\n }\n //#endregion\n async initControllersHook(allInitedEndpointContexts: {\n [contextName: string]: EndpointContext;\n }): Promise<void> {\n if (this.isRunOrRevertOnlyMigrationAppStart) {\n return;\n }\n const allControllers = this.getClassFunByArr(Models.ClassType.CONTROLLER);\n for (const controllerClassFn of allControllers) {\n const instance = this.getInstanceBy(\n controllerClassFn as any,\n ) as BaseController;\n if (_.isFunction(instance.afterAllCtxInited)) {\n await instance.afterAllCtxInited(allInitedEndpointContexts);\n }\n }\n }\n\n async initControllers(): Promise<void> {\n if (this.isRunOrRevertOnlyMigrationAppStart) {\n return;\n }\n const allControllers = this.getClassFunByArr(Models.ClassType.CONTROLLER);\n // debugger\n // console.log('allControllers', allControllers);\n for (const controllerClassFn of allControllers) {\n // console.log(ClassHelpers.getClassConfig(controllerClassFn));\n\n // const controllerName = ClassHelpers.getName(controllerClassFn);\n\n // console.log(\n // `for ${controllerName}`,\n // ClassHelpers.getClassConfig(controllerClassFn),\n // );\n\n controllerClassFn[Symbols.classMethodsNames] =\n ClassHelpers.getMethodsNames(controllerClassFn);\n\n const rawConfigs = ClassHelpers.getControllerConfigs(controllerClassFn);\n // console.log(controllerName, { rawConfigs });\n // console.log(`Class config for ${ClassHelpers.getName(controllerClassFn)}`, configs)\n const classConfig: ControllerConfig = rawConfigs[0];\n\n this.updateCalculatedPathsForControllers(\n rawConfigs,\n classConfig,\n controllerClassFn,\n );\n this.mergeControllerMethodsConfigs(\n rawConfigs,\n classConfig,\n controllerClassFn,\n );\n\n //#region combine middlewares from controllers\n classConfig.calculatedMiddlewaresControllerObj = {};\n [...rawConfigs].reverse().forEach(rc => {\n if (_.isFunction(rc.middlewares)) {\n classConfig.calculatedMiddlewaresControllerObj = rc.middlewares({\n parentMiddlewares: classConfig.calculatedMiddlewaresControllerObj,\n className(middlewareClass) {\n return ClassHelpers.getName(controllerClassFn);\n },\n });\n }\n });\n //#endregion\n\n //#region group start\n/* */\n/* */\n \n this.logHttp &&\n console.groupCollapsed(\n `[taon][express-server] routes [${classConfig.className}]`,\n );\n/* */\n/* */\n \n //#endregion\n\n //#region init client or server methods\n const methodNames = Object.keys(classConfig.methods);\n for (const methodName of methodNames) {\n const methodConfig: Partial<MethodConfig> =\n classConfig.methods[methodName];\n\n //#region combine all class methods middlewares\n let calculatedMiddlewaresMethodObj = {};\n\n [...rawConfigs].reverse().forEach(rc => {\n if (rc.methods[methodName]) {\n const parentMethodConfig = rc.methods[methodName];\n\n if (_.isFunction(parentMethodConfig.middlewares)) {\n calculatedMiddlewaresMethodObj = parentMethodConfig.middlewares({\n parentMiddlewares: calculatedMiddlewaresMethodObj,\n className(middlewareClass) {\n return ClassHelpers.getName(controllerClassFn);\n },\n });\n }\n }\n });\n\n // add class middlewares to method middlewares\n methodConfig.calculatedMiddlewaresMethodObj = {\n ...calculatedMiddlewaresMethodObj,\n ...classConfig.calculatedMiddlewaresControllerObj,\n };\n methodConfig.calculatedMiddlewares = Object.values(\n methodConfig.calculatedMiddlewaresMethodObj || {},\n );\n //#endregion\n\n // methodConfig.calculatedMiddlewares = TODO\n\n //#region initialized method express path\n const httpMethodType: Models.Http.Rest.HttpMethod = methodConfig.type;\n\n // this is quick fix - in docker global path should not be used\n const globalPathPart =\n this.isRunningInsideDocker ||\n !this.frontendHostUri?.origin?.includes('localhost') // fe with domain -> is in docker\n ? `${this.uriPathnameOrNothingIfRoot.replace(\n /\\/$/,\n '',\n )}/${apiPrefix}/${this.contextName}`.replace(/\\/\\//, '/')\n : '';\n const expressPath = methodConfig.global\n ? `${globalPathPart}/${methodConfig.path?.replace(\n /\\/$/,\n '',\n )}`.replace(/\\/\\//, '/')\n : TaonHelpers.getExpressPath(classConfig, methodConfig);\n\n //#endregion\n\n //#region init server\n // console.log({ expressPath });\n if (Helpers.isNode || Helpers.isWebSQL) {\n //#region @websql\n\n const route = this.initServer(\n httpMethodType,\n methodConfig,\n classConfig,\n expressPath,\n controllerClassFn,\n );\n\n this.activeRoutes.push({\n expressPath: route.expressPath,\n method: route.method,\n });\n //#endregion\n }\n //#endregion\n\n //#region init client\n const shouldInitClient =\n Helpers.isBrowser || this.remoteHost || Helpers.isWebSQL;\n // console.log('shouldInitClient', shouldInitClient);\n if (shouldInitClient) {\n // console.log(\n // 'initClient',\n // ClassHelpers.getFullInternalName(controllerClassFn),\n // type,\n // methodConfig,\n // expressPath,\n // );\n await this.initClient(\n controllerClassFn,\n httpMethodType,\n methodConfig as any,\n expressPath,\n );\n }\n //#endregion\n }\n //#endregion\n\n //#region group end\n/* */\n/* */\n \n this.logHttp && console.groupEnd();\n/* */\n/* */\n \n //#endregion\n }\n }\n //#endregion\n\n //#region methods & getters / write active routes\n public writeActiveRoutes(): void {\n if (\n this.remoteHost ||\n this.isRunOrRevertOnlyMigrationAppStart ||\n this.skipWritingServerRoutes\n ) {\n return;\n }\n // const contexts: EndpointContext[] = [this];\n //#region @websql\n\n const troutes = Utils.uniqArray(\n this.activeRoutes.map(f => {\n return `${f.method} ${f.expressPath}`;\n }),\n ).map(f => {\n const [method, expressPath] = f.split(' ');\n return (\n `\\n### ${_.startCase(_.last(expressPath.split('/')))}\\n` +\n TaonHelpers.fillUpTo(method.toUpperCase() + ' ', 10) +\n this.uriOrigin +\n expressPath\n );\n\n // return `${TaonHelpers.string(method.toUpperCase() + ':')\n // .fillUpTo(10)}${context.uriHref.replace(/\\/$/, '')}${expressPath}`\n });\n const routes = [\n ...['', `# ROUTES FOR HOST ${this.uriOrigin} `],\n ...troutes,\n ].join('\\n');\n const fileName = crossPlatformPath([\n/* */\n/* */\n \n `routes-${this.config.contextName}.rest`,\n ]);\n\n this.logFramework && console.log(`[taon] routes file: ${fileName} `);\n // Helpers.log(JSON.stringify(routes, null, 4))\n/* */\n/* */\n/* */\n/* */\n \n //#endregion\n }\n //#endregion\n\n //#region methods & getters / middlewares\n public get middlewares(): Models.MiddlewareType[] {\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / init middlewares\n\n private async initCustomClientMiddlewares(): Promise<void> {\n const middlewares = this.getClassesInstancesArrBy(\n Models.ClassType.MIDDLEWARE,\n )\n .map(f => f as BaseMiddleware)\n .filter(f => _.isFunction(f.interceptClient));\n\n middlewares.forEach(middlewareInstanceName => {\n const contextName = this.contextName;\n const interceptorName = `${contextName}-${ClassHelpers.getName(\n middlewareInstanceName,\n )}`;\n Resource.request.interceptors.set(interceptorName, {\n intercept: ({ req, next }) => {\n const url = new URL(req.url);\n if (\n url.pathname.startsWith(\n `${this.uriPathnameOrNothingIfRoot}/${apiPrefix}/${contextName}/`,\n )\n ) {\n // console.log('intercepting', url.pathname, req);\n return middlewareInstanceName.interceptClient({\n req,\n next,\n });\n }\n return next.handle(req);\n },\n });\n });\n }\n\n private async initCustomBackendMiddlewares(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n private async initBackendMiddlewares(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n //#endregion\n\n //#region methods & getters / init methods node\n private initServer(\n //#region parameters\n httpMethodType: Models.Http.Rest.HttpMethod,\n methodConfig: Partial<MethodConfig>,\n classConfig: ControllerConfig,\n expressPath: string,\n target: Function,\n //#endregion\n ): { expressPath: string; method: Models.Http.Rest.HttpMethod } {\n //#region resolve variables\n // console.log(\n // `CLIENT: expressPath: \"${expressPath}\" interceptor for method: ${methodConfig.calculatedMiddlewares.length}`,\n // );\n\n const middlewareHandlers = methodConfig.calculatedMiddlewares\n .map(middlewareClassFun => {\n const middlewareInstance: BaseMiddleware = this.getInstanceBy(\n middlewareClassFun as any,\n );\n if (\n middlewareInstance &&\n _.isFunction(middlewareInstance.interceptServerMethod)\n ) {\n const middlewareFn = ClassHelpers.asyncHandler(\n async (\n req: express.Request,\n res: express.Response,\n next: express.NextFunction,\n ) => {\n await middlewareInstance.interceptServerMethod(\n {\n req,\n res,\n next,\n },\n {\n methodName: methodConfig.methodName,\n expressPath,\n httpRequestType: methodConfig.type,\n },\n );\n },\n );\n return middlewareFn;\n }\n })\n .filter(f => !!f) as express.RequestHandler[];\n\n // const url = this.uri;\n\n //#region get result\n const getResult = async (resolvedParams, req, res) => {\n const response: Models.Http.Response<any> =\n methodConfig.descriptor.value.apply(\n /**\n * Context for method @GET,@PUT etc.\n */\n this.getInstanceBy(target as any),\n /**\n * Params for method @GET, @PUT etc.\n */\n resolvedParams,\n );\n let result = await getResponseValue(response, { req, res });\n return result;\n };\n //#endregion\n\n // console.log(`BACKEND: expressPath: \"${expressPath}\" `);\n //#endregion\n\n if (Helpers.isElectron) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n if (!this.remoteHost) {\n //#region apply dummy websql express routers\n //#region @websql\n if (Helpers.isWebSQL) {\n if (!this.expressApp[httpMethodType.toLowerCase()]) {\n this.expressApp[httpMethodType.toLowerCase()] = () => {};\n // TODO add middlewares for WEBSQL and ELECTRON mode\n }\n }\n //#endregion\n //#endregion\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n return {\n expressPath: expressPath,\n method: methodConfig.type,\n };\n }\n //#endregion\n\n //#region methods & getters / init client\n /**\n * client can be browser or nodejs (when remote host)\n */\n private async initClient(\n target: Function,\n httpRequestType: Models.Http.Rest.HttpMethod,\n methodConfig: Partial<MethodConfig>, // Models.Http.Rest.MethodConfig,\n expressPath: string,\n ): Promise<void> {\n const ctx = this;\n\n // console.log(\n // `CLIENT: expressPath: \"${expressPath}\" interceptor for method: ${methodConfig.calculatedMiddlewares?.length} `,\n // );\n\n //#region init middlewares\n const middlewares = methodConfig.calculatedMiddlewares;\n const middlewaresInstances = middlewares\n .map(f => this.getInstanceBy(f as any) as BaseMiddleware)\n .filter(f => _.isFunction(f.interceptClientMethod));\n\n middlewaresInstances.forEach(instance => {\n const middlewareName = ClassHelpers.getName(instance);\n // middlewareName - only needed for inheritace and uniqness of interceptors\n const interceptorKey = `${middlewareName}-${methodConfig.type?.toUpperCase()}-${expressPath}`;\n Resource.request.methodsInterceptors.set(interceptorKey, {\n intercept: ({ req, next }) => {\n return instance.interceptClientMethod(\n {\n req,\n next,\n },\n {\n methodName: methodConfig.methodName,\n expressPath,\n httpRequestType: httpRequestType,\n },\n );\n },\n });\n });\n //#endregion\n\n // : { received: any; /* Rest<any, any> */ }\n this.logHttp &&\n console.log(`${httpRequestType?.toUpperCase()} ${expressPath} `);\n // console.log('INITING', methodConfig); // TODO inject in static\n //#region resolve storage\n // TODO not a good idea\n const storage = globalThis;\n //#endregion\n\n const orgMethods = target.prototype[methodConfig.methodName];\n\n //#region handle electron ipc request\n\n if (Helpers.isElectron) {\n const ipcRenderer = (window as any).require('electron').ipcRenderer;\n target.prototype[methodConfig.methodName] = function (...args) {\n const received = new Promise(async (resolve, reject) => {\n const headers = {};\n const { request, response } = TaonHelpers.websqlMocks(headers);\n\n //#region @browser\n ipcRenderer.once(\n TaonHelpers.ipcKeyNameResponse(target, methodConfig, expressPath),\n (event, responseData) => {\n let res: any = responseData;\n console.log({ responseData });\n try {\n const body = res;\n res = new ModelsNg2Rest.HttpResponse(\n {\n body: void 0,\n isArray: void 0 as any,\n method: methodConfig.type,\n url: `${ctx.uriOrigin}${\n '' // TODO express path\n }${methodConfig.path} `,\n },\n Helpers.isBlob(body) || _.isString(body)\n ? body\n : JSON.stringify(body),\n RestHeaders.from(headers),\n void 0,\n () => body,\n );\n\n resolve(res);\n } catch (error) {\n console.error(error);\n reject(error);\n }\n },\n );\n ipcRenderer.send(\n TaonHelpers.ipcKeyNameRequest(target, methodConfig, expressPath),\n args,\n );\n //#endregion\n });\n received['observable'] = from(received);\n return {\n received,\n request(axiosConfig: ModelsNg2Rest.Ng2RestAxiosRequestConfig) {\n return received;\n },\n } as Models.Http.ClientAction<any>;\n };\n return;\n }\n //#endregion\n\n //#region handling web sql request\n //#region @websqlOnly\n\n //#region resolve variables\n const MIN_TIMEOUT = 500;\n const MIN_TIMEOUT_STEP = 200;\n\n const globalThisVar = globalThis; // TODO not a good idea! probably should be in context\n\n const timeout =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_TIMEOUT] || MIN_TIMEOUT;\n\n let updateFun: Subject<number> =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN];\n if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN]) {\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN] = new Subject();\n }\n updateFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN];\n\n let startFun: Subject<void> =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];\n if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START]) {\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START] = new Subject();\n }\n startFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];\n\n let doneFun: Subject<void> =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];\n if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE]) {\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE] = new Subject();\n }\n doneFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];\n\n let periodsToUpdate = 0;\n if (timeout >= MIN_TIMEOUT) {\n periodsToUpdate = Math.floor(timeout / MIN_TIMEOUT_STEP);\n }\n //#endregion\n\n //#region web sql periods to wait\n const periods = async () => {\n startFun.next();\n for (let n = 1; n <= periodsToUpdate; n++) {\n // if (n === 0) {\n // updateFun.next(0)\n // } else {\n let upValue = Math.round(((MIN_TIMEOUT_STEP * n) / timeout) * 100);\n if (upValue > 100) {\n upValue = 100;\n }\n // console.log(`ping upValue: ${ upValue } `)\n updateFun.next(upValue);\n // }\n await new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(void 0);\n }, MIN_TIMEOUT_STEP);\n });\n // console.log('pong')\n }\n doneFun.next();\n };\n //#endregion\n\n target.prototype[methodConfig.methodName] = function (...args) {\n // if (!target.prototype[methodConfig.methodName][subjectHandler]) {\n // target.prototype[methodConfig.methodName][subjectHandler] = new Subject();\n // }\n const received = new Promise(async (resolve, reject) => {\n const headers = {};\n const { request, response } = TaonHelpers.websqlMocks(headers);\n\n let res: any;\n try {\n res = await Helpers.runSyncOrAsync({\n functionFn: orgMethods,\n context: this,\n arrayOfParams: args,\n });\n // console.log({ res1: res })\n if (typeof res === 'function') {\n res = await Helpers.runSyncOrAsync({\n functionFn: res,\n context: this,\n arrayOfParams: [request, response],\n });\n }\n // console.log({ res2: res })\n if (typeof res === 'function') {\n res = await Helpers.runSyncOrAsync({\n functionFn: res,\n context: this,\n arrayOfParams: [request, response],\n });\n }\n // console.log({ res3: res })\n\n if (typeof res === 'object' && res?.received) {\n res = await res.received;\n }\n\n const body = res;\n\n res = new ModelsNg2Rest.HttpResponse(\n {\n body: void 0,\n isArray: void 0 as any,\n method: methodConfig.type,\n url: `${ctx.uriOrigin}${\n '' // TODO express path\n }${methodConfig.path} `,\n },\n Helpers.isBlob(body) || _.isString(body)\n ? body\n : JSON.stringify(body),\n RestHeaders.from(headers),\n void 0,\n () => body,\n );\n\n // TODO blob should be blob not json\n // console.log('NEXT', res);\n // target.prototype[methodConfig.methodName][subjectHandler].next(res);\n\n await periods();\n resolve(res);\n } catch (error) {\n await periods();\n console.error(error);\n // error = new Ng2RestModels.HttpResponseError('Error during websql request',\n // JSON.stringify(error));\n // target.prototype[methodConfig.methodName][subjectHandler].error(error);\n reject(error);\n }\n });\n received['observable'] = from(received);\n // debugger\n if (Helpers.isWebSQL) {\n return {\n received,\n request(axiosConfig: ModelsNg2Rest.Ng2RestAxiosRequestConfig) {\n // console.log('request', axiosConfgi);\n return received;\n },\n } as Models.Http.ClientAction<any>;\n }\n };\n if (Helpers.isWebSQL) {\n // @ts-ignore\n return undefined as any as Models.Http.ClientAction<any>;\n }\n //#endregion\n //#endregion\n\n //#region handle normal request\n\n target.prototype[methodConfig.methodName] = function (\n this: {},\n ...args\n ): Models.Http.ClientAction<any> {\n // console.log('[init method browser] FRONTEND expressPath', expressPath)\n // const productionMode = FrameworkContext.isProductionMode;\n\n //#region resolve frontend parameters\n\n if (!storage[Symbols.old.ENDPOINT_META_CONFIG])\n storage[Symbols.old.ENDPOINT_META_CONFIG] = {};\n if (!storage[Symbols.old.ENDPOINT_META_CONFIG][ctx.uriOrigin])\n storage[Symbols.old.ENDPOINT_META_CONFIG][ctx.uriOrigin] = {};\n const endpoints = storage[Symbols.old.ENDPOINT_META_CONFIG];\n let rest: ModelsNg2Rest.ResourceModel<any, any>;\n if (!endpoints[ctx.uriOrigin][expressPath]) {\n let headers = {};\n if (methodConfig.contentType && !methodConfig.responseType) {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n RestHeaders.from({\n 'Content-Type': methodConfig.contentType,\n Accept: methodConfig.contentType,\n }),\n );\n } else if (methodConfig.contentType && methodConfig.responseType) {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n RestHeaders.from({\n 'Content-Type': methodConfig.contentType,\n Accept: methodConfig.contentType,\n responsetypeaxios: methodConfig.responseType,\n }),\n );\n } else if (!methodConfig.contentType && methodConfig.responseType) {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n RestHeaders.from({\n responsetypeaxios: methodConfig.responseType,\n }),\n );\n } else {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n );\n }\n\n endpoints[ctx.uriOrigin][expressPath] = rest;\n } else {\n rest = endpoints[ctx.uriOrigin][expressPath] as any;\n }\n\n const method = httpRequestType.toLowerCase();\n\n const pathPrams = {};\n let queryParams = {};\n let bodyObject = {};\n args.forEach((param, i) => {\n let currentParam: Partial<ParamConfig> = void 0 as any;\n\n for (let pp in methodConfig.parameters) {\n let v = methodConfig.parameters[pp];\n if (v.index === i) {\n currentParam = v;\n break;\n }\n }\n\n if (!currentParam) {\n const errorMessage =\n `[${config.frameworkName}] Unable to resolve parameter` +\n ` at index ${i} for method ${methodConfig.methodName} at path ${expressPath}.`;\n\n/* */\n/* */\n/* */\n \n throw new Error(errorMessage);\n }\n\n if (currentParam.paramType === 'Path') {\n pathPrams[currentParam.paramName] = param;\n }\n if (currentParam.paramType === 'Query') {\n if (currentParam.paramName) {\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n `${Symbols.old.MAPPING_CONFIG_HEADER_QUERY_PARAMS}${currentParam.paramName} `,\n JSON.stringify(mapping),\n );\n }\n queryParams[currentParam.paramName] = param;\n } else {\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n Symbols.old.MAPPING_CONFIG_HEADER_QUERY_PARAMS,\n JSON.stringify(mapping),\n );\n }\n queryParams = _.cloneDeep(param);\n }\n }\n if (currentParam.paramType === 'Header') {\n if (currentParam.paramName) {\n if (currentParam.paramName === Symbols.old.MDC_KEY) {\n // parese MDC\n rest.headers.set(\n currentParam.paramName,\n encodeURIComponent(JSON.stringify(param)),\n );\n } else {\n rest.headers.set(currentParam.paramName, param);\n }\n } else {\n for (let header in param) {\n rest.headers.set(header, param[header]);\n }\n }\n }\n if (currentParam.paramType === 'Cookie') {\n Resource.Cookies.write(\n currentParam.paramName,\n param,\n currentParam.expireInSeconds,\n );\n }\n if (currentParam.paramType === 'Body') {\n if (currentParam.paramName) {\n if (ClassHelpers.getName(bodyObject) === 'FormData') {\n throw new Error(`[taon - framework] Don use param names when posting / putting FormData.\n Use this:\n// ...\n(@Taon.Http.Param.Body() formData: FormData) ...\n// ...\n\ninstead\n // ...\n (@Taon.Http.Param.Body('${currentParam.paramName}') formData: FormData) ...\n// ...\n`);\n }\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n `${Symbols.old.MAPPING_CONFIG_HEADER_BODY_PARAMS}${currentParam.paramName} `,\n JSON.stringify(mapping),\n );\n }\n bodyObject[currentParam.paramName] = param;\n } else {\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n Symbols.old.MAPPING_CONFIG_HEADER_BODY_PARAMS,\n JSON.stringify(mapping),\n );\n }\n bodyObject = param;\n }\n }\n });\n\n if (\n typeof bodyObject === 'object' &&\n ClassHelpers.getName(bodyObject) !== 'FormData'\n ) {\n let circuralFromItem = [];\n bodyObject = JSON10.parse(\n JSON10.stringify(bodyObject, void 0, void 0, circs => {\n circuralFromItem = circs;\n }),\n );\n rest.headers.set(\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY,\n JSON10.stringify(circuralFromItem),\n );\n }\n\n if (typeof queryParams === 'object') {\n let circuralFromQueryParams = [];\n queryParams = JSON10.parse(\n JSON10.stringify(queryParams, void 0, void 0, circs => {\n circuralFromQueryParams = circs;\n }),\n );\n\n rest.headers.set(\n Symbols.old.CIRCURAL_OBJECTS_MAP_QUERY_PARAM,\n JSON10.stringify(circuralFromQueryParams),\n );\n }\n //#endregion\n\n const httpResultObj: Models.Http.ClientAction<any> = {\n get received() {\n return rest.model(pathPrams)[method](bodyObject, [queryParams]);\n },\n request(axiosConfig?: ModelsNg2Rest.Ng2RestAxiosRequestConfig) {\n return rest\n .model(pathPrams)\n [method](bodyObject, [queryParams], axiosConfig);\n },\n };\n return httpResultObj as Models.Http.ClientAction<any>;\n };\n //#endregion\n }\n //#endregion\n}","//#region imports\nimport { Helpers, UtilsOs, _ } from 'tnp-core/websql';\n\nimport { EndpointContext } from './endpoint-context';\nimport { Models } from './models';\nimport { TaonAdminService } from './ui/taon-admin-mode-configuration/taon-admin.service'; // @browser\n//#endregion\n\n/**\n * @returns function that returns context function.\n * Context function can be used to dynamically\n * create context with specific configuration.\n */\nexport const createContextTemplate = <\n //#region context generic args\n CTX extends Record<string, object>,\n CTRL extends Record<string, new (...args: any[]) => any>,\n ENTITY extends Record<string, new (...args: any[]) => any>,\n REPO extends Record<string, new (...args: any[]) => any>,\n PROVIDER extends Record<string, new (...args: any[]) => any>,\n SUBSCRIBER extends Record<string, new (...args: any[]) => any>,\n MIGRATION extends Record<string, new (...args: any[]) => any>,\n MIDDLEWARE extends Record<string, new (...args: any[]) => any>,\n //#endregion\n>(\n configFn: (\n env: any,\n ) => Models.ContextOptions<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARE\n >,\n) => {\n return () => {\n return createContext<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARE\n >(configFn);\n };\n};\n\n/**\n * REQURIED PROPERTY:\n * - contextName\n */\nexport const createContext = <\n //#region context generic args\n CTX extends Record<string, object>,\n CTRL extends Record<string, new (...args: any[]) => any>,\n ENTITY extends Record<string, new (...args: any[]) => any>,\n REPO extends Record<string, new (...args: any[]) => any>,\n PROVIDER extends Record<string, new (...args: any[]) => any>,\n SUBSCRIBER extends Record<string, new (...args: any[]) => any>,\n MIGRATION extends Record<string, new (...args: any[]) => any>,\n MIDDLEWARES extends Record<string, new (...args: any[]) => any>,\n //#endregion\n>(\n configFn: (\n env: any,\n ) => Models.ContextOptions<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARES\n >,\n) => {\n let config = configFn({});\n // console.log(\n // `\n\n // [Taon] Creating context ${config.contextName}...`,\n // {config},\n // );\n const endpointContextRef = new EndpointContext(config, configFn);\n\n const res = {\n //#region contexts\n get contextName() {\n return config.contextName;\n },\n //#endregion\n\n get appId() {\n return config.appId;\n },\n\n //#region context\n /**\n * @deprecated\n * - get reference to internal context\n */\n async __ref() {\n if (!endpointContextRef.inited) {\n await endpointContextRef.init({\n initFromRecrusiveContextResovle: true,\n });\n }\n return endpointContextRef;\n },\n /**\n * only for internal use\n * @deprecated\n */\n get __refSync() {\n return endpointContextRef;\n },\n getClassInstance<T>(ctor: new (...args: any[]) => T): T {\n return endpointContextRef.getInstanceBy(ctor);\n },\n\n getClass<T>(ctor: new (...args: any[]) => T): new (...args: any[]) => T {\n const classFun = endpointContextRef.getClassFunByClass(ctor);\n return classFun as any;\n //#region old\n // TODO hmmmm for now context for controller inside api service\n // const allContexts = Object.values(classFun[Symbols.orignalClassClonesObj] || {}).map(classFn => {\n // return {\n // ctx: classFn[Symbols.ctxInClassOrClassObj] as EndpointContext,\n // classFn,\n // }\n // })\n // const activeContext = allContexts.find(c => c.ctx.inited);\n // debugger\n // console.log('activeContext', activeContext.ctx.contextName);\n // return activeContext.ctx.getClassFunByClass(ctor) as any;\n //#endregion\n },\n //#endregion\n //#region initialize\n /**\n * - create controller instances for context\n * - init database (if enable) + migation scripts\n */\n initialize: async (\n overrideOptions?: Models.TaonInitializeParams,\n ): Promise<EndpointContext> => {\n return await new Promise(async (resolve, reject) => {\n //#region init in set timeout\n setTimeout(async () => {\n if (UtilsOs.isRunningInDocker()) {\n const activeContext = config?.activeContext || null;\n if (\n _.isString(activeContext) &&\n activeContext !== '' &&\n activeContext !== config?.contextName\n ) {\n console.warn(\n `[taon] Context ${endpointContextRef.contextName} is not active context, skipping initialization.`,\n );\n resolve(endpointContextRef);\n return;\n }\n }\n\n await endpointContextRef.init({\n ...overrideOptions,\n });\n\n if (config.abstract) {\n throw new Error(`Abstract context can not be initialized`);\n }\n\n await endpointContextRef.initEntities();\n await endpointContextRef.initSubscribers();\n\n await endpointContextRef.initDatabaseConnection();\n\n await endpointContextRef.dbMigrations.ensureMigrationTableExists();\n\n // console.log(\n // 'connection subscribers',\n // endpointContextRef?.connection?.subscribers,\n // );\n // debugger;\n await endpointContextRef.initControllers();\n await endpointContextRef.startServer();\n //#region @websql\n endpointContextRef.writeActiveRoutes();\n //#endregion\n\n await endpointContextRef.initClasses();\n if (endpointContextRef.databaseConfig) {\n //#region handle websql reload data\n //#region @browser\n let keepWebsqlDbDataAfterReload = false;\n keepWebsqlDbDataAfterReload =\n TaonAdminService.Instance?.keepWebsqlDbDataAfterReload;\n\n if (keepWebsqlDbDataAfterReload) {\n !UtilsOs.isRunningInCliMode() &&\n Helpers.info(\n `[taon] Keeping websql data after reload ` +\n `(context=${endpointContextRef.contextName}).`,\n );\n } else {\n Helpers.info(\n `[taon] Dropping all tables and data ` +\n `(context=${endpointContextRef.contextName}).`,\n );\n }\n //#endregion\n //#endregion\n\n //#region TODO this may be usefull but for now\n // 2 separate contexts are fine\n // const shouldStartRemoteHost = endpointContextRef.mode !== 'remote-backend(tcp+udp)';\n // if(shouldStartRemoteHost) {\n // const endpointContextRemoteHostRef = new EndpointContext(config, configFn);\n // await endpointContextRemoteHostRef.init({\n // overrideRemoteHost: endpointContextRef.host,\n // overrideHost: null,\n // });\n // endpointContextRemoteHostRef.initMetadata();\n\n // endpointContextRef.__contextForControllerInstanceAccess = endpointContextRemoteHostRef;\n // }\n //#endregion\n\n //#region run migrations tasks\n if (endpointContextRef.onlyMigrationRun) {\n Helpers.log(\n `[taon] Running only migrations (context=${endpointContextRef.contextName}).`,\n );\n await endpointContextRef.dbMigrations.runAllNotCompletedMigrations();\n } else if (endpointContextRef.onlyMigrationRevertToTimestamp) {\n Helpers.log(\n `[taon] Reverting migrations to timestamp ${\n endpointContextRef.onlyMigrationRevertToTimestamp\n } (context=${endpointContextRef.contextName}).`,\n );\n await endpointContextRef.dbMigrations.revertMigrationToTimestamp(\n endpointContextRef.onlyMigrationRevertToTimestamp,\n );\n } else {\n Helpers.log(\n `[taon] Running all not applied migrations (context=${endpointContextRef.contextName}).`,\n );\n await endpointContextRef.dbMigrations.runAllNotCompletedMigrations();\n }\n //#endregion\n }\n\n resolve(endpointContextRef);\n });\n //#endregion\n });\n },\n /**\n * realtime communication with server\n * TCP(upgrade) socket.io (or ipc) based.\n */\n get realtime() {\n return {\n get client() {\n return endpointContextRef.realtimeClient;\n },\n get server() {\n return endpointContextRef.realtimeServer;\n },\n };\n },\n };\n return res;\n};\n//#endregion\n\nexport type TaonContext = ReturnType<typeof createContext>;","import { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Provider decorator\n */\nexport function TaonMiddleware<T = any>(\n options?: TaonMiddlewareOptions<T>,\n) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.provider,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className || constructor.name);\n };\n}\n\nexport class TaonMiddlewareOptions<T = any> extends DecoratorAbstractOpt {\n // middleware is a singleton for each context\n}","//#region imports\nimport { Helpers, _ } from 'tnp-core/websql';\n\nimport { EndpointContext } from '../endpoint-context';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Symbols } from '../symbols';\n\nimport { BaseCustomRepository } from './base-custom-repository';\nimport type { BaseRepository } from './base-repository';\n//#endregion\n\nexport class BaseInjector {\n //#region proxy dummy function\n /**\n * for proxy purposes\n */\n getOriginalPrototype: () => any;\n /**\n * for proxy purposes\n */\n getOriginalConstructor: () => any;\n //#endregion\n\n //#region class initialization hook\n /**\n * class initialization hook\n * taon after class instace creation\n */\n async _(): Promise<void> {}\n //#endregion\n\n //#region context\n /**\n * @deprecated use ctx instead\n * Current endpoint context\n */\n get __endpoint_context__(): EndpointContext {\n return this[Symbols.ctxInClassOrClassObj] as EndpointContext;\n }\n\n /**\n * get current endpoint context\n */\n get ctx(): EndpointContext {\n return this.__endpoint_context__;\n }\n //#endregion\n\n //#region inject\n\n //#region inject / repo for entity\n /**\n * inject crud repo for entity\n */\n injectRepo<T>(entityForCrud: new (...args: any[]) => T): BaseRepository<T> {\n const repoProxy = this.__inject(void 0, {\n localInstance: true,\n resolveClassFromContext: 'BaseRepository',\n locaInstanceConstructorArgs: [() => entityForCrud],\n });\n return repoProxy as any;\n }\n //#endregion\n\n //#region inject / custom repository\n injectCustomRepository<T extends BaseCustomRepository>(\n cutomRepositoryClass: new (...args: any[]) => T,\n ): T {\n const repoProxy = this.__inject<T>(cutomRepositoryClass, {\n localInstance: true,\n locaInstanceConstructorArgs: [\n () => {\n const classToProcess =\n this.ctx.allClassesInstances[\n ClassHelpers.getName(cutomRepositoryClass)\n ];\n\n return classToProcess.entityClassResolveFn();\n },\n ],\n });\n return repoProxy;\n }\n //#endregion\n\n //#region inject / custom repo\n /**\n * aliast to this.injectRepository()\n */\n injectCustomRepo<T extends BaseCustomRepository>(\n cutomRepositoryClass: new (...args: any[]) => T,\n ): T {\n const repoProxy = this.injectCustomRepository<T>(cutomRepositoryClass);\n return repoProxy;\n }\n //#endregion\n\n //#region inject / controller\n /**\n * example usage:\n * ...\n * exampleController = this.injectController(ExampleController);\n * ...\n */\n injectController<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / ctrl\n /**\n * example usage:\n * ...\n * exampleSubscriber = this.injectSubscriber(ExampleSubscriber)\n * ...\n */\n injectSubscriber<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / ctrl\n /**\n * aliast to .injectController()\n */\n injectCtrl<T>(ctor: new (...args: any[]) => T): T {\n return this.injectController<T>(ctor);\n }\n //#endregion\n\n //#region inject / global provider\n /**\n * inject middleware for context\n */\n injectMiddleware<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / context provider\n /**\n * inject provider for context\n */\n injectProvider<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / __ inject\n /**\n * Inject: Controllers, Providers, Repositories, Services, etc.\n * TODO addd nest js injecting\n */\n private __inject<T>(\n ctor: new (...args: any[]) => T,\n options?: {\n /**\n * (repositories are ONLY/ALWAYS local instances)\n * If true, then local instance will be created\n * controllers, providers can be local or global\n */\n localInstance: boolean;\n /**\n * Name of class that should be resolved from context\n * (in case ctor === undefined)\n */\n resolveClassFromContext?: string;\n /**\n * Args passed to constructor of BaseRepository\n * (for now just first arg is relevant)\n */\n locaInstanceConstructorArgs?: ConstructorParameters<typeof ctor>;\n },\n ): T {\n if (!options) {\n options = {} as any;\n }\n\n const contextClassInstance = this;\n return new Proxy(\n {},\n {\n get: (__, propName) => {\n const contextFromClass: EndpointContext =\n ctor && ctor[Symbols.ctxInClassOrClassObj];\n\n const resultContext: EndpointContext = contextFromClass\n ? contextFromClass\n : this.__endpoint_context__;\n\n if (options.resolveClassFromContext) {\n const resolvedClass = resultContext.getClassFunByClassName(\n options.resolveClassFromContext,\n );\n ctor = resolvedClass as any;\n }\n\n if (resultContext) {\n var instance: T = resultContext.inject(ctor, {\n ...options,\n contextClassInstance,\n parentInstanceThatWillGetInjectedStuff: this,\n });\n if (!instance) {\n throw new Error(\n `Not able to inject \"${\n ClassHelpers.getName(ctor) || ctor.name\n }\" inside ` +\n `property \"${propName?.toString()}\" on class \"${ClassHelpers.getName(\n this,\n )}\".\n\n Please add \"${\n ClassHelpers.getName(ctor) || ctor.name\n }\" to (entites or contorllers or providers or repositories or middlewares)\n\n `,\n );\n }\n\n const result =\n typeof instance[propName] === 'function'\n ? instance[propName].bind(instance)\n : instance[propName];\n\n // console.log(`Accessing injected \"${propName?.toString()}\" from \"${ClassHelpers.getName(ctor) || ctor.name}\"`,result)\n return result;\n }\n //#region @browser\n // return inject(ctor)[propName];\n //#endregion\n },\n set: (__, propName, value) => {\n const contextFromClass = ctor && ctor[Symbols.ctxInClassOrClassObj];\n const resultContext: EndpointContext = contextFromClass\n ? contextFromClass\n : this.__endpoint_context__;\n\n if (options.resolveClassFromContext) {\n const resolvedClass = resultContext.getClassFunByClassName(\n options.resolveClassFromContext,\n );\n ctor = resolvedClass as any;\n }\n\n if (resultContext) {\n var instance: T = resultContext.inject(ctor, {\n ...options,\n contextClassInstance,\n parentInstanceThatWillGetInjectedStuff: this,\n });\n if (!instance) {\n const classNameNotResolved =\n ClassHelpers.getName(ctor) || ctor.name;\n throw new Error(\n `Not able to inject \"${classNameNotResolved}\" inside ` +\n `property \"${propName?.toString()}\" on class \"${ClassHelpers.getName(\n this,\n )}\".\n\n Please add \"${\n ClassHelpers.getName(ctor) || ctor.name\n }\" to (entites or contorllers or providers or repositories or middlewares)\n\n `,\n );\n }\n instance[propName] = value;\n }\n return true;\n },\n },\n ) as T;\n }\n //#endregion\n\n //#endregion\n}","import type { HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport type { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport type express from 'express';\nimport type multer from 'multer';\nimport {\n AxiosTaonHttpHandler,\n TaonClientMiddlewareInterceptOptions,\n TaonServerMiddlewareInterceptOptions,\n} from 'ng2-rest/websql';\nimport { Observable } from 'rxjs';\nimport { CoreModels } from 'tnp-core/websql';\n\nimport { BaseInjector } from './base-injector';\n\n/**\n * TODO\n * - global provider available in all contexts\n * - provider available in own context\n */\nexport abstract class BaseMiddleware extends BaseInjector {}\n\nexport interface TaonAdditionalMiddlewareMethodInfo {\n methodName: string;\n expressPath: string;\n httpRequestType: CoreModels.HttpMethod;\n}\n\nexport interface BaseMiddleware {\n /**\n * Global interceptor for whole context\n * backend request\n */\n interceptServer({\n req,\n res,\n next,\n }: TaonServerMiddlewareInterceptOptions): Promise<void> | void;\n\n /**\n * Global interceptor for whole context\n * client requests\n */\n interceptClient({\n req,\n next,\n }: TaonClientMiddlewareInterceptOptions): Observable<AxiosResponse<any>>;\n\n /**\n * Specyfic controller method interceptor\n */\n interceptServerMethod(\n { req, res, next }: TaonServerMiddlewareInterceptOptions,\n { methodName, expressPath, httpRequestType }: TaonAdditionalMiddlewareMethodInfo,\n ): Promise<void> | void;\n\n /**\n * Controller method frontned interceptor\n * TODO not needed ?\n */\n interceptClientMethod(\n { req, next }: TaonClientMiddlewareInterceptOptions,\n { methodName, expressPath, httpRequestType }: TaonAdditionalMiddlewareMethodInfo,\n ): Observable<AxiosResponse<any>>;\n}","//#region imports\nimport * as crypto from 'crypto';\n\nimport express from 'express';\nimport * as multer from 'multer';\nimport {\n TaonClientMiddlewareInterceptOptions,\n TaonServerMiddlewareInterceptOptions,\n} from 'ng2-rest/websql';\nimport { Observable } from 'rxjs';\nimport { crossPlatformPath, fse, path } from 'tnp-core/websql';\n\nimport { TaonMiddleware } from '../decorators/classes/middleware-decorator';\n\nimport {\n BaseMiddleware,\n TaonAdditionalMiddlewareMethodInfo,\n} from './base-middleware';\n//#endregion\n\n/**\n * Configurable file upload middleware (multer based)\n */\n@TaonMiddleware({\n className: 'BaseFileUploadMiddleware',\n})\nexport class BaseFileUploadMiddleware extends BaseMiddleware {\n async interceptServerMethod(\n { req, res, next }: TaonServerMiddlewareInterceptOptions,\n { methodName, expressPath }: TaonAdditionalMiddlewareMethodInfo,\n ): Promise<void> {\n return this.middleware()(req, res, next);\n }\n\n //#region upload Dir\n uploadDir(): string {\n return crossPlatformPath([this.ctx.cwd, 'uploaded-files']);\n }\n //#endregion\n\n //#region storage\n storage(): multer.StorageEngine {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region upload\n upload(): multer.Multer {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region middleware\n middleware(): express.RequestHandler {\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}","import { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Repository decorator\n */\nexport function TaonRepository(options: TaonRepositoryOptions) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.repository,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className);\n };\n}\n\nexport class TaonRepositoryOptions<T = any> extends DecoratorAbstractOpt {}","//#region imports\nimport { _ } from 'tnp-core/websql';\n\nimport { TaonRepository } from '../decorators/classes/repository-decorator';\n\nimport { BaseInjector } from './base-injector';\n//#endregion\n\n@TaonRepository({ className: 'BaseCustomRepository' })\nexport abstract class BaseCustomRepository extends BaseInjector {}","//#region imports\nimport {\n type DataSource,\n type DeepPartial,\n type DeleteResult,\n type FindManyOptions,\n type FindOneOptions,\n type FindOptionsWhere,\n type InsertResult,\n // ObjectID // TODO why is this not in taon-typeorm,\n type RemoveOptions,\n type Repository,\n type SaveOptions,\n type UpdateResult,\n} from 'taon-typeorm/websql';\nimport type { QueryDeepPartialEntity } from 'taon-typeorm/websql';\nimport type { UpsertOptions } from 'taon-typeorm/websql';\n// import { QueryDeepPartialEntity } from 'taon-typeorm/src';\n// import { UpsertOptions } from 'taon-typeorm/src';\n\nimport type {\n DataSource as DataSourceType,\n QueryRunner,\n SelectQueryBuilder,\n} from 'taon-typeorm/websql';\nimport { EndpointContext } from '../endpoint-context';\nimport { Helpers } from 'tnp-core/websql';\nimport { _ } from 'tnp-core/websql';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { MySqlQuerySource } from 'taon-type-sql/websql';\nimport { TaonRepository } from '../decorators/classes/repository-decorator';\nimport { BaseInjector } from './base-injector';\nimport type { BaseEntity } from './base-entity';\nimport { BaseCustomRepository } from './base-custom-repository';\nimport { Models } from '../models';\n//#endregion\n\nconst INDEX_KEYS_NO_FOR_UPDATE = ['id'];\n\nconst REPOS_CACHE = Symbol('repository cache inside instance');\n\n@TaonRepository({ className: 'BaseRepository' })\nexport abstract class BaseRepository<\n Entity extends { id?: any },\n> extends BaseCustomRepository {\n //#region dummy fields\n // static ids:number = 0;\n // id:number = BaseRepository.ids++;\n //#endregion\n\n //#region constructor & resolve entity\n abstract entityClassResolveFn: () => any;\n constructor(\n // Injected through BaseCrudController\n __entityClassResolveFn: () => any,\n ) {\n super();\n // @ts-ignore\n this.entityClassResolveFn = __entityClassResolveFn;\n }\n //#endregion\n\n //#region db query\n private __dbQuery: MySqlQuerySource;\n\n public get dbQuery(): MySqlQuerySource {\n //#region @websqlFunc\n if (!this.__dbQuery) {\n if (!this.ctx) {\n return; // TODO\n throw new Error(\n `[BaseRepository] Context not inited for class ${ClassHelpers.getName(\n this,\n )}`,\n );\n }\n const connection = this.ctx?.connection;\n if (!connection) {\n throw new Error(\n `[BaseRepository] Database not inited for context ${this.ctx?.contextName}`,\n );\n }\n this.__dbQuery = new MySqlQuerySource(connection);\n }\n return this.__dbQuery;\n //#endregion\n }\n //#endregion\n\n //#region connection\n public get connection(): DataSourceType {\n //#region @websqlFunc\n return this.ctx?.connection;\n //#endregion\n }\n //#endregion\n\n //#region repository\n protected get repository(): Repository<Entity> {\n //#region @websqlFunc\n if (this[REPOS_CACHE]) {\n return this[REPOS_CACHE];\n }\n const repo = this.ctx.repos.get(\n ClassHelpers.getName(this.entityClassResolveFn()),\n ) as Repository<Entity>;\n\n this[REPOS_CACHE] = repo;\n return this[REPOS_CACHE];\n //#endregion\n }\n\n /**\n * target for repository\n */\n public get target(): Function {\n //#region @websqlFunc\n return this?.repository?.target as any;\n //#endregion\n }\n\n /**\n * alias to repository\n */\n protected get repo(): Repository<Entity> {\n //#region @websqlFunc\n return this.repository;\n //#endregion\n }\n\n public get repositoryExists(): boolean {\n //#region @websqlFunc\n return !!this.repository;\n //#endregion\n }\n\n //#endregion\n\n //#region crud operations / typeorm / has id\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(entity: Entity): boolean {\n return this.repo.hasId(entity);\n }\n //#endregion\n\n //#region crud operations / typeorm / get id\n /**\n * Gets entity mixed id.\n */\n getId(entity: Entity): any {\n return this.repo.getId(entity);\n }\n //#endregion\n\n //#region crud operations / typeorm / create & bulk create\n /**\n Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n async save(\n item: Entity,\n options?: SaveOptions & {\n reload: false;\n },\n ): Promise<Entity> {\n //#region @websqlFunc\n // if (!this.repo) {\n // debugger;\n // }\n let model = await this.repo.create(item);\n\n model = await this.repo.save(model, options);\n const { id } = model as any;\n\n model = await this.repo.findOne({\n where: { id } as any,\n });\n\n return model;\n //#endregion\n }\n\n /**\n * alias to save\n * -> it will actuall create new entity in db\n * in oposite to typeorm create method\n */\n /**\n * Creates a new entity instance.\n */\n create(): Entity;\n\n /**\n * Creates new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLikeArray: DeepPartial<Entity>[]): Entity[];\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLike: DeepPartial<Entity>): Entity;\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create(\n plainEntityLikeOrPlainEntityLikes?:\n | DeepPartial<Entity>\n | DeepPartial<Entity>[],\n ): Entity | Entity[] {\n return this.repo.create(plainEntityLikeOrPlainEntityLikes as any);\n }\n\n async bulkSave(\n items: Entity[],\n options?: SaveOptions & {\n reload: false;\n },\n ): Promise<Entity[]> {\n //#region @websqlFunc\n const models = [];\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n // TODO FIX THIS / REFACTOR\n const model = await this.save(item, options);\n models.push(model);\n }\n return models;\n //#endregion\n }\n\n async bulkCreate(\n items: Entity[],\n options?: SaveOptions & {\n reload: false;\n },\n ): Promise<Entity[]> {\n return this.bulkSave(items, options);\n }\n\n //#region old typeorm version\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n // save<T extends DeepPartial<Entity>>(\n // entities: T[],\n // options: SaveOptions & {\n // reload: false;\n // },\n // ): Promise<T[]>;\n // /**\n // * Saves all given entities in the database.\n // * If entities do not exist in the database then inserts, otherwise updates.\n // */\n // save<T extends DeepPartial<Entity>>(\n // entities: T[],\n // options?: SaveOptions,\n // ): Promise<(T & Entity)[]>;\n // /**\n // * Saves a given entity in the database.\n // * If entity does not exist in the database then inserts, otherwise updates.\n // */\n // save<T extends DeepPartial<Entity>>(\n // entity: T,\n // options: SaveOptions & {\n // reload: false;\n // },\n // ): Promise<T>;\n // /**\n // * Saves a given entity in the database.\n // * If entity does not exist in the database then inserts, otherwise updates.\n // */\n // save<T extends DeepPartial<Entity>>(\n // entity: T,\n // options?: SaveOptions,\n // ): Promise<T & Entity> {\n // return this.repo.save(entity, options);\n // }\n //#endregion\n\n //#endregion\n\n //#region crud operations / typeorm / merge\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n merge(mergeIntoEntity: Entity, ...entityLikes: Entity[]): Entity {\n return this.repo.merge(mergeIntoEntity, ...entityLikes);\n }\n //#endregion\n\n //#region crud operations / typeorm / preload\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n preload(entityLike: Entity): Promise<Entity | undefined> {\n return this.repo.preload(entityLike);\n }\n //#endregion\n\n //#region crud operations / typeorm / remove (delete) & bulk remove (delete)\n\n /**\n * Removes a given entities from the database.\n */\n async remove(idOrEntity: number | string | Entity): Promise<Entity> {\n //#region @websqlFunc\n if (_.isObject(idOrEntity)) {\n idOrEntity = (idOrEntity as Entity).id;\n }\n const deletedEntity = await this.repo.findOne({\n where: { id: idOrEntity } as any,\n });\n\n if (!deletedEntity) {\n Helpers.warn(\n `[BaseRepository] Entity \"${ClassHelpers.getName(this.repo.target)}\" ` +\n `with id ${idOrEntity} not found, cannot remove`,\n );\n return;\n }\n\n const idCopy = deletedEntity.id;\n await this.repo.remove(deletedEntity);\n\n deletedEntity.id = idCopy;\n return deletedEntity;\n //#endregion\n }\n\n /**\n * alias to remove\n */\n async delete(idOrEntity: number | string | Partial<Entity>): Promise<Entity> {\n return this.remove(idOrEntity as any);\n }\n\n /**\n * alias to removeById\n */\n async deleteById(id: number | string): Promise<Entity> {\n return this.remove(id);\n }\n async bulkRemove(\n idsOrEntities: (number | string | Entity)[],\n ): Promise<Entity[]> {\n //#region @websqlFunc\n idsOrEntities = idsOrEntities.map(id => {\n return _.isObject(id) ? (id as Entity).id : id;\n });\n\n const models = [];\n for (let index = 0; index < idsOrEntities.length; index++) {\n const id = idsOrEntities[index];\n const model = await this.remove(id);\n models.push(model);\n }\n return models;\n //#endregion\n }\n\n async bulkDelete(ids: (number | string | Entity)[]): Promise<Entity[]> {\n return this.bulkRemove(ids);\n }\n\n //#region old typeorm version\n // /**\n // * Deletes entities by a given criteria.\n // * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n // * Executes fast and efficient DELETE query.\n // * Does not check if entity exist in the database.\n // */\n // delete(\n // criteria:\n // | string\n // | string[]\n // | number\n // | number[]\n // | Date\n // | Date[]\n // | ObjectID\n // | ObjectID[]\n // | FindOptionsWhere<Entity>,\n // ): Promise<DeleteResult> {\n // return this.repo.delete(criteria);\n // }\n\n // /**\n // * Removes a given entities from the database.\n // */\n // remove(entities: Entity[], options?: RemoveOptions): Promise<Entity[]>;\n // /**\n // * Removes a given entity from the database.\n // */\n // remove(entity: Entity, options?: RemoveOptions): Promise<Entity> {\n // return this.repo.remove(entity, options);\n // }\n\n //#endregion\n //#endregion\n\n //#region crud operations / typeorm / soft remove\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends Entity>(\n entities: T[],\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T[]>;\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends Entity>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>;\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends Entity>(\n entity: T,\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T>;\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends Entity>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity> {\n return this.repo.softRemove(entity, options);\n }\n //#endregion\n\n //#region crud operations / typeorm / recover\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends Entity>(\n entities: T[],\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T[]>;\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends Entity>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>;\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends Entity>(\n entity: T,\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T>;\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends Entity>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity> {\n return this.repo.recover(entity, options);\n }\n //#endregion\n\n //#region crud operations / typeorm / insert\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n insert(\n entity: QueryDeepPartialEntity<Entity> | QueryDeepPartialEntity<Entity>[],\n ): Promise<InsertResult> {\n return this.repo.insert(entity);\n }\n //#endregion\n\n //#region crud operations / typeorm / update & build update\n async update(item: Entity) {\n //#region @websqlFunc\n const { id } = item as any;\n return await this.updateById<Entity>(id, item);\n //#endregion\n }\n\n private allowedTypesToUpdate = ['simple-json', 'simple-array', 'json'];\n async updateById<ENTITY = Entity>(\n id: number | string,\n item: Entity,\n ): Promise<ENTITY> {\n //#region @websqlFunc\n const allowedPropsToUpdate = [];\n for (const key in item) {\n const metadataColumn = this.repo.metadata.ownColumns.find(\n c => c.propertyName === key,\n );\n if (\n _.isObject(item) &&\n item.hasOwnProperty(key) &&\n (typeof item[key] !== 'object' ||\n this.allowedTypesToUpdate.includes(metadataColumn?.type as any)) &&\n !_.isUndefined(metadataColumn)\n ) {\n allowedPropsToUpdate.push(key);\n }\n }\n\n for (let i = 0; i < allowedPropsToUpdate.length; i++) {\n const key: string = allowedPropsToUpdate[i];\n if (!INDEX_KEYS_NO_FOR_UPDATE.includes(key.toLowerCase())) {\n // const raw = _.isBoolean(item[key]) || _.isNumber(item[key]) || _.isNull(item[key]); // TODO does this make any sense ?\n const toSet = item[key];\n // const tableName = tableNameFrom(this.entity as any);\n\n await this.repo.update(\n {\n id,\n } as any,\n {\n [key]: toSet,\n } as any,\n );\n // await this.repo.query(\n // `UPDATE '${tableName}' as ${table}\n // SET ${key}=${toSet}\n // WHERE ${table}.id='${id}'\n // `);\n }\n }\n let model = await this.repo.findOne({\n where: { id } as any,\n });\n\n return model as any as ENTITY;\n //#endregion\n }\n async bulkUpdate(items: Entity[]) {\n //#region @websqlFunc\n const models = [];\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const { id } = item as any; // TOOD\n const model = await this.updateById(id, item);\n models.push(model);\n }\n return { models };\n //#endregion\n }\n\n //#region tpeorm update version\n // this version suck and will not return update entity\n // /**\n // * Updates entity partially. Entity can be found by a given conditions.\n // * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n // * Executes fast and efficient UPDATE query.\n // * Does not check if entity exist in the database.\n // */\n // update(\n // criteria:\n // | string\n // | string[]\n // | number\n // | number[]\n // | Date\n // | Date[]\n // | ObjectID\n // | ObjectID[]\n // | FindOptionsWhere<Entity>,\n // partialEntity: QueryDeepPartialEntity<Entity>,\n // ): Promise<UpdateResult> {\n // return this.repo.update(criteria, partialEntity);\n // }\n //#endregion\n\n //#endregion\n\n //#region crud operations / typeorm / upsert\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n upsert(\n entityOrEntities:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>,\n ): Promise<InsertResult> {\n return this.repo.upsert(entityOrEntities, conflictPathsOrOptions);\n }\n //#endregion\n\n //#region crud operations / typeorm / soft delete\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n softDelete(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n // | ObjectID\n // | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.repo.softDelete(criteria);\n }\n //#endregion\n\n //#region crud operations / typeorm / restore\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n restore(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n // | ObjectID\n // | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.repo.restore(criteria);\n }\n //#endregion\n\n //#region crud operations / typeorm / count\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count(options?: FindManyOptions<Entity>): Promise<number> {\n return this.repo.count(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / count by\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n countBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number> {\n return this.repo.countBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find\n /**\n * Finds entities that match given find options.\n */\n find(options?: FindManyOptions<Entity>): Promise<Entity[]> {\n return this.repo.find(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find by\n /**\n * Finds entities that match given find options.\n */\n findBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity[]> {\n return this.repo.findBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find and count\n // async findAndCount(options: { take: number; skip: number }) {\n // const { take, skip } = options;\n // const [result, total] = await this.repo.findAndCount({\n // // where: { name: Like('%' + keyword + '%') },\n // // order: { name: \"DESC\" },\n // take: take,\n // skip: skip,\n // });\n // return { result, total };\n\n // }\n //\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(options?: FindManyOptions<Entity>): Promise<[Entity[], number]> {\n return this.repo.findAndCount(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find and count by\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCountBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<[Entity[], number]> {\n return this.repo.findAndCountBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find by ids\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n findByIds(ids: any[]): Promise<Entity[]> {\n return this.repo.findByIds(ids);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - returns null.\n */\n findOne(options: FindOneOptions<Entity>): Promise<Entity | null> {\n return this.repo.findOne(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one by\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - returns null.\n */\n findOneBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity | null> {\n return this.repo.findOneBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one or fail\n /**\n * Finds first entity that matches given id.\n * If entity was not found in the database - returns null.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n findOneById(\n id: number | string | Date,\n // | ObjectID\n ): Promise<Entity | null> {\n return this.repo.findOneById(id);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one or fail\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - rejects with error.\n */\n findOneOrFail(options: FindOneOptions<Entity>): Promise<Entity> {\n return this.repo.findOneOrFail(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one by or fail\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - rejects with error.\n */\n findOneByOrFail(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity> {\n return this.repo.findOneByOrFail(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / query\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n query(query: string, parameters?: any[]): Promise<any> {\n return this.repo.query(query, parameters);\n }\n //#endregion\n\n //#region crud operations / typeorm / query\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n createQueryBuilder(\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n return this.repo.createQueryBuilder(alias, queryRunner);\n }\n //#endregion\n\n //#region crud operations / typeorm / clear\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n clear(): Promise<void> {\n return this.repo.clear();\n }\n //#endregion\n\n //#region crud operations / typeorm / increment\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n increment(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.repo.increment(conditions, propertyPath, value);\n }\n //#endregion\n\n //#region crud operations / typeorm / decrement\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n decrement(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.repo.decrement(conditions, propertyPath, value);\n }\n //#endregion\n\n //#region crud operations / get all\n /**\n * @deprecated use findAndCount instead\n */\n async getAll() {\n //#region @websqlFunc\n // console.log('repo', this.__repository);\n // console.log(\n // `repo taget name \"${ClassHelpers.getName(this.__repository.target)}\"`,\n // );\n // debugger;\n const totalCount = await this.repo.count();\n const models = await this.repo.find();\n // console.log('models', models);\n // console.log('totalCount', totalCount);\n return { models, totalCount };\n //#endregion\n }\n //#endregion\n\n //#region crud operations / get by id\n async getBy(id: number | string): Promise<Entity> {\n //#region @websqlFunc\n const model = await await this.repo.findOne({\n where: { id } as any,\n });\n\n return model;\n //#endregion\n }\n //#endregion\n}","import { createContext } from '../create-context';\n\nimport { BaseFileUploadMiddleware } from './base-file-upload.middleware';\nimport { BaseRepository } from './base-repository';\n\nconst BaseContext = createContext(() => ({\n contextName: 'BaseContext',\n abstract: true,\n middlewares: {\n BaseFileUploadMiddleware,\n },\n repositories: {\n // @ts-ignore\n BaseRepository,\n },\n}));\n\nexport { BaseContext };","import type { TaonControllerOptions } from '../../config/controller-options';\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\n\n/**\n * Controller decorator\n */\nexport function TaonController<ControllerClass = any>(\n options?: TaonControllerOptions<ControllerClass>,\n) {\n return function (constructor: Function) {\n ClassHelpers.setName(constructor, options?.className);\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n const cfg = ClassHelpers.ensureClassConfig(constructor);\n options = options || ({} as any);\n cfg.className = options.className || constructor.name;\n cfg.path = options.path || '';\n cfg.realtime = options.realtime;\n cfg.middlewares = options.middlewares;\n };\n}","import { Models as ModelsNg2Rest } from 'ng2-rest/websql';\nimport { CoreModels, _ } from 'tnp-core/websql';\n\nimport { BaseMiddleware } from '../../base-classes/base-middleware';\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Models } from '../../models';\nimport { Symbols } from '../../symbols';\n\nconst metaReq = (\n method: Models.Http.Rest.HttpMethod,\n path: string,\n target: Function,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n pathOrOptions: string | TaonHttpDecoratorOptions,\n pathIsGlobal: boolean,\n) => {\n const methodConfig = ClassHelpers.ensureMethodConfig(target, propertyKey);\n\n let options: TaonHttpDecoratorOptions;\n if (typeof pathOrOptions === 'object') {\n options = pathOrOptions;\n pathOrOptions = options.path as any;\n pathIsGlobal = !!options.pathIsGlobal;\n path = options.path;\n } else {\n options = { pathOrOptions, pathIsGlobal } as any;\n }\n\n const { overrideContentType, overrideResponseType, middlewares } = options;\n\n methodConfig.methodName = propertyKey;\n methodConfig.middlewares = middlewares;\n methodConfig.type = method;\n if (!path) {\n let paramsPathConcatedPath = '';\n for (const key in methodConfig.parameters) {\n if (methodConfig.parameters.hasOwnProperty(key)) {\n const element = methodConfig.parameters[key];\n if (\n element.paramType === 'Path' &&\n _.isString(element.paramName) &&\n element.paramName.trim().length > 0\n ) {\n paramsPathConcatedPath += `/${element.paramName}/:${element.paramName}`;\n }\n }\n }\n methodConfig.path = `/${propertyKey}${paramsPathConcatedPath}`;\n } else {\n methodConfig.path = path;\n }\n\n methodConfig.descriptor = descriptor;\n methodConfig.global = pathIsGlobal;\n methodConfig.contentType = overrideContentType;\n methodConfig.responseType = overrideResponseType;\n};\n\nexport type TaonMiddlewareInheritanceObj = {\n [parentMiddlewaresName: string]: typeof BaseMiddleware;\n};\n\nexport type TaonMiddlewareFunction = (options: {\n /**\n * middlewares inherited from parent class\n */\n parentMiddlewares: TaonMiddlewareInheritanceObj;\n /**\n * Get real class name - needed when code is minified\n */\n className: (middlewareClass: Function) => string;\n}) => TaonMiddlewareInheritanceObj;\n\nexport interface TaonHttpDecoratorOptions {\n /**\n * @deprecated don't use in production - keep stuff encapsulated\n * path is global in express app\n * ! BE CAREFUL ! global path IS NOT GLOBAL inside dockerized app\n * (/api/contextName is automatically added to global path in docker)\n */\n path?: string;\n /**\n * ! BE CAREFULL\n * If true, the path will be global\n */\n pathIsGlobal?: boolean;\n overrideContentType?: CoreModels.ContentType;\n overrideResponseType?: ModelsNg2Rest.ResponseTypeAxios;\n middlewares?: TaonMiddlewareFunction;\n}\n\nexport function GET(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'get',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function HEAD(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'head',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function POST(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'post',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function PUT(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'put',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function PATCH(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'patch',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function DELETE(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'delete',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}","import { ClassHelpers } from '../../helpers/class-helpers';\nimport { Models } from '../../models';\nimport { Symbols } from '../../symbols';\n\nfunction metaParam(\n param: Models.Http.Rest.ParamType,\n name: string,\n expire: number,\n defaultValue = undefined,\n target: Function,\n propertyKey: string | symbol,\n parameterIndex: number,\n) {\n const methodCfg = ClassHelpers.ensureMethodConfig(target, propertyKey);\n const nameKey = name ? name : param;\n // const key = name || `${param}_${parameterIndex}`;\n methodCfg.parameters[nameKey] = {\n index: parameterIndex,\n paramName: name,\n paramType: param,\n defaultType: defaultValue,\n expireInSeconds: expire,\n };\n\n // console.log('params updated', methodConfig);\n}\n\nexport function Path(name: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam('Path', name, undefined, {}, target, propertyKey, parameterIndex);\n };\n}\n\nexport function Query(name?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam(\n 'Query',\n name,\n undefined,\n {},\n target,\n propertyKey,\n parameterIndex,\n );\n };\n}\n\nexport function Cookie(name: string, expireInSecond: number = 3600) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam(\n 'Cookie',\n name,\n expireInSecond,\n {},\n target,\n propertyKey,\n parameterIndex,\n );\n };\n}\n\nexport function Header(name?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam(\n 'Header',\n name,\n undefined,\n {},\n target,\n propertyKey,\n parameterIndex,\n );\n };\n}\n\nexport function Body(name?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam('Body', name, undefined, {}, target, propertyKey, parameterIndex);\n };\n}","/* */ \n/* */ \n\nimport { TaonController } from '../decorators/classes/controller-decorator';\nimport { POST } from '../decorators/http/http-methods-decorators';\nimport { Body, Path, Query } from '../decorators/http/http-params-decorators';\nimport type { EndpointContext } from '../endpoint-context';\nimport type { Models } from '../models';\n\nimport { BaseFileUploadMiddleware } from './base-file-upload.middleware';\nimport { BaseInjector } from './base-injector';\n\nexport interface MulterFileUploadResponse {\n ok: boolean;\n originalName: string;\n /**\n * name change to this to avoid confusion with originalname\n * (similar to originalname with added uniq part)\n */\n savedAs: string;\n size: number;\n mimetype: string;\n}\n\n@TaonController<BaseController>({\n className: 'BaseController',\n})\nexport class BaseController<T = any> extends BaseInjector {\n /**\n * Hook that is called when taon app is inited\n * (all contexts are created and inited)\n */\n async afterAllCtxInited(allContexts?: {\n [contextName: string]: EndpointContext;\n }): Promise<void> {}\n\n //#region upload form data to server\n @POST({\n overrideContentType: 'multipart/form-data',\n middlewares: ({ parentMiddlewares }) => ({\n ...parentMiddlewares,\n BaseFileUploadMiddleware,\n }),\n })\n uploadFormDataToServer(\n @Body() formData: FormData,\n ): Models.Http.Response<MulterFileUploadResponse[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region after file upload hook\n /**\n * Hook after file is uploaded\n * through `uploadFormDataToServer` or `uploadLocalFileToServer`\n */\n protected afterFileUploadAction(\n file: MulterFileUploadResponse,\n ): void | Promise<void> {\n // empty\n }\n\n //#region upload local file to server\n async uploadLocalFileToServer(\n absFilePath: string,\n options?: Pick<\n Models.Http.Rest.Ng2RestAxiosRequestConfig,\n 'onUploadProgress'\n >,\n ): Promise<MulterFileUploadResponse[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}","//#region imports\nimport { Helpers, _ } from 'tnp-core/websql';\n\nimport { TaonController } from '../decorators/classes/controller-decorator';\nimport { TaonEntityOptions } from '../decorators/classes/entity-decorator';\nimport {\n GET,\n PUT,\n DELETE,\n POST,\n HEAD,\n PATCH,\n} from '../decorators/http/http-methods-decorators';\nimport { Query, Path, Body } from '../decorators/http/http-params-decorators';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Models } from '../models';\nimport { Symbols } from '../symbols';\nimport { Validators } from '../validators';\n\nimport { BaseController } from './base-controller';\nimport { BaseRepository } from './base-repository';\n//#endregion\n\n/**\n * Please override property entityClassFn with entity class.\n */\n@TaonController({ className: 'BaseCrudController' })\nexport abstract class BaseCrudController<Entity> extends BaseController {\n //#region fields\n protected db: BaseRepository<Entity>;\n\n /**\n * Please provide entity as class propery entityClassFn:\n * @returns class function\n *\n */\n abstract entityClassResolveFn: () => any;\n //#endregion\n\n //#region init\n async _(): Promise<void> {\n if (!_.isFunction(this.entityClassResolveFn)) {\n Helpers.warn(\n `Skipping initing CRUD controller ${ClassHelpers.getName(\n this,\n )} because entityClassResolveFn is not provided.`,\n );\n return;\n }\n\n let entityClassFn = this.entityClassResolveFn();\n this.db = this.injectRepo(entityClassFn);\n\n if (entityClassFn) {\n const configEntity = Reflect.getMetadata(\n Symbols.metadata.options.entity,\n ClassHelpers.getClassFnFromObject(this),\n ) as TaonEntityOptions;\n if (configEntity?.createTable === false) {\n Helpers.warn(\n `Table for entity ${ClassHelpers.getName(\n entityClassFn,\n )} will not be created. Crud will not work properly.`,\n );\n }\n } else {\n Helpers.error(`Entity class not provided for controller ${ClassHelpers.getName(\n this,\n )}.\n\n Please provide entity as class propery entityClassFn:\n\n class ${ClassHelpers.getName(this)} extends BaseCrudController<Entity> {\n // ...\n entityClassResolveFn = ()=> MyEntityClass;\n // ...\n }\n\n `);\n }\n await super._();\n }\n //#endregion\n\n //#region bufferd changes\n @GET(`/:id/property/:property`)\n bufforedChanges(\n @Path(`id`) id: number | string,\n @Path(`property`) property: string,\n @Query('alreadyLength') alreadyLength?: number,\n ): Models.Http.Response<string | any[]> {\n //#region @websqlFunc\n return async (request, response) => {\n const model = await this.db.getBy(id);\n if (model === void 0) {\n return;\n }\n Validators.preventUndefinedModel(model, id);\n let value = model[property];\n let result: any;\n if (_.isString(value) || _.isArray(value)) {\n result = (value as string).slice(alreadyLength);\n }\n\n return result;\n };\n //#endregion\n }\n //#endregion\n\n //#region pagintation\n @GET()\n pagination(\n @Query('pageNumber') pageNumber: number = 1,\n @Query('pageSize') pageSize: number = 10,\n @Query('search') search: string = '',\n ): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async (request, response) => {\n if (this.db.repositoryExists) {\n const query = {\n page: pageNumber,\n take: pageSize,\n keyword: search,\n };\n // console.log({\n // query\n // })\n\n const take = query.take || 10;\n const page = query.page || 1;\n const skip = (page - 1) * take;\n const keyword = query.keyword || '';\n\n const [result, total] = await this.db.findAndCount({\n // where: { name: Like('%' + keyword + '%') },\n // order: { name: \"DESC\" },\n take: take,\n skip: skip,\n });\n\n response?.setHeader(Symbols.old.X_TOTAL_COUNT, total);\n // const lastPage = Math.ceil(total / take);\n // const nextPage = page + 1 > lastPage ? null : page + 1;\n // const prevPage = page - 1 < 1 ? null : page - 1;\n\n // console.log({\n // result,\n // total\n // })\n\n return result as Entity[];\n }\n return [];\n };\n //#endregion\n }\n //#endregion\n\n //#region get all\n @GET()\n getAll(): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async (request, response) => {\n if (this.db.repositoryExists) {\n const { models, totalCount } = await this.db.getAll();\n response?.setHeader(Symbols.old.X_TOTAL_COUNT, totalCount);\n return models;\n }\n return [];\n };\n //#endregion\n }\n //#endregion\n\n //#region get by id\n @GET(`/:id`)\n getBy(@Path(`id`) id: number | string): Models.Http.Response<Entity> {\n //#region @websqlFunc\n return async () => {\n const model = await this.db.getBy(id);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region update by id\n @PUT(`/:id`)\n updateById(\n @Path(`id`) id: number | string,\n @Body() item: Entity,\n ): Models.Http.Response<Entity> {\n //#region @websqlFunc\n\n return async () => {\n const model = await this.db.updateById<Entity>(id, item as any);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region patch by id\n @PATCH(`/:id`)\n patchById(\n @Path(`id`) id: number | string,\n @Body() item: Entity,\n ): Models.Http.Response<Entity> {\n //#region @websqlFunc\n\n return async () => {\n const model = await this.db.updateById<Entity>(id, item as any);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region bulk update\n @PUT()\n bulkUpdate(@Body() items: Entity[]): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async () => {\n if (!Array.isArray(items) || items?.length === 0) {\n return [];\n }\n const { models } = await this.db.bulkUpdate(items);\n return models;\n };\n //#endregion\n }\n //#endregion\n\n //#region delete by id\n @DELETE(`/:id`)\n deleteById(@Path(`id`) id: number): Models.Http.Response<Entity> {\n //#region @websqlFunc\n return async () => {\n const model = await this.db.deleteById(id);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region bulk delete\n @DELETE(`/bulkDelete/:ids`)\n bulkDelete(\n @Path(`ids`) ids: (number | string)[],\n ): Models.Http.Response<(number | string | Entity)[]> {\n //#region @websqlFunc\n return async () => {\n const models = await this.db.bulkDelete(ids);\n return models;\n };\n //#endregion\n }\n //#endregion\n\n //#region create\n @POST()\n create(@Body() item: Entity): Models.Http.Response<Entity> {\n //#region @websqlFunc\n return async () => {\n const model = await this.db.create(item as any);\n return model as Entity;\n };\n //#endregion\n }\n //#endregion\n\n //#region bulk create\n @POST()\n bulkCreate(@Body() items: Entity): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async () => {\n const models = await this.db.bulkCreate(items as any);\n return models as Entity[];\n };\n //#endregion\n }\n //#endregion\n}","import { MigrationInterface, QueryRunner } from 'taon-typeorm/websql';\nimport { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../helpers/class-helpers';\n\nimport { BaseInjector } from './base-injector';\n\nexport class BaseMigration extends BaseInjector implements MigrationInterface {\n /**\n * by default is READY to run\n */\n public isReadyToRun(): boolean {\n return true;\n }\n\n getDescription(): string {\n return _.startCase(ClassHelpers.getName(this));\n }\n\n async up(queryRunner: QueryRunner): Promise<any> {\n console.log(`[BaseMigration] Running migration UP \"${ClassHelpers.getName(this)}\"`);\n }\n async down(queryRunner: QueryRunner): Promise<any> {\n console.log(`[BaseMigration] Running migration DOWN \"${ClassHelpers.getName(this)}\"`);\n }\n}","import { BaseInjector } from './base-injector';\n\n/**\n * TODO\n * - global provider available in all contexts\n * - provider available in own context\n */\nexport class BaseProvider extends BaseInjector {}","import { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Subscriber decorator\n */\nexport function TaonSubscriber(options: TaonSubscriberOptions) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.subscriber,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className);\n } as any;\n}\n\nexport class TaonSubscriberOptions<T = any> extends DecoratorAbstractOpt {\n allowedEvents?: (keyof T)[];\n}","import {\n EntitySubscriberInterface,\n RecoverEvent,\n SoftRemoveEvent,\n InsertEvent,\n TransactionStartEvent,\n TransactionCommitEvent,\n TransactionRollbackEvent,\n RemoveEvent,\n UpdateEvent,\n} from 'taon-typeorm/websql';\nimport { BaseInjector } from './base-injector';\nimport { TaonSubscriber } from '../decorators/classes/subscriber-decorator';\nimport { _ } from 'tnp-core/websql';\n\n@TaonSubscriber({\n className: 'BaseSubscriberForEntity',\n})\nexport abstract class BaseSubscriberForEntity<Entity = any>\n extends BaseInjector\n implements EntitySubscriberInterface\n{\n abstract listenTo(): new (...args) => Entity;\n\n /**\n * Called after entity is loaded.\n */\n afterLoad(entity: any) {\n this.ctx.logDb &&\n console.log(`AFTER ENTITY LOADED: `, entity);\n }\n\n /**\n * Called before query execution.\n */\n beforeQuery(event: any) {\n // BeforeQueryEvent<any>\n this.ctx.logDb &&\n console.log(`BEFORE QUERY: `, event.query);\n }\n\n /**\n * Called after query execution.\n */\n afterQuery(event: any) {\n // AfterQueryEvent<any>\n this.ctx.logDb &&\n console.log(`AFTER QUERY: `, event.query);\n }\n\n /**\n * Called before entity insertion.\n */\n beforeInsert(event: InsertEvent<any>) {\n this.ctx.logDb &&\n console.log(`BEFORE ENTITY INSERTED: `, event.entity);\n }\n\n /**\n * Called after entity insertion.\n */\n afterInsert(event: InsertEvent<any>) {\n this.ctx.logDb &&\n console.log(`AFTER ENTITY INSERTED: `, event.entity);\n }\n\n /**\n * Called before entity update.\n */\n beforeUpdate(event: UpdateEvent<any>) {\n this.ctx.logDb &&\n console.log(`BEFORE ENTITY UPDATED: `, event.entity);\n }\n\n /**\n * Called after entity update.\n */\n afterUpdate(event: UpdateEvent<any>) {\n this.ctx.logDb &&\n console.log(`AFTER ENTITY UPDATED: `, event.entity);\n }\n\n /**\n * Called before entity removal.\n */\n beforeRemove(event: RemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `BEFORE ENTITY WITH ID ${event.entityId} REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called after entity removal.\n */\n afterRemove(event: RemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `AFTER ENTITY WITH ID ${event.entityId} REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called before entity removal.\n */\n beforeSoftRemove(event: SoftRemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `BEFORE ENTITY WITH ID ${event.entityId} SOFT REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called after entity removal.\n */\n afterSoftRemove(event: SoftRemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `AFTER ENTITY WITH ID ${event.entityId} SOFT REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called before entity recovery.\n */\n beforeRecover(event: RecoverEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `BEFORE ENTITY WITH ID ${event.entityId} RECOVERED: `,\n event.entity,\n );\n }\n\n /**\n * Called after entity recovery.\n */\n afterRecover(event: RecoverEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `AFTER ENTITY WITH ID ${event.entityId} RECOVERED: `,\n event.entity,\n );\n }\n\n /**\n * Called before transaction start.\n */\n beforeTransactionStart(event: TransactionStartEvent) {\n this.ctx.logDb &&\n console.log(`BEFORE TRANSACTION STARTED: `, event);\n }\n\n /**\n * Called after transaction start.\n */\n afterTransactionStart(event: TransactionStartEvent) {\n this.ctx.logDb &&\n console.log(`AFTER TRANSACTION STARTED: `, event);\n }\n\n /**\n * Called before transaction commit.\n */\n beforeTransactionCommit(event: TransactionCommitEvent) {\n this.ctx.logDb &&\n console.log(`BEFORE TRANSACTION COMMITTED: `, event);\n }\n\n /**\n * Called after transaction commit.\n */\n afterTransactionCommit(event: TransactionCommitEvent) {\n this.ctx.logDb &&\n console.log(`AFTER TRANSACTION COMMITTED: `, event);\n }\n\n /**\n * Called before transaction rollback.\n */\n beforeTransactionRollback(event: TransactionRollbackEvent) {\n this.ctx.logDb &&\n console.log(`BEFORE TRANSACTION ROLLBACK: `, event);\n }\n\n /**\n * Called after transaction rollback.\n */\n afterTransactionRollback(event: TransactionRollbackEvent) {\n this.ctx.logDb &&\n console.log(`AFTER TRANSACTION ROLLBACK: `, event);\n }\n}","import * as abstractEntity from './base-abstract-entity';\nimport * as baseService from './base-angular-service';\nimport * as baseClass from './base-class';\nimport * as baseContext from './base-context';\nimport * as controller from './base-controller';\nimport * as crudController from './base-crud-controller';\nimport * as customRepository from './base-custom-repository';\nimport * as entity from './base-entity';\nimport * as baseMiddleware from './base-middleware';\nimport * as baseMigration from './base-migration';\nimport * as provider from './base-provider';\nimport * as repository from './base-repository';\nimport * as baseSubscriberEntity from './base-subscriber-for-entity';\nexport namespace Base {\n export import Controller = controller.BaseController;\n export import CrudController = crudController.BaseCrudController;\n export import Entity = entity.BaseEntity;\n export import AbstractEntity = abstractEntity.BaseAbstractEntity;\n export import AbstractEntityOmitKeys = abstractEntity.AbstractEntityOmitKeys;\n export import Provider = provider.BaseProvider;\n export import Class = baseClass.BaseClass;\n export import Repository = repository.BaseRepository;\n export import CustomRepository = customRepository.BaseCustomRepository;\n export import SubscriberForEntity = baseSubscriberEntity.BaseSubscriberForEntity;\n export import Migration = baseMigration.BaseMigration;\n export import Middleware = baseMiddleware.BaseMiddleware;\n export import AngularService = baseService.BaseAngularsService;\n export const Context = baseContext.BaseContext;\n}","import { Mapping } from 'ng2-rest/websql';\nimport { Entity as TypeormEntity, Tree } from 'taon-typeorm/websql'; // @websql\nimport { _ } from 'tnp-core/websql';\nimport { CLASS } from 'typescript-class-helpers/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Entity decorator\n */\nexport function TaonEntity<T = any>(options?: TaonEntityOptions<T>) {\n return function (constructor: Function) {\n options = options || ({} as any);\n options.uniqueKeyProp = options.uniqueKeyProp || ('id' as any);\n ClassHelpers.setName(constructor, options?.className);\n\n Mapping.DefaultModelWithMapping<T>(\n options?.defaultModelValues || {},\n _.merge(\n options?.defaultModelMapping || {},\n (options?.defaultModelMappingDeep || {}) as any,\n ),\n )(constructor);\n\n // TODO when entit metadata generator read use this\n Mapping.DefaultModelWithMapping<T>(void 0, {})(constructor);\n\n Reflect.defineMetadata(\n Symbols.metadata.options.entity,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n //#region @websql\n TypeormEntity(options?.className)(constructor);\n //#endregion\n CLASS.setName(constructor, options?.className); // TODO QUICK_FIX for ng2-rest\n };\n}\n\nexport class TaonEntityOptions<T = any> extends DecoratorAbstractOpt {\n /**\n * default unique property is \"id\"\n * for your entity it may be something else\n */\n uniqueKeyProp?: string;\n createTable?: boolean;\n defaultModelValues?: Mapping.ModelValue<T>;\n defaultModelMapping?: Mapping.Mapping<T>;\n defaultModelMappingDeep?: { [lodashPathes: string]: string | [string] };\n}","import { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Models } from '../../models';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Migration decorator\n */\nexport function TaonMigration(options: TaonMigrationOptions) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.migration,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className);\n } as any;\n}\n\nexport class TaonMigrationOptions<T = any> extends DecoratorAbstractOpt {}","import { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Provider decorator\n */\nexport function TaonProvider<T = any>(\n options?: TaonProviderOptions<T>,\n) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.provider,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className || constructor.name);\n };\n}\n\nexport class TaonProviderOptions<T = any> extends DecoratorAbstractOpt {\n // providers is a singleton for each context\n}","import * as methods from './http-methods-decorators';\nimport * as params from './http-params-decorators';\nimport { Models } from 'ng2-rest/websql';\n\nexport namespace Http {\n export import GET = methods.GET;\n export import POST = methods.POST;\n export import PUT = methods.PUT;\n export import DELETE = methods.DELETE;\n export import PATCH = methods.PATCH;\n export import HEAD = methods.HEAD;\n export import Response = Models.HttpResponse;\n export namespace Param {\n export import Query = params.Query;\n export import Path = params.Path;\n export import Body = params.Body;\n export import Cookie = params.Cookie;\n export import Header = params.Header;\n }\n}","import 'reflect-metadata'; // TODO this is needed for my decorators to work\nimport { NgZone } from '@angular/core'; // @browser\nimport * as coreHelpers from 'tnp-core/websql';\n\nimport * as base from './base-classes/base';\nimport * as createContextFn from './create-context';\nimport * as controllerDecorator from './decorators/classes/controller-decorator';\nimport * as entityDecorator from './decorators/classes/entity-decorator';\nimport * as middlewareDecorator from './decorators/classes/middleware-decorator';\nimport * as migrationDecorator from './decorators/classes/migration-decorator';\nimport * as providerDecorator from './decorators/classes/provider-decorator';\nimport * as repositoryDecorator from './decorators/classes/repository-decorator';\nimport * as subscriberDecorator from './decorators/classes/subscriber-decorator';\nimport * as http from './decorators/http/http-decorators';\nimport * as endpointContext from './endpoint-context';\nimport * as getResponse from './get-response-value';\nimport * as injectFn from './inject';\nimport * as models from './models';\nimport * as orm from './orm';\nimport * as allSymbols from './symbols';\n\nexport * from './ui';\n\nexport { EndpointContext } from './endpoint-context';\nexport { BaseRepository } from './base-classes/base-repository';\nexport { BaseCustomRepository } from './base-classes/base-custom-repository';\nexport { BaseController } from './base-classes/base-controller';\nexport { BaseProvider } from './base-classes/base-provider';\nexport { BaseEntity } from './base-classes/base-entity';\nexport { BaseContext } from './base-classes/base-context';\nexport { BaseMigration } from './base-classes/base-migration';\nexport { TaonAdditionalMiddlewareMethodInfo } from './base-classes/base-middleware';\nexport { createContext, TaonContext } from './create-context';\nexport { inject } from './inject';\nexport { Models } from './models';\nexport { BaseFileUploadMiddleware } from './base-classes/base-file-upload.middleware';\nexport * from './constants';\nexport { MulterFileUploadResponse } from './base-classes/base-controller';\nexport { ClassHelpers } from './helpers/class-helpers';\nexport type {\n TaonClientMiddlewareInterceptOptions,\n TaonServerMiddlewareInterceptOptions,\n} from 'ng2-rest/websql';\n// TODO export all things\n\nexport namespace Taon {\n export import Response = models.Models.Http.Response;\n export import Http = http.Http;\n export import Base = base.Base;\n export import Orm = orm.Orm;\n export import StartParams = models.Models.StartParams;\n export const getResponseValue = getResponse.getResponseValue;\n\n //#region class decorators\n export import Controller = controllerDecorator.TaonController;\n export import Entity = entityDecorator.TaonEntity;\n export import Provider = providerDecorator.TaonProvider;\n export import Repository = repositoryDecorator.TaonRepository;\n export import Subscriber = subscriberDecorator.TaonSubscriber;\n export import Migration = migrationDecorator.TaonMigration;\n export import Middleware = middlewareDecorator.TaonMiddleware;\n //#endregion\n //#region aliases to helpers\n export const isBrowser = coreHelpers.Helpers.isBrowser;\n export const isNode = coreHelpers.Helpers.isNode;\n export const isWebSQL = coreHelpers.Helpers.isWebSQL;\n export const isElectron = coreHelpers.Helpers.isElectron;\n //#endregion\n export const createContext = createContextFn.createContext;\n export const createContextTemplate = createContextFn.createContextTemplate;\n\n export const inject = injectFn.inject;\n\n //#region @browser\n export const initNgZone = (ngZone: NgZone) => {\n endpointContext.EndpointContext.initNgZone(ngZone);\n };\n //#endregion\n\n export const symbols = allSymbols.Symbols;\n\n /**\n * @deprecated\n * use createContext instead\n */\n export const init = async (options: {\n host: string;\n entities: Function[];\n controllers: Function[];\n }) => {\n const BaseContext = (await import('./base-classes/base-context'))\n .BaseContext;\n const context = createContext(() => ({\n appId: 'default-app-not-used-anymore',\n contextName: 'default',\n host: options.host,\n contexts: { BaseContext },\n database: true,\n entities: Array.from(options.entities) as any,\n controllers: Array.from(options.controllers) as any,\n }));\n\n await context.initialize();\n return context;\n };\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["this","EntityDecorator","inject","taonInject","ModelsNg2Rest","TypeormEntity","controller.BaseController","crudController.BaseCrudController","entity.BaseEntity","abstractEntity.BaseAbstractEntity","provider.BaseProvider","baseClass.BaseClass","repository.BaseRepository","customRepository.BaseCustomRepository","baseSubscriberEntity.BaseSubscriberForEntity","baseMigration.BaseMigration","baseMiddleware.BaseMiddleware","baseService.BaseAngularsService","baseContext.BaseContext","methods.GET","methods.POST","methods.PUT","methods.DELETE","methods.PATCH","methods.HEAD","Models","params.Query","params.Path","params.Body","params.Cookie","params.Header","http.Http","base.Base","orm.Orm","getResponse.getResponseValue","controllerDecorator.TaonController","entityDecorator.TaonEntity","providerDecorator.TaonProvider","repositoryDecorator.TaonRepository","subscriberDecorator.TaonSubscriber","migrationDecorator.TaonMigration","middlewareDecorator.TaonMiddleware","createContextFn.createContext","createContextFn.createContextTemplate","injectFn.inject","endpointContext.EndpointContext","allSymbols.Symbols"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"taon.mjs","sources":["../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/orm.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/decorator-abstract-opt.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/config/controller-options.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/config/controller-config.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/symbols.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/validators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/helpers/class-helpers.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/helpers/clone-obj.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-class.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-entity.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-abstract-entity.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/constants.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/inject.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-angular-service.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/models.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/context-db-migrations.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/dependency-injection/di-container.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/get-response-value.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/helpers/taon-helpers.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-subs-manager.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-client.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-server.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy-ipc.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy-mock.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-strategy/realtime-strategy-socket-io.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/realtime/realtime-core.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/ui/taon-admin-mode-configuration/taon-admin.service.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/endpoint-context.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/endpoint-context-storage.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/create-context.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/middleware-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-injector.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-middleware.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-file-upload.middleware.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/repository-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-custom-repository.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-repository.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-context.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/controller-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/http/http-methods-decorators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/http/http-params-decorators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-controller.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-crud-controller.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-migration.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-provider.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/subscriber-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base-subscriber-for-entity.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/base-classes/base.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/entity-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/migration-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/classes/provider-decorator.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/decorators/http/http-decorators.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/lib/index.ts","../../../tmp-libs-for-dist-websql/taon/projects/taon/src/taon.ts"],"sourcesContent":["//#region @websql\nimport * as tsorm from 'taon-typeorm/websql';\n//#endregion\nimport { _ } from 'tnp-core/websql';\n\n//#region orm\nexport namespace Orm {\n //#region @websql\n export const Repository = tsorm.Repository;\n export import Connection = tsorm.Connection;\n export namespace ListenEvent {\n export import AfterInsert = tsorm.AfterInsert;\n export import AfterLoad = tsorm.AfterLoad;\n export import AfterRecover = tsorm.AfterRecover;\n export import AfterRemove = tsorm.AfterRemove;\n export import AfterSoftRemove = tsorm.AfterSoftRemove;\n export import AfterUpdate = tsorm.AfterUpdate;\n export import BeforeInsert = tsorm.BeforeInsert;\n export import BeforeRecover = tsorm.BeforeRecover;\n export import BeforeRemove = tsorm.BeforeRemove;\n export import BeforeSoftRemove = tsorm.BeforeSoftRemove;\n export import BeforeUpdate = tsorm.BeforeUpdate;\n }\n\n export namespace Tree {\n export import Children = tsorm.TreeChildren;\n export import Parent = tsorm.TreeParent;\n }\n export namespace Column {\n export import Generated = tsorm.PrimaryGeneratedColumn;\n export import Primary = tsorm.PrimaryColumn;\n export import Index = tsorm.Index;\n export import CreateDate = tsorm.CreateDateColumn;\n export import UpdateDate = tsorm.UpdateDateColumn;\n export import DeleteDate = tsorm.DeleteDateColumn;\n export import Custom = tsorm.Column;\n\n /**\n * 100 default characters varchar\n */\n export const String = <T = string>(defaultValue: T = null, length = 100) =>\n tsorm.Column({\n type: 'varchar',\n length,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 100 characters varchar\n */\n export const String100 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 100,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 100 characters varchar\n */\n export const String45 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 45,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 500 characters varchar\n */\n export const String500 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 500,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n /**\n * 200 characters varchar\n */\n export const String200 = <T = string>(defaultValue: T = null) =>\n tsorm.Column({\n type: 'varchar',\n length: 200,\n nullable: _.isNil(defaultValue),\n default: defaultValue,\n });\n\n export const Number = () => tsorm.Column({ type: 'int', nullable: true });\n\n export const DecimalNumber = () =>\n tsorm.Column({ type: 'float', nullable: true });\n\n export const SimpleJson = () =>\n tsorm.Column({ type: 'simple-json', nullable: true });\n\n export const Boolean = (defaultValue: boolean | null) =>\n tsorm.Column({ type: 'boolean', nullable: true, default: defaultValue });\n\n export const DateTIme = (defaultValue: boolean | null = null) =>\n tsorm.Column({ type: 'datetime', nullable: true, default: defaultValue });\n\n // TODO has limitation => comma in name\n // export const SimpleArray = () => tsorm.Column({ type: 'simple-array', nullable: true });\n export import Version = tsorm.VersionColumn;\n export import Virtual = tsorm.VirtualColumn;\n }\n\n export namespace Join {\n export import Table = tsorm.JoinTable;\n export import Column = tsorm.JoinColumn;\n }\n export namespace Relation {\n export import OneToMany = tsorm.OneToMany;\n export import OneToOne = tsorm.OneToOne;\n export import ManyToMany = tsorm.ManyToMany;\n export import ManyToOne = tsorm.ManyToOne;\n }\n //#endregion\n}\n\n//#endregion\n","import { BaseClass } from '../base-classes/base-class';\nexport class DecoratorAbstractOpt {\n declare className: string;\n}\n","import { DecoratorAbstractOpt } from '../decorators/decorator-abstract-opt';\nimport type { TaonMiddlewareFunction } from '../decorators/http/http-methods-decorators';\n\nexport class TaonControllerOptions<\n ControllerClass = any,\n> extends DecoratorAbstractOpt {\n /**\n * typeorm realtime subscribtion // TODO disabled for now, does not make sense ?s\n */\n declare realtime?: boolean;\n /**\n * override default path for controller api\n */\n declare path?: string;\n /**\n * Middlewares to be applied to all methods in the controller\n */\n declare middlewares?: TaonMiddlewareFunction;\n}\n","// import type { BaseMiddleware } from '../base-classes/base-middleware';\nimport { TaonMiddlewareInheritanceObj } from '../decorators/http/http-methods-decorators';\n// import { cloneObj } from '../helpers/clone-obj';\n\nimport { TaonControllerOptions } from './controller-options';\nimport { MethodConfig } from './method-config';\n// import { ParamConfig } from './param-config';\n\nexport class ControllerConfig extends TaonControllerOptions {\n declare methods: { [methodName: string]: Partial<MethodConfig> };\n /**\n * Calculated path from parents controllers\n */\n declare calculatedPath?: string;\n /**\n * a way to transform entity before sending to browser\n */\n declare browserTransformFn?: (entity: any) => any;\n /**\n * Calculated middlewares object from parents controllers\n */\n declare calculatedMiddlewaresControllerObj?: TaonMiddlewareInheritanceObj;\n\n // ! CLONING WILL CONE DESCRIPTOR OF METHOD AND I NEED IT!\n // public clone(override?: Partial<ControllerConfig>): ControllerConfig {\n // return cloneObj<ControllerConfig>(override, ControllerConfig);\n // }\n}\n\nexport const controllerConfigFrom = (\n partial: Partial<ControllerConfig>,\n): ControllerConfig => {\n const newObj: ControllerConfig = partial || ({} as any);\n newObj.methods = newObj.methods || {};\n for (const methodName in newObj.methods) {\n if (newObj.methods.hasOwnProperty(methodName)) {\n // newObj.methods[methodName] = new MethodConfig().clone(\n // newObj.methods[methodName],\n // );\n\n newObj.methods[methodName] = newObj.methods[methodName] || {};\n\n const params =\n (newObj.methods[methodName] as MethodConfig).parameters || {};\n (newObj.methods[methodName] as MethodConfig).parameters = params\n ? params\n : {};\n\n for (const paramName in params) {\n if (params.hasOwnProperty(paramName)) {\n params[paramName] = params[paramName] || {};\n // params[paramName] = new ParamConfig().clone(params[paramName]);\n }\n }\n }\n }\n return newObj;\n};\n","import { OrignalClassKey } from 'taon-typeorm/websql';\nimport { _ } from 'tnp-core/websql';\nimport { SYMBOL } from 'typescript-class-helpers/websql';\n\nexport namespace Symbols {\n export const ctxInClassOrClassObj = Symbol();\n export const classNameStaticProperty: string = SYMBOL.ClassNameStaticProperty;\n export const fullClassNameStaticProperty: string = `$$fullclassName$$`;\n export const orignalClass: string = OrignalClassKey;\n export const orignalClassClonesObj: string = `$$originalClassClonesObj$$`;\n export const classMethodsNames: string = `$$classMethodsNames$$`;\n\n /**\n * for backendSocket.in(ROOM_NAME).emit(EVENT)\n *\n * Room names are uniqe..\n * here I am limiting number of event for clients.\n */\n class Realtime {\n NAMESPACE(contextName: string) {\n return `${contextName}-taonRealtimeNsp`;\n }\n TABLE_CHANGE(contextName: string, tableName: string) {\n return `${contextName}:listentablename${tableName}`;\n }\n readonly KEYroomSubscribe = `roomSubscribe`;\n readonly KEYroomUnsubscribe = `roomUnsubscribe`;\n\n // /**\n // * TODO use it or not?\n // * @deprecated\n // */\n // ROOM_NAME_SUBSCRIBER_EVENT(\n // contextName: string,\n // className: string,\n // propertyName: string,\n // ) {\n // return `${contextName}:room${_.camelCase(className)}${propertyName}`.toLowerCase();\n // }\n\n //#region custom events in rooms\n ROOM_NAME_CUSTOM(contextName: string, customEvent: string) {\n return `${contextName}:CustomRoomEvent${customEvent}`;\n }\n\n ROOM_SUBSCRIBE_CUSTOM(contextName: string) {\n return `${contextName}:${this.KEYroomSubscribe}CustomRoomEvent`;\n }\n ROOM_UNSUBSCRIBE_CUSTOM(contextName: string) {\n return `${contextName}:${this.KEYroomUnsubscribe}CustomRoomEvent`;\n }\n //#endregion\n\n //#region entity events\n ROOM_NAME_UPDATE_ENTITY(\n contextName: string,\n className: string,\n entityId: number | string,\n ) {\n return `${contextName}:room${_.camelCase(className)}${entityId}`.toLowerCase();\n }\n ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomSubscribe}EntityEvents`;\n }\n\n ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomUnsubscribe}EntityEvents`;\n }\n //#endregion\n\n //#region entity property events\n ROOM_NAME_UPDATE_ENTITY_PROPERTY(\n contextName: string,\n className: string,\n property: string,\n entityId: number | string,\n ) {\n return `${contextName}:room${_.camelCase(className)}${_.camelCase(property)}${entityId}`.toLowerCase();\n }\n\n ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomSubscribe}EntityPropertyEvents`;\n }\n\n ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(contextName: string) {\n return `${contextName}:${this.KEYroomUnsubscribe}EntityPropertyEvents`;\n }\n //#endregion\n }\n\n export const REALTIME = new Realtime();\n\n\n export const metadata = {\n className: `class:realname`,\n options: {\n controller: `controller:options`,\n entity: `entity:options`,\n repository: `repository:options`,\n provider: `provider:options`,\n subscriber: `subscriber:options`,\n migration: `migration:options`,\n },\n };\n\n export const old = {\n HAS_TABLE_IN_DB: Symbol(),\n MDC_KEY: `modeldataconfig`,\n WEBSQL_REST_PROGRESS_FUN: Symbol(),\n WEBSQL_REST_PROGRESS_FUN_START: Symbol(),\n WEBSQL_REST_PROGRESS_FUN_DONE: Symbol(),\n WEBSQL_REST_PROGRESS_TIMEOUT: Symbol(),\n\n X_TOTAL_COUNT: `x-total-count`,\n CIRCURAL_OBJECTS_MAP_BODY: `circuralmapbody`,\n CIRCURAL_OBJECTS_MAP_QUERY_PARAM: `circuralmapbody`,\n MAPPING_CONFIG_HEADER: `mappingheader`,\n MAPPING_CONFIG_HEADER_BODY_PARAMS: `mhbodyparams`,\n MAPPING_CONFIG_HEADER_QUERY_PARAMS: `mhqueryparams`,\n ENDPOINT_META_CONFIG: `ng2_rest_endpoint_config`,\n CLASS_DECORATOR_CONTEXT: `$$ng2_rest_class_context`,\n SOCKET_MSG: `socketmessageng2rest`,\n ANGULAR: {\n INPUT_NAMES: Symbol(),\n },\n ERROR_MESSAGES: {\n CLASS_NAME_MATCH: `Please check if your \"class name\" matches @Controller( className ) or @Entity( className )`,\n },\n };\n}\n","import { _ } from 'tnp-core/websql';\n\nimport { MethodConfig } from './config/method-config';\nimport { Models } from './models';\n\nexport namespace Validators {\n //#region vlidate class name\n export const classNameVlidation = (className, target: Function) => {\n setTimeout(() => {\n // console.log(`check after timeout ${className} , production mode: ${FrameworkContext.isProductionMode}`)\n if (_.isUndefined(className)) {\n throw `[Taon]\n Please provide \"className\" property for each Controller and Entity:\n\n @Taon.Controller({ className: 'MyExampleCtrl' })\n class MyExampleCtrl {\n ...\n }\n\n @Taon.Entity({ className: 'MyExampleEntity' })\n class MyExampleEntity {\n ...\n }\n\n Notice that minified javascript code does not preserve\n Functions/Classes names -this is only solution to preserve classes names.\n\n `;\n }\n });\n\n return _.isUndefined(className) ? target.name : className;\n };\n //#endregion\n\n //#region validate method config\n export const checkIfMethodsWithReponseTYpeAlowed = (\n methods: MethodConfig[],\n current: MethodConfig,\n ) => {\n const defaultResponseType = 'text or JSON';\n if (!current.responseType) {\n return;\n }\n for (let index = 0; index < methods.length; index++) {\n const m = methods[index];\n if (m.path === current.path && m.responseType !== current.responseType) {\n throw new Error(`\n [taon] you can have 2 methods with same path but differetn reponseType-s\n\n ${m.methodName}( ... path: ${m.path} ) -> responseType: ${m.responseType || defaultResponseType}\n ${current.methodName}( ... path: ${current.path} ) -> responseType: ${current.responseType}\n\n Please change path name on of the methods.\n\n `);\n }\n }\n };\n //#endregion\n\n //#region validate class functions\n // TODO\n export const validateClassFunctions = (\n controllers: any[],\n entities: any[],\n proviers: any[],\n repositories: any[],\n ) => {\n if (\n _.isArray(controllers) &&\n controllers.filter(f => !_.isFunction(f)).length > 0\n ) {\n console.error('controllers', controllers);\n throw `\n\n Incorect value for property \"controllers\" inside Taon.Init(...)\n\n `;\n }\n\n if (\n _.isArray(entities) &&\n entities.filter(f => !_.isFunction(f)).length > 0\n ) {\n console.error('entites', entities);\n throw `\n\n Incorect value for property \"entities\" inside Taon.Init(...)\n\n `;\n }\n };\n //#endregion\n\n export const preventUndefinedModel = (model, id) => {\n if (_.isUndefined(model)) {\n throw `Bad update by id, config, id: ${id}`;\n }\n };\n}\n","//#region imports\n/* */ \nimport { _, Utils } from 'tnp-core/websql';\nimport { CLASS } from 'typescript-class-helpers/websql';\n\nimport {\n controllerConfigFrom,\n ControllerConfig,\n} from '../config/controller-config';\nimport { MethodConfig } from '../config/method-config';\nimport { TaonEntityOptions } from '../decorators/classes/entity-decorator';\nimport { Models } from '../models';\nimport { Symbols } from '../symbols';\nimport { Validators } from '../validators';\n\nimport { TaonHelpers } from './taon-helpers';\n//#endregion\n\nexport namespace ClassHelpers {\n //#region get class from name\n /**\n * TODO - repalce in every place when getting class fn from object\n */\n export const getClassFnFromObject = (json: Object) => {\n if (_.isUndefined(json) || _.isNull(json)) {\n return;\n }\n if (json.constructor) {\n return json.constructor;\n }\n const p = Object.getPrototypeOf(json);\n return p && p.constructor && p.constructor.name !== 'Object'\n ? p.constructor\n : void 0;\n };\n //#endregion\n\n //#region get name\n export const getName = (classFnOrObject: any): string => {\n // exception for FormData\n if (classFnOrObject instanceof FormData) {\n return 'FormData';\n }\n if (!classFnOrObject) {\n console.error('OBJECT OR CLASS', classFnOrObject);\n throw new Error(`Cannot get name from this object or class.`);\n }\n return (\n (classFnOrObject[Symbols.classNameStaticProperty]\n ? classFnOrObject[Symbols.classNameStaticProperty]\n : classFnOrObject?.constructor[Symbols.classNameStaticProperty]) ||\n (_.isFunction(classFnOrObject) ? CLASS.getName(classFnOrObject) : void 0)\n );\n };\n //#endregion\n\n export const getOrginalClass = (classFnOrObject: any): any => {\n const org = classFnOrObject[Symbols.orignalClass];\n if (!org) {\n return classFnOrObject;\n }\n return getOrginalClass(org);\n };\n\n //#region get full internal name\n export const getFullInternalName = (classFnOrObject: any): string => {\n // exception for FormData\n\n if (!classFnOrObject) {\n throw new Error(`Cannot get name from: ${classFnOrObject}`);\n }\n return (\n (classFnOrObject[Symbols.fullClassNameStaticProperty]\n ? classFnOrObject[Symbols.fullClassNameStaticProperty]\n : classFnOrObject?.constructor[Symbols.fullClassNameStaticProperty]) ||\n void 0\n );\n };\n //#endregion\n\n //#region get unique key\n export const getUniqueKey = (classFnOrObject: any): string => {\n const classFn = _.isFunction(classFnOrObject)\n ? classFnOrObject\n : classFnOrObject.constructor;\n const config = Reflect.getMetadata(\n Symbols.metadata.options.entity,\n classFn,\n ) as TaonEntityOptions;\n\n return config.uniqueKeyProp;\n };\n //#endregion\n\n //#region is class object\n export const isContextClassObject = (obj: any): boolean => {\n if (\n !_.isObject(obj) ||\n _.isArray(obj) ||\n _.isRegExp(obj) ||\n _.isBuffer(obj) ||\n _.isArrayBuffer(obj)\n ) {\n return false;\n }\n if (_.isDate(obj)) {\n return true;\n }\n const className = getName(obj);\n return _.isString(className) && className !== 'Object';\n };\n //#endregion\n\n //#region get name\n\n export const setName = (target: Function, className: string): void => {\n // console.log('setName', className, target.name)\n Validators.classNameVlidation(className, target);\n target[Symbols.classNameStaticProperty] = className;\n };\n //#endregion\n\n //#region has parent with class name\n export const hasParentClassWithName = (\n target: Function,\n className: string,\n targets = [],\n ): boolean => {\n if (!target) {\n return false;\n }\n targets.push(target);\n let targetProto = Object.getPrototypeOf(target);\n\n if (\n _.isFunction(targetProto) &&\n ClassHelpers.getName(targetProto) === className\n ) {\n // console.log(`true \"${_.first(targets).name}\" for ${targets.map(d => d.name).join(',')}`)\n return true;\n }\n return hasParentClassWithName(targetProto, className, targets);\n };\n //#endregion\n\n //#region get methods name\n\n //#region not allowed as method name\n const notAllowedAsMethodName = [\n 'length',\n 'name',\n 'arguments',\n 'caller',\n 'constructor',\n 'apply',\n 'bind',\n 'call',\n 'toString',\n '__defineGetter__',\n '__defineSetter__',\n 'hasOwnProperty',\n '__lookupGetter__',\n '__lookupSetter__',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'valueOf',\n '__proto__',\n 'toLocaleString',\n ];\n //#endregion\n\n /**\n * Express async handler for middleware functions.\n */\n export const asyncHandler = fn => (req, res, next) => {\n Promise.resolve(fn(req, res, next)).catch(next);\n };\n\n export const getMethodsNames = (\n classOrClassInstance: any,\n allMethodsNames = [],\n ): string[] => {\n if (!classOrClassInstance) {\n return Utils.uniqArray(allMethodsNames);\n }\n\n const isClassFunction = _.isFunction(classOrClassInstance);\n const classFun = isClassFunction\n ? classOrClassInstance\n : Object.getPrototypeOf(classOrClassInstance);\n const objectToCheck = isClassFunction\n ? (classOrClassInstance as Function)?.prototype\n : classOrClassInstance;\n const prototypeObj = Object.getPrototypeOf(objectToCheck || {});\n\n const properties = _.uniq([\n ...Object.getOwnPropertyNames(objectToCheck || {}),\n ...Object.getOwnPropertyNames(prototypeObj || {}),\n ...Object.keys(objectToCheck || {}),\n ...Object.keys(prototypeObj || {}),\n ]).filter(f => !!f && !notAllowedAsMethodName.includes(f));\n\n properties\n .filter(methodName => typeof objectToCheck[methodName] === 'function')\n .forEach(p => allMethodsNames.push(p));\n\n if (\n !classFun ||\n !classFun.constructor ||\n classFun?.constructor?.name === 'Object'\n ) {\n return Utils.uniqArray(allMethodsNames);\n }\n return getMethodsNames(Object.getPrototypeOf(classFun), allMethodsNames);\n };\n //#endregion\n\n //#region get controller configs\n export const getControllerConfigs = (\n target: Function,\n configs: ControllerConfig[] = [],\n callerTarget?: Function,\n ): ControllerConfig[] => {\n if (!_.isFunction(target)) {\n throw `[typescript-class-helper][getControllerConfigs] Cannot get class config from: ${target}`;\n }\n\n let config: ControllerConfig;\n const parentClass = Object.getPrototypeOf(target);\n const parentName = parentClass ? ClassHelpers.getName(parentClass) : void 0;\n const isValidParent = _.isFunction(parentClass) && parentName !== '';\n\n config = controllerConfigFrom(getClassConfig(target));\n\n configs.push(config);\n\n return isValidParent\n ? getControllerConfigs(parentClass, configs, target)\n : configs;\n };\n //#endregion\n\n //#region ensure configs\n\n // Ensure ClassConfig on constructor, clone parent if needed\n export const ensureClassConfig = (\n target: Function,\n ): Partial<ControllerConfig> => {\n let cfg: Partial<ControllerConfig> = Reflect.getOwnMetadata(\n Symbols.metadata.options.controller, // META_KEYS.class,\n target,\n );\n\n if (!cfg) {\n cfg = { methods: {} };\n\n const parent = Object.getPrototypeOf(target);\n if (parent && parent !== Function.prototype) {\n const parentCfg: Partial<ControllerConfig> = Reflect.getMetadata(\n Symbols.metadata.options.controller, // META_KEYS.class,\n parent,\n );\n if (parentCfg) {\n // Deep copy each method config so child gets its own objects\n const clonedMethods: Record<\n string | symbol,\n Partial<MethodConfig>\n > = {};\n for (const [k, v] of Object.entries(parentCfg.methods)) {\n clonedMethods[k] = {\n ...v,\n parameters: { ...v.parameters }, // shallow clone parameters too\n };\n }\n\n cfg = {\n ...parentCfg,\n methods: clonedMethods,\n };\n }\n }\n\n Reflect.defineMetadata(Symbols.metadata.options.controller, cfg, target);\n }\n\n return cfg;\n };\n\n // Ensure MethodConfig inside ClassConfig\n export const ensureMethodConfig = (\n target: any,\n propertyKey: string | symbol,\n ): Partial<MethodConfig> => {\n const classCfg = ensureClassConfig(target.constructor);\n let methodCfg: Partial<MethodConfig> =\n classCfg.methods[propertyKey?.toString()];\n if (!methodCfg) {\n methodCfg = { methodName: propertyKey?.toString(), parameters: {} };\n classCfg.methods[propertyKey?.toString()] = methodCfg as MethodConfig;\n }\n return methodCfg;\n };\n\n export const getClassConfig = (\n constructor: Function,\n ): Partial<ControllerConfig> | undefined => {\n return Reflect.getMetadata(\n Symbols.metadata.options.controller,\n constructor,\n );\n };\n //#endregion\n}\n","import { walk } from 'lodash-walk-object/websql';\nimport { _ } from 'tnp-core/websql';\n\nexport const cloneObj = <CloneT>(\n override: Partial<CloneT>,\n classFn: Function,\n): CloneT => {\n const result = _.merge(new (classFn as any)(), _.cloneDeep(this));\n walk.Object(\n override || {},\n (value, lodashPath) => {\n if (_.isNil(value) || _.isFunction(value) || _.isObject(value)) {\n // skipping\n } else {\n _.set(result, lodashPath, value);\n }\n },\n {\n walkGetters: false,\n },\n );\n // console.log({result})\n return result;\n};\n","//#region imports\nimport { walk } from 'lodash-walk-object/websql';\nimport { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { cloneObj } from '../helpers/clone-obj';\n\n//#endregion\n\nexport class BaseClass<CloneT extends BaseClass = any> {\n //#region class initialization hook\n /**\n * class initialization hook\n * taon after class instance creation\n */\n async _(): Promise<void> {}\n //#endregion\n\n //#region clone\n public clone(override?: Partial<CloneT>): CloneT {\n const classFn = ClassHelpers.getClassFnFromObject(this);\n return cloneObj<CloneT>(override, classFn);\n }\n //#endregion\n}\n","import { Entity } from 'taon-typeorm/websql'; // @websql\nimport { RelationPath } from 'taon-typeorm/websql';\n\nimport { BaseClass } from './base-class';\n\nlet EntityDecorator = () => {\n return (target: any) => {};\n};\n\n//#region @websql\nEntityDecorator = Entity;\n//#endregion\n\n@EntityDecorator()\nexport abstract class BaseEntity<\n /**\n * type for cloning\n */\n CloneT extends BaseClass = any,\n> extends BaseClass<CloneT> {\n /**\n * simple check if relation is ok\n */\n relation(relationName: RelationPath<CloneT>): string {\n return relationName as string;\n }\n\n /**\n * simple check if relation is ok\n */\n relations(relationNames: RelationPath<CloneT>[]): string[] {\n return relationNames as string[];\n }\n}\n","//#region @websql\nimport { Entity } from 'taon-typeorm/websql';\n//#endregion\nimport { Orm } from '../orm';\nimport { BaseEntity } from './base-entity';\nimport type { BaseClass } from './base-class';\n\n// empty decorator\nlet EntityDecorator = () => {\n return (target: any) => {};\n};\n\n//#region @websql\nEntityDecorator = Entity;\n//#endregion\n\n@EntityDecorator()\nexport abstract class BaseAbstractEntity<\n CloneT extends BaseClass = any,\n> extends BaseEntity<CloneT> {\n //#region @websql\n @Orm.Column.Generated()\n //#endregion\n id: string;\n\n //#region @websql\n @Orm.Column.Version()\n //#endregion\n version: number;\n}\n\nexport type AbstractEntityOmitKeys<ENTITY> = Omit<ENTITY, 'id' | 'version'| '_' | 'clone'>;\n","export type TaonEntityKeysToOmit =\n | 'ctrl'\n | 'clone'\n | '__endpoint_context__'\n | 'ctx'\n | 'inject'\n | '_'\n | 'relation'\n | 'relations'\n | 'inject'\n | 'injectRepo'\n | 'injectCustomRepository'\n | 'injectCustomRepo'\n | 'injectController'\n | 'injectCtrl'\n | 'injectProvider'\n | 'injectMiddleware';\n\nexport const TaonEntityKeysToOmitArr: TaonEntityKeysToOmit[] = [\n 'ctrl',\n 'clone',\n '__endpoint_context__',\n 'ctx',\n 'inject',\n '_',\n 'relation',\n 'relations',\n 'inject',\n 'injectRepo',\n 'injectCustomRepository',\n 'injectCustomRepo',\n 'injectController',\n 'injectCtrl',\n 'injectProvider',\n 'injectMiddleware',\n];\n\nimport { InjectionToken } from '@angular/core';\n\nimport type { TaonContext } from './create-context';\n\nlet TAON_CONTEXT: InjectionToken<TaonContext>;\n//#region @browser\nTAON_CONTEXT = new InjectionToken<TaonContext>('TAON_CONTEXT');\n//#endregion\n\nlet CURRENT_HOST_BACKEND_PORT: InjectionToken<number>;\n//#region @browser\nCURRENT_HOST_BACKEND_PORT = new InjectionToken<number>(\n 'CURRENT_HOST_BACKEND_PORT',\n);\n//#endregion\n\nlet CURRENT_HOST_URL: InjectionToken<string>;\n//#region @browser\nCURRENT_HOST_URL = new InjectionToken<string>(\n 'CURRENT_HOST_URL',\n);\n//#endregion\n\nexport { TAON_CONTEXT, CURRENT_HOST_BACKEND_PORT, CURRENT_HOST_URL };\n\nexport const apiPrefix = 'api';\n","import type { BaseInjector } from './base-classes/base-injector';\nimport type { EndpointContext } from './endpoint-context';\nimport { Symbols } from './symbols';\n\nexport const inject = <T>(entity: () => new (...args: any[]) => T): T => {\n return new Proxy(\n {},\n {\n get: (_, propName) => {\n if (propName === 'hasOwnProperty') {\n return () => false;\n }\n\n const ctor = entity();\n const contextFromClass = ctor[\n Symbols.ctxInClassOrClassObj\n ] as EndpointContext;\n const resultContext = contextFromClass;\n if (resultContext) {\n let instance = resultContext.inject(ctor, {\n parentInstanceThatWillGetInjectedStuff: this,\n }) as BaseInjector;\n // console.log('instance', instance);\n\n if (propName === 'getOriginalPrototype') {\n return () => Object.getPrototypeOf(instance);\n }\n if (propName === 'getOriginalConstructor') {\n return () => instance.constructor;\n }\n\n const methods = ctor[Symbols.classMethodsNames] || [];\n const isMethods = methods.includes(propName);\n\n const methodOrProperty = isMethods\n ? instance[propName].bind(instance)\n : instance[propName];\n\n // console.log(\n // `methodOrProperty from proxy ${propName?.toString()} = isMethods:${isMethods}`,\n // methods,\n // );\n return methodOrProperty;\n }\n },\n },\n ) as T;\n};\n\n// export const injectController = inject;\n\n// export type SubscriptionEvent<T> = {\n// name: keyof T;\n// data: any;\n// };\n\n/**\n * TODO\n */\n// export const injectEntityEvents = <T>(\n// subscriberClassResolveFn: () => new (...args: any[]) => T,\n// eventName?: keyof Omit<EntitySubscriberInterface,'listenTo'> ,\n// ): Observable<SubscriptionEvent<T>> => {\n// const eventsSrc = new Subject<SubscriptionEvent<T>>();\n// const obs = eventsSrc.asObservable();\n\n// let isFirstSubscription = true;\n\n// const proxyObservable = new Proxy(obs, {\n// get(target, prop, receiver) {\n// if (prop === 'subscribe') {\n// return (...args: any[]) => {\n// if (isFirstSubscription) {\n// isFirstSubscription = false;\n// const subscriberClassFN: typeof BaseClass =\n// subscriberClassResolveFn() as any;\n// const ctx = subscriberClassFN[\n// Symbols.ctxInClassOrClassObj\n// ] as EndpointContext;\n// if (!ctx) {\n// throw new Error(\n// `You are trying to inject class without context. Use context like this:\n\n// class MyClassSubscriber extends BaseSubscriber {\n// ${eventName as any}() {\n// \\/\\/ your code here\n// }\n// }\n\n// Taon.injectSubscriberEvents( MyContext.getInstance(()=> MyClassSubscriber), '${eventName as any}' )\n\n// `,\n// );\n// }\n// const subscriberInstance = ctx.getInstanceBy(subscriberClassFN);\n// // subscriberInstance TODO @LAST subscriber event from instance\n// // const entity = subscriberClassFN.prototype.listenTo();\n// console.log('First subscription, you can access arguments here:', {\n// subscriberClassFN,\n// eventName,\n// });\n// }\n// return target.subscribe(...args);\n// };\n// }\n// return Reflect.get(target, prop, receiver);\n// },\n// });\n\n// return proxyObservable as Observable<SubscriptionEvent<T>>;\n// };\n","import { Injectable, inject } from '@angular/core'; // @browser\n\nimport {\n CURRENT_HOST_BACKEND_PORT,\n CURRENT_HOST_URL,\n TAON_CONTEXT,\n} from '../constants';\nimport { TaonContext } from '../create-context';\nimport { inject as taonInject } from '../inject';\n\n/**\n * TODO prevent calling methods when not initialized\n * with init(ctx)\n */\n//#region @browser\n@Injectable()\n//#endregion\nexport abstract class BaseAngularsService {\n //#region @browser\n protected readonly currentContext: TaonContext = inject(TAON_CONTEXT);\n /**\n * @deprecated\n * current context host backend port (for localhost backend)\n */\n protected readonly CURRENT_HOST_BACKEND_PORT: number | undefined;\n /**\n * @deprecated\n * current context host URL (for localhost backend)\n */\n protected readonly CURRENT_HOST_URL: string | undefined;\n //#endregion\n constructor() {\n //#region @browser\n this.CURRENT_HOST_BACKEND_PORT = inject(CURRENT_HOST_BACKEND_PORT, {\n optional: true,\n });\n this.CURRENT_HOST_URL = inject(CURRENT_HOST_URL, {\n optional: true,\n });\n // #endregion\n }\n\n /**\n * @deprecated\n * Returns the host URL for the backend service\n * that is running on localhost (normal NodeJS/ExpressJS mode).\n */\n get host(): string {\n //#region @browser\n if (this.CURRENT_HOST_URL) {\n return this.CURRENT_HOST_URL;\n }\n return `http://localhost:${this.CURRENT_HOST_BACKEND_PORT}`;\n //#endregion\n return void 0;\n }\n\n injectController<T>(\n ctor: new (...args: any[]) => T,\n /**\n * optional override context\n */\n overrideCurrentContext?: TaonContext,\n ): T {\n return taonInject(() => {\n let currentContext: TaonContext;\n //#region @browser\n currentContext = overrideCurrentContext\n ? overrideCurrentContext\n : this.currentContext;\n //#endregion\n if (!currentContext) {\n throw new Error(\n 'No context available. Make sure to initialize the context before injecting controllers.',\n );\n }\n return currentContext ? currentContext.getClass(ctor) : void 0;\n }) as T;\n }\n}\n","import type { RequestHandler } from 'express';\nimport {\n Response as ExpressResponse,\n Request as ExpressRequest,\n} from 'express';\nimport { Models as ModelsNg2Rest } from 'ng2-rest/websql';\nimport { _ } from 'tnp-core/websql';\nimport { CoreModels } from 'tnp-core/websql';\n\nimport { BaseClass } from './base-classes/base-class';\nimport type { BaseMiddleware } from './base-classes/base-middleware';\nimport type {\n TaonHttpDecoratorOptions,\n TaonMiddlewareFunction,\n TaonMiddlewareInheritanceObj,\n} from './decorators/http/http-methods-decorators';\nimport type { EndpointContext } from './endpoint-context';\nimport { ClassHelpers } from './helpers/class-helpers';\n\nexport namespace Models {\n export type FrameworkMode =\n | 'backend-frontend(tcp+udp)'\n | 'remote-backend(tcp+udp)'\n | 'backend-frontend(ipc-electron)'\n | 'backend-frontend(websql-electron)'\n | 'backend-frontend(websql)';\n\n //#region models / class types\n export enum ClassType {\n ENTITY = 'ENTITY',\n CONTROLLER = 'CONTROLLER',\n REPOSITORY = 'REPOSITORY',\n PROVIDER = 'PROVIDER',\n SUBSCRIBER = 'SUBSCRIBER',\n MIGRATION = 'MIGRATION',\n MIDDLEWARE = 'MIDDLEWARE',\n }\n\n export const ClassTypeKey = {\n [ClassType.ENTITY]: 'entities',\n [ClassType.CONTROLLER]: 'controllers',\n [ClassType.REPOSITORY]: 'repositories',\n [ClassType.PROVIDER]: 'providers',\n [ClassType.SUBSCRIBER]: 'subscribers',\n [ClassType.MIGRATION]: 'migrations',\n [ClassType.MIDDLEWARE]: 'middlewares',\n } as {\n [key in ClassType]: keyof ContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >;\n };\n\n //#endregion\n\n //#region models / middleware type\n export type MiddlewareType = [Function, any[]];\n //#endregion\n\n //#region models / db recreate mode\n /**\n * DROP_DB+MIGRATIONS (default for development)\n * Drop all tables + recreate them + run migrations\n * synchronize: true , dropSchema: true\n * use migrations: true\n *\n * MIGRATIONS (default for production)\n * Do not drop tables, only run migrations\n * synchronize: false, dropSchema: false\n * use migrations: true\n */\n export type DBRecreateMode =\n | 'DROP_DB+MIGRATIONS'\n | 'PRESERVE_DATA+MIGRATIONS';\n //#endregion\n\n //#region models / database connection options\n export class DatabaseConfigTypeOrm {\n /**\n * database name\n */\n database?: string;\n /**\n * only for file base db: sqlite, sqljs\n */\n location?: string;\n synchronize: boolean;\n dropSchema: boolean;\n type?: CoreModels.DatabaseType;\n /**\n * Persists db on disk/local-storage if serverless db\n */\n autoSave?: boolean;\n /**\n * for websql db mode\n * true by default\n */\n useLocalForage?: boolean;\n logging: boolean;\n databasePort?: number;\n databaseHost?: string;\n databaseUsername?: string;\n databasePassword?: string;\n }\n //#endregion\n\n //#region models / database config\n export class DatabaseConfig extends DatabaseConfigTypeOrm {\n /**\n * Default value 'DROP_ALL'.\n *\n * Tell framework what is happening with db\n * when context is starting.\n */\n public recreateMode?: DBRecreateMode;\n\n static from(\n databasePartialConfig: Partial<\n Omit<\n DatabaseConfig,\n 'synchronize' | 'dropSchema' | 'databaseConfigTypeORM'\n >\n >,\n ): DatabaseConfig {\n return _.merge(new DatabaseConfig(), databasePartialConfig);\n }\n\n get databaseConfigTypeORM(): DatabaseConfigTypeOrm {\n //#region @websqlFunc\n const result = _.cloneDeep(this) as DatabaseConfig;\n if (result.recreateMode) {\n if (result.recreateMode === 'DROP_DB+MIGRATIONS') {\n result.synchronize = true;\n result.dropSchema = true;\n } else if (result.recreateMode === 'PRESERVE_DATA+MIGRATIONS') {\n result.synchronize = false;\n result.dropSchema = false;\n }\n }\n delete result.recreateMode;\n\n return result as any;\n //#endregion\n }\n }\n //#endregion\n\n //#region models / session\n\n export type ISession = {\n secret?: string;\n saveUninitialized?: boolean;\n /**\n * max age of session\n */\n cookieMaxAge?: number;\n secure?: boolean;\n resave?: boolean;\n };\n //#endregion\n\n //#region models / context options\n export type ConnectionOptionsLogs = {\n http?: boolean;\n realtime?: boolean;\n framework?: boolean;\n db?: boolean;\n migrations?: boolean;\n };\n export interface ContextOptions<\n CONTEXTS,\n CONTROLLERS,\n ENTITIES,\n REPOSITORIES,\n PROVIDERS,\n SUBSCRIBERS,\n MIGRATIONS,\n MIDDLEWARES,\n > {\n appId?: string;\n\n contextName: string;\n /**\n * if defined and different from contextName\n * - context will NOT be initialized\n */\n activeContext?: string | null;\n /**\n * IMPORTANT! provide full url that starts with http:// or https://\n * host/port for initing backend server\n */\n host?: string;\n\n /**\n * Needs to be specified in docker environment only\n */\n hostPortNumber?: number;\n /**\n * IMPORTANT! provide full url that starts with http:// or https://\n * frontend host only needed when we are\n * using withCredentials for axios\n * and session cookie\n * or realtime communication\n */\n frontendHost?: string;\n\n /**\n * Needs to be specified in docker environment only\n */\n frontendHostPortNumber?: number;\n\n /**\n * User ipc for communication between BE/FE\n * when electron is used as a platform\n * Default: true\n */\n useIpcWhenElectron?: boolean;\n /**\n * taon contexts here\n * (module like structure)\n */\n contexts?: CONTEXTS;\n /**\n * taon controller here\n * (glue between frontend and backend)\n */\n controllers?: CONTROLLERS;\n /**\n * taon entities\n * (entities are used to create tables in db)\n */\n entities?: ENTITIES;\n /**\n * taon repositories\n * (repositories are used to access data from db)\n */\n repositories?: REPOSITORIES;\n /**\n * taon providers\n * (context singletons)\n */\n providers?: PROVIDERS;\n /**\n * taon subscribers\n * (subscribers are used to listen to db events)\n */\n subscribers?: SUBSCRIBERS;\n /**\n * taon migrations\n * (migrations are used to update db schema and achieve proper CI/CD)\n */\n migrations?: MIGRATIONS;\n /**\n * taon middlewares\n * middlewares are used to intercept requests\n * and responses in the context\n */\n middlewares?: MIDDLEWARES;\n /**\n * Config for express session\n */\n session?: ISession;\n /**\n * taon is not going to write .rest files to cwd()\n */\n skipWritingServerRoutes?: boolean;\n /**\n * TODO - this is still in progress\n * @deprecated\n */\n productionMode?: boolean;\n /**\n * If you want your context to never be started as separated server\n * use abstract: true\n * @default: false\n */\n abstract?: boolean;\n logs?: boolean | ConnectionOptionsLogs;\n database?: boolean | Partial<DatabaseConfig>;\n /**\n * disable default realtime communication through TCP upgrade sockets\n */\n disabledRealtime?: boolean;\n /**\n * Will be removed soon - cloud will handle certs and https\n * @deprecated\n */\n https?: {\n key: string;\n cert: string;\n };\n /**\n * TODO - will be removed soon\n * @deprecated\n */\n publicAssets?: { serverPath: string; locationOnDisk: string }[];\n /**\n * by default cwd === process.cwd()\n */\n cwd?: string;\n }\n //#endregion\n\n //#region models / http\n export namespace Http {\n export import Rest = ModelsNg2Rest;\n\n export type ContextENDPOINT = { target: Function; initFN: Function };\n\n export type FormlyFromType = 'material' | 'bootstrap';\n\n export type ExpressContext<T> = (\n req: ExpressRequest,\n res: ExpressResponse,\n ) => T;\n\n export type SyncResponse<T> = string | T;\n\n export type ResponseFuncOpt<T> = {\n limitSize?: (\n enties: Function | Function[],\n include: string[],\n exclude: string[],\n ) => void;\n };\n\n export type SyncResponseFunc<T> = (\n options?: ResponseFuncOpt<T>,\n ) => SyncResponse<T>;\n export type MixResponse<T> = SyncResponse<T> | ExpressContext<T>;\n\n export interface ClientAction<T> {\n /**\n * @deprecated use request() mehods instead\n */\n readonly received?: Rest.PromiseObservableMix<Rest.HttpResponse<T>>;\n request?(\n axiosConfig?: ModelsNg2Rest.Ng2RestAxiosRequestConfig,\n ): Rest.PromiseObservableMix<Rest.HttpResponse<T>>;\n }\n\n export interface AsyncResponse<T> {\n (\n req?: ExpressRequest,\n res?: ExpressResponse,\n ): Promise<SyncResponse<T> | SyncResponseFunc<T>>;\n }\n\n export type Response<T = string> = AsyncResponse<T> & ClientAction<T>;\n\n export class Errors {\n public toString = (): string => {\n return this.message;\n };\n\n private constructor(\n public message: string,\n private code: ModelsNg2Rest.HttpCode = 400,\n ) {}\n\n private static create(\n message: string,\n code: ModelsNg2Rest.HttpCode = 400,\n ) {\n return new Errors(message, code);\n }\n\n public static entityNotFound(entity?: Function) {\n return Errors.create(\n `Entity ${ClassHelpers.getName(entity)} not found`,\n );\n }\n\n public static custom(\n message: string,\n code: ModelsNg2Rest.HttpCode = 400,\n ) {\n return Errors.create(message, code);\n }\n }\n\n //#region @websql\n export interface AuthCallBack {\n (methodReference: Function): RequestHandler;\n }\n\n //#endregion\n }\n //#endregion\n\n //#region models / start params\n export interface StartParams {\n port: number;\n args: string[];\n onlyMigrationRun?: boolean;\n onlyMigrationRevertToTimestamp?: number;\n }\n\n export interface TaonInitializeParams {\n onlyMigrationRun?: boolean;\n onlyMigrationRevertToTimestamp?: number;\n }\n\n export interface TaonCtxCloneParams {\n useAsRemoteContext?: boolean;\n overrideRemoteHost?: string;\n overrideHost?: string;\n sourceContext?: EndpointContext;\n }\n\n //#endregion\n}\n","//#region imports\nimport { Helpers, UtilsMigrations, _ } from 'tnp-core/websql';\nimport { BaseMigration } from './base-classes/base-migration';\nimport type { EndpointContext } from './endpoint-context';\nimport { Models } from './models';\nimport { ClassHelpers } from './helpers/class-helpers';\nimport {\n Column,\n DataSource,\n Entity,\n EntitySchema,\n Index,\n PrimaryGeneratedColumn,\n QueryRunner,\n Table,\n TableColumn,\n TableIndex,\n} from 'taon-typeorm/websql';\n//#endregion\n\n//#region models\nexport type MigrationStatus = 'completed' | 'pending';\n\nexport class ContextDbMigrations {\n //#region fields\n\n //#region fields / migration table name\n readonly DEFAULT_MIGRATION_TABLE_NAME = 'TAON_MIGRATION_META';\n //#endregion\n\n //#region fields / migration statuses\n readonly MIGRATION_STATUS_COMPLETED: MigrationStatus = 'completed';\n readonly MIGRATION_STATUS_PENDING: MigrationStatus = 'pending';\n //#endregion\n\n //#region fields / migration table schema\n readonly table = new Table({\n name: this.DEFAULT_MIGRATION_TABLE_NAME,\n columns: [\n {\n name: 'id',\n type: 'integer',\n isPrimary: true, // Mark it as the primary key\n isGenerated: true, // Enable auto-generation\n generationStrategy: 'increment', // Use auto-increment strategy\n },\n {\n name: 'name',\n type: 'varchar',\n length: '255',\n isUnique: true, // Ensure the name is unique\n isNullable: false, // Ensure this field is required\n },\n {\n // context is a part of name\n name: 'context',\n type: 'varchar',\n length: '255',\n isNullable: false, // Optional context for migrations (e.g., tenant or module name)\n },\n {\n name: 'applied_at',\n type: 'timestamp',\n default: 'CURRENT_TIMESTAMP', // Automatically set the timestamp\n isNullable: true,\n },\n {\n name: 'status',\n type: 'varchar',\n length: '50',\n default: `'${this.MIGRATION_STATUS_COMPLETED}'`,\n isNullable: false,\n },\n // { // TODO not needed for now\n // name: 'checksum',\n // type: 'varchar',\n // length: '64',\n // isNullable: true, // Optional field to store a hash/checksum of migration file\n // },\n ],\n });\n //#endregion\n\n //#endregion\n\n //#region constructor\n constructor(private ctx: EndpointContext) {}\n //#endregion\n\n //#region methods & getters / make sure migration table exists\n async ensureMigrationTableExists(): Promise<void> {\n //#region @websqlFunc\n if (this.ctx.isRemoteHost || !this.ctx.connection) {\n return;\n }\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n await queryRunner.startTransaction();\n\n // Check if the table already exists\n const hasTable = await queryRunner.hasTable(\n this.DEFAULT_MIGRATION_TABLE_NAME,\n );\n if (hasTable) {\n this.ctx.logMigrations &&\n console.log(\n `Table ${this.DEFAULT_MIGRATION_TABLE_NAME} already exists.`,\n );\n await queryRunner.commitTransaction();\n await queryRunner.release();\n return; // Exit early if the table exists\n }\n\n try {\n await queryRunner.createTable(this.table);\n await queryRunner.createIndex(\n this.DEFAULT_MIGRATION_TABLE_NAME,\n new TableIndex({\n name: 'IDX_NAME',\n columnNames: ['name'],\n }),\n );\n\n await queryRunner.commitTransaction();\n } catch (error) {\n this.ctx.logMigrations &&\n console.error(\n `Transaction failed [ensureMigrationTableExists]` + `, rolling back:`,\n error,\n );\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / revert migration to timestamp\n private async logSelectALl(name: string, queryRunner: QueryRunner) {\n console.log(\n name,\n (\n await queryRunner.query(\n `SELECT * FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} WHERE context = $1`,\n [this.ctx.contextName],\n )\n ).map(m => m.name),\n );\n }\n\n async revertMigrationToTimestamp(timestamp: number) {\n //#region @websqlFunc\n if (this.ctx.isRemoteHost || !this.ctx.connection) {\n return;\n }\n if (!UtilsMigrations.isValidTimestamp(timestamp)) {\n Helpers.throw(\n `Invalid timestamp provided for migration revert: ${timestamp}`,\n );\n }\n\n // Get all migration class functions and reverse the order\n const migrationsClassFns: Function[] = this.ctx\n .getClassFunByArr(Models.ClassType.MIGRATION)\n .reverse();\n\n // Filter migrations that need to be reverted\n const migrationClassesInstancesToRevert: BaseMigration[] =\n migrationsClassFns\n .map(classFn => {\n const timestampFromClassName = Number(\n UtilsMigrations.getTimestampFromClassName(\n ClassHelpers.getName(classFn),\n ),\n );\n\n if (timestampFromClassName <= timestamp) {\n // this.ctx.logMigrations &&\n // console.log(\n // `Stopping migration filter at: ${ClassHelpers.getName(classFn)} ` +\n // `with timestamp ${timestampFromClassName}`,\n // );\n return null;\n }\n\n return this.ctx.getInstanceBy(classFn as any) as any;\n })\n .filter(f => !!f)\n .map(f => f as BaseMigration)\n .filter(migrationInstance => migrationInstance.isReadyToRun());\n\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n\n try {\n await queryRunner.startTransaction();\n\n // Fetch applied migrations from the database\n const appliedMigrationsForContext = await queryRunner.query(\n `SELECT name FROM ${this.DEFAULT_MIGRATION_TABLE_NAME}\n WHERE status = $1 AND context = $2`,\n [this.MIGRATION_STATUS_COMPLETED, this.ctx.contextName],\n );\n\n const appliedMigrationsForContextNames = appliedMigrationsForContext.map(\n m => m.name,\n );\n // console.log({ appliedMigrationsForContextNames });\n\n for (const migrationClassInstance of migrationClassesInstancesToRevert) {\n const migrationName = ClassHelpers.getName(migrationClassInstance);\n\n if (!appliedMigrationsForContextNames.includes(migrationName)) {\n this.ctx.logMigrations &&\n console.warn(\n `Skipping migration not marked as applied: ${migrationName}`,\n );\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(\n `Reverting migration: ${migrationName} , context: ${this.ctx.contextName}`,\n );\n await migrationClassInstance.down(queryRunner);\n\n // Remove the reverted migration from the tracking table\n await queryRunner.query(\n `DELETE FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} WHERE name = $1`,\n [migrationName],\n );\n }\n\n await queryRunner.commitTransaction();\n this.ctx.logMigrations &&\n console.log(\n `Migrations successfully reverted ` +\n `to the specified timestamp ${timestamp} .`,\n );\n } catch (error) {\n this.ctx.logMigrations &&\n console.error('Transaction failed, rolling back:', error);\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / clear migration table\n async clearMigrationTable() {\n //#region @websqlFunc\n if (this.ctx.isRemoteHost || !this.ctx.connection) {\n return;\n }\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n await queryRunner.startTransaction();\n\n try {\n await queryRunner.clearTable(this.DEFAULT_MIGRATION_TABLE_NAME);\n await queryRunner.commitTransaction();\n } catch (error) {\n this.ctx.logMigrations &&\n console.error('Transaction failed, rolling back:', error);\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / mark all migrations as applied\n async markAllMigrationsAsApplied() {\n //#region @websqlFunc\n if (this.ctx.isRemoteHost || !this.ctx.connection) {\n return;\n }\n const migrationsClassFns: Function[] = this.ctx.getClassFunByArr(\n Models.ClassType.MIGRATION,\n );\n\n const migrationClassesInstances: BaseMigration[] = migrationsClassFns\n .map(classFn => this.ctx.getInstanceBy(classFn as any))\n .map(f => f as BaseMigration)\n .filter(migrationInstance => migrationInstance.isReadyToRun());\n\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n\n try {\n await queryRunner.startTransaction();\n\n // Fetch already applied migrations from the database\n const allMigrationsInDb = await queryRunner.query(\n `SELECT name FROM ${this.DEFAULT_MIGRATION_TABLE_NAME}`,\n );\n\n const allMigrationInDBNames = allMigrationsInDb.map(m => m.name);\n\n for (const instance of migrationClassesInstances) {\n const migrationName = ClassHelpers.getName(instance);\n\n if (allMigrationInDBNames.includes(migrationName)) {\n this.ctx.logMigrations &&\n console.log(`Skipping already applied migration: ${migrationName}`);\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(`Marking migration as applied: ${migrationName}`);\n\n // Insert migration as 'complete' without running\n await queryRunner.query(\n `INSERT INTO ${this.DEFAULT_MIGRATION_TABLE_NAME} (name, status, context, applied_at) ` +\n `VALUES ($1, $2, $3, CURRENT_TIMESTAMP)`,\n [\n migrationName,\n this.MIGRATION_STATUS_COMPLETED,\n instance.ctx.contextName,\n ],\n );\n }\n\n // update all pending migrations to completed\n await queryRunner.query(\n `UPDATE ${this.DEFAULT_MIGRATION_TABLE_NAME}\n SET status = $1, applied_at = CURRENT_TIMESTAMP\n WHERE status = $2`,\n [this.MIGRATION_STATUS_COMPLETED, this.MIGRATION_STATUS_PENDING],\n );\n\n await queryRunner.commitTransaction();\n this.ctx.logMigrations &&\n console.log('All migrations marked as applied.');\n } catch (error) {\n this.ctx.logMigrations &&\n console.error(\n 'Failed to mark all migrations as applied, rolling back:',\n error,\n );\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / run all migrations\n async runAllNotCompletedMigrations() {\n //#region @websqlFunc\n if (this.ctx.isRemoteHost || !this.ctx.connection) {\n return;\n }\n const migrationsClassFns: Function[] = this.ctx.getClassFunByArr(\n Models.ClassType.MIGRATION,\n );\n\n // console.log({\n // migrationClassesALl: migrationsClassFns.map(f => ClassHelpers.getName(f)),\n // });\n\n const migrationClassesInstances: BaseMigration[] = migrationsClassFns\n .map(classFn => this.ctx.getInstanceBy(classFn as any))\n .map(f => f as BaseMigration)\n .filter(migrationInstance => migrationInstance.isReadyToRun());\n\n // console.log({\n // migrationClassesInstances: migrationsClassFns.map(f =>\n // ClassHelpers.getName(f),\n // ),\n // });\n\n const queryRunner = this.ctx.connection.createQueryRunner();\n await queryRunner.connect();\n\n try {\n await queryRunner.startTransaction();\n\n // Check if the migrations table exists\n // TODO: Implement check for migrations table existence here\n\n // Fetch applied migrations from the database\n const appliedMigrationsForContext = await queryRunner.query(\n `SELECT name, status FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} ` +\n `WHERE context = $1`,\n [this.ctx.contextName],\n );\n\n //#region check and update pending migrations\n const pendingMigrationsForContext = appliedMigrationsForContext.filter(\n m => m.status === this.MIGRATION_STATUS_PENDING,\n );\n\n // Run pending migrations first\n for (const pendingContextMigration of pendingMigrationsForContext) {\n const migrationInstance = migrationClassesInstances.find(\n instance =>\n ClassHelpers.getName(instance) === pendingContextMigration.name,\n );\n\n if (!migrationInstance) {\n this.ctx.logMigrations &&\n console.warn(\n `Pending migration ${pendingContextMigration.name} not found in loaded migrations.`,\n );\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(\n `Completing pending migration: ${pendingContextMigration.name}`,\n );\n await migrationInstance.up(queryRunner);\n\n // Update migration status to 'complete'\n await queryRunner.query(\n `UPDATE ${this.DEFAULT_MIGRATION_TABLE_NAME}\n SET status = $1, applied_at = CURRENT_TIMESTAMP\n WHERE name = $2`,\n [this.MIGRATION_STATUS_COMPLETED, pendingContextMigration.name],\n );\n }\n //#endregion\n\n //#region run new migrations\n for (const instance of migrationClassesInstances) {\n const migrationName = ClassHelpers.getName(instance);\n\n if (appliedMigrationsForContext.some(m => m.name === migrationName)) {\n this.ctx.logMigrations &&\n console.log(`Skipping already applied migration: ${migrationName}`);\n continue;\n }\n\n this.ctx.logMigrations &&\n console.log(`Applying new migration: ${migrationName}`);\n // Insert migration as 'pending' before execution\n await queryRunner.query(\n `INSERT INTO ${this.DEFAULT_MIGRATION_TABLE_NAME} (name, status, context, applied_at) ` +\n `VALUES ($1, $2, $3, NULL)`,\n [migrationName, this.MIGRATION_STATUS_PENDING, this.ctx.contextName],\n );\n\n try {\n // Apply migration\n await instance.up(queryRunner);\n\n // Update migration to 'complete' after successful execution\n await queryRunner.query(\n `UPDATE ${this.DEFAULT_MIGRATION_TABLE_NAME} ` +\n `SET status = '${this.MIGRATION_STATUS_COMPLETED}', applied_at = CURRENT_TIMESTAMP ` +\n `WHERE name = $1`,\n [migrationName],\n );\n } catch (error) {\n this.ctx.logMigrations &&\n console.error(`Failed to apply migration: ${migrationName}`, error);\n\n // Rollback pending migration entry\n await queryRunner.query(\n `DELETE FROM ${this.DEFAULT_MIGRATION_TABLE_NAME} WHERE name = $1`,\n [migrationName],\n );\n\n throw error; // Rethrow to ensure the transaction is rolled back\n }\n }\n\n //#endregion\n\n await queryRunner.commitTransaction();\n } catch (error) {\n this.ctx.logMigrations &&\n console.error('Transaction failed, rolling back:', error);\n await queryRunner.rollbackTransaction();\n } finally {\n await queryRunner.release();\n }\n //#endregion\n }\n //#endregion\n}\n","export class DITaonContainer {\n private static instances = new Map();\n\n static resolve<T>(target: Function): T {\n if (DITaonContainer.instances.has(target)) {\n return DITaonContainer.instances.get(target);\n }\n\n // const tokens = Reflect.getMetadata('design:paramtypes', target) || [];\n const injections = []; // tokens.map(token => Container.inject<any>(token));\n\n const instance = new (target as any)(...injections);\n DITaonContainer.instances.set(target, instance);\n return instance;\n }\n\n static inject<T>(target: new (...args: any[]) => T): T {\n return new Proxy(\n {},\n {\n get: (_, propName) => {\n let instance: T =\n DITaonContainer.instances.get(target) ||\n DITaonContainer.resolve(target);\n return typeof instance[propName] === 'function'\n ? instance[propName].bind(instance)\n : instance[propName];\n },\n set: (_, propName, value) => {\n let instance: T =\n DITaonContainer.instances.get(target) ||\n DITaonContainer.resolve(target);\n instance[propName] = value;\n return true;\n },\n },\n ) as T;\n }\n}\n","import { Models } from './models';\nimport {\n Response as ExpressResponse,\n Request as ExpressRequest,\n} from 'express';\nimport { TaonHelpers } from './helpers/taon-helpers';\nimport { Helpers } from 'tnp-core/websql';\n\nexport const getResponseValue = <T>(\n response: Models.Http.Response<T>,\n options?: { req: ExpressRequest; res: ExpressResponse },\n): Promise<T> => {\n //#region @websqlFunc\n const { req, res } = options || {};\n return new Promise<T>(async (resolve, reject) => {\n //#region @websql\n\n if (typeof response === 'function') {\n const asyncResponse: Models.Http.AsyncResponse<T> = response as any;\n try {\n const result = await asyncResponse(req, res);\n resolve(result as any);\n } catch (e) {\n console.error(e);\n console.error('[taon] Error during function call inside controller');\n Helpers.renderError(e);\n reject(e);\n }\n } else {\n reject(`[taon] Not recognized type of response ${response}`);\n }\n //#endregion\n });\n //#endregion\n};\n","import * as JSON5 from 'json5';\nimport { _ } from 'tnp-core/websql';\n\nimport type { ControllerConfig } from '../config/controller-config';\nimport { MethodConfig } from '../config/method-config';\nimport { Models } from '../models';\n\nimport { ClassHelpers } from './class-helpers';\n\nexport namespace TaonHelpers {\n //#region fillUpTo string\n export const fillUpTo = (s: string, nCharacters: number) => {\n return _.times(nCharacters, n => {\n if (s.charAt(n)) {\n return s.charAt(n);\n }\n return ' ';\n }).join('');\n };\n //#endregion\n\n //#region is good path\n export const isGoodPath = (p: string) => {\n return p && typeof p === 'string' && p.trim() !== '';\n };\n //#endregion\n\n //#region try transform params\n export const tryTransformParam = param => {\n if (typeof param === 'string') {\n let n = Number(param);\n if (!isNaN(n)) return n;\n const bool = param.trim().toLowerCase();\n if (bool === 'true') {\n return true;\n }\n if (bool === 'false') {\n return false;\n }\n try {\n const t = JSON5.parse(param);\n return t;\n } catch (e) {\n return param;\n }\n }\n return param;\n };\n //#endregion\n\n //#region get expores path\n export const getExpressPath = (\n c: ControllerConfig,\n pathOrClassConfig: Partial<MethodConfig>,\n ) => {\n if (typeof pathOrClassConfig === 'string')\n return `${c.calculatedPath}${pathOrClassConfig}`.replace(/\\/$/, '');\n return `${c.calculatedPath}${pathOrClassConfig.path}`.replace(/\\/$/, '');\n };\n //#endregion\n\n //#region get default value tyep\n export const defaultType = value => {\n if (typeof value === 'string') return '';\n if (typeof value === 'boolean') return false;\n if (Array.isArray(value)) return {};\n if (typeof value === 'object') return {};\n };\n //#endregion\n\n //#region parse json with string jsons\n export const parseJSONwithStringJSONs = (\n object: Object,\n waring = false,\n ): Object => {\n // console.log('checking object', object)\n if (!_.isObject(object)) {\n if (waring) {\n console.error(\n `\n parseJSONwithStringJSONs(...)\n Parameter should be a object, but is ${typeof object}\n `,\n object,\n );\n }\n\n return object;\n }\n\n let res = _.cloneDeep(object);\n\n Object.keys(res).forEach(key => {\n let isJson = false;\n try {\n const possibleJSON = JSON.parse(res[key]);\n res[key] = possibleJSON;\n isJson = true;\n } catch (e) {\n isJson = false;\n }\n // console.log(`key ${key} is json `, isJson)\n if (isJson) {\n res[key] = parseJSONwithStringJSONs(res[key], false);\n }\n });\n\n return res;\n };\n //#endregion\n\n //#region is plain file or folder\n export const isPlainFileOrFolder = filePath => {\n return /^([a-zA-Z]|\\-|\\_|\\@|\\#|\\$|\\!|\\^|\\&|\\*|\\(|\\))+$/.test(filePath);\n };\n //#endregion\n\n //#region ips key name repsonse\n export const ipcKeyNameResponse = (\n target: Function,\n methodConfig: Partial<MethodConfig>,\n expressPath: string,\n ) => {\n return [\n 'response',\n ClassHelpers.getName(target),\n methodConfig.methodName,\n methodConfig.type,\n expressPath,\n ].join('--');\n };\n //#endregion\n\n //#region ipc key name request\n export const ipcKeyNameRequest = (\n target: Function,\n methodConfig: Partial<MethodConfig>,\n expressPath: string,\n ) => {\n return [\n 'request',\n ClassHelpers.getName(target),\n methodConfig.methodName,\n methodConfig.type,\n expressPath,\n ].join('--');\n };\n //#endregion\n\n //#region websql mocks\n export const websqlMocks = headers => {\n const response: Express.Response = {\n status(status: any) {\n // console.log({status})\n return {\n send(send: any) {\n // console.log({status})\n },\n };\n },\n setHeader(key: string, value: any) {\n // console.log('Dummy set header', arguments)\n headers[key] = value;\n },\n };\n const request: Express.Request = {};\n return { request, response };\n };\n //#endregion\n}\n","//#region imports\n/* */\n/* */\n \nimport { _ } from 'tnp-core/websql';\nimport { Subscriber } from 'rxjs';\nimport { Symbols } from '../symbols';\nimport { Socket as SocketClient } from 'socket.io-client';\nimport { DefaultEventsMap } from 'socket.io/dist/typed-events';\nimport { RealtimeModels } from './realtime.models';\n//#endregion\n\nexport class RealtimeSubsManager {\n private isListening = false;\n private observers: Subscriber<any>[] = [];\n constructor(private options: RealtimeModels.SubsManagerOpt) {}\n\n //#region methods & getters / start listen if not started\n startListenIfNotStarted(\n realtime: SocketClient<DefaultEventsMap, DefaultEventsMap>,\n ) {\n if (this.options.core.ctx.disabledRealtime) {\n console.warn(`[Taon][startListenIfNotStarted] sockets are disabled`);\n return;\n }\n\n if (!realtime) {\n console.warn(`[Taon][startListenIfNotStarted] invalid socket connection`);\n return;\n }\n\n if (!this.isListening) {\n // console.info(`[BROWSER]][IPC] subscribe to \"${this.options?.roomName}\" by sending event: \"${subscribeEvent}\"`, this.options);\n this.isListening = true;\n\n if (this.options.customEvent) {\n const subscribeEvent = Symbols.REALTIME.ROOM_SUBSCRIBE_CUSTOM(\n this.options.core.ctx.contextName,\n );\n // this means: send to current client custom event notification\n realtime.emit(subscribeEvent, this.options.roomName);\n } else {\n if (_.isString(this.options.property)) {\n const subscribeEvent =\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n );\n // this means: send to current client entity property events updates\n realtime.emit(subscribeEvent, this.options.roomName);\n } else {\n const subscribeEvent =\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n );\n // this means: send to current client entity update events\n realtime.emit(subscribeEvent, this.options.roomName);\n }\n }\n\n // subPath -> SYMBOL - (customevnet|entityupdatebyid){..}{..}\n realtime.on(this.options.roomName, data => {\n this.update(data);\n });\n }\n }\n //#endregion\n\n //#region methods & getters / add observer\n add(observer: Subscriber<any>) {\n // log.info('Add observer')\n this.observers.push(observer);\n }\n //#endregion\n\n //#region methods & getters / remove observer\n remove(observer: Subscriber<any>) {\n // log.info('Remove observer')\n this.observers = this.observers.filter(obs => obs !== observer);\n if (this.observers.length === 0) {\n // log.info('Emit unsubscribe to server SERVER')\n this.isListening = false;\n const { core, customEvent, roomName, property } = this.options;\n\n const realtime = core.socketFE;\n\n if (customEvent) {\n realtime.emit(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_CUSTOM(\n this.options.core.ctx.contextName,\n ),\n roomName,\n );\n } else {\n if (_.isString(property)) {\n realtime.emit(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n ),\n roomName,\n );\n } else {\n realtime.emit(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.options.core.ctx.contextName,\n ),\n roomName,\n );\n }\n }\n }\n }\n //#endregion\n\n //#region methods & getters / update\n private update(data: any) {\n // log.data(`realtime update!!!!! observers=${this.observers?.length} `)\n const ngZone = this.options.core.ctx.ngZone;\n // console.log('updating', data);\n // console.log('ngzone', ngZone);\n this.observers.forEach(observer => {\n // console.log(`observer closed: ${observer.closed}`,observer);\n if (!observer.closed) {\n if (ngZone) {\n ngZone.run(() => {\n observer.next(data);\n });\n } else {\n observer.next(data);\n }\n }\n });\n }\n //#endregion\n}\n","//#region imports\nimport { Observable } from 'rxjs';\nimport { _, UtilsOs } from 'tnp-core/websql';\nimport { Helpers } from 'tnp-core/websql';\n\nimport type { BaseEntity } from '../base-classes/base-entity';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Symbols } from '../symbols';\n\nimport { RealtimeCore } from './realtime-core';\nimport { RealtimeSubsManager } from './realtime-subs-manager';\nimport { RealtimeModels } from './realtime.models';\n\n//#endregion\n\nexport class RealtimeClient {\n private subsManagers: { [path: string]: RealtimeSubsManager } = {};\n constructor(private core: RealtimeCore) {\n this.core = core;\n if (!core.ctx.disabledRealtime) {\n // this.core.ctx.logRealtime &&\n // Helpers.info(`\n\n // [ctx=${this.core.ctx.contextName}] init RealtimeClient (type: ${this.core.ctx.contextType})\n\n // `);\n this.init();\n }\n }\n\n //#region methods & getters / init\n private init() {\n //#region prepare naspaces pathes\n const nspPath = {\n global: this.core.pathFor(),\n realtime: this.core.pathFor(\n Symbols.REALTIME.NAMESPACE(this.core.ctx.contextName),\n ),\n };\n // console.log('[browser] nspPath', nspPath);\n\n if (\n this.core.ctx.config.frontendHost &&\n this.core.ctx.config.frontendHost !== '' &&\n this.core.ctx.isRunningInsideDocker\n ) {\n this.core.ctx.logRealtime &&\n Helpers.logInfo(\n `[${this.core.ctx.contextName}] USING FRONTEND HOST` +\n ` ${this.core.ctx.config.frontendHost} FOR REALTIME`,\n );\n nspPath.global = new URL(\n `${this.core.ctx.frontendHostUri.origin}${nspPath.global.pathname}`,\n );\n nspPath.realtime = new URL(\n `${this.core.ctx.frontendHostUri.origin}${nspPath.realtime.pathname}`,\n );\n } else {\n this.core.ctx.logRealtime &&\n Helpers.logInfo(\n `[${this.core.ctx.contextName}] Not using frontend host for realtime`,\n );\n }\n\n this.core.ctx.logRealtime &&\n console.info(\n '[CLIENT] NAMESPACE GLOBAL ',\n nspPath.global.href + ` host: ${this.core.ctx.host}`,\n );\n\n this.core.ctx.logRealtime &&\n console.info(\n '[CLIENT] NAMESPACE REALTIME',\n nspPath.realtime.href + ` host: ${this.core.ctx.host}`,\n );\n //#endregion\n\n //#region prepare globa FE socket\n this.core.conectSocketFE = this.core.strategy.ioClient(\n nspPath.global.origin,\n {\n path: nspPath.global.pathname,\n },\n );\n\n if (this.core.conectSocketFE.on) {\n this.core.conectSocketFE.on('connect', () => {\n // console.info(\n // `[CLIENT] connected to GLOBAL namespace ${global.nsp} of host: ${context.host}`,\n // );\n this.core.ctx.logRealtime &&\n console.info(\n `[CLIENT] connected to GLOBAL namespace ${nspPath.global.pathname}` +\n ` of host: ${this.core.ctx.host}`,\n );\n });\n }\n\n //#endregion\n\n //#region prepare realtime FE socket\n this.core.socketFE = this.core.strategy.ioClient(nspPath.realtime.origin, {\n path: nspPath.realtime.pathname,\n });\n\n if (this.core.socketFE.on) {\n this.core.socketFE.on('connect', () => {\n // console.info(\n // `[CLIENT] connected to REALTIME namespace ${realtime.nsp} host: ${context.host}`,\n // );\n this.core.ctx.logRealtime &&\n console.info(\n `[CLIENT] connected to REALTIME namespace ${nspPath.realtime.pathname}` +\n ` host: ${this.core.ctx.host}`,\n );\n });\n }\n\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / listen changes entity\n /**\n * Changes trigger on backend needs to be done manually.. example code:\n *\n * ...\n * Context.Realtime.Server.TrigggerEntityChanges(myEntityInstance);\n * ...\n */\n listenChangesEntity(\n entityClassFn: Function,\n idOrUniqValue: any,\n options: RealtimeModels.ChangeOption,\n ) {\n options = options || ({} as any);\n\n //#region parameters validation\n const { property, customEvent } = options;\n const className = !customEvent && ClassHelpers.getName(entityClassFn);\n\n if (_.isString(property)) {\n if (property.trim() === '') {\n throw new Error(\n `[Taon][listenChangesEntity.. incorect property '' for ${className}`,\n );\n }\n }\n //#endregion\n\n return new Observable(observer => {\n //#region prepare parameters for manager\n\n if (this.core.ctx.disabledRealtime) {\n console.error(`[Taon][realtime rxjs] remove taon config flag:\n\n ...\n disabledRealtime: true\n ...\n\nto use socket realtime connection;\n `);\n return () => {\n // empty nothing to do\n };\n }\n\n let roomName: string;\n\n if (customEvent) {\n roomName = Symbols.REALTIME.ROOM_NAME_CUSTOM(\n this.core.ctx.contextName,\n customEvent,\n );\n } else {\n roomName = _.isString(property)\n ? Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY_PROPERTY(\n this.core.ctx.contextName,\n className,\n property,\n idOrUniqValue,\n )\n : Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY(\n this.core.ctx.contextName,\n className,\n idOrUniqValue,\n );\n }\n\n const roomSubOptions: RealtimeModels.SubsManagerOpt = {\n core: this.core,\n property,\n roomName,\n customEvent,\n };\n //#endregion\n\n const subManagerId =\n this.getUniqueIdentifierForConnection(roomSubOptions);\n if (!this.subsManagers[subManagerId]) {\n this.subsManagers[subManagerId] = new RealtimeSubsManager(\n roomSubOptions,\n );\n }\n const inst = this.subsManagers[subManagerId];\n inst.add(observer);\n\n inst.startListenIfNotStarted(this.core.socketFE);\n\n return () => {\n inst.remove(observer);\n };\n });\n }\n\n //#endregion\n\n //#region listen changes entity table\n listenChangesEntityTable(entityClassFn: Function) {\n const className = ClassHelpers.getName(entityClassFn);\n return this.listenChangesEntity(entityClassFn, void 0, {\n customEvent: Symbols.REALTIME.TABLE_CHANGE(\n this.core.ctx.contextName,\n className,\n ),\n });\n }\n\n //#endregion\n\n //#region listen change entity object\n /**\n * Changes trigger on backend needs to be done manually.. example code:\n *\n * ...\n * Context.Realtime.Server.TrigggerEntityChanges(myEntityInstance);\n * // or\n * Context.Realtime.Server.TrigggerEntityPropertyChanges(myEntityInstance,{ property: 'geolocationX' });\n * ...\n */\n listenChangesEntityObj<T extends BaseEntity>(\n entity: T,\n options?: RealtimeModels.ChangeOption,\n ) {\n const classFn = ClassHelpers.getClassFnFromObject(entity);\n const uniqueKey = ClassHelpers.getUniqueKey(classFn);\n return this.listenChangesEntity(classFn, entity[uniqueKey], options);\n }\n //#endregion\n\n //#region listen changes custom event\n listenChangesCustomEvent(customEvent: string) {\n return this.listenChangesEntity(void 0, void 0, {\n customEvent,\n });\n }\n //#endregion\n\n //#region methods & getters / trigger custom event\\\n /**\n * Trigger custom event on backend\n * @param customEvent global event name\n * @param dataToPush\n */\n public triggerCustomEvent(customEvent: string, dataToPush?: any): void {\n this.core.socketFE.emit(customEvent, dataToPush);\n }\n //#endregion\n\n //#region methods & getters / get room id from\n private getUniqueIdentifierForConnection(\n options: RealtimeModels.SubsManagerOpt,\n ): string {\n let url: URL = new URL(options.core.ctx.host);\n let contextNameForCommunication = options.core.ctx.contextNameForCommunication;\n return `${contextNameForCommunication}:${url.origin}|${options.roomName}|${options.property}|${options.customEvent}`;\n }\n //#endregion\n}\n","//#region imports\n/* */ \n\nimport { Observable, Subject } from 'rxjs';\nimport { Helpers, _ } from 'tnp-core/websql';\n\nimport type { BaseEntity } from '../base-classes/base-entity';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Symbols } from '../symbols';\n\nimport { RealtimeCore } from './realtime-core';\n\n//#endregion\n\nexport class RealtimeServer {\n // private jobs = {};\n constructor(private core: RealtimeCore) {\n this.core = core;\n if (core.ctx.disabledRealtime || this.core.ctx.isRemoteHost) {\n return;\n }\n //#region @websql\n this.init();\n //#endregion\n }\n\n //#region methods & getters / init\n private init() {\n //#region @browser\n if (!this.core.ctx.config.frontendHost) {\n console.warn(`[Taon][Realtime]\n\n Frontend host is not defined\n REALTIME COMMUNICATION WILL NOT WORK\n\n provide \"frontendHost\" property in your taon config\n\n `);\n }\n //#endregion\n\n //#region @websql\n\n //#region prepare namespaces pathes\n const nspPathGlobal = this.core.pathFor();\n const nspPathRealtime = this.core.pathFor(\n Symbols.REALTIME.NAMESPACE(this.core.ctx.contextName),\n );\n\n //#endregion\n\n // console.log('[backend] nspPath', nspPath);\n\n const cors = {\n origin: this.core.ctx.frontendHostUri.origin, // only origin needs to be set - pathname not needed\n methods: this.core.allHttpMethods,\n };\n\n // console.log('frontendHost', this.core.ctx.config.frontendHost);\n // console.log('cors', cors);\n\n //#region prepare global BE socket\n this.core.connectSocketBE = this.core.strategy.ioServer(\n Helpers.isWebSQL ? this.core.ctx.uriOrigin : this.core.ctx.serverTcpUdp,\n {\n path: nspPathGlobal.pathname,\n cors,\n }, // @ts-ignore\n this.core.ctx,\n );\n\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] CREATE GLOBAL NAMESPACE: '${this.core.connectSocketBE.path()}'` +\n ` , path: '${nspPathGlobal.pathname}'`,\n );\n\n this.core.connectSocketBE.on('connection', clientSocket => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] client connected to namespace \"${nspPathGlobal.pathname}\", ` +\n ` host: ${this.core.ctx.host}`,\n );\n });\n\n //#endregion\n\n //#region prepare realtime BE socket\n this.core.socketBE = this.core.strategy.ioServer(\n Helpers.isWebSQL || Helpers.isElectron\n ? this.core.ctx.uriOrigin\n : this.core.ctx.serverTcpUdp,\n {\n path: nspPathRealtime.pathname,\n cors,\n }, // @ts-ignore\n this.core.ctx,\n );\n\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] CREATE REALTIME NAMESPACE: '${this.core.socketBE.path()}'` +\n ` , path: '${nspPathRealtime.pathname}' `,\n );\n\n this.core.socketBE.on('connection', backendSocketForClient => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] client connected to namespace \"${nspPathRealtime.pathname}\", ` +\n ` host: ${this.core.ctx.host}`,\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_SUBSCRIBE_CUSTOM(this.core.ctx.contextName),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `Joining room ${roomName} in namespace REALTIME` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.join(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Joining room ${roomName} in namespace REALTIME` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.join(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_SUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Joining room ${roomName} in namespace REALTIME ` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.join(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_CUSTOM(this.core.ctx.contextName),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Leaving room ${roomName} in namespace REALTIME` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.leave(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Leaving room ${roomName} in namespace REALTIME ` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.leave(roomName);\n },\n );\n\n backendSocketForClient.on(\n Symbols.REALTIME.ROOM_UNSUBSCRIBE_ENTITY_PROPERTY_UPDATE_EVENTS(\n this.core.ctx.contextName,\n ),\n roomName => {\n this.core.ctx.logRealtime &&\n console.info(\n `[backend] Leaving room ${roomName} in namespace REALTIME ` +\n ` host: ${this.core.ctx.contextName}/${this.core.ctx.host}`,\n );\n backendSocketForClient.leave(roomName);\n },\n );\n });\n\n //#endregion\n\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / trigger changes\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private triggerChanges(\n entityObjOrClass: Function,\n property?: string,\n valueOfUniqueProperty?: number | string,\n customEvent?: string,\n customEventData?: any,\n ) {\n // console.log('customEventData', customEventData);\n // console.info('__triger entity changes');\n //#region @websql\n\n let roomName: string;\n\n if (this.core.ctx.disabledRealtime || this.core.ctx.isRemoteHost) {\n return;\n }\n\n if (customEvent) {\n roomName = Symbols.REALTIME.ROOM_NAME_CUSTOM(\n this.core.ctx.contextName,\n customEvent,\n );\n } else {\n let entityFn = entityObjOrClass as Function;\n const entityIsObject =\n !_.isFunction(entityObjOrClass) && _.isObject(entityObjOrClass);\n\n if (entityIsObject) {\n entityFn = ClassHelpers.getClassFnFromObject(entityObjOrClass);\n }\n\n const uniqueKey = ClassHelpers.getUniqueKey(entityFn);\n\n if (entityIsObject) {\n valueOfUniqueProperty = entityObjOrClass[uniqueKey];\n }\n\n if (!valueOfUniqueProperty) {\n Helpers.error(\n `[Taon][Realtime] Entity without iD ! ${ClassHelpers.getName(\n entityFn,\n )} `,\n true,\n true,\n );\n return;\n }\n\n roomName = _.isString(property)\n ? Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY_PROPERTY(\n this.core.ctx.contextName,\n ClassHelpers.getName(entityFn),\n property,\n valueOfUniqueProperty,\n )\n : Symbols.REALTIME.ROOM_NAME_UPDATE_ENTITY(\n this.core.ctx.contextName,\n ClassHelpers.getName(entityFn),\n valueOfUniqueProperty,\n );\n }\n\n this.core.socketBE.in(roomName).emit(\n roomName, // roomName == eventName in room na\n customEvent ? customEventData : '',\n );\n //#endregion\n }\n //#endregion\n\n //#region entity changes\n\n //#region methods & getters / trigger entity changes\n public triggerEntityChanges(\n entityObjOrClass: Function,\n idToTrigger?: number | string,\n ) {\n if (this.core.ctx.disabledRealtime) {\n const className = ClassHelpers.getName(entityObjOrClass);\n\n console.warn(\n `[Taon][TriggerEntityChanges] Entity \"${className}' is not realtime`,\n );\n return;\n }\n this.triggerChanges(entityObjOrClass as any, void 0, idToTrigger);\n }\n //#endregion\n\n //#region methods & getters / trigger entity property changes\n public triggerEntityPropertyChanges<ENTITY extends BaseEntity>(\n entityObjOrClass: new (...args) => ENTITY,\n property: keyof ENTITY | (keyof ENTITY)[],\n idToTrigger?: number | string,\n ) {\n if (this.core.ctx.disabledRealtime) {\n const className = ClassHelpers.getName(entityObjOrClass);\n\n console.warn(\n `[Taon][TriggerEntityPropertyChanges][property=${\n property as string\n }] Entity \"${className}' is not realtime`,\n );\n return;\n }\n\n if (_.isArray(property)) {\n property.forEach(propertyFromArr => {\n this.triggerChanges(\n entityObjOrClass,\n propertyFromArr as any,\n idToTrigger,\n );\n });\n } else {\n this.triggerChanges(entityObjOrClass, property as any, idToTrigger);\n }\n }\n //#endregion\n\n //#region methods & getters / trigger entity table changes\n public triggerEntityTableChanges(entityClassOrInstance: Function | object) {\n const className = ClassHelpers.getName(entityClassOrInstance);\n\n if (this.core.ctx.disabledRealtime) {\n console.warn(\n `[Taon][TriggerEntityTableChanges] Entity \"${className}' is not realtime`,\n );\n return;\n }\n\n this.triggerChanges(\n entityClassOrInstance as any,\n void 0,\n void 0,\n Symbols.REALTIME.TABLE_CHANGE(this.core.ctx.contextName, className),\n );\n }\n //#endregion\n\n //#endregion\n\n //#region custom changes\n\n //#region methods & getters / trigger custom event\n public triggerCustomEvent(customEvent: string, dataToPush: any) {\n this.triggerChanges(void 0, void 0, void 0, customEvent, dataToPush);\n }\n //#endregion\n\n //#region methods & getters / listen custom events from users\n /**\n * Listen to custom events from users\n * @param customEvent global event name\n */\n listenChangesCustomEvent(customEvent: string): Observable<any> {\n //#region @websqlFunc\n const sub = new Subject<any>();\n\n this.core.socketBE.on('connection', backendSocketForClient => {\n backendSocketForClient.on(customEvent, (data, ...args) => {\n sub.next(data);\n });\n });\n\n return sub.asObservable();\n //#endregion\n }\n //#endregion\n\n //#endregion\n}\n","import { EndpointContext } from '../../endpoint-context';\nimport type { Server, ServerOptions } from 'socket.io';\nimport type { io } from 'socket.io-client';\nimport { DefaultEventsMap } from 'socket.io/dist/typed-events';\n\nexport abstract class RealtimeStrategy {\n constructor(protected ctx: EndpointContext) {}\n\n get ioClient(): typeof io {\n throw new Error('Not implemented');\n }\n\n ioServer(\n url: string,\n opt: ServerOptions,\n ): Server<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, any> {\n throw new Error('Not implemented');\n }\n\n abstract toString(): string;\n}\n","//#region imports\nimport type { ipcRenderer } from 'electron'; // @browser\n/* */ \n/* */ \nimport { Server, ServerOptions } from 'socket.io';\nimport type { io, ManagerOptions, SocketOptions } from 'socket.io-client';\n\nimport { EndpointContext } from '../../endpoint-context';\nimport { Symbols } from '../../symbols';\nimport { RealtimeModels } from '../realtime.models';\n\nimport { RealtimeStrategy } from './realtime-strategy';\n//#endregion\n\n//#region mock server ipc\nexport class MockServerIpc {\n static serverByContextName = new Map<string, MockServerIpc>();\n\n static from(contextName: string): MockServerIpc {\n if (!MockServerIpc.serverByContextName.has(contextName)) {\n MockServerIpc.serverByContextName.set(\n contextName,\n new MockServerIpc(contextName),\n );\n }\n return MockServerIpc.serverByContextName.get(contextName);\n }\n\n namespacesByName = new Map<string, MockNamespaceIpc>();\n\n //#region constructor\n constructor(public contextName: string) {\n MockServerIpc.serverByContextName.set(contextName, this);\n }\n //#endregion\n\n //#region of\n of(namespace: string): MockNamespaceIpc {\n if (!this.namespacesByName.has(namespace)) {\n this.namespacesByName.set(\n namespace,\n new MockNamespaceIpc(namespace, this),\n );\n }\n return this.namespacesByName.get(namespace);\n }\n //#endregion\n}\n//#endregion\n\n//#region mock namespace ipc\nexport class MockNamespaceIpc {\n //#region fields & getters\n electronClients = new Set<Electron.WebContents>();\n roomsByRoomName: {\n [roomName: string]: Set<Electron.WebContents>;\n } = {};\n\n private namespaceEventHandlers: {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n } = {};\n //#endregion\n\n //#region constructor\n constructor(\n /**\n * Namespace name\n */\n public name: string,\n public server: MockServerIpc,\n ) {}\n //#endregion\n\n //#region on\n on(eventName: string, callback: RealtimeModels.EventHandler) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region off\n off(event: string, callback?: RealtimeModels.EventHandler) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region emit\n emit(eventName: string, ...args: any[]) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region to\n to(roomName: string) {\n const electronClientsInroom = this.roomsByRoomName[roomName];\n return new RoomEmitterIpc(electronClientsInroom, this.name, true);\n }\n //#endregion\n\n //#region in\n in(roomName: string) {\n const electronClientsInroom = this.roomsByRoomName[roomName];\n return new RoomEmitterIpc(electronClientsInroom, this.name, false);\n }\n //#endregion\n\n //#region join\n join(webContents: Electron.WebContents, roomName: string) {\n if (!this.roomsByRoomName[roomName]) {\n this.roomsByRoomName[roomName] = new Set();\n }\n this.roomsByRoomName[roomName].add(webContents);\n }\n //#endregion\n\n //#region leave\n leave(webContents: Electron.WebContents, roomName: string) {\n if (this.roomsByRoomName[roomName]) {\n this.roomsByRoomName[roomName].delete(webContents);\n if (this.roomsByRoomName[roomName].size === 0) {\n delete this.roomsByRoomName[roomName];\n }\n }\n }\n //#endregion\n\n //#region path\n path() {\n return this.name;\n }\n //#endregion\n\n //#region get nsp\n get nsp() {\n const self = this;\n return {\n get name() {\n return self.name;\n },\n };\n }\n //#endregion\n}\n\n//#endregion\n\n//#region room emitter ipc\nclass RoomEmitterIpc {\n //#region constructor\n constructor(\n private electronClients: Set<Electron.WebContents>,\n /**\n * namespace name\n */\n private name: string,\n private includeSender: boolean = false,\n private sender: MockSocketIpc = null, // TODO QUICK FIX how to include sender\n ) {}\n //#endregion\n\n //#region emit in room\n emit(eventName: string, ...args: any[]): void {\n const emitEvent = `(${this.name}) \"${eventName}\"`;\n this.electronClients?.forEach(webContents => {\n webContents.send(emitEvent, ...args);\n });\n }\n //#endregion\n}\n//#endregion\n\n//#region mock socket ipc\nexport class MockSocketIpc {\n //#region fields & getters\n\n //#region fields & getters / ipc renderer\n //#region @browser\n ipcRenderer!: typeof ipcRenderer;\n //#endregion\n //#endregion\n\n //#region fields & getters / event handlers by name\n private socketEventHandlers = {} as {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n };\n //#endregion\n\n //#region fields & getters / name\n get name() {\n return this.namespaceName;\n }\n //#endregion\n\n //#endregion\n\n //#region constructor\n /**\n * @param namespaceName instead url for ipc\n */\n constructor(public namespaceName: string) {\n //#region @browser\n this.ipcRenderer = (window as any).require('electron').ipcRenderer;\n //#endregion\n }\n //#endregion\n\n //#region on\n on(eventName: string, callback: (event: any, ...args: any[]) => void) {\n //#region @browser\n if (!this.socketEventHandlers[eventName]) {\n this.socketEventHandlers[eventName] = new Set();\n }\n this.socketEventHandlers[eventName].add(callback);\n\n const listenToEvent = `(${this.name}) \"${eventName}\"`;\n this.ipcRenderer.on(listenToEvent, (rendereEvent, data) => {\n callback(data);\n });\n\n if (eventName === 'connect') {\n const connectionEventKey = `(${this.name}) \"connection\"`;\n this.ipcRenderer.send(connectionEventKey, this.name);\n }\n //#endregion\n }\n //#endregion\n\n //#region off\n off(event: string, callback?: (event: any, ...args: any[]) => void) {\n //#region @browser\n if (!this.socketEventHandlers[event]) {\n return;\n }\n\n if (callback) {\n this.socketEventHandlers[event].delete(callback);\n } else {\n delete this.socketEventHandlers[event];\n }\n const removeListener = `(${this.name}) \"${event}\"`;\n\n this.ipcRenderer.removeListener(removeListener, data => {\n callback(data);\n });\n //#endregion\n }\n //#endregion\n\n //#region emit\n emit(event: string, ...args: any[]) {\n //#region @browser\n const emitEvent = `(${this.name}) \"${event}\"`;\n this.ipcRenderer.send(emitEvent, ...args);\n //#endregion\n }\n //#endregion\n}\n//#endregion\n\n/**\n * Purpose:\n * - backend-browser communication between 2 processes in electron mode\n */\nexport class RealtimeStrategyIpc extends RealtimeStrategy {\n //#region to string\n toString(): string {\n return 'ipc';\n }\n //#endregion\n\n //#region constructor\n constructor(protected ctx: EndpointContext) {\n super(ctx);\n }\n //#endregion\n\n //#region server & io\n ioServer(__: string, opt: ServerOptions) {\n const namespace = opt?.path || '/';\n const server = MockServerIpc.from(this.ctx.contextName);\n return server.of(namespace) as any;\n }\n\n get ioClient() {\n const clientIo = (\n __: string,\n opt?: Partial<ManagerOptions & SocketOptions>,\n ): MockSocketIpc => {\n const namespace = opt?.path || '/';\n return new MockSocketIpc(namespace);\n };\n return clientIo as any;\n }\n //#endregion\n}\n","//#region imports\nimport type { EndpointContext } from '../../endpoint-context';\nimport { RealtimeStrategy } from './realtime-strategy';\nimport { Symbols } from '../../symbols';\nimport { ManagerOptions, SocketOptions } from 'socket.io-client';\nimport { RealtimeModels } from '../realtime.models';\nimport { ServerOptions } from 'socket.io';\n//#endregion\n\n//#region mock server\nclass MockServer {\n static serverByUrl = new Map<string, MockServer>();\n static from(url: string): MockServer {\n if (!MockServer.serverByUrl.has(url)) {\n MockServer.serverByUrl.set(url, new MockServer(url));\n }\n return MockServer.serverByUrl.get(url);\n }\n\n get allServers() {\n return Array.from(MockServer.serverByUrl.values());\n }\n\n namespacesByName = new Map<string, MockNamespace>();\n\n //#region constructor\n constructor(public url: string) {\n MockServer.serverByUrl.set(url, this);\n }\n //#endregion\n\n //#region of\n of(namespace: string): MockNamespace {\n if (!this.namespacesByName.has(namespace)) {\n this.namespacesByName.set(namespace, new MockNamespace(namespace, this));\n }\n return this.namespacesByName.get(namespace);\n }\n //#endregion\n\n //#region path\n path() {\n return this.url;\n }\n //#endregion\n}\n//#endregion\n\n//#region mock namespace\nclass MockNamespace {\n /**\n * All sockets connected to this namespace\n */\n public readonly allSocketsForNamespace = new Set<MockSocket>();\n /**\n * Rooms and their sockets\n */\n private socketByRoomName: {\n [roomName: string]: Set<MockSocket>;\n } = {};\n /**\n * Event handlers for this namespace\n */\n public namespaceEventHandlers: {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n } = {};\n\n //#region constructor\n constructor(\n /**\n * unique namespace name\n */\n public name: string,\n public server: MockServer,\n ) {}\n //#endregion\n\n //#region on\n on(eventName: string, handler: RealtimeModels.EventHandler): void {\n // console.log(`ON EVNET event \"${eventName}\"`);\n if (!this.namespaceEventHandlers[eventName]) {\n this.namespaceEventHandlers[eventName] =\n new Set<RealtimeModels.EventHandler>();\n }\n\n if (!this.namespaceEventHandlers[eventName].has(handler)) {\n this.namespaceEventHandlers[eventName].add(handler);\n }\n\n // QUICK_FIX Emit connection event for backend\n // TODO make it in emit\n if (eventName === 'connection') {\n setTimeout(() => {\n this.emit('connection', this);\n });\n }\n }\n //#endregion\n\n //#region emit\n emit(event: string, ...args: any[]): void {\n this.allSocketsForNamespace?.forEach(socket => {\n socket.emit(event, ...args);\n });\n }\n //#endregion\n\n //#region connect\n connect(socket: MockSocket): void {\n this.allSocketsForNamespace.add(socket);\n socket.namespaceInstance = this;\n }\n //#endregion\n\n //#region to\n to(roomName: string): RoomEmitter {\n const socketsInRoom = this.socketByRoomName[roomName];\n return new RoomEmitter(socketsInRoom, true);\n }\n //#endregion\n\n //#region to room\n in(roomName: string): RoomEmitter {\n const socketsInRoom = this.socketByRoomName[roomName];\n return new RoomEmitter(socketsInRoom, false);\n }\n //#endregion\n\n //#region join room\n joinRoom(roomName: string, socket: MockSocket): void {\n if (!this.socketByRoomName[roomName]) {\n this.socketByRoomName[roomName] = new Set<MockSocket>();\n }\n this.socketByRoomName[roomName].add(socket);\n }\n //#endregion\n\n //#region leave room\n leaveRoom(roomName: string, socket: MockSocket): void {\n const roomSockets = this.socketByRoomName[roomName];\n if (roomSockets) {\n this.socketByRoomName[roomName].delete(socket);\n }\n }\n //#endregion\n\n //#region nsp + name\n get nsp() {\n const self = this;\n return {\n get name() {\n return self.name;\n },\n };\n }\n //#endregion\n\n path() {\n return this.name;\n }\n}\n//#endregion\n\n//#region room emitter\nclass RoomEmitter {\n //#region constructor\n constructor(\n private sockets: Set<MockSocket>,\n private includeSender: boolean = false,\n private sender: MockSocket = null, // TODO QUICK FIX how to include sender\n ) {}\n //#endregion\n\n //#region emit in room\n emit(event: string, ...args: any[]): void {\n // console.log(\n // `emit room emiter ${event} , this.sockets ${this.sockets.length}`,\n // );\n this.sockets?.forEach(socket => {\n // console.log(`emit event ${event} to socket ${socket.id}`);\n if (this.includeSender || socket !== this.sender) {\n socket.emit(event, ...args);\n }\n });\n }\n //#endregion\n}\n//#endregion\n\n//#region mock socket\nclass MockSocket {\n public namespaceInstance: MockNamespace;\n private socketEventHandlers = {} as {\n [eventName: string]: Set<RealtimeModels.EventHandler>;\n };\n get id() {\n return this.nsp.name;\n }\n\n //#region constructor\n constructor(\n public url: string,\n opts?: Partial<ManagerOptions & SocketOptions>,\n ) {\n // @ts-ignore\n const [baseUrl, namespace] = [url, opts.path || '/'];\n // console.log({ url, baseUrl, namespace });\n const namespaceName = namespace || '/';\n\n // Look up the server instance from the registry\n const server = MockServer.from(url);\n\n const ns = server.of(namespaceName);\n ns.connect(this);\n }\n //#endregion\n\n //#region nsp + name\n get nsp() {\n const self = this;\n return {\n get name() {\n return self.namespaceInstance?.name;\n },\n };\n }\n //#endregion\n\n //#region path\n path() {\n return this.namespaceInstance?.name;\n }\n //#endregion\n\n //#region on\n on(eventName: string, handler: RealtimeModels.EventHandler): void {\n if (!this.socketEventHandlers[eventName]) {\n this.socketEventHandlers[eventName] =\n new Set<RealtimeModels.EventHandler>();\n }\n this.socketEventHandlers[eventName].add(handler);\n\n // QUICK_FIX client initing itself\n if (eventName === 'connect') {\n setTimeout(() => {\n this.emit('connect');\n // this.namespaceInstance.emit('connection', this); @UNCOMMNENT\n });\n }\n }\n //#endregion\n\n //#region emit\n emit(eventName: string, ...args: any[]): void {\n eventName = eventName || '';\n\n if (eventName.includes(`:${Symbols.REALTIME.KEYroomSubscribe}`)) {\n const room = args[0];\n this.join(room);\n } else if (eventName.includes(`:${Symbols.REALTIME.KEYroomUnsubscribe}`)) {\n const room = args[0];\n this.leave(room);\n } else {\n // console.log('try to emit event (to server)', event);\n if (this.namespaceInstance) {\n const namespaceEventHandlers =\n this.namespaceInstance.namespaceEventHandlers[eventName] || [];\n\n // emit to namespace events\n for (const namespaceEventHandler of namespaceEventHandlers) {\n if (namespaceEventHandler) {\n namespaceEventHandler(...args);\n }\n }\n\n const allSocketsForNamespaceExceptCurrent = Array.from(\n this.namespaceInstance.allSocketsForNamespace.values(),\n ).filter(socket => socket !== this);\n\n // emit to all sockets in namespace\n for (const socket of allSocketsForNamespaceExceptCurrent) {\n const socketEventHandlers = socket.socketEventHandlers[eventName];\n for (const socketEventHandler of socketEventHandlers) {\n if (socketEventHandler) {\n socketEventHandler(...args);\n }\n }\n }\n\n // Emit to current socket\n const socketEventHandlers = this.socketEventHandlers[eventName] || [];\n for (const clientHandler of socketEventHandlers) {\n if (clientHandler) {\n clientHandler(...args);\n }\n }\n }\n }\n }\n //#endregion\n\n //#region join room\n join(roomName: string): void {\n this.namespaceInstance.joinRoom(roomName, this);\n }\n //#endregion\n\n //#region leave room\n leave(roomName: string): void {\n this.namespaceInstance.leaveRoom(roomName, this);\n }\n //#endregion\n}\n//#endregion\n\n/**\n * Purpose:\n * - browser-browser communication mock (in websql mode)\n */\nexport class RealtimeStrategyMock extends RealtimeStrategy {\n //#region toString\n toString(): string {\n return 'mock';\n }\n //#endregion\n\n //#region constructor\n constructor(protected ctx: EndpointContext) {\n super(ctx);\n }\n //#endregion\n\n //#region server & io\n ioServer(url: string, opt: ServerOptions) {\n const server = MockServer.from(url || this.ctx.uriOrigin);\n return server.of(opt?.path || '/') as any;\n }\n\n get ioClient() {\n const clientIo = (\n uri: string,\n opts?: Partial<ManagerOptions & SocketOptions>,\n ): MockSocket => {\n return new MockSocket(uri || this.ctx.uriOrigin, opts as any);\n };\n return clientIo as any;\n }\n //#endregion\n}\n","import { DefaultEventsMap } from 'socket.io/dist/typed-events';\nimport { EndpointContext } from '../../endpoint-context';\nimport { RealtimeStrategy } from './realtime-strategy';\n/* */\n/* */\n \nimport { io, ManagerOptions, Socket, SocketOptions } from 'socket.io-client';\n\n/**\n * Purpose:\n * - backend-browser communication\n * - backend-backend communication\n */\nexport class RealtimeStrategySocketIO extends RealtimeStrategy {\n toString(): string {\n return 'socket-io';\n }\n constructor(protected ctx: EndpointContext) {\n super(ctx);\n }\n\n ioServer(...args) {\n/* */\n/* */\n return (void 0);\n }\n\n get ioClient() {\n return io;\n }\n}\n","//#region imports\nimport { Server } from 'socket.io';\nimport { DefaultEventsMap } from 'socket.io/dist/typed-events';\nimport { Socket as SocketClient } from 'socket.io-client';\nimport { Helpers } from 'tnp-core/websql';\n\nimport { apiPrefix } from '../constants';\nimport type { EndpointContext } from '../endpoint-context';\n\nimport { RealtimeClient } from './realtime-client';\nimport { RealtimeServer } from './realtime-server';\nimport type { RealtimeStrategy } from './realtime-strategy';\nimport {\n RealtimeStrategyIpc,\n RealtimeStrategyMock,\n RealtimeStrategySocketIO,\n} from './realtime-strategy';\n\n//#endregion\n\n/**\n * Realtime class\n * - mock (when browser-browser)\n * - sockets (from socket io when backend-browser)\n * - ipc (when electron is used or between processes)\n * - webworker (when webworker is used in browser or nodejs)\n */\nexport class RealtimeCore {\n //#region fields\n readonly allHttpMethods = [\n 'GET',\n 'POST',\n 'PUT',\n 'DELETE',\n 'PATCH',\n 'OPTIONS',\n 'HEAD',\n ];\n public readonly client: RealtimeClient;\n public readonly server: RealtimeServer;\n public readonly strategy: RealtimeStrategy;\n\n /**\n * global FE socket - only for established connection\n */\n public conectSocketFE: SocketClient<DefaultEventsMap, DefaultEventsMap>;\n /**\n * socket for namespaces and rooms\n */\n public socketFE: SocketClient<DefaultEventsMap, DefaultEventsMap>;\n /**\n * global BE socket - only for established connection\n */\n public connectSocketBE: Server<\n DefaultEventsMap,\n DefaultEventsMap,\n DefaultEventsMap,\n any\n >;\n /**\n * socket for namespaces and rooms\n */\n public socketBE: Server<\n DefaultEventsMap,\n DefaultEventsMap,\n DefaultEventsMap,\n any\n >;\n //#endregion\n\n //#region constructor\n constructor(public ctx: EndpointContext) {\n this.ctx = ctx;\n this.strategy = this.resolveStrategy();\n\n // this.ctx.logRealtime &&\n // console.log(`\n\n // [ctx=${this.ctx.contextName}] realtime strategy: ${this.strategy}, context type: ${this.ctx.contextType}\n\n // `);\n if (Helpers.isWebSQL) {\n this.server = new RealtimeServer(this as any);\n // console.log('DONE INITING SERVER');\n this.client = new RealtimeClient(this as any);\n // console.log('DONE INITING CLIENT');\n } else {\n this.client = new RealtimeClient(this as any);\n this.server = new RealtimeServer(this as any);\n }\n }\n //#endregion\n\n //#region methods & getters / resovle staraegy\n private resolveStrategy(): RealtimeStrategy {\n // console.log(`[taon] resolveStrategy for this.ctx.mode ${this.ctx.mode}`);\n if (\n this.ctx.mode === 'backend-frontend(websql)' ||\n this.ctx.mode === 'backend-frontend(websql-electron)'\n ) {\n // debugger\n return new RealtimeStrategyMock(this.ctx);\n }\n if (this.ctx.mode === 'backend-frontend(ipc-electron)') {\n return new RealtimeStrategyIpc(this.ctx);\n }\n // if (this.ctx.mode === 'backend-frontend(tcp+udp)') {\n // return new RealtimeStrategySocketIO(this.ctx);\n // }\n // if (this.ctx.mode === 'remote-backend(tcp+udp)') {\n // return new RealtimeStrategySocketIO(this.ctx);\n // }\n return new RealtimeStrategySocketIO(this.ctx);\n }\n //#endregion\n\n //#region path for\n public pathFor(namespace?: string) {\n let nsp = namespace ? namespace : '';\n nsp = nsp === '/' ? '' : nsp;\n const contextNameForCommunication = this.ctx.contextNameForCommunication;\n\n let prefix = `${apiPrefix}/${contextNameForCommunication}/udp`;\n if (Helpers.isElectron) {\n prefix = ``;\n }\n const href =\n `${this.ctx.uriOrigin}${this.ctx.uriPathnameOrNothingIfRoot}` +\n `/${prefix}${prefix && nsp ? '-' + nsp : nsp}`;\n // console.log(`HREF: ${href}, nsp: ${nsp}`)\n return new URL(href) as URL;\n }\n //#endregion\n}\n","//#region import\nimport { Subject } from 'rxjs';\n// TODO @LAST fix taon storage for ssr\n// import { Stor } from 'taon-storage/src';\nimport { Helpers, _ } from 'tnp-core/websql';\n\n//#endregion\n\nconst ENV = globalThis['ENV'];\n\n// @Injectable({ providedIn: 'root' }) TODO make it angular service\nexport class TaonAdminService {\n //#region singleton\n private static _instance: TaonAdminService;\n public static get Instance() {\n if (!this._instance) {\n this._instance = new TaonAdminService();\n }\n return this._instance;\n }\n //#endregion\n\n //#region fields & getters\n public scrollableEnabled = false; // TOOD false by default\n private onEditMode = new Subject();\n onEditMode$ = this.onEditMode.asObservable();\n\n //#region fields & getters / popup is open\n\n // TODO @LAST fix taon storage for ssr\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public adminPanelIsOpen: boolean;\n //#endregion\n\n //#region fields & getters / draggable popup instead side view for admin\n\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public draggablePopupMode: boolean;\n //#endregion\n\n //#region fields & getters / draggable popup instead side view for admin\n\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public draggablePopupModeFullScreen: boolean;\n //#endregion\n\n //#region fields & getters / keep websql database data after reload\n /**\n * Property used in taon\n */\n // @(Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false))\n public keepWebsqlDbDataAfterReload: boolean;\n //#endregion\n\n //#endregion\n\n //#region constructor\n constructor() {\n TaonAdminService._instance = this;\n this.scrollableEnabled = !!ENV?.useGlobalNgxScrollbar;\n }\n //#endregion\n\n //#region methods\n setEditMode(value: boolean) {\n this.onEditMode.next(value);\n }\n\n setKeepWebsqlDbDataAfterReload(value: boolean) {\n // if (value && !this.keepWebsqlDbDataAfterReload) {\n // this.firstTimeKeepWebsqlDbDataTrue = true;\n // }\n this.keepWebsqlDbDataAfterReload = value;\n }\n\n enabledTabs = [];\n\n hide() {\n this.draggablePopupMode = false;\n this.adminPanelIsOpen = false;\n }\n\n show() {\n this.draggablePopupMode = false;\n this.adminPanelIsOpen = true;\n }\n\n logout() {}\n //#endregion\n}\n","//#region imports\nimport type { Server } from 'http';\n/* */ \n/* */ \n\nimport type { NgZone } from '@angular/core'; // @browser\nimport axios from 'axios';\n/* */ \n/* */ \n/* */ \n/* */ \nimport * as express from 'express';\nimport type { Application } from 'express';\n// multer in taon middleware will do better job than express-fileupload\n// import * as fileUpload from 'express-fileupload'; // @backend\n/* */ \nimport { JSON10 } from 'json10/websql';\nimport { walk } from 'lodash-walk-object/websql';\n/* */ \nimport {\n Mapping,\n Models as ModelsNg2Rest,\n Resource,\n RestHeaders,\n} from 'ng2-rest/websql';\nimport { from, Subject } from 'rxjs';\nimport type {\n TransactionRollbackEvent,\n TransactionCommitEvent,\n TransactionStartEvent,\n RecoverEvent,\n SoftRemoveEvent,\n RemoveEvent,\n UpdateEvent,\n InsertEvent,\n Repository,\n} from 'taon-typeorm/websql'; // @websql\nimport { EventSubscriber } from 'taon-typeorm/websql'; // @websql\nimport { Entity as TypeormEntity, Tree } from 'taon-typeorm/websql'; // @websql\nimport {\n DataSource,\n DataSourceOptions,\n getMetadataArgsStorage,\n} from 'taon-typeorm/websql';\nimport { config } from 'tnp-config/websql';\nimport { CoreModels } from 'tnp-core/websql';\n/* */ \nimport { UtilsOs, Utils } from 'tnp-core/websql';\nimport { crossPlatformPath } from 'tnp-core/websql';\nimport { _, Helpers } from 'tnp-core/websql';\nimport { path } from 'tnp-core/websql';\n\nimport type { BaseClass } from './base-classes/base-class';\nimport type { BaseController } from './base-classes/base-controller';\nimport type { BaseInjector } from './base-classes/base-injector';\nimport type { BaseMiddleware } from './base-classes/base-middleware';\nimport type { BaseMigration } from './base-classes/base-migration';\nimport { BaseSubscriberForEntity } from './base-classes/base-subscriber-for-entity';\nimport type { ControllerConfig } from './config/controller-config';\nimport { MethodConfig } from './config/method-config';\nimport { ParamConfig } from './config/param-config';\nimport { apiPrefix } from './constants';\nimport { ContextDbMigrations } from './context-db-migrations';\nimport { createContext } from './create-context';\nimport { TaonEntityOptions } from './decorators/classes/entity-decorator';\nimport { TaonSubscriberOptions } from './decorators/classes/subscriber-decorator';\nimport { DITaonContainer } from './dependency-injection/di-container';\nimport type { ContextsEndpointStorage } from './endpoint-context-storage';\nimport { EntityProcess } from './entity-process';\nimport { getResponseValue } from './get-response-value';\nimport { ClassHelpers } from './helpers/class-helpers';\nimport { TaonHelpers } from './helpers/taon-helpers';\nimport { Models } from './models';\nimport { RealtimeCore } from './realtime/realtime-core';\nimport { Symbols } from './symbols';\nimport { TaonAdminService } from './ui/taon-admin-mode-configuration/taon-admin.service'; // @browser\n//#endregion\n\nexport class EndpointContext {\n //#region static\n\n /**\n * JUST FOR TESTING PURPOSES\n */\n public readonly USE_MARIADB_MYSQL_IN_DOCKER: boolean = false;\n\n //#region @browser\n private static ngZone: NgZone;\n //#endregion\n\n //#region @browser\n static initNgZone(ngZone: NgZone): void {\n //#region @browser\n this.ngZone = ngZone;\n //#endregion\n }\n //#endregion\n\n // public static findForTraget(classFnOrObject: any): EndpointContext {\n // const obj = ClassHelpers.getClassFnFromObject(classFnOrObject) || {};\n // return (\n // classFnOrObject[Symbols.ctxInClassOrClassObj] ||\n // obj[Symbols.ctxInClassOrClassObj]\n // );\n // }\n //#endregion\n\n //#region fields\n\n //#region fields / flags\n disabledRealtime: boolean = false;\n /**\n * check whether context is inited\n * (with init() function )\n */\n public inited: boolean = false;\n //#endregion\n\n readonly dbMigrations = new ContextDbMigrations(this);\n\n private readonly localInstaceObjSymbol = Symbol('localInstaceObjSymbol');\n\n //#region fields / all instances of classes from context\n /**\n * all instances of classes from context\n * key is class name\n */\n public readonly allClassesInstances = {};\n //#endregion\n\n //#region fields / class instances by name\n private readonly classInstancesByNameObj = {};\n //#endregion\n\n //#region fields / obj with classes instances arr\n private readonly objWithClassesInstancesArr = {};\n //#endregion\n\n //#region fields / active routes\n public readonly activeRoutes: {\n expressPath: string;\n method: Models.Http.Rest.HttpMethod;\n }[] = [];\n //#endregion\n\n //#region fields / typeorm repositories\n //#region @websql\n public repos = new Map<string, Repository<any>>();\n //#endregion\n //#endregion\n\n //#region fields / source context\n get sourceContext(): EndpointContext | undefined {\n return this.cloneOptions?.sourceContext;\n }\n //#endregion\n\n public readonly skipWritingServerRoutes: boolean = false;\n\n //#region fields / types from contexts\n private injectableTypesfromContexts = [\n Models.ClassType.CONTROLLER,\n Models.ClassType.PROVIDER,\n Models.ClassType.MIDDLEWARE,\n Models.ClassType.REPOSITORY,\n Models.ClassType.SUBSCRIBER,\n Models.ClassType.MIGRATION,\n ];\n //#endregion\n\n private allTypesfromContexts = [\n ...this.injectableTypesfromContexts,\n Models.ClassType.ENTITY,\n ];\n\n // public __contextForControllerInstanceAccess?: EndpointContext;\n\n //#region fields / express app\n public expressApp: Application = {} as any;\n //#endregion\n\n //#region fields / server tcp udp\n public serverTcpUdp: Server;\n //#endregion\n\n //#region fields / database config\n databaseConfig?: Models.DatabaseConfigTypeOrm;\n //#endregion\n\n //#region fields / mode\n mode: Models.FrameworkMode;\n //#endregion\n\n //#region fields / only migration start\n readonly onlyMigrationRun?: boolean = false;\n readonly onlyMigrationRevertToTimestamp?: number = undefined;\n\n get isRunOrRevertOnlyMigrationAppStart(): boolean {\n return !!(this.onlyMigrationRun || this.onlyMigrationRevertToTimestamp);\n }\n //#endregion\n\n //#region fields / session\n session?: Models.ISession;\n //#endregion\n\n //#region fields / connection\n public connection: DataSource;\n //#endregion\n\n //#region fields / entities triggers\n private entitiesTriggers = {};\n //#endregion\n\n //#region fields / realtime\n private realtime: RealtimeCore;\n get realtimeClient() {\n return this.realtime.client;\n }\n get realtimeServer() {\n return this.realtime.server;\n }\n //#endregion\n\n //#region fields / config\n /**\n * available after init()\n */\n public config: Models.ContextOptions<any, any, any, any, any, any, any, any>;\n //#endregion\n\n //#region fields / logs\n get logHttp(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).http;\n }\n return this.config?.logs === true;\n }\n\n get logRealtime(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).realtime;\n }\n return this.config?.logs === true;\n }\n\n get logFramework(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).framework;\n }\n return this.config?.logs === true;\n }\n\n get logDb(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).db;\n }\n return this.config?.logs === true;\n }\n\n get logMigrations(): boolean {\n if (_.isObject(this.config?.logs)) {\n return !!(this.config.logs as Models.ConnectionOptionsLogs).migrations;\n }\n return this.config?.logs === true;\n }\n //#endregion\n\n //#endregion\n\n //#region constructor\n /**\n * Inside docker there is not need for https secure server\n */\n public readonly isRunningInsideDocker: boolean = false;\n constructor(\n private originalConfig: Models.ContextOptions<\n any,\n any,\n any,\n any,\n any,\n any,\n any,\n any\n >,\n private configFn: (\n env: any,\n ) => Models.ContextOptions<any, any, any, any, any, any, any, any>,\n /**\n * (@default: false)\n * If TRUE context is NOT going to create db/express server/http endpoints\n * PURPOSE OF THIS PROPERTY\n * -> ONLY remote access from backend or frontend to specific backend\n */\n private readonly cloneOptions: Models.TaonCtxCloneParams,\n ) {\n this.cloneOptions = this.cloneOptions || {};\n this.isRunningInsideDocker = UtilsOs.isRunningInDocker();\n }\n //#endregion\n\n //#region methods & getters / init\n public async init(options?: {\n initFromRecrusiveContextResovle?: boolean;\n onlyMigrationRun?: boolean;\n onlyMigrationRevertToTimestamp?: number;\n }) {\n const {\n initFromRecrusiveContextResovle,\n onlyMigrationRun,\n onlyMigrationRevertToTimestamp,\n } = options || {}; // TODO use it ?\n\n this.inited = true;\n // @ts-ignore\n this.onlyMigrationRun = onlyMigrationRun;\n // @ts-ignore\n this.onlyMigrationRevertToTimestamp = onlyMigrationRevertToTimestamp;\n this.config = this.configFn({});\n if (_.isObject(this.config.database)) {\n this.config.database = Models.DatabaseConfig.from(\n this.config.database as Models.DatabaseConfig,\n ).databaseConfigTypeORM;\n }\n\n this.config.host = this.host === null ? void 0 : this.host;\n\n if (\n this.cloneOptions.overrideHost &&\n !this.cloneOptions.useAsRemoteContext\n ) {\n this.config.host = this.cloneOptions.overrideHost;\n }\n\n if (\n this.cloneOptions.overrideRemoteHost &&\n this.cloneOptions.useAsRemoteContext\n ) {\n this.config.host = this.cloneOptions.overrideRemoteHost;\n }\n\n if (\n this.config.host &&\n !this.config.host.startsWith('http://') &&\n !this.config.host.startsWith('https://')\n ) {\n Helpers.throw(\n `[taon-config] Your${this.host ? ' remote' : ''} 'host' must start with http:// or https://`,\n );\n }\n\n if (_.isUndefined(this.config.useIpcWhenElectron)) {\n this.config.useIpcWhenElectron = true;\n }\n // console.log(`config for ${this.contextName}`, this.config);\n\n //#region resolve if skipping writing server routes\n //@ts-expect-error overriding readonly\n this.skipWritingServerRoutes = _.isBoolean(\n this.config.skipWritingServerRoutes,\n )\n ? this.config.skipWritingServerRoutes\n : false;\n //#endregion\n\n //#region resolve mode\n if (this.config.host) {\n this.mode = 'backend-frontend(tcp+udp)';\n //#region @websqlOnly\n this.mode = 'backend-frontend(websql)';\n //#endregion\n }\n\n if (this.isRemoteHost) {\n this.mode = 'remote-backend(tcp+udp)';\n }\n\n // console.log(`\n\n // useIpcWhenElectron: ${this.config.useIpcWhenElectron}\n // Helpers.isElectron: ${Helpers.isElectron}\n\n // `)\n if (this.config.useIpcWhenElectron && Helpers.isElectron) {\n if (Helpers.isWebSQL) {\n this.mode = 'backend-frontend(websql-electron)';\n } else {\n this.mode = 'backend-frontend(ipc-electron)';\n }\n }\n\n // mode === undefined for BaseContext => ok behavior\n // console.log(`Mode for BE/FE communication: ${this.mode}`);\n // if(!this.mode) {\n // console.log(this.config)\n // }\n\n if (!this.mode && !this.config.abstract) {\n const errMsg =\n `You need to provide host property or ` +\n `useIpcWhenElectron or mark it as abstract`;\n Helpers.error(\n `[taon][Context=${this.contextName}]: ${errMsg}`,\n false,\n true,\n );\n/* */\n/* */\n \n }\n //#endregion\n\n //#region resolve database config\n if (this.config.database === true) {\n this.logFramework &&\n console.log(`\n\n ASSIGNING AUTO GENERATED DATABASE CONFIG\n\n `);\n this.databaseConfig = this.getAutoGeneratedConfig();\n } else if (_.isObject(this.config.database)) {\n this.logFramework &&\n console.log(`\n\n OVERRIDE DATABASE CONFIG FROM CONFIGURATION\n\n `);\n this.databaseConfig = this.getAutoGeneratedConfig();\n walk.Object(\n this.config.database,\n (value, lodashPath) => {\n if (_.isNil(value) || _.isFunction(value) || _.isObject(value)) {\n // skipping\n } else {\n this.logFramework &&\n console.info(\n `Overriding database config: ${lodashPath}=${value}`,\n );\n _.set(this.databaseConfig, lodashPath, value);\n }\n },\n {\n walkGetters: false,\n },\n );\n }\n //#endregion\n\n //#region resolve session\n if (this.config.session) {\n this.session = _.cloneDeep(this.config.session);\n const oneHour = 1000 * 60 * 60 * 1; // 24;\n if (!this.session.cookieMaxAge) {\n this.session.cookieMaxAge = oneHour;\n }\n // serever and browser cookie authentication\n axios.defaults.withCredentials = true;\n }\n //#endregion\n\n //#region prepare & gather all classes recursively\n this.config.contexts = this.config.contexts || {};\n this.config.entities = this.config.entities || {};\n this.config.controllers = this.config.controllers || {};\n this.config.repositories = this.config.repositories || {};\n this.config.providers = this.config.providers || {};\n this.config.subscribers = this.config.subscribers || {};\n this.config.migrations = this.config.migrations || {};\n\n this.config.entities = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.ENTITY,\n )),\n ...this.config.entities,\n };\n\n this.config.controllers = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.CONTROLLER,\n )),\n ...this.config.controllers,\n };\n\n this.config.providers = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.PROVIDER,\n )),\n ...this.config.providers,\n };\n\n this.config.middlewares = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.MIDDLEWARE,\n )),\n ...this.config.middlewares,\n };\n\n this.config.subscribers = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.SUBSCRIBER,\n )),\n ...this.config.subscribers,\n };\n\n this.config.repositories = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.REPOSITORY,\n )),\n ...this.config.repositories,\n };\n\n this.config.migrations = {\n ...(await this.getRecrusiveClassesfromContextsObj(\n Models.ClassType.MIGRATION,\n )),\n ...this.config.migrations,\n };\n\n // console.log(this.config);\n // debugger;\n //#endregion\n\n //#region prepare classes instances/functions clones\n this.config.controllers = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.controllers,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.CONTROLLER,\n });\n this.config.repositories = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.repositories,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.REPOSITORY,\n });\n this.config.providers = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.providers,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.PROVIDER,\n });\n this.config.middlewares = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.middlewares,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.MIDDLEWARE,\n });\n\n this.config.subscribers = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.subscribers,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.SUBSCRIBER,\n });\n\n this.config.migrations = this.cloneClassesObjWithNewMetadata({\n classesInput: this.config.migrations,\n config: this.config,\n ctx: this,\n classType: Models.ClassType.MIGRATION,\n });\n //#endregion\n\n //#region prepare instances\n for (const classTypeName of this.injectableTypesfromContexts) {\n this.classInstancesByNameObj[classTypeName] = {};\n this.objWithClassesInstancesArr[classTypeName] = [];\n }\n\n for (const classTypeName of this.injectableTypesfromContexts) {\n await this.createInstances(\n this.config[Models.ClassTypeKey[classTypeName]],\n classTypeName,\n );\n }\n //#endregion\n\n if (!this.isRunOrRevertOnlyMigrationAppStart) {\n //#region prepares server\n if (this.mode === 'backend-frontend(tcp+udp)' && !this.config.abstract) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n await this.initCustomClientMiddlewares();\n }\n //#endregion\n\n //#region prepare realtime\n if (!this.config.abstract) {\n this.disabledRealtime = this.config.disabledRealtime;\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n this.logRealtime &&\n Helpers.info(\n `[ctx=${this.contextName}] Init Realtime for ${this.mode}`,\n );\n\n this.realtime = new RealtimeCore(this);\n }\n //#endregion\n }\n\n //#region show context info\n // console.log({ ref })\n if (this.config.abstract) {\n this.logFramework &&\n Helpers.info(\n `[taon] Create abstract context: ${this.config.contextName}`,\n );\n } else {\n if (this.isRemoteHost) {\n this.logFramework &&\n Helpers.info(\n `[taon] Create context for remote host: ${this.config.host}`,\n );\n } else {\n this.logFramework &&\n Helpers.info(`[taon] Create context for host: ${this.config.host}`);\n }\n }\n //#endregion\n\n // update first exposed config\n Object.keys(this.config).forEach(key => {\n this.originalConfig[key] = this.config[key];\n });\n }\n //#endregion\n\n //#region methods & getters / get auto generated config\n private getAutoGeneratedConfig(): Models.DatabaseConfigTypeOrm {\n this.logFramework &&\n console.log(`\n\n\n IS RUNNING IN DOCKER: ${this.isRunningInsideDocker}\n\n `);\n //#region @websqlFunc\n let databaseConfig: Models.DatabaseConfig = Models.DatabaseConfig.from({});\n if (this.isRunningInsideDocker) {\n if (this.USE_MARIADB_MYSQL_IN_DOCKER) {\n // Helpers.info('Running in docker, using in mysql database');\n // // TODO auto resolve database config in docker\n // databaseConfig = Models.DatabaseConfig.from({\n // database: `db-${this.contextName}.sqlite`,\n // type: 'mysql',\n // recreateMode: 'PRESERVE_DATA+MIGRATIONS',\n // logging: this.logDb,\n // databasePort: 3306,\n // databaseHost: 'localhost',\n // databaseUsername: 'root',\n // databasePassword: 'admin',\n // });\n } else {\n // TOOD @LAST for now.. just use sqljs in docker\n this.logFramework &&\n console.log(`\n\n USING GENERATED CONFIG FOR SQLJS IN DOCKER\n\n `);\n\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n databaseConfig = databaseConfig = Models.DatabaseConfig.from({\n location: `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n useLocalForage: false,\n recreateMode: 'PRESERVE_DATA+MIGRATIONS',\n logging: true,\n });\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n } else {\n //#region auto resolve db config\n this.logFramework &&\n Helpers.info(\n `[taon][database] Automatically resolving database config for mode ${this.mode}`,\n );\n switch (this.mode) {\n //#region resolve database config for backend-frontend(ipc-electron)\n case 'backend-frontend(ipc-electron)':\n let dbLocationInOs: string;\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n\n databaseConfig = Models.DatabaseConfig.from({\n location: UtilsOs.isElectron\n ? dbLocationInOs\n : `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n recreateMode: 'DROP_DB+MIGRATIONS',\n logging: this.logDb,\n });\n break;\n //#endregion\n\n //#region resolve database config for mode backend-frontend(websql)\n case 'backend-frontend(websql-electron)':\n case 'backend-frontend(websql)':\n let keepWebsqlDbDataAfterReload = false;\n //#region @browser\n keepWebsqlDbDataAfterReload =\n TaonAdminService.Instance?.keepWebsqlDbDataAfterReload; // TODO @LAST\n //#endregion\n\n databaseConfig = databaseConfig = Models.DatabaseConfig.from({\n location: `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n useLocalForage: true, // !!window['localforage'], // TODO this need to be checked in runtime\n recreateMode: keepWebsqlDbDataAfterReload\n ? 'PRESERVE_DATA+MIGRATIONS'\n : 'DROP_DB+MIGRATIONS',\n logging: this.logDb,\n });\n break;\n //#endregion\n\n //#region resolve database config for mode backend-frontend(tcp+udp)\n case 'backend-frontend(tcp+udp)':\n databaseConfig = Models.DatabaseConfig.from({\n database: `context-db-${this.contextName}`,\n location: `db-${this.contextName}.sqlite`,\n type: 'sqljs',\n recreateMode: 'DROP_DB+MIGRATIONS',\n logging: this.logDb,\n });\n break;\n //#endregion\n }\n //#endregion\n }\n return databaseConfig.databaseConfigTypeORM;\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / ng zone\n get ngZone(): any {\n //#region @browser\n return EndpointContext.ngZone;\n //#endregion\n return;\n }\n //#endregion\n\n //#region methods & getters / start server\n async startServer(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / display express routes\n displayRoutes(app) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n //#endregion\n\n //#region methods & getters / mode allows database creation\n get modeAllowsDatabaseCreation() {\n return (\n this.mode === 'backend-frontend(tcp+udp)' ||\n this.mode === 'backend-frontend(websql)' ||\n this.mode === 'backend-frontend(ipc-electron)'\n );\n }\n //#endregion\n\n //#region methods & getters / clone class\n private cloneClassWithNewMetadata = <\n T extends { new (...args: any[]): any },\n >({\n BaseClass,\n className,\n config,\n ctx,\n classType,\n }: {\n BaseClass: T;\n className: string;\n config: Models.ContextOptions<any, any, any, any, any, any, any, any>;\n ctx: EndpointContext;\n classType: Models.ClassType;\n }): T => {\n // Return a new class that extends the base class\n const cloneClass = () => {\n if (\n BaseClass[Symbols.fullClassNameStaticProperty] ===\n `${ctx.contextName}.${className}`\n ) {\n return BaseClass;\n }\n return class extends BaseClass {\n // static ['_'] = BaseClass['_'];\n\n // @ts-ignore\n static [Symbols.orignalClass] = BaseClass;\n\n // @ts-ignore\n static [Symbols.fullClassNameStaticProperty] = `${ctx.contextName}.${className}`;\n\n // @ts-ignore\n static [Symbols.classNameStaticProperty] = className;\n\n static [Symbols.ctxInClassOrClassObj] = ctx;\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n static __getFullPathForClass__(arr = []) {\n const name = this[Symbols.fullClassNameStaticProperty];\n arr.push(name);\n // @ts-ignore\n if (\n this[Symbols.orignalClass] && // @ts-ignore\n this[Symbols.orignalClass].__getFullPathForClass__\n ) {\n // @ts-ignore\n this[Symbols.orignalClass].__getFullPathForClass__(arr);\n }\n return arr.join('/');\n }\n static get fullPathForClass(): string {\n return this.__getFullPathForClass__();\n }\n [Symbols.ctxInClassOrClassObj] = ctx;\n // You can override prototype properties or methods here if needed\n // static properties override allowed\n };\n };\n\n const cloneClassFunction = cloneClass();\n\n //#region gather all instances for all contexts\n // TODO this is not needed anymore - for typeorm I use normal entities\n // this thinng belowe is nice for debugging purpose\n // if (_.isUndefined(cloneClassFunction[Symbols.orignalClassClonesObj])) {\n // cloneClassFunction[Symbols.orignalClassClonesObj] = {};\n // }\n // if (_.isUndefined(BaseClass[Symbols.orignalClassClonesObj])) {\n // BaseClass[Symbols.orignalClassClonesObj] = {};\n // }\n // const all = {\n // ...BaseClass[Symbols.orignalClassClonesObj],\n // ...cloneClassFunction[Symbols.orignalClassClonesObj],\n // };\n // all[ctx.contextName] = cloneClassFunction;\n // cloneClassFunction[Symbols.orignalClassClonesObj] = all;\n // BaseClass[Symbols.orignalClassClonesObj] = all;\n //#endregion\n\n return cloneClassFunction;\n };\n\n //#endregion\n\n //#region methods & getters / clone classes obj with new metadata\n // eslint-disable-next-line @typescript-eslint/explicit-function-return-type\n private cloneClassesObjWithNewMetadata = ({\n classesInput,\n config,\n ctx,\n classType,\n }: {\n classesInput: any;\n config: Models.ContextOptions<any, any, any, any, any, any, any, any>;\n ctx: EndpointContext;\n classType: Models.ClassType;\n }) => {\n const classes = {};\n // console.log(Object.keys(classesInput))\n for (const key of Object.keys(classesInput || {})) {\n const BaseClass = classesInput[key];\n\n if (!BaseClass) {\n Helpers.error(`Class ${key} is not defined in context ${ctx.contextName}\n\n Please check if you have correct import in context file\n\n `);\n }\n\n var className = Reflect.getMetadata(\n Symbols.metadata.className,\n BaseClass,\n );\n\n // console.log('Metadata className', className, BaseClass);\n // if (!className) {\n // console.warn(`Please provide className for ${BaseClass.name} class`);\n // }\n className = className || key;\n BaseClass[Symbols.classNameStaticProperty] = className;\n\n const clonedClass = this.cloneClassWithNewMetadata({\n BaseClass,\n className,\n config,\n ctx,\n classType,\n });\n classes[className] = clonedClass;\n }\n return classes;\n };\n //#endregion\n\n //#region methods & getters / get recursive classes from contexts\n private async getRecrusiveClassesfromContextsObj(\n classType: Models.ClassType,\n ) {\n const arr = await this.getRecrusiveClassesfromContexts(classType);\n return arr.reduce((acc, c) => {\n acc[ClassHelpers.getName(c)] = c;\n return acc;\n }, {});\n }\n\n private async getRecrusiveClassesfromContexts(\n classType: Models.ClassType,\n arr = [],\n ) {\n const contexts = Object.values(this.config.contexts || {}) as ReturnType<\n typeof createContext\n >[];\n // console.log({\n // contexts,\n // });\n for (const ctx of contexts) {\n // console.log(`STARTING ${ctx.contextName}`);\n const ref = await ctx.__ref();\n // console.log(`CTX FROM ${ctx.contextName}`, ref.contextName);\n const classesInput = ref.getClassFunBy(classType);\n // console.log(`${ref.contextName} - ${classType}`, { classesInput });\n\n const clonedClasses = Object.values(\n this.cloneClassesObjWithNewMetadata({\n classesInput,\n config: this.config,\n ctx: this,\n classType,\n }),\n );\n // console.log(`${classType} clonedClasses`, clonedClasses);\n clonedClasses.forEach(c => arr.push(c));\n\n await ref.getRecrusiveClassesfromContexts(classType, arr);\n }\n return arr as Function[];\n }\n //#endregion\n\n //#region methods & getters / get class instances by class type\n getClassInstanceObjBy(classType: Models.ClassType): any {\n return this.classInstancesByNameObj[classType];\n }\n //#endregion\n\n //#region methods & getters / get class instances arr\n private getClassesInstancesArrBy(classType: Models.ClassType): any[] {\n return this.objWithClassesInstancesArr[classType];\n }\n //#endregion\n\n //#region methods & getters / inject\n inject<T>(\n ctor: new (...args: any[]) => T,\n options: {\n localInstance?: boolean;\n contextClassInstance?: BaseInjector;\n locaInstanceConstructorArgs?: ConstructorParameters<typeof ctor>;\n parentInstanceThatWillGetInjectedStuff: object;\n },\n ): T {\n const className = ClassHelpers.getName(ctor);\n\n const locaInstanceConstructorArgs =\n options.locaInstanceConstructorArgs || [];\n\n if (this.isCLassType(Models.ClassType.REPOSITORY, ctor)) {\n options.localInstance = true;\n }\n\n if (options?.localInstance) {\n const ctxClassFn = this.getClassFunByClassName(className);\n let entityName: string = '';\n\n // entity thing is only for repositories local repositories\n // if (className === 'BaseRepository') {\n const entityFn = _.first(locaInstanceConstructorArgs);\n const entity = entityFn && entityFn();\n entityName = (entity && ClassHelpers.getName(entity)) || '';\n // console.log(`entityName `, entityName);\n // }\n\n if (!options.contextClassInstance[this.localInstaceObjSymbol]) {\n options.contextClassInstance[this.localInstaceObjSymbol] = {};\n }\n const instanceKey = className + (entityName ? `.${entityName}` : '');\n\n const existed =\n options.contextClassInstance[this.localInstaceObjSymbol][instanceKey];\n\n if (existed) {\n // console.log(\n // `EXISTED ${ClassHelpers.getName(options.parentInstanceThatWillGetInjectedStuff)} Inject ${className} instanceKey \"${instanceKey}\"`,\n // );\n return existed;\n }\n\n // console.log(\n // `NEW ${ClassHelpers.getName(options.parentInstanceThatWillGetInjectedStuff)} Inject ${className} instanceKey \"${instanceKey}\"`,\n // );\n\n if (!ctxClassFn) {\n throw new Error(`Not able to inject \"${className}\" inside context \"${this.contextName}\"\n\n Make sure they share the same context or import context where \"${className}\" is defined.\n\n `);\n }\n\n const injectedInstance = new (ctxClassFn as any)(\n ...locaInstanceConstructorArgs,\n );\n options.contextClassInstance[this.localInstaceObjSymbol][instanceKey] =\n injectedInstance;\n // console.log(`injectedInstance `, existed)\n return injectedInstance;\n }\n\n const contextScopeInstance = this.allClassesInstances[className];\n // if (className === 'TopicController') {\n // debugger;\n // }\n return contextScopeInstance;\n }\n\n /**\n * alias for inject\n */\n getInstanceBy<T>(ctor: new (...args: any[]) => T): T {\n // if (!!this.__contextForControllerInstanceAccess) {\n // const className = ClassHelpers.getName(ctor);\n // const allControllers = this.getClassFunByArr(Models.ClassType.CONTROLLER);\n\n // // TODO QUICK_FIX cache controllers\n // for (const ctrl of allControllers) {\n // if (ClassHelpers.getName(ctrl) === className) {\n // // console.log('injecting from contextForControllerInstanceAcesss', className);\n // return this.__contextForControllerInstanceAccess.inject(ctor, {\n // localInstance: false,\n // });\n // }\n // }\n // }\n\n return this.inject(ctor, {\n localInstance: false,\n parentInstanceThatWillGetInjectedStuff: this,\n });\n }\n //#endregion\n\n //#region methods & getters / check if context initialized\n checkIfContextInitialized() {\n if (_.isUndefined(this.config)) {\n throw new Error(`Please check if your context has been initialized.\n\n // ...\n await Context.initialize();\n // ...\n\n\n `);\n }\n }\n //#endregion\n\n //#region methods & getters / get class function by class type name\n getClassFunBy(classType: Models.ClassType) {\n this.checkIfContextInitialized();\n switch (classType) {\n case Models.ClassType.CONTROLLER:\n return this.config.controllers;\n case Models.ClassType.ENTITY:\n return this.config.entities;\n case Models.ClassType.PROVIDER:\n return this.config.providers;\n case Models.ClassType.MIDDLEWARE:\n return this.config.middlewares;\n case Models.ClassType.REPOSITORY:\n return this.config.repositories;\n case Models.ClassType.SUBSCRIBER:\n return this.config.subscribers;\n case Models.ClassType.MIGRATION:\n return this.config.migrations;\n }\n }\n\n isCLassType(classType: Models.ClassType, classFn: Function): boolean {\n return !!this.getClassFunBy(classType)[ClassHelpers.getName(classFn)];\n }\n\n /**\n * Only for injectable types\n * Only for classType: CONTROLLER, REPOSITORY, PROVIDER, MIDDLEWARES\n */\n getClassFunByClassName(className: string): Function {\n for (const classTypeName of this.allTypesfromContexts) {\n const classesForInjectableType =\n this.config[Models.ClassTypeKey[classTypeName]];\n\n if (classesForInjectableType[className]) {\n return classesForInjectableType[className];\n }\n }\n }\n\n getClassFunByClass(classFunction: Function): Function {\n const className = ClassHelpers.getName(classFunction);\n return this.getClassFunByClassName(className);\n }\n\n getClassFunByArr(classType: Models.ClassType) {\n return Object.values(this.getClassFunBy(classType) || {}) as Function[];\n }\n //#endregion\n\n //#region methods & getters / create class instances\n private async createInstances(classes: any, classType: Models.ClassType) {\n // const recrusiveValuesFromContext =\n // await this.getRecrusiveClassesfromContexts(classType);\n // console.log(this.config.contexts);\n // console.log('recrusiveValuesFromContext', recrusiveValuesFromContext);\n\n for (const classFn of [\n // ...recrusiveValuesFromContext,\n ...Object.values(classes),\n ]) {\n const instance = DITaonContainer.resolve(classFn as any) as any;\n const classInstancesByNameObj = this.classInstancesByNameObj[classType];\n const className = ClassHelpers.getName(classFn);\n // console.log({ classFn, classType, instance, place, className, 'classInstancesByNameObj': this.classInstancesByNameObj });\n classInstancesByNameObj[className] = instance;\n // update config\n this.config[Models.ClassTypeKey[classType]][className] = classFn;\n this.objWithClassesInstancesArr[classType].push(instance);\n this.allClassesInstances[className] = instance;\n }\n }\n //#endregion\n\n //#region methods & getters / init classes\n async initClasses(): Promise<void> {\n if (this.isRemoteHost) {\n return;\n }\n\n //#region @websql\n for (const classFun of this.getClassFunByArr(\n Models.ClassType.ENTITY,\n ) as any[]) {\n const repo = (await this.connection.getRepository(\n ClassHelpers.getOrginalClass(classFun),\n )) as any;\n this.repos.set(ClassHelpers.getName(classFun), repo);\n }\n //#endregion\n\n for (const classTypeName of [\n Models.ClassType.MIDDLEWARE,\n Models.ClassType.PROVIDER,\n Models.ClassType.REPOSITORY,\n Models.ClassType.CONTROLLER,\n Models.ClassType.ENTITY,\n Models.ClassType.MIGRATION,\n ]) {\n //#region init class static _ property\n for (const classFun of this.getClassFunByArr(classTypeName) as any[]) {\n if (_.isFunction(classFun._)) {\n await classFun._();\n }\n }\n //#endregion\n }\n\n for (const classTypeName of [\n Models.ClassType.MIDDLEWARE,\n Models.ClassType.PROVIDER,\n Models.ClassType.REPOSITORY,\n Models.ClassType.CONTROLLER,\n Models.ClassType.MIGRATION,\n ]) {\n //#region init providers, repositories _ property\n // Helpers.taskStarted(\n // `[taon] REINITING _ INS FN ${classTypeName} ${this.contextName} STARTED`,\n // );\n for (const ctrl of this.getClassesInstancesArrBy(classTypeName)) {\n if (_.isFunction(ctrl._)) {\n await ctrl._();\n }\n }\n // Helpers.taskStarted(\n // `[taon] REINITING _ INS FN ${classTypeName} ${this.contextName} DONE`,\n // );\n //#endregion\n }\n }\n //#endregion\n\n //#region methods & getters / is active on\n isActiveOn(classInstance: object): boolean {\n let contextRef: EndpointContext =\n classInstance[Symbols.ctxInClassOrClassObj];\n return this === contextRef;\n }\n //#endregion\n\n //#region methods & getters / uri\n get frontendHostUri() {\n const url = this.config?.frontendHost?.startsWith('http')\n ? this.config.frontendHost\n : `${globalThis?.location?.protocol || 'http:'}//${\n this.config?.frontendHost\n }`;\n const uri = new URL(url.replace(/\\/$/, ''));\n return uri;\n }\n\n get uri(): URL | undefined {\n const url = this.host ? new URL(this.host) : void 0;\n return url;\n }\n //#endregion\n\n //#region methods & getters / host uri protocol\n get uriProtocol(): string | undefined {\n return this.uri?.protocol;\n }\n //#endregion\n\n //#region methods & getters / host uri origin\n /**\n * Examples\n * http://localhost:3000\n * https://localhost (from localhost:80) *\n */\n get uriOrigin(): string | undefined {\n return this.uri?.origin;\n }\n //#endregion\n\n //#region methods & getters / host uri pathname\n /**\n * Exampels\n * http://localhost:3000/path/to/somewhere\n * https://localhost/path/to/somewhere (from localhost:80)\n */\n // get uriOriginWithPathname(): string | undefined {\n // return this.uri?.origin\n // ? this.uri?.origin + this.uriPathnameOrNothingIfRoot.replace(/\\/$/, '')\n // : undefined;\n // }\n\n get uriPathname(): string | undefined {\n return this.uri?.pathname;\n }\n //#endregion\n\n //#region methods & getters / uri pathname or nothing if root\n /**\n * Examples\n * http://localhost:3000/path/to/somewhere -> '/path/to/somewhere'\n * http://localhost:3000 -> '' #\n * https://localhost/path/to/ -> '/path/to/somewhere' # remove last slash\n */\n get uriPathnameOrNothingIfRoot(): string {\n const isNonRootProperPathName =\n this.uri?.pathname && this.uri.pathname !== '/';\n return isNonRootProperPathName ? this.uri.pathname.replace(/\\/$/, '') : '';\n }\n //#endregion\n\n //#region port from uri\n get uriPort(): string | undefined {\n if (!this.uri?.origin?.includes('localhost')) {\n return this.config?.hostPortNumber?.toString();\n }\n return this.uri?.port;\n }\n // TODO do i need 2 getters for port?\n\n /**\n * Port from uri as number\n * @returns {Number | undefined}\n */\n get port(): Number | undefined {\n return this.uri?.port ? Number(this.uriPort) : undefined;\n }\n //#endregion\n\n //#region methods & getters / is https server\n get isHttpServer() {\n return this.uriProtocol === 'https:';\n }\n //#endregion\n\n //#region methods & getters / public assets\n public get isRemoteHost(): boolean {\n return !!this.cloneOptions?.useAsRemoteContext;\n }\n //#endregion\n\n //#region methods & getters / public assets\n /**\n * ipc/udp needs this\n */\n public get contextName(): string {\n // console.log(this.originalConfig);\n return this.config?.contextName || this.originalConfig?.contextName;\n }\n //#endregion\n\n //#region methods & getters / public assets\n /**\n * ipc/udp needs this\n */\n public get contextNameForCommunication(): string {\n let contextName = this.contextName;\n if (this.isRemoteHost) {\n if (this.sourceContext?.contextName) {\n contextName = this.sourceContext?.contextName;\n } else {\n // console.log(\n // `CANT GET SOURCE CONTEXT NAME FOR REMOTE CONTEXT ${this.contextName}`,\n // );\n }\n }\n return contextName;\n }\n //#endregion\n\n //#region methods & getters / public assets\n /**\n * Check context type\n */\n public get contextType(): 'normal' | 'remote' | 'abstract' | 'invalid' {\n if (this.config.abstract) {\n return 'abstract';\n }\n if (this.host) {\n return this.isRemoteHost ? 'remote' : 'normal';\n }\n return 'invalid';\n }\n //#endregion\n\n //#region methods & getters / current working directory\n public get cwd(): string {\n return this.config.cwd || process.cwd();\n }\n //#endregion\n\n //#region methods & getters / active context\n public get activeContext(): string | null {\n return this.config.activeContext || null;\n }\n //#endregion\n\n //#region methods & getters / app id\n public get appId(): string {\n return this.config.appId;\n }\n //#endregion\n\n //#region methods & getters / public assets\n public get publicAssets() {\n return this.config?.publicAssets || [];\n }\n //#endregion\n\n //#region methods & getters / is production mode\n get isProductionMode() {\n return this.config.productionMode;\n }\n //#endregion\n\n //#region methods & getters / host\n get host() {\n return this.config.host;\n }\n //#endregion\n\n //#region methods & getters / host\n get orgin() {\n return this.uri?.origin;\n }\n //#endregion\n\n //#region methods & getters / init subscribers\n async initSubscribers() {\n //#region @websqlFunc\n if (this.isRemoteHost) {\n return;\n }\n const subscriberClasses = this.getClassFunByArr(\n Models.ClassType.SUBSCRIBER,\n );\n for (const subscriberClassFn of subscriberClasses) {\n const options = Reflect.getMetadata(\n Symbols.metadata.options.subscriber,\n subscriberClassFn,\n ) as TaonSubscriberOptions;\n // console.log('subscriber options', options);\n // const nameForSubscriber = ClassHelpers.getName(subscriber);\n EventSubscriber()(subscriberClassFn);\n }\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / init entities\n async initEntities() {\n //#region @websql\n if (this.isRemoteHost) {\n return;\n }\n const entities = this.getClassFunByArr(Models.ClassType.ENTITY);\n\n for (const entity of entities) {\n const options = Reflect.getMetadata(\n Symbols.metadata.options.entity,\n entity,\n ) as TaonEntityOptions;\n const createTable = _.isUndefined(options.createTable)\n ? true\n : options.createTable;\n\n const nameForEntity = ClassHelpers.getName(entity);\n\n if (createTable) {\n this.logDb &&\n console.info(\n `[taon][typeorm] create table for entity \"${nameForEntity}\" ? '${createTable}'`,\n );\n // console.log('TypeormEntity', { TypeormEntity });\n TypeormEntity(nameForEntity)(entity);\n } else {\n this.logDb &&\n console.info(\n `[taon][typeorm] create table for entity \"${nameForEntity}\" ? '${createTable}'`,\n );\n }\n }\n //#endregion\n }\n\n //#endregion\n\n //#region methods & getters / destroy\n async destroy(): Promise<void> {\n //#region @websqlFunc\n if (this.connection) {\n await this.connection?.destroy();\n delete this.connection;\n }\n\n if (this.serverTcpUdp) {\n await new Promise(resolve => {\n this.serverTcpUdp?.close(() => {\n resolve(true);\n });\n });\n delete this.serverTcpUdp;\n }\n delete this.expressApp;\n //#endregion\n }\n //#endregion\n\n //#region methods & getters / init connection\n async initDatabaseConnection(): Promise<void> {\n //#region @websqlFunc\n if (this.isRemoteHost || !this.databaseConfig) {\n return;\n }\n const entities = this.getClassFunByArr(Models.ClassType.ENTITY).map(\n entityFn => {\n return ClassHelpers.getOrginalClass(entityFn);\n },\n );\n\n const subscribers = this.getClassFunByArr(Models.ClassType.SUBSCRIBER);\n\n let autoSave = false;\n if (!_.isNil(this.databaseConfig.autoSave)) {\n autoSave = this.databaseConfig.autoSave;\n } else {\n if (this.USE_MARIADB_MYSQL_IN_DOCKER) {\n autoSave = !this.isRunningInsideDocker; // in docker I am using mysql or posgress\n } else {\n autoSave = true; // on docker with sqljs I need to save db\n }\n }\n\n const dataSourceDbConfig = _.isObject(this.databaseConfig)\n ? ({\n type: this.databaseConfig.type,\n port: this.databaseConfig.databasePort,\n host: this.databaseConfig.databaseHost,\n database: this.databaseConfig.database as any,\n username: this.databaseConfig.databaseUsername,\n password: this.databaseConfig.databasePassword,\n useLocalForage: this.databaseConfig.useLocalForage,\n // I am not using typeorm migration system\n entities,\n subscribers,\n synchronize: this.isRunOrRevertOnlyMigrationAppStart\n ? false\n : this.databaseConfig.synchronize,\n autoSave,\n dropSchema: this.isRunOrRevertOnlyMigrationAppStart\n ? false\n : this.databaseConfig.dropSchema,\n logging: !!this.databaseConfig.logging,\n location: this.databaseConfig.location,\n } as DataSourceOptions)\n : ({} as DataSourceOptions);\n\n // debugger;\n this.logFramework &&\n console.log(\n `[Context: \"${this.contextName}\"] dataSourceDbConfig`,\n dataSourceDbConfig,\n );\n\n if (this.modeAllowsDatabaseCreation && this.databaseConfig) {\n this.logDb &&\n this.logFramework &&\n Helpers.info('[taon][database] prepare typeorm connection...');\n try {\n const connection = new DataSource(dataSourceDbConfig);\n this.connection = connection;\n await this.connection.initialize();\n } catch (error) {\n console.error(\n `[taon][typeorm] Error while initializing connection for ${this.contextName}, ERROR STARTED `,\n );\n console.error(error?.stack || '< No stack trace > ');\n console.error(error?.message || error);\n console.error(\n `[taon][typeorm] Error while initializing connection for ${this.contextName}, ERROR ENDS `,\n );\n }\n\n if (!this.connection?.isInitialized) {\n console.log('WRONG CONFIG', dataSourceDbConfig);\n throw new Error(`Something wrong with connection init in ${this.mode}`);\n/* */\n/* */\n \n }\n\n if (this.logDb || this.logFramework) {\n console.info(\n `\n\n CONTECTION OK for ${this.contextName} - ${this.mode}\n\n [taon][typeorm] db prepration done.. db initialize=${this.connection?.isInitialized}\n\n\n `,\n // dataSourceDbConfig,\n { 'this.connection': !!this.connection },\n );\n console.log(\n `Database file location: ${this.connection.options.database}`,\n );\n }\n // const entityMetadata = getMetadataArgsStorage();\n // console.log(\n // `\n\n // entityMetadata after connection init for ${this.contextName} - ${this.mode}\n\n // `,\n // entityMetadata,\n // );\n // debugger;\n } else {\n Helpers.info(`[taon][typeorm] Not initing db for mode ${this.mode}`);\n }\n //#endregion\n }\n\n //#endregion\n\n //#region methods & getters / initialize metadata\n\n //#region methods & getters / update class calculate path\n private updateCalculatedPathsForControllers(\n rawConfigs: ControllerConfig[],\n classConfig: ControllerConfig,\n controllerClassFn: Function,\n ): void {\n const parentsCalculatedPath = _.slice(rawConfigs, 1)\n .reverse()\n .map(bc => {\n if (TaonHelpers.isGoodPath(bc.path)) {\n return bc.path;\n }\n return bc.className;\n })\n .join('/');\n\n const contextNameForCommunication = this.contextNameForCommunication;\n\n if (TaonHelpers.isGoodPath(classConfig.path)) {\n classConfig.calculatedPath = classConfig.path;\n } else {\n classConfig.calculatedPath = (\n `${this.uriPathnameOrNothingIfRoot}` +\n `/${apiPrefix}/${contextNameForCommunication}/tcp${parentsCalculatedPath}/` +\n `${ClassHelpers.getName(controllerClassFn)}`\n )\n .replace(/\\/\\//g, '/')\n .split('/')\n .reduce((acc, bc) => {\n return _.last(acc) === bc ? acc : [...acc, bc];\n }, [])\n .join('/');\n }\n\n // console.log('calculatedPath', classConfig.calculatedPath);\n }\n //#endregion\n\n //#region methods & getters / dedupe class configs\n private mergeControllerMethodsConfigs(\n rawConfigs: ControllerConfig[],\n classConfig: ControllerConfig,\n controllerClassFn: Function,\n ): void {\n const currentControllerMethodsConfig = classConfig.methods;\n\n _.slice(rawConfigs, 1).forEach(bc => {\n const parentControllerMethods = _.cloneDeep(bc.methods);\n\n for (const methodsName in parentControllerMethods) {\n if (parentControllerMethods.hasOwnProperty(methodsName)) {\n if (!currentControllerMethodsConfig[methodsName]) {\n //#region add non existed method\n const methodConfig = parentControllerMethods[methodsName];\n currentControllerMethodsConfig[methodsName] = methodConfig;\n //#endregion\n }\n }\n }\n });\n }\n //#endregion\n async initControllersHook(\n ctxStorage: ContextsEndpointStorage,\n ): Promise<void> {\n if (this.isRunOrRevertOnlyMigrationAppStart) {\n return;\n }\n const allControllers = this.getClassFunByArr(Models.ClassType.CONTROLLER);\n for (const controllerClassFn of allControllers) {\n const instance = this.getInstanceBy(\n controllerClassFn as any,\n ) as BaseController;\n if (_.isFunction(instance.afterAllCtxInited)) {\n await instance.afterAllCtxInited({ ctxStorage });\n }\n }\n }\n\n async initControllers(): Promise<void> {\n if (this.isRunOrRevertOnlyMigrationAppStart) {\n return;\n }\n const allControllers = this.getClassFunByArr(Models.ClassType.CONTROLLER);\n // debugger\n // console.log('allControllers', allControllers);\n for (const controllerClassFn of allControllers) {\n // console.log(ClassHelpers.getClassConfig(controllerClassFn));\n\n // const controllerName = ClassHelpers.getName(controllerClassFn);\n\n // console.log(\n // `for ${controllerName}`,\n // ClassHelpers.getClassConfig(controllerClassFn),\n // );\n\n controllerClassFn[Symbols.classMethodsNames] =\n ClassHelpers.getMethodsNames(controllerClassFn);\n\n const rawConfigs = ClassHelpers.getControllerConfigs(controllerClassFn);\n // console.log(controllerName, { rawConfigs });\n // console.log(`Class config for ${ClassHelpers.getName(controllerClassFn)}`, configs)\n const classConfig: ControllerConfig = rawConfigs[0];\n\n this.updateCalculatedPathsForControllers(\n rawConfigs,\n classConfig,\n controllerClassFn,\n );\n this.mergeControllerMethodsConfigs(\n rawConfigs,\n classConfig,\n controllerClassFn,\n );\n\n //#region combine middlewares from controllers\n classConfig.calculatedMiddlewaresControllerObj = {};\n [...rawConfigs].reverse().forEach(rc => {\n if (_.isFunction(rc.middlewares)) {\n classConfig.calculatedMiddlewaresControllerObj = rc.middlewares({\n parentMiddlewares: classConfig.calculatedMiddlewaresControllerObj,\n className(middlewareClass) {\n return ClassHelpers.getName(controllerClassFn);\n },\n });\n }\n });\n //#endregion\n\n //#region group start\n/* */\n/* */\n \n this.logHttp &&\n console.groupCollapsed(\n `[taon][express-server] routes [${classConfig.className}]`,\n );\n/* */\n/* */\n \n //#endregion\n\n //#region init client or server methods\n const methodNames = Object.keys(classConfig.methods);\n for (const methodName of methodNames) {\n const methodConfig: Partial<MethodConfig> =\n classConfig.methods[methodName];\n\n //#region combine all class methods middlewares\n let calculatedMiddlewaresMethodObj = {};\n\n [...rawConfigs].reverse().forEach(rc => {\n if (rc.methods[methodName]) {\n const parentMethodConfig = rc.methods[methodName];\n\n if (_.isFunction(parentMethodConfig.middlewares)) {\n calculatedMiddlewaresMethodObj = parentMethodConfig.middlewares({\n parentMiddlewares: calculatedMiddlewaresMethodObj,\n className(middlewareClass) {\n return ClassHelpers.getName(controllerClassFn);\n },\n });\n }\n }\n });\n\n // add class middlewares to method middlewares\n methodConfig.calculatedMiddlewaresMethodObj = {\n ...calculatedMiddlewaresMethodObj,\n ...classConfig.calculatedMiddlewaresControllerObj,\n };\n methodConfig.calculatedMiddlewares = Object.values(\n methodConfig.calculatedMiddlewaresMethodObj || {},\n );\n //#endregion\n\n // methodConfig.calculatedMiddlewares = TODO\n\n //#region initialized method express path\n const httpMethodType: Models.Http.Rest.HttpMethod = methodConfig.type;\n\n // this is quick fix - in docker global path should not be used\n const globalPathPart =\n this.isRunningInsideDocker ||\n !this.frontendHostUri?.origin?.includes('localhost') // fe with domain -> is in docker\n ? `${this.uriPathnameOrNothingIfRoot.replace(\n /\\/$/,\n '',\n )}/${apiPrefix}/${this.contextName}`.replace(/\\/\\//, '/')\n : '';\n const expressPath = methodConfig.global\n ? `${globalPathPart}/${methodConfig.path?.replace(\n /\\/$/,\n '',\n )}`.replace(/\\/\\//, '/')\n : TaonHelpers.getExpressPath(classConfig, methodConfig);\n\n //#endregion\n\n //#region init server\n // console.log({ expressPath });\n if (Helpers.isNode || Helpers.isWebSQL) {\n //#region @websql\n\n const route = this.initServer(\n httpMethodType,\n methodConfig,\n classConfig,\n expressPath,\n controllerClassFn,\n );\n\n this.activeRoutes.push({\n expressPath: route.expressPath,\n method: route.method,\n });\n //#endregion\n }\n //#endregion\n\n //#region init client\n const shouldInitClient =\n Helpers.isBrowser || this.isRemoteHost || Helpers.isWebSQL;\n // console.log('shouldInitClient', shouldInitClient);\n if (shouldInitClient) {\n // console.log(\n // 'initClient',\n // ClassHelpers.getFullInternalName(controllerClassFn),\n // type,\n // methodConfig,\n // expressPath,\n // );\n await this.initClient(\n controllerClassFn,\n httpMethodType,\n methodConfig as any,\n expressPath,\n );\n }\n //#endregion\n }\n //#endregion\n\n //#region group end\n/* */\n/* */\n \n this.logHttp && console.groupEnd();\n/* */\n/* */\n \n //#endregion\n }\n }\n //#endregion\n\n //#region methods & getters / write active routes\n public writeActiveRoutes(): void {\n if (\n this.isRemoteHost ||\n this.isRunOrRevertOnlyMigrationAppStart ||\n this.skipWritingServerRoutes\n ) {\n return;\n }\n // const contexts: EndpointContext[] = [this];\n //#region @websql\n\n const troutes = Utils.uniqArray(\n this.activeRoutes.map(f => {\n return `${f.method} ${f.expressPath}`;\n }),\n ).map(f => {\n const [method, expressPath] = f.split(' ');\n return (\n `\\n### ${_.startCase(_.last(expressPath.split('/')))}\\n` +\n TaonHelpers.fillUpTo(method.toUpperCase() + ' ', 10) +\n this.uriOrigin +\n expressPath\n );\n\n // return `${TaonHelpers.string(method.toUpperCase() + ':')\n // .fillUpTo(10)}${context.uriHref.replace(/\\/$/, '')}${expressPath}`\n });\n const routes = [\n ...['', `# ROUTES FOR HOST ${this.uriOrigin} `],\n ...troutes,\n ].join('\\n');\n const fileName = crossPlatformPath([\n/* */\n/* */\n \n `routes-${this.config.contextName}.rest`,\n ]);\n\n this.logFramework && console.log(`[taon] routes file: ${fileName} `);\n // Helpers.log(JSON.stringify(routes, null, 4))\n/* */\n/* */\n/* */\n/* */\n \n //#endregion\n }\n //#endregion\n\n //#region methods & getters / middlewares\n public get middlewares(): Models.MiddlewareType[] {\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region methods & getters / init middlewares\n\n private async initCustomClientMiddlewares(): Promise<void> {\n const middlewares = this.getClassesInstancesArrBy(\n Models.ClassType.MIDDLEWARE,\n )\n .map(f => f as BaseMiddleware)\n .filter(f => _.isFunction(f.interceptClient));\n\n middlewares.forEach(middlewareInstanceName => {\n const contextName = this.contextName;\n const interceptorName = `${contextName}-${ClassHelpers.getName(\n middlewareInstanceName,\n )}`;\n Resource.request.interceptors.set(interceptorName, {\n intercept: ({ req, next }) => {\n const url = new URL(req.url);\n if (\n url.pathname.startsWith(\n `${this.uriPathnameOrNothingIfRoot}/${apiPrefix}/${contextName}/`,\n )\n ) {\n // console.log('intercepting', url.pathname, req);\n return middlewareInstanceName.interceptClient({\n req,\n next,\n });\n }\n return next.handle(req);\n },\n });\n });\n }\n\n private async initCustomBackendMiddlewares(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n private async initBackendMiddlewares(): Promise<void> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n //#endregion\n\n //#region methods & getters / init methods node\n private initServer(\n //#region parameters\n httpMethodType: Models.Http.Rest.HttpMethod,\n methodConfig: Partial<MethodConfig>,\n classConfig: ControllerConfig,\n expressPath: string,\n target: Function,\n //#endregion\n ): { expressPath: string; method: Models.Http.Rest.HttpMethod } {\n //#region resolve variables\n // console.log(\n // `CLIENT: expressPath: \"${expressPath}\" interceptor for method: ${methodConfig.calculatedMiddlewares.length}`,\n // );\n\n const middlewareHandlers = methodConfig.calculatedMiddlewares\n .map(middlewareClassFun => {\n const middlewareInstance: BaseMiddleware = this.getInstanceBy(\n middlewareClassFun as any,\n );\n if (\n middlewareInstance &&\n _.isFunction(middlewareInstance.interceptServerMethod)\n ) {\n const middlewareFn = ClassHelpers.asyncHandler(\n async (\n req: express.Request,\n res: express.Response,\n next: express.NextFunction,\n ) => {\n await middlewareInstance.interceptServerMethod(\n {\n req,\n res,\n next,\n },\n {\n methodName: methodConfig.methodName,\n expressPath,\n httpRequestType: methodConfig.type,\n },\n );\n },\n );\n return middlewareFn;\n }\n })\n .filter(f => !!f) as express.RequestHandler[];\n\n // const url = this.uri;\n\n //#region get result\n const getResult = async (resolvedParams, req, res) => {\n const response: Models.Http.Response<any> =\n methodConfig.descriptor.value.apply(\n /**\n * Context for method @GET,@PUT etc.\n */\n this.getInstanceBy(target as any),\n /**\n * Params for method @GET, @PUT etc.\n */\n resolvedParams,\n );\n let result = await getResponseValue(response, { req, res });\n return result;\n };\n //#endregion\n\n // console.log(`BACKEND: expressPath: \"${expressPath}\" `);\n //#endregion\n\n if (Helpers.isElectron) {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n if (!this.isRemoteHost) {\n //#region apply dummy websql express routers\n //#region @websql\n if (Helpers.isWebSQL) {\n if (!this.expressApp[httpMethodType.toLowerCase()]) {\n this.expressApp[httpMethodType.toLowerCase()] = () => {};\n // TODO add middlewares for WEBSQL and ELECTRON mode\n }\n }\n //#endregion\n //#endregion\n\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n \n }\n\n return {\n expressPath: expressPath,\n method: methodConfig.type,\n };\n }\n //#endregion\n\n //#region methods & getters / init client\n /**\n * client can be browser or nodejs (when remote host)\n */\n private async initClient(\n target: Function,\n httpRequestType: Models.Http.Rest.HttpMethod,\n methodConfig: Partial<MethodConfig>, // Models.Http.Rest.MethodConfig,\n expressPath: string,\n ): Promise<void> {\n const ctx = this;\n\n // console.log(\n // `CLIENT: expressPath: \"${expressPath}\" interceptor for method: ${methodConfig.calculatedMiddlewares?.length} `,\n // );\n\n //#region init middlewares\n const middlewares = methodConfig.calculatedMiddlewares;\n const middlewaresInstances = middlewares\n .map(f => this.getInstanceBy(f as any) as BaseMiddleware)\n .filter(f => _.isFunction(f.interceptClientMethod));\n\n middlewaresInstances.forEach(instance => {\n const middlewareName = ClassHelpers.getName(instance);\n // middlewareName - only needed for inheritace and uniqness of interceptors\n const interceptorKey = `${middlewareName}-${methodConfig.type?.toUpperCase()}-${expressPath}`;\n Resource.request.methodsInterceptors.set(interceptorKey, {\n intercept: ({ req, next }) => {\n return instance.interceptClientMethod(\n {\n req,\n next,\n },\n {\n methodName: methodConfig.methodName,\n expressPath,\n httpRequestType: httpRequestType,\n },\n );\n },\n });\n });\n //#endregion\n\n // : { received: any; /* Rest<any, any> */ }\n this.logHttp &&\n console.log(`${httpRequestType?.toUpperCase()} ${expressPath} `);\n // console.log('INITING', methodConfig); // TODO inject in static\n //#region resolve storage\n // TODO not a good idea\n const storage = globalThis;\n //#endregion\n\n const orgMethods = target.prototype[methodConfig.methodName];\n\n //#region handle electron ipc request\n\n if (Helpers.isElectron) {\n const ipcRenderer = (window as any).require('electron').ipcRenderer;\n target.prototype[methodConfig.methodName] = function (...args) {\n const received = new Promise(async (resolve, reject) => {\n const headers = {};\n const { request, response } = TaonHelpers.websqlMocks(headers);\n\n //#region @browser\n ipcRenderer.once(\n TaonHelpers.ipcKeyNameResponse(target, methodConfig, expressPath),\n (event, responseData) => {\n let res: any = responseData;\n console.log({ responseData });\n try {\n const body = res;\n res = new ModelsNg2Rest.HttpResponse(\n {\n body: void 0,\n isArray: void 0 as any,\n method: methodConfig.type,\n url: `${ctx.uriOrigin}${\n '' // TODO express path\n }${methodConfig.path} `,\n },\n Helpers.isBlob(body) || _.isString(body)\n ? body\n : JSON.stringify(body),\n RestHeaders.from(headers),\n void 0,\n () => body,\n );\n\n resolve(res);\n } catch (error) {\n console.error(error);\n reject(error);\n }\n },\n );\n ipcRenderer.send(\n TaonHelpers.ipcKeyNameRequest(target, methodConfig, expressPath),\n args,\n );\n //#endregion\n });\n received['observable'] = from(received);\n return {\n received,\n request(axiosConfig: ModelsNg2Rest.Ng2RestAxiosRequestConfig) {\n return received;\n },\n } as Models.Http.ClientAction<any>;\n };\n return;\n }\n //#endregion\n\n //#region handling web sql request\n //#region @websqlOnly\n\n //#region resolve variables\n const MIN_TIMEOUT = 500;\n const MIN_TIMEOUT_STEP = 200;\n\n const globalThisVar = globalThis; // TODO not a good idea! probably should be in context\n\n const timeout =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_TIMEOUT] || MIN_TIMEOUT;\n\n let updateFun: Subject<number> =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN];\n if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN]) {\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN] = new Subject();\n }\n updateFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN];\n\n let startFun: Subject<void> =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];\n if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START]) {\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START] = new Subject();\n }\n startFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];\n\n let doneFun: Subject<void> =\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];\n if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE]) {\n globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE] = new Subject();\n }\n doneFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];\n\n let periodsToUpdate = 0;\n if (timeout >= MIN_TIMEOUT) {\n periodsToUpdate = Math.floor(timeout / MIN_TIMEOUT_STEP);\n }\n //#endregion\n\n //#region web sql periods to wait\n const periods = async () => {\n startFun.next();\n for (let n = 1; n <= periodsToUpdate; n++) {\n // if (n === 0) {\n // updateFun.next(0)\n // } else {\n let upValue = Math.round(((MIN_TIMEOUT_STEP * n) / timeout) * 100);\n if (upValue > 100) {\n upValue = 100;\n }\n // console.log(`ping upValue: ${ upValue } `)\n updateFun.next(upValue);\n // }\n await new Promise((resolve, reject) => {\n setTimeout(() => {\n resolve(void 0);\n }, MIN_TIMEOUT_STEP);\n });\n // console.log('pong')\n }\n doneFun.next();\n };\n //#endregion\n\n target.prototype[methodConfig.methodName] = function (...args) {\n // if (!target.prototype[methodConfig.methodName][subjectHandler]) {\n // target.prototype[methodConfig.methodName][subjectHandler] = new Subject();\n // }\n const received = new Promise(async (resolve, reject) => {\n const headers = {};\n const { request, response } = TaonHelpers.websqlMocks(headers);\n\n let res: any;\n try {\n res = await Helpers.runSyncOrAsync({\n functionFn: orgMethods,\n context: this,\n arrayOfParams: args,\n });\n // console.log({ res1: res })\n if (typeof res === 'function') {\n res = await Helpers.runSyncOrAsync({\n functionFn: res,\n context: this,\n arrayOfParams: [request, response],\n });\n }\n // console.log({ res2: res })\n if (typeof res === 'function') {\n res = await Helpers.runSyncOrAsync({\n functionFn: res,\n context: this,\n arrayOfParams: [request, response],\n });\n }\n // console.log({ res3: res })\n\n if (typeof res === 'object' && res?.received) {\n res = await res.received;\n }\n\n const body = res;\n\n res = new ModelsNg2Rest.HttpResponse(\n {\n body: void 0,\n isArray: void 0 as any,\n method: methodConfig.type,\n url: `${ctx.uriOrigin}${\n '' // TODO express path\n }${methodConfig.path} `,\n },\n Helpers.isBlob(body) || _.isString(body)\n ? body\n : JSON.stringify(body),\n RestHeaders.from(headers),\n void 0,\n () => body,\n );\n\n // TODO blob should be blob not json\n // console.log('NEXT', res);\n // target.prototype[methodConfig.methodName][subjectHandler].next(res);\n\n await periods();\n resolve(res);\n } catch (error) {\n await periods();\n console.error(error);\n // error = new Ng2RestModels.HttpResponseError('Error during websql request',\n // JSON.stringify(error));\n // target.prototype[methodConfig.methodName][subjectHandler].error(error);\n reject(error);\n }\n });\n received['observable'] = from(received);\n // debugger\n if (Helpers.isWebSQL) {\n return {\n received,\n request(axiosConfig: ModelsNg2Rest.Ng2RestAxiosRequestConfig) {\n // console.log('request', axiosConfgi);\n return received;\n },\n } as Models.Http.ClientAction<any>;\n }\n };\n if (Helpers.isWebSQL) {\n // @ts-ignore\n return undefined as any as Models.Http.ClientAction<any>;\n }\n //#endregion\n //#endregion\n\n //#region handle normal request\n\n target.prototype[methodConfig.methodName] = function (\n this: {},\n ...args\n ): Models.Http.ClientAction<any> {\n // console.log('[init method browser] FRONTEND expressPath', expressPath)\n // const productionMode = FrameworkContext.isProductionMode;\n\n //#region resolve frontend parameters\n\n if (!storage[Symbols.old.ENDPOINT_META_CONFIG])\n storage[Symbols.old.ENDPOINT_META_CONFIG] = {};\n if (!storage[Symbols.old.ENDPOINT_META_CONFIG][ctx.uriOrigin])\n storage[Symbols.old.ENDPOINT_META_CONFIG][ctx.uriOrigin] = {};\n const endpoints = storage[Symbols.old.ENDPOINT_META_CONFIG];\n let rest: ModelsNg2Rest.ResourceModel<any, any>;\n if (!endpoints[ctx.uriOrigin][expressPath]) {\n let headers = {};\n if (methodConfig.contentType && !methodConfig.responseType) {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n RestHeaders.from({\n 'Content-Type': methodConfig.contentType,\n Accept: methodConfig.contentType,\n }),\n );\n } else if (methodConfig.contentType && methodConfig.responseType) {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n RestHeaders.from({\n 'Content-Type': methodConfig.contentType,\n Accept: methodConfig.contentType,\n responsetypeaxios: methodConfig.responseType,\n }),\n );\n } else if (!methodConfig.contentType && methodConfig.responseType) {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n RestHeaders.from({\n responsetypeaxios: methodConfig.responseType,\n }),\n );\n } else {\n rest = Resource.create(\n ctx.uriOrigin,\n expressPath,\n Symbols.old.MAPPING_CONFIG_HEADER as any,\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY as any,\n );\n }\n\n endpoints[ctx.uriOrigin][expressPath] = rest;\n } else {\n rest = endpoints[ctx.uriOrigin][expressPath] as any;\n }\n\n const method = httpRequestType.toLowerCase();\n\n const pathPrams = {};\n let queryParams = {};\n let bodyObject = {};\n args.forEach((param, i) => {\n let currentParam: Partial<ParamConfig> = void 0 as any;\n\n for (let pp in methodConfig.parameters) {\n let v = methodConfig.parameters[pp];\n if (v.index === i) {\n currentParam = v;\n break;\n }\n }\n\n if (!currentParam) {\n const errorMessage =\n `[${config.frameworkName}] Unable to resolve parameter` +\n ` at index ${i} for method ${methodConfig.methodName} at path ${expressPath}.`;\n\n/* */\n/* */\n/* */\n \n throw new Error(errorMessage);\n }\n\n if (currentParam.paramType === 'Path') {\n pathPrams[currentParam.paramName] = param;\n }\n if (currentParam.paramType === 'Query') {\n if (currentParam.paramName) {\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n `${Symbols.old.MAPPING_CONFIG_HEADER_QUERY_PARAMS}${currentParam.paramName} `,\n JSON.stringify(mapping),\n );\n }\n queryParams[currentParam.paramName] = param;\n } else {\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n Symbols.old.MAPPING_CONFIG_HEADER_QUERY_PARAMS,\n JSON.stringify(mapping),\n );\n }\n queryParams = _.cloneDeep(param);\n }\n }\n if (currentParam.paramType === 'Header') {\n if (currentParam.paramName) {\n if (currentParam.paramName === Symbols.old.MDC_KEY) {\n // parese MDC\n rest.headers.set(\n currentParam.paramName,\n encodeURIComponent(JSON.stringify(param)),\n );\n } else {\n rest.headers.set(currentParam.paramName, param);\n }\n } else {\n for (let header in param) {\n rest.headers.set(header, param[header]);\n }\n }\n }\n if (currentParam.paramType === 'Cookie') {\n Resource.Cookies.write(\n currentParam.paramName,\n param,\n currentParam.expireInSeconds,\n );\n }\n if (currentParam.paramType === 'Body') {\n if (currentParam.paramName) {\n if (ClassHelpers.getName(bodyObject) === 'FormData') {\n throw new Error(`[taon - framework] Don use param names when posting / putting FormData.\n Use this:\n// ...\n(@Taon.Http.Param.Body() formData: FormData) ...\n// ...\n\ninstead\n // ...\n (@Taon.Http.Param.Body('${currentParam.paramName}') formData: FormData) ...\n// ...\n`);\n }\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n `${Symbols.old.MAPPING_CONFIG_HEADER_BODY_PARAMS}${currentParam.paramName} `,\n JSON.stringify(mapping),\n );\n }\n bodyObject[currentParam.paramName] = param;\n } else {\n const mapping = Mapping.decode(param, !ctx.isProductionMode);\n if (mapping) {\n rest.headers.set(\n Symbols.old.MAPPING_CONFIG_HEADER_BODY_PARAMS,\n JSON.stringify(mapping),\n );\n }\n bodyObject = param;\n }\n }\n });\n\n if (\n typeof bodyObject === 'object' &&\n ClassHelpers.getName(bodyObject) !== 'FormData'\n ) {\n let circuralFromItem = [];\n bodyObject = JSON10.parse(\n JSON10.stringify(bodyObject, void 0, void 0, circs => {\n circuralFromItem = circs;\n }),\n );\n rest.headers.set(\n Symbols.old.CIRCURAL_OBJECTS_MAP_BODY,\n JSON10.stringify(circuralFromItem),\n );\n }\n\n if (typeof queryParams === 'object') {\n let circuralFromQueryParams = [];\n queryParams = JSON10.parse(\n JSON10.stringify(queryParams, void 0, void 0, circs => {\n circuralFromQueryParams = circs;\n }),\n );\n\n rest.headers.set(\n Symbols.old.CIRCURAL_OBJECTS_MAP_QUERY_PARAM,\n JSON10.stringify(circuralFromQueryParams),\n );\n }\n //#endregion\n\n const httpResultObj: Models.Http.ClientAction<any> = {\n get received() {\n return rest.model(pathPrams)[method](bodyObject, [queryParams]);\n },\n request(axiosConfig?: ModelsNg2Rest.Ng2RestAxiosRequestConfig) {\n return rest\n .model(pathPrams)\n [method](bodyObject, [queryParams], axiosConfig);\n },\n };\n return httpResultObj as Models.Http.ClientAction<any>;\n };\n //#endregion\n }\n //#endregion\n}\n","import type { EndpointContext } from './endpoint-context';\n\nexport class ContextsEndpointStorage {\n private taonEndpointContexts = new Map<string, EndpointContext>();\n\n //#region singleton\n private static instance: ContextsEndpointStorage;\n\n private constructor() {\n // Private constructor to prevent direct instantiation\n }\n\n public static get Instance(): ContextsEndpointStorage {\n if (!ContextsEndpointStorage.instance) {\n ContextsEndpointStorage.instance = new ContextsEndpointStorage();\n }\n return ContextsEndpointStorage.instance;\n }\n //#endregion\n\n set(context: EndpointContext): void {\n if (!this.taonEndpointContexts.has(context.contextName)) {\n this.taonEndpointContexts.set(context.contextName, context);\n }\n }\n\n get arr(): EndpointContext[] {\n return Array.from(this.taonEndpointContexts.values()).filter(\n f => f.contextType === 'normal',\n );\n }\n\n getBy(\n context: Partial<EndpointContext> | string,\n ): EndpointContext | undefined {\n if (typeof context === 'string') {\n return this.taonEndpointContexts.get(context) as any;\n }\n return this.taonEndpointContexts.get(context.contextName) as any;\n }\n}\n","//#region imports\nimport { CoreModels, Helpers, UtilsOs, _ } from 'tnp-core/websql';\n\nimport { EndpointContext } from './endpoint-context';\nimport { Models } from './models';\nimport { TaonAdminService } from './ui/taon-admin-mode-configuration/taon-admin.service'; // @browser\nimport { ContextsEndpointStorage } from './endpoint-context-storage';\n//#endregion\n\n/**\n * @returns function that returns context function.\n * Context function can be used to dynamically\n * create context with specific configuration.\n */\nexport const createContextTemplate = <\n //#region context generic args\n CTX extends Record<string, object>,\n CTRL extends Record<string, new (...args: any[]) => any>,\n ENTITY extends Record<string, new (...args: any[]) => any>,\n REPO extends Record<string, new (...args: any[]) => any>,\n PROVIDER extends Record<string, new (...args: any[]) => any>,\n SUBSCRIBER extends Record<string, new (...args: any[]) => any>,\n MIGRATION extends Record<string, new (...args: any[]) => any>,\n MIDDLEWARE extends Record<string, new (...args: any[]) => any>,\n //#endregion\n>(\n configFn: (\n env: any,\n ) => Models.ContextOptions<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARE\n >,\n) => {\n return () => {\n return createContext<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARE\n >(configFn);\n };\n};\n\n/**\n * REQURIED PROPERTY:\n * - contextName\n */\nconst createContextFn = <\n //#region context generic args\n CTX extends Record<string, object>,\n CTRL extends Record<string, new (...args: any[]) => any>,\n ENTITY extends Record<string, new (...args: any[]) => any>,\n REPO extends Record<string, new (...args: any[]) => any>,\n PROVIDER extends Record<string, new (...args: any[]) => any>,\n SUBSCRIBER extends Record<string, new (...args: any[]) => any>,\n MIGRATION extends Record<string, new (...args: any[]) => any>,\n MIDDLEWARES extends Record<string, new (...args: any[]) => any>,\n //#endregion\n>(\n configFn: (\n env: any,\n ) => Models.ContextOptions<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARES\n >,\n cloneOptions: Models.TaonCtxCloneParams,\n) => {\n cloneOptions = cloneOptions || {};\n let config = configFn({});\n // console.log(\n // `\n\n // [Taon] Creating context ${config.contextName}...`,\n // {config},\n // );\n const endpointContextRef = new EndpointContext(\n config,\n configFn,\n cloneOptions,\n );\n\n const res = {\n //#region contexts\n get contextName() {\n return config.contextName;\n },\n //#endregion\n\n get appId() {\n return config.appId;\n },\n\n cloneAsRemote: (cloneOpt?: { overrideRemoteHost?: string }) => {\n cloneOpt = cloneOpt || {};\n const opt: Models.TaonCtxCloneParams = {\n ...cloneOpt,\n sourceContext: endpointContextRef,\n useAsRemoteContext: true,\n };\n return createContextFn(configFn, opt);\n },\n\n cloneAsNormal: (cloneOpt?: { overrideHost?: string }) => {\n cloneOpt = cloneOpt || {};\n const opt: Models.TaonCtxCloneParams = {\n ...cloneOpt,\n sourceContext: endpointContextRef,\n useAsRemoteContext: false,\n };\n return createContextFn(configFn, opt);\n },\n\n //#region context\n /**\n * @deprecated\n * - get reference to internal context\n */\n async __ref() {\n if (!endpointContextRef.inited) {\n await endpointContextRef.init({\n initFromRecrusiveContextResovle: true,\n });\n }\n return endpointContextRef;\n },\n /**\n * only for internal use\n * @deprecated\n */\n get __refSync() {\n return endpointContextRef;\n },\n getClassInstance<T>(ctor: new (...args: any[]) => T): T {\n return endpointContextRef.getInstanceBy(ctor);\n },\n\n getClass<T>(ctor: new (...args: any[]) => T): new (...args: any[]) => T {\n const classFun = endpointContextRef.getClassFunByClass(ctor);\n return classFun as any;\n //#region old\n // TODO hmmmm for now context for controller inside api service\n // const allContexts = Object.values(classFun[Symbols.orignalClassClonesObj] || {}).map(classFn => {\n // return {\n // ctx: classFn[Symbols.ctxInClassOrClassObj] as EndpointContext,\n // classFn,\n // }\n // })\n // const activeContext = allContexts.find(c => c.ctx.inited);\n // debugger\n // console.log('activeContext', activeContext.ctx.contextName);\n // return activeContext.ctx.getClassFunByClass(ctor) as any;\n //#endregion\n },\n //#endregion\n //#region initialize\n /**\n * - create controller instances for context\n * - init database (if enable) + migation scripts\n */\n initialize: async (\n overrideOptions?: Models.TaonInitializeParams,\n ): Promise<EndpointContext> => {\n return await new Promise(async (resolve, reject) => {\n //#region init in set timeout\n setTimeout(async () => {\n if (UtilsOs.isRunningInDocker()) {\n const activeContext = config?.activeContext || null;\n if (\n _.isString(activeContext) &&\n activeContext !== '' &&\n activeContext !== config?.contextName\n ) {\n console.warn(\n `[taon] Context ${endpointContextRef.contextName} is not active context, skipping initialization.`,\n );\n resolve(endpointContextRef);\n return;\n }\n }\n\n await endpointContextRef.init({\n ...overrideOptions,\n });\n\n if (config.abstract) {\n throw new Error(`Abstract context can not be initialized`);\n }\n\n await endpointContextRef.initEntities();\n await endpointContextRef.initSubscribers();\n\n await endpointContextRef.initDatabaseConnection();\n\n await endpointContextRef.dbMigrations.ensureMigrationTableExists();\n\n // console.log(\n // 'connection subscribers',\n // endpointContextRef?.connection?.subscribers,\n // );\n // debugger;\n await endpointContextRef.initControllers();\n await endpointContextRef.startServer();\n //#region @websql\n endpointContextRef.writeActiveRoutes();\n //#endregion\n\n await endpointContextRef.initClasses();\n if (endpointContextRef.databaseConfig) {\n //#region handle websql reload data\n //#region @browser\n let keepWebsqlDbDataAfterReload = false;\n keepWebsqlDbDataAfterReload =\n TaonAdminService.Instance?.keepWebsqlDbDataAfterReload;\n\n if (keepWebsqlDbDataAfterReload) {\n !UtilsOs.isRunningInCliMode() &&\n Helpers.info(\n `[taon] Keeping websql data after reload ` +\n `(context=${endpointContextRef.contextName}).`,\n );\n } else {\n Helpers.info(\n `[taon] Dropping all tables and data ` +\n `(context=${endpointContextRef.contextName}).`,\n );\n }\n //#endregion\n //#endregion\n\n //#region TODO this may be usefull but for now\n // 2 separate contexts are fine\n // const shouldStartRemoteHost = endpointContextRef.mode !== 'remote-backend(tcp+udp)';\n // if(shouldStartRemoteHost) {\n // const endpointContextRemoteHostRef = new EndpointContext(config, configFn);\n // await endpointContextRemoteHostRef.init({\n // overrideRemoteHost: endpointContextRef.host,\n // overrideHost: null,\n // });\n // endpointContextRemoteHostRef.initMetadata();\n\n // endpointContextRef.__contextForControllerInstanceAccess = endpointContextRemoteHostRef;\n // }\n //#endregion\n\n //#region run migrations tasks\n if (endpointContextRef.onlyMigrationRun) {\n endpointContextRef.logMigrations &&\n Helpers.log(\n `[taon] Running only migrations (context=${endpointContextRef.contextName}).`,\n );\n await endpointContextRef.dbMigrations.runAllNotCompletedMigrations();\n } else if (endpointContextRef.onlyMigrationRevertToTimestamp) {\n endpointContextRef.logMigrations &&\n Helpers.log(\n `[taon] Reverting migrations to timestamp ${\n endpointContextRef.onlyMigrationRevertToTimestamp\n } (context=${endpointContextRef.contextName}).`,\n );\n await endpointContextRef.dbMigrations.revertMigrationToTimestamp(\n endpointContextRef.onlyMigrationRevertToTimestamp,\n );\n } else {\n endpointContextRef.logMigrations &&\n Helpers.log(\n `[taon] Running all not applied migrations (context=${endpointContextRef.contextName}).`,\n );\n await endpointContextRef.dbMigrations.runAllNotCompletedMigrations();\n }\n //#endregion\n }\n\n ContextsEndpointStorage.Instance.set(endpointContextRef);\n\n resolve(endpointContextRef);\n });\n //#endregion\n });\n },\n /**\n * realtime communication with server\n * TCP(upgrade) socket.io (or ipc) based.\n */\n get realtime() {\n return {\n get client() {\n return endpointContextRef.realtimeClient;\n },\n get server() {\n return endpointContextRef.realtimeServer;\n },\n };\n },\n };\n return res;\n};\n//#endregion\n\nexport const createContext = <\n //#region context generic args\n CTX extends Record<string, object>,\n CTRL extends Record<string, new (...args: any[]) => any>,\n ENTITY extends Record<string, new (...args: any[]) => any>,\n REPO extends Record<string, new (...args: any[]) => any>,\n PROVIDER extends Record<string, new (...args: any[]) => any>,\n SUBSCRIBER extends Record<string, new (...args: any[]) => any>,\n MIGRATION extends Record<string, new (...args: any[]) => any>,\n MIDDLEWARES extends Record<string, new (...args: any[]) => any>,\n //#endregion\n>(\n configFn: (\n env: any,\n ) => Models.ContextOptions<\n CTX,\n CTRL,\n ENTITY,\n REPO,\n PROVIDER,\n SUBSCRIBER,\n MIGRATION,\n MIDDLEWARES\n >,\n) => {\n return createContextFn(configFn, { useAsRemoteContext: false });\n};\n\nexport type TaonContext = ReturnType<typeof createContext>;\n\n// const AA = createContext(() => ({ contextName: 'aa' }));\n// const BB = AA.cloneAsRemoteContext();\n","import { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Provider decorator\n */\nexport function TaonMiddleware<T = any>(\n options?: TaonMiddlewareOptions<T>,\n) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.provider,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className || constructor.name);\n };\n}\n\nexport class TaonMiddlewareOptions<T = any> extends DecoratorAbstractOpt {\n // middleware is a singleton for each context\n}\n","//#region imports\nimport { Helpers, _ } from 'tnp-core/websql';\n\nimport { EndpointContext } from '../endpoint-context';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Symbols } from '../symbols';\n\nimport { BaseCustomRepository } from './base-custom-repository';\nimport type { BaseRepository } from './base-repository';\n//#endregion\n\nexport class BaseInjector {\n //#region proxy dummy function\n /**\n * for proxy purposes\n */\n getOriginalPrototype: () => any;\n /**\n * for proxy purposes\n */\n getOriginalConstructor: () => any;\n //#endregion\n\n //#region class initialization hook\n /**\n * class initialization hook\n * taon after class instace creation\n */\n async _(): Promise<void> {}\n //#endregion\n\n //#region context\n /**\n * @deprecated use ctx instead\n * Current endpoint context\n */\n get __endpoint_context__(): EndpointContext {\n return this[Symbols.ctxInClassOrClassObj] as EndpointContext;\n }\n\n /**\n * get current endpoint context\n */\n get ctx(): EndpointContext {\n return this.__endpoint_context__;\n }\n //#endregion\n\n //#region inject\n\n //#region inject / repo for entity\n /**\n * inject crud repo for entity\n */\n injectRepo<T>(entityForCrud: new (...args: any[]) => T): BaseRepository<T> {\n const repoProxy = this.__inject(void 0, {\n localInstance: true,\n resolveClassFromContext: 'BaseRepository',\n locaInstanceConstructorArgs: [() => entityForCrud],\n });\n return repoProxy as any;\n }\n //#endregion\n\n //#region inject / custom repository\n injectCustomRepository<T extends BaseCustomRepository>(\n cutomRepositoryClass: new (...args: any[]) => T,\n ): T {\n const repoProxy = this.__inject<T>(cutomRepositoryClass, {\n localInstance: true,\n locaInstanceConstructorArgs: [\n () => {\n const classToProcess =\n this.ctx.allClassesInstances[\n ClassHelpers.getName(cutomRepositoryClass)\n ];\n\n return classToProcess.entityClassResolveFn();\n },\n ],\n });\n return repoProxy;\n }\n //#endregion\n\n //#region inject / custom repo\n /**\n * aliast to this.injectRepository()\n */\n injectCustomRepo<T extends BaseCustomRepository>(\n cutomRepositoryClass: new (...args: any[]) => T,\n ): T {\n const repoProxy = this.injectCustomRepository<T>(cutomRepositoryClass);\n return repoProxy;\n }\n //#endregion\n\n //#region inject / controller\n /**\n * example usage:\n * ...\n * exampleController = this.injectController(ExampleController);\n * ...\n */\n injectController<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / ctrl\n /**\n * example usage:\n * ...\n * exampleSubscriber = this.injectSubscriber(ExampleSubscriber)\n * ...\n */\n injectSubscriber<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / ctrl\n /**\n * aliast to .injectController()\n */\n injectCtrl<T>(ctor: new (...args: any[]) => T): T {\n return this.injectController<T>(ctor);\n }\n //#endregion\n\n //#region inject / global provider\n /**\n * inject middleware for context\n */\n injectMiddleware<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / context provider\n /**\n * inject provider for context\n */\n injectProvider<T>(ctor: new (...args: any[]) => T): T {\n return this.__inject<T>(ctor, { localInstance: false });\n }\n //#endregion\n\n //#region inject / __ inject\n /**\n * Inject: Controllers, Providers, Repositories, Services, etc.\n * TODO addd nest js injecting\n */\n private __inject<T>(\n ctor: new (...args: any[]) => T,\n options?: {\n /**\n * (repositories are ONLY/ALWAYS local instances)\n * If true, then local instance will be created\n * controllers, providers can be local or global\n */\n localInstance: boolean;\n /**\n * Name of class that should be resolved from context\n * (in case ctor === undefined)\n */\n resolveClassFromContext?: string;\n /**\n * Args passed to constructor of BaseRepository\n * (for now just first arg is relevant)\n */\n locaInstanceConstructorArgs?: ConstructorParameters<typeof ctor>;\n },\n ): T {\n if (!options) {\n options = {} as any;\n }\n\n const contextClassInstance = this;\n return new Proxy(\n {},\n {\n get: (__, propName) => {\n const contextFromClass: EndpointContext =\n ctor && ctor[Symbols.ctxInClassOrClassObj];\n\n const resultContext: EndpointContext = contextFromClass\n ? contextFromClass\n : this.__endpoint_context__;\n\n if (options.resolveClassFromContext) {\n const resolvedClass = resultContext.getClassFunByClassName(\n options.resolveClassFromContext,\n );\n ctor = resolvedClass as any;\n }\n\n if (resultContext) {\n var instance: T = resultContext.inject(ctor, {\n ...options,\n contextClassInstance,\n parentInstanceThatWillGetInjectedStuff: this,\n });\n if (!instance) {\n throw new Error(\n `Not able to inject \"${\n ClassHelpers.getName(ctor) || ctor.name\n }\" inside ` +\n `property \"${propName?.toString()}\" on class \"${ClassHelpers.getName(\n this,\n )}\".\n\n Please add \"${\n ClassHelpers.getName(ctor) || ctor.name\n }\" to (entites or contorllers or providers or repositories or middlewares)\n\n `,\n );\n }\n\n const result =\n typeof instance[propName] === 'function'\n ? instance[propName].bind(instance)\n : instance[propName];\n\n // console.log(`Accessing injected \"${propName?.toString()}\" from \"${ClassHelpers.getName(ctor) || ctor.name}\"`,result)\n return result;\n }\n //#region @browser\n // return inject(ctor)[propName];\n //#endregion\n },\n set: (__, propName, value) => {\n const contextFromClass = ctor && ctor[Symbols.ctxInClassOrClassObj];\n const resultContext: EndpointContext = contextFromClass\n ? contextFromClass\n : this.__endpoint_context__;\n\n if (options.resolveClassFromContext) {\n const resolvedClass = resultContext.getClassFunByClassName(\n options.resolveClassFromContext,\n );\n ctor = resolvedClass as any;\n }\n\n if (resultContext) {\n var instance: T = resultContext.inject(ctor, {\n ...options,\n contextClassInstance,\n parentInstanceThatWillGetInjectedStuff: this,\n });\n if (!instance) {\n const classNameNotResolved =\n ClassHelpers.getName(ctor) || ctor.name;\n throw new Error(\n `Not able to inject \"${classNameNotResolved}\" inside ` +\n `property \"${propName?.toString()}\" on class \"${ClassHelpers.getName(\n this,\n )}\".\n\n Please add \"${\n ClassHelpers.getName(ctor) || ctor.name\n }\" to (entites or contorllers or providers or repositories or middlewares)\n\n `,\n );\n }\n instance[propName] = value;\n }\n return true;\n },\n },\n ) as T;\n }\n //#endregion\n\n //#endregion\n}\n","import type { HttpHandlerFn, HttpRequest } from '@angular/common/http';\nimport type { AxiosRequestConfig, AxiosResponse } from 'axios';\nimport type express from 'express';\nimport type multer from 'multer';\nimport {\n AxiosTaonHttpHandler,\n TaonClientMiddlewareInterceptOptions,\n TaonServerMiddlewareInterceptOptions,\n} from 'ng2-rest/websql';\nimport { Observable } from 'rxjs';\nimport { CoreModels } from 'tnp-core/websql';\n\nimport { BaseInjector } from './base-injector';\n\n/**\n * TODO\n * - global provider available in all contexts\n * - provider available in own context\n */\nexport abstract class BaseMiddleware extends BaseInjector {}\n\nexport interface TaonAdditionalMiddlewareMethodInfo {\n methodName: string;\n expressPath: string;\n httpRequestType: CoreModels.HttpMethod;\n}\n\nexport interface BaseMiddleware {\n /**\n * Global interceptor for whole context\n * backend request\n */\n interceptServer({\n req,\n res,\n next,\n }: TaonServerMiddlewareInterceptOptions): Promise<void> | void;\n\n /**\n * Global interceptor for whole context\n * client requests\n */\n interceptClient({\n req,\n next,\n }: TaonClientMiddlewareInterceptOptions): Observable<AxiosResponse<any>>;\n\n /**\n * Specyfic controller method interceptor\n */\n interceptServerMethod(\n { req, res, next }: TaonServerMiddlewareInterceptOptions,\n { methodName, expressPath, httpRequestType }: TaonAdditionalMiddlewareMethodInfo,\n ): Promise<void> | void;\n\n /**\n * Controller method frontned interceptor\n * TODO not needed ?\n */\n interceptClientMethod(\n { req, next }: TaonClientMiddlewareInterceptOptions,\n { methodName, expressPath, httpRequestType }: TaonAdditionalMiddlewareMethodInfo,\n ): Observable<AxiosResponse<any>>;\n}\n","//#region imports\nimport * as crypto from 'crypto';\n\nimport express from 'express';\nimport * as multer from 'multer';\nimport {\n TaonClientMiddlewareInterceptOptions,\n TaonServerMiddlewareInterceptOptions,\n} from 'ng2-rest/websql';\nimport { Observable } from 'rxjs';\nimport { crossPlatformPath, fse, path } from 'tnp-core/websql';\n\nimport { TaonMiddleware } from '../decorators/classes/middleware-decorator';\n\nimport {\n BaseMiddleware,\n TaonAdditionalMiddlewareMethodInfo,\n} from './base-middleware';\n//#endregion\n\n/**\n * Configurable file upload middleware (multer based)\n */\n@TaonMiddleware({\n className: 'BaseFileUploadMiddleware',\n})\nexport class BaseFileUploadMiddleware extends BaseMiddleware {\n async interceptServerMethod(\n { req, res, next }: TaonServerMiddlewareInterceptOptions,\n { methodName, expressPath }: TaonAdditionalMiddlewareMethodInfo,\n ): Promise<void> {\n return this.middleware()(req, res, next);\n }\n\n //#region upload Dir\n uploadDir(): string {\n return crossPlatformPath([this.ctx.cwd, 'uploaded-files']);\n }\n //#endregion\n\n //#region storage\n storage(): multer.StorageEngine {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region upload\n upload(): multer.Multer {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region middleware\n middleware(): express.RequestHandler {\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","import { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Repository decorator\n */\nexport function TaonRepository(options: TaonRepositoryOptions) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.repository,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className);\n };\n}\n\nexport class TaonRepositoryOptions<T = any> extends DecoratorAbstractOpt {}\n","//#region imports\nimport { _ } from 'tnp-core/websql';\n\nimport { TaonRepository } from '../decorators/classes/repository-decorator';\n\nimport { BaseInjector } from './base-injector';\n//#endregion\n\n@TaonRepository({ className: 'BaseCustomRepository' })\nexport abstract class BaseCustomRepository extends BaseInjector {}\n","//#region imports\nimport {\n type DataSource,\n type DeepPartial,\n type DeleteResult,\n type FindManyOptions,\n type FindOneOptions,\n type FindOptionsWhere,\n type InsertResult,\n // ObjectID // TODO why is this not in taon-typeorm,\n type RemoveOptions,\n type Repository,\n type SaveOptions,\n type UpdateResult,\n} from 'taon-typeorm/websql';\nimport type { QueryDeepPartialEntity } from 'taon-typeorm/websql';\nimport type { UpsertOptions } from 'taon-typeorm/websql';\n// import { QueryDeepPartialEntity } from 'taon-typeorm/src';\n// import { UpsertOptions } from 'taon-typeorm/src';\n\nimport type {\n DataSource as DataSourceType,\n QueryRunner,\n SelectQueryBuilder,\n} from 'taon-typeorm/websql';\nimport { EndpointContext } from '../endpoint-context';\nimport { Helpers } from 'tnp-core/websql';\nimport { _ } from 'tnp-core/websql';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { MySqlQuerySource } from 'taon-type-sql/websql';\nimport { TaonRepository } from '../decorators/classes/repository-decorator';\nimport { BaseInjector } from './base-injector';\nimport type { BaseEntity } from './base-entity';\nimport { BaseCustomRepository } from './base-custom-repository';\nimport { Models } from '../models';\n//#endregion\n\nconst INDEX_KEYS_NO_FOR_UPDATE = ['id'];\n\nconst REPOS_CACHE = Symbol('repository cache inside instance');\n\n@TaonRepository({ className: 'BaseRepository' })\nexport abstract class BaseRepository<\n Entity extends { id?: any },\n> extends BaseCustomRepository {\n //#region dummy fields\n // static ids:number = 0;\n // id:number = BaseRepository.ids++;\n //#endregion\n\n //#region constructor & resolve entity\n abstract entityClassResolveFn: () => any;\n constructor(\n // Injected through BaseCrudController\n __entityClassResolveFn: () => any,\n ) {\n super();\n // @ts-ignore\n this.entityClassResolveFn = __entityClassResolveFn;\n }\n //#endregion\n\n //#region db query\n private __dbQuery: MySqlQuerySource;\n\n public get dbQuery(): MySqlQuerySource {\n //#region @websqlFunc\n if (!this.__dbQuery) {\n if (!this.ctx) {\n return; // TODO\n throw new Error(\n `[BaseRepository] Context not inited for class ${ClassHelpers.getName(\n this,\n )}`,\n );\n }\n const connection = this.ctx?.connection;\n if (!connection) {\n throw new Error(\n `[BaseRepository] Database not inited for context ${this.ctx?.contextName}`,\n );\n }\n this.__dbQuery = new MySqlQuerySource(connection);\n }\n return this.__dbQuery;\n //#endregion\n }\n //#endregion\n\n //#region connection\n public get connection(): DataSourceType {\n //#region @websqlFunc\n return this.ctx?.connection;\n //#endregion\n }\n //#endregion\n\n //#region repository\n protected get repository(): Repository<Entity> {\n //#region @websqlFunc\n if (this[REPOS_CACHE]) {\n return this[REPOS_CACHE];\n }\n const repo = this.ctx.repos.get(\n ClassHelpers.getName(this.entityClassResolveFn()),\n ) as Repository<Entity>;\n\n this[REPOS_CACHE] = repo;\n return this[REPOS_CACHE];\n //#endregion\n }\n\n /**\n * target for repository\n */\n public get target(): Function {\n //#region @websqlFunc\n return this?.repository?.target as any;\n //#endregion\n }\n\n /**\n * alias to repository\n */\n protected get repo(): Repository<Entity> {\n //#region @websqlFunc\n return this.repository;\n //#endregion\n }\n\n public get repositoryExists(): boolean {\n //#region @websqlFunc\n return !!this.repository;\n //#endregion\n }\n\n //#endregion\n\n //#region crud operations / typeorm / has id\n /**\n * Checks if entity has an id.\n * If entity composite compose ids, it will check them all.\n */\n hasId(entity: Entity): boolean {\n return this.repo.hasId(entity);\n }\n //#endregion\n\n //#region crud operations / typeorm / get id\n /**\n * Gets entity mixed id.\n */\n getId(entity: Entity): any {\n return this.repo.getId(entity);\n }\n //#endregion\n\n //#region crud operations / typeorm / create & bulk create\n /**\n Saves a given entity in the database.\n * If entity does not exist in the database then inserts, otherwise updates.\n */\n async save(\n item: Entity,\n options?: SaveOptions & {\n reload: false;\n },\n ): Promise<Entity> {\n //#region @websqlFunc\n // if (!this.repo) {\n // debugger;\n // }\n let model = await this.repo.create(item);\n\n model = await this.repo.save(model, options);\n const { id } = model as any;\n\n model = await this.repo.findOne({\n where: { id } as any,\n });\n\n return model;\n //#endregion\n }\n\n /**\n * alias to save\n * -> it will actuall create new entity in db\n * in oposite to typeorm create method\n */\n /**\n * Creates a new entity instance.\n */\n create(): Entity;\n\n /**\n * Creates new entities and copies all entity properties from given objects into their new entities.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLikeArray: DeepPartial<Entity>[]): Entity[];\n\n /**\n * Creates a new entity instance and copies all entity properties from this object into a new entity.\n * Note that it copies only properties that are present in entity schema.\n */\n create(entityLike: DeepPartial<Entity>): Entity;\n\n /**\n * Creates a new entity instance or instances.\n * Can copy properties from the given object into new entities.\n */\n create(\n plainEntityLikeOrPlainEntityLikes?:\n | DeepPartial<Entity>\n | DeepPartial<Entity>[],\n ): Entity | Entity[] {\n return this.repo.create(plainEntityLikeOrPlainEntityLikes as any);\n }\n\n async bulkSave(\n items: Entity[],\n options?: SaveOptions & {\n reload: false;\n },\n ): Promise<Entity[]> {\n //#region @websqlFunc\n const models = [];\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n // TODO FIX THIS / REFACTOR\n const model = await this.save(item, options);\n models.push(model);\n }\n return models;\n //#endregion\n }\n\n async bulkCreate(\n items: Entity[],\n options?: SaveOptions & {\n reload: false;\n },\n ): Promise<Entity[]> {\n return this.bulkSave(items, options);\n }\n\n //#region old typeorm version\n /**\n * Saves all given entities in the database.\n * If entities do not exist in the database then inserts, otherwise updates.\n */\n // save<T extends DeepPartial<Entity>>(\n // entities: T[],\n // options: SaveOptions & {\n // reload: false;\n // },\n // ): Promise<T[]>;\n // /**\n // * Saves all given entities in the database.\n // * If entities do not exist in the database then inserts, otherwise updates.\n // */\n // save<T extends DeepPartial<Entity>>(\n // entities: T[],\n // options?: SaveOptions,\n // ): Promise<(T & Entity)[]>;\n // /**\n // * Saves a given entity in the database.\n // * If entity does not exist in the database then inserts, otherwise updates.\n // */\n // save<T extends DeepPartial<Entity>>(\n // entity: T,\n // options: SaveOptions & {\n // reload: false;\n // },\n // ): Promise<T>;\n // /**\n // * Saves a given entity in the database.\n // * If entity does not exist in the database then inserts, otherwise updates.\n // */\n // save<T extends DeepPartial<Entity>>(\n // entity: T,\n // options?: SaveOptions,\n // ): Promise<T & Entity> {\n // return this.repo.save(entity, options);\n // }\n //#endregion\n\n //#endregion\n\n //#region crud operations / typeorm / merge\n /**\n * Merges multiple entities (or entity-like objects) into a given entity.\n */\n merge(mergeIntoEntity: Entity, ...entityLikes: Entity[]): Entity {\n return this.repo.merge(mergeIntoEntity, ...entityLikes);\n }\n //#endregion\n\n //#region crud operations / typeorm / preload\n /**\n * Creates a new entity from the given plain javascript object. If entity already exist in the database, then\n * it loads it (and everything related to it), replaces all values with the new ones from the given object\n * and returns this new entity. This new entity is actually a loaded from the db entity with all properties\n * replaced from the new object.\n *\n * Note that given entity-like object must have an entity id / primary key to find entity by.\n * Returns undefined if entity with given id was not found.\n */\n preload(entityLike: Entity): Promise<Entity | undefined> {\n return this.repo.preload(entityLike);\n }\n //#endregion\n\n //#region crud operations / typeorm / remove (delete) & bulk remove (delete)\n\n /**\n * Removes a given entities from the database.\n */\n async remove(idOrEntity: number | string | Entity): Promise<Entity> {\n //#region @websqlFunc\n if (_.isObject(idOrEntity)) {\n idOrEntity = (idOrEntity as Entity).id;\n }\n const deletedEntity = await this.repo.findOne({\n where: { id: idOrEntity } as any,\n });\n\n if (!deletedEntity) {\n Helpers.warn(\n `[BaseRepository] Entity \"${ClassHelpers.getName(this.repo.target)}\" ` +\n `with id ${idOrEntity} not found, cannot remove`,\n );\n return;\n }\n\n const idCopy = deletedEntity.id;\n await this.repo.remove(deletedEntity);\n\n deletedEntity.id = idCopy;\n return deletedEntity;\n //#endregion\n }\n\n /**\n * alias to remove\n */\n async delete(idOrEntity: number | string | Partial<Entity>): Promise<Entity> {\n return this.remove(idOrEntity as any);\n }\n\n /**\n * alias to removeById\n */\n async deleteById(id: number | string): Promise<Entity> {\n return this.remove(id);\n }\n async bulkRemove(\n idsOrEntities: (number | string | Entity)[],\n ): Promise<Entity[]> {\n //#region @websqlFunc\n idsOrEntities = idsOrEntities.map(id => {\n return _.isObject(id) ? (id as Entity).id : id;\n });\n\n const models = [];\n for (let index = 0; index < idsOrEntities.length; index++) {\n const id = idsOrEntities[index];\n const model = await this.remove(id);\n models.push(model);\n }\n return models;\n //#endregion\n }\n\n async bulkDelete(ids: (number | string | Entity)[]): Promise<Entity[]> {\n return this.bulkRemove(ids);\n }\n\n //#region old typeorm version\n // /**\n // * Deletes entities by a given criteria.\n // * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n // * Executes fast and efficient DELETE query.\n // * Does not check if entity exist in the database.\n // */\n // delete(\n // criteria:\n // | string\n // | string[]\n // | number\n // | number[]\n // | Date\n // | Date[]\n // | ObjectID\n // | ObjectID[]\n // | FindOptionsWhere<Entity>,\n // ): Promise<DeleteResult> {\n // return this.repo.delete(criteria);\n // }\n\n // /**\n // * Removes a given entities from the database.\n // */\n // remove(entities: Entity[], options?: RemoveOptions): Promise<Entity[]>;\n // /**\n // * Removes a given entity from the database.\n // */\n // remove(entity: Entity, options?: RemoveOptions): Promise<Entity> {\n // return this.repo.remove(entity, options);\n // }\n\n //#endregion\n //#endregion\n\n //#region crud operations / typeorm / soft remove\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends Entity>(\n entities: T[],\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T[]>;\n /**\n * Records the delete date of all given entities.\n */\n softRemove<T extends Entity>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>;\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends Entity>(\n entity: T,\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T>;\n /**\n * Records the delete date of a given entity.\n */\n softRemove<T extends Entity>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity> {\n return this.repo.softRemove(entity, options);\n }\n //#endregion\n\n //#region crud operations / typeorm / recover\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends Entity>(\n entities: T[],\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T[]>;\n /**\n * Recovers all given entities in the database.\n */\n recover<T extends Entity>(\n entities: T[],\n options?: SaveOptions,\n ): Promise<(T & Entity)[]>;\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends Entity>(\n entity: T,\n options: SaveOptions & {\n reload: false;\n },\n ): Promise<T>;\n /**\n * Recovers a given entity in the database.\n */\n recover<T extends Entity>(\n entity: T,\n options?: SaveOptions,\n ): Promise<T & Entity> {\n return this.repo.recover(entity, options);\n }\n //#endregion\n\n //#region crud operations / typeorm / insert\n /**\n * Inserts a given entity into the database.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT query.\n * Does not check if entity exist in the database, so query will fail if duplicate entity is being inserted.\n */\n insert(\n entity: QueryDeepPartialEntity<Entity> | QueryDeepPartialEntity<Entity>[],\n ): Promise<InsertResult> {\n return this.repo.insert(entity);\n }\n //#endregion\n\n //#region crud operations / typeorm / update & build update\n async update(item: Entity) {\n //#region @websqlFunc\n const { id } = item as any;\n return await this.updateById<Entity>(id, item);\n //#endregion\n }\n\n private allowedTypesToUpdate = ['simple-json', 'simple-array', 'json'];\n async updateById<ENTITY = Entity>(\n id: number | string,\n item: Entity,\n ): Promise<ENTITY> {\n //#region @websqlFunc\n const allowedPropsToUpdate = [];\n for (const key in item) {\n const metadataColumn = this.repo.metadata.ownColumns.find(\n c => c.propertyName === key,\n );\n if (\n _.isObject(item) &&\n item.hasOwnProperty(key) &&\n (typeof item[key] !== 'object' ||\n this.allowedTypesToUpdate.includes(metadataColumn?.type as any)) &&\n !_.isUndefined(metadataColumn)\n ) {\n allowedPropsToUpdate.push(key);\n }\n }\n\n for (let i = 0; i < allowedPropsToUpdate.length; i++) {\n const key: string = allowedPropsToUpdate[i];\n if (!INDEX_KEYS_NO_FOR_UPDATE.includes(key.toLowerCase())) {\n // const raw = _.isBoolean(item[key]) || _.isNumber(item[key]) || _.isNull(item[key]); // TODO does this make any sense ?\n const toSet = item[key];\n // const tableName = tableNameFrom(this.entity as any);\n\n await this.repo.update(\n {\n id,\n } as any,\n {\n [key]: toSet,\n } as any,\n );\n // await this.repo.query(\n // `UPDATE '${tableName}' as ${table}\n // SET ${key}=${toSet}\n // WHERE ${table}.id='${id}'\n // `);\n }\n }\n let model = await this.repo.findOne({\n where: { id } as any,\n });\n\n return model as any as ENTITY;\n //#endregion\n }\n async bulkUpdate(items: Entity[]) {\n //#region @websqlFunc\n const models = [];\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n const { id } = item as any; // TOOD\n const model = await this.updateById(id, item);\n models.push(model);\n }\n return { models };\n //#endregion\n }\n\n //#region tpeorm update version\n // this version suck and will not return update entity\n // /**\n // * Updates entity partially. Entity can be found by a given conditions.\n // * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n // * Executes fast and efficient UPDATE query.\n // * Does not check if entity exist in the database.\n // */\n // update(\n // criteria:\n // | string\n // | string[]\n // | number\n // | number[]\n // | Date\n // | Date[]\n // | ObjectID\n // | ObjectID[]\n // | FindOptionsWhere<Entity>,\n // partialEntity: QueryDeepPartialEntity<Entity>,\n // ): Promise<UpdateResult> {\n // return this.repo.update(criteria, partialEntity);\n // }\n //#endregion\n\n //#endregion\n\n //#region crud operations / typeorm / upsert\n /**\n * Inserts a given entity into the database, unless a unique constraint conflicts then updates the entity\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient INSERT ... ON CONFLICT DO UPDATE/ON DUPLICATE KEY UPDATE query.\n */\n upsert(\n entityOrEntities:\n | QueryDeepPartialEntity<Entity>\n | QueryDeepPartialEntity<Entity>[],\n conflictPathsOrOptions: string[] | UpsertOptions<Entity>,\n ): Promise<InsertResult> {\n return this.repo.upsert(entityOrEntities, conflictPathsOrOptions);\n }\n //#endregion\n\n //#region crud operations / typeorm / soft delete\n /**\n * Records the delete date of entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n softDelete(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n // | ObjectID\n // | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.repo.softDelete(criteria);\n }\n //#endregion\n\n //#region crud operations / typeorm / restore\n /**\n * Restores entities by a given criteria.\n * Unlike save method executes a primitive operation without cascades, relations and other operations included.\n * Executes fast and efficient SOFT-DELETE query.\n * Does not check if entity exist in the database.\n */\n restore(\n criteria:\n | string\n | string[]\n | number\n | number[]\n | Date\n | Date[]\n // | ObjectID\n // | ObjectID[]\n | FindOptionsWhere<Entity>,\n ): Promise<UpdateResult> {\n return this.repo.restore(criteria);\n }\n //#endregion\n\n //#region crud operations / typeorm / count\n /**\n * Counts entities that match given options.\n * Useful for pagination.\n */\n count(options?: FindManyOptions<Entity>): Promise<number> {\n return this.repo.count(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / count by\n /**\n * Counts entities that match given conditions.\n * Useful for pagination.\n */\n countBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<number> {\n return this.repo.countBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find\n /**\n * Finds entities that match given find options.\n */\n find(options?: FindManyOptions<Entity>): Promise<Entity[]> {\n return this.repo.find(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find by\n /**\n * Finds entities that match given find options.\n */\n findBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity[]> {\n return this.repo.findBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find and count\n // async findAndCount(options: { take: number; skip: number }) {\n // const { take, skip } = options;\n // const [result, total] = await this.repo.findAndCount({\n // // where: { name: Like('%' + keyword + '%') },\n // // order: { name: \"DESC\" },\n // take: take,\n // skip: skip,\n // });\n // return { result, total };\n\n // }\n //\n /**\n * Finds entities that match given find options.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCount(options?: FindManyOptions<Entity>): Promise<[Entity[], number]> {\n return this.repo.findAndCount(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find and count by\n /**\n * Finds entities that match given WHERE conditions.\n * Also counts all entities that match given conditions,\n * but ignores pagination settings (from and take options).\n */\n findAndCountBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<[Entity[], number]> {\n return this.repo.findAndCountBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find by ids\n /**\n * Finds entities with ids.\n * Optionally find options or conditions can be applied.\n *\n * @deprecated use `findBy` method instead in conjunction with `In` operator, for example:\n *\n * .findBy({\n * id: In([1, 2, 3])\n * })\n */\n findByIds(ids: any[]): Promise<Entity[]> {\n return this.repo.findByIds(ids);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - returns null.\n */\n findOne(options: FindOneOptions<Entity>): Promise<Entity | null> {\n return this.repo.findOne(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one by\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - returns null.\n */\n findOneBy(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity | null> {\n return this.repo.findOneBy(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one or fail\n /**\n * Finds first entity that matches given id.\n * If entity was not found in the database - returns null.\n *\n * @deprecated use `findOneBy` method instead in conjunction with `In` operator, for example:\n *\n * .findOneBy({\n * id: 1 // where \"id\" is your primary column name\n * })\n */\n findOneById(\n id: number | string | Date,\n // | ObjectID\n ): Promise<Entity | null> {\n return this.repo.findOneById(id);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one or fail\n /**\n * Finds first entity by a given find options.\n * If entity was not found in the database - rejects with error.\n */\n findOneOrFail(options: FindOneOptions<Entity>): Promise<Entity> {\n return this.repo.findOneOrFail(options);\n }\n //#endregion\n\n //#region crud operations / typeorm / find one by or fail\n /**\n * Finds first entity that matches given where condition.\n * If entity was not found in the database - rejects with error.\n */\n findOneByOrFail(\n where: FindOptionsWhere<Entity> | FindOptionsWhere<Entity>[],\n ): Promise<Entity> {\n return this.repo.findOneByOrFail(where);\n }\n //#endregion\n\n //#region crud operations / typeorm / query\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n query(query: string, parameters?: any[]): Promise<any> {\n return this.repo.query(query, parameters);\n }\n //#endregion\n\n //#region crud operations / typeorm / query\n /**\n * Executes a raw SQL query and returns a raw database results.\n * Raw query execution is supported only by relational databases (MongoDB is not supported).\n */\n createQueryBuilder(\n alias?: string,\n queryRunner?: QueryRunner,\n ): SelectQueryBuilder<Entity> {\n return this.repo.createQueryBuilder(alias, queryRunner);\n }\n //#endregion\n\n //#region crud operations / typeorm / clear\n /**\n * Clears all the data from the given table/collection (truncates/drops it).\n *\n * Note: this method uses TRUNCATE and may not work as you expect in transactions on some platforms.\n * @see https://stackoverflow.com/a/5972738/925151\n */\n clear(): Promise<void> {\n return this.repo.clear();\n }\n //#endregion\n\n //#region crud operations / typeorm / increment\n /**\n * Increments some column by provided value of the entities matched given conditions.\n */\n increment(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.repo.increment(conditions, propertyPath, value);\n }\n //#endregion\n\n //#region crud operations / typeorm / decrement\n /**\n * Decrements some column by provided value of the entities matched given conditions.\n */\n decrement(\n conditions: FindOptionsWhere<Entity>,\n propertyPath: string,\n value: number | string,\n ): Promise<UpdateResult> {\n return this.repo.decrement(conditions, propertyPath, value);\n }\n //#endregion\n\n //#region crud operations / get all\n /**\n * @deprecated use findAndCount instead\n */\n async getAll() {\n //#region @websqlFunc\n // console.log('repo', this.__repository);\n // console.log(\n // `repo taget name \"${ClassHelpers.getName(this.__repository.target)}\"`,\n // );\n // debugger;\n const totalCount = await this.repo.count();\n const models = await this.repo.find();\n // console.log('models', models);\n // console.log('totalCount', totalCount);\n return { models, totalCount };\n //#endregion\n }\n //#endregion\n\n //#region crud operations / get by id\n async getBy(id: number | string): Promise<Entity> {\n //#region @websqlFunc\n const model = await await this.repo.findOne({\n where: { id } as any,\n });\n\n return model;\n //#endregion\n }\n //#endregion\n}\n","import { createContext } from '../create-context';\n\nimport { BaseFileUploadMiddleware } from './base-file-upload.middleware';\nimport { BaseRepository } from './base-repository';\n\nconst BaseContext = createContext(() => ({\n contextName: 'BaseContext',\n abstract: true,\n middlewares: {\n BaseFileUploadMiddleware,\n },\n repositories: {\n // @ts-ignore\n BaseRepository,\n },\n}));\n\nexport { BaseContext };\n","import type { TaonControllerOptions } from '../../config/controller-options';\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\n\n/**\n * Controller decorator\n */\nexport function TaonController<ControllerClass = any>(\n options?: TaonControllerOptions<ControllerClass>,\n) {\n return function (constructor: Function) {\n ClassHelpers.setName(constructor, options?.className);\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n const cfg = ClassHelpers.ensureClassConfig(constructor);\n options = options || ({} as any);\n cfg.className = options.className || constructor.name;\n cfg.path = options.path || '';\n cfg.realtime = options.realtime;\n cfg.middlewares = options.middlewares;\n };\n}\n","import { Models as ModelsNg2Rest } from 'ng2-rest/websql';\nimport { CoreModels, _ } from 'tnp-core/websql';\n\nimport { BaseMiddleware } from '../../base-classes/base-middleware';\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Models } from '../../models';\nimport { Symbols } from '../../symbols';\n\nconst metaReq = (\n method: Models.Http.Rest.HttpMethod,\n path: string,\n target: Function,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n pathOrOptions: string | TaonHttpDecoratorOptions,\n pathIsGlobal: boolean,\n) => {\n const methodConfig = ClassHelpers.ensureMethodConfig(target, propertyKey);\n\n let options: TaonHttpDecoratorOptions;\n if (typeof pathOrOptions === 'object') {\n options = pathOrOptions;\n pathOrOptions = options.path as any;\n pathIsGlobal = !!options.pathIsGlobal;\n path = options.path;\n } else {\n options = { pathOrOptions, pathIsGlobal } as any;\n }\n\n const { overrideContentType, overrideResponseType, middlewares } = options;\n\n methodConfig.methodName = propertyKey;\n methodConfig.middlewares = middlewares;\n methodConfig.type = method;\n if (!path) {\n let paramsPathConcatedPath = '';\n for (const key in methodConfig.parameters) {\n if (methodConfig.parameters.hasOwnProperty(key)) {\n const element = methodConfig.parameters[key];\n if (\n element.paramType === 'Path' &&\n _.isString(element.paramName) &&\n element.paramName.trim().length > 0\n ) {\n paramsPathConcatedPath += `/${element.paramName}/:${element.paramName}`;\n }\n }\n }\n methodConfig.path = `/${propertyKey}${paramsPathConcatedPath}`;\n } else {\n methodConfig.path = path;\n }\n\n methodConfig.descriptor = descriptor;\n methodConfig.global = pathIsGlobal;\n methodConfig.contentType = overrideContentType;\n methodConfig.responseType = overrideResponseType;\n};\n\nexport type TaonMiddlewareInheritanceObj = {\n [parentMiddlewaresName: string]: typeof BaseMiddleware;\n};\n\nexport type TaonMiddlewareFunction = (options: {\n /**\n * middlewares inherited from parent class\n */\n parentMiddlewares: TaonMiddlewareInheritanceObj;\n /**\n * Get real class name - needed when code is minified\n */\n className: (middlewareClass: Function) => string;\n}) => TaonMiddlewareInheritanceObj;\n\nexport interface TaonHttpDecoratorOptions {\n /**\n * @deprecated don't use in production - keep stuff encapsulated\n * path is global in express app\n * ! BE CAREFUL ! global path IS NOT GLOBAL inside dockerized app\n * (/api/contextName is automatically added to global path in docker)\n */\n path?: string;\n /**\n * ! BE CAREFULL\n * If true, the path will be global\n */\n pathIsGlobal?: boolean;\n overrideContentType?: CoreModels.ContentType;\n overrideResponseType?: ModelsNg2Rest.ResponseTypeAxios;\n middlewares?: TaonMiddlewareFunction;\n}\n\nexport function GET(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'get',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function HEAD(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'head',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function POST(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'post',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function PUT(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'put',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function PATCH(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'patch',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n\nexport function DELETE(\n pathOrOptions?: string | TaonHttpDecoratorOptions,\n pathIsGlobal = false,\n) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n metaReq(\n 'delete',\n pathOrOptions as string,\n target,\n propertyKey,\n descriptor,\n pathOrOptions,\n pathIsGlobal,\n );\n };\n}\n","import { ClassHelpers } from '../../helpers/class-helpers';\nimport { Models } from '../../models';\nimport { Symbols } from '../../symbols';\n\nfunction metaParam(\n param: Models.Http.Rest.ParamType,\n name: string,\n expire: number,\n defaultValue = undefined,\n target: Function,\n propertyKey: string | symbol,\n parameterIndex: number,\n) {\n const methodCfg = ClassHelpers.ensureMethodConfig(target, propertyKey);\n const nameKey = name ? name : param;\n // const key = name || `${param}_${parameterIndex}`;\n methodCfg.parameters[nameKey] = {\n index: parameterIndex,\n paramName: name,\n paramType: param,\n defaultType: defaultValue,\n expireInSeconds: expire,\n };\n\n // console.log('params updated', methodConfig);\n}\n\nexport function Path(name: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam('Path', name, undefined, {}, target, propertyKey, parameterIndex);\n };\n}\n\nexport function Query(name?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam(\n 'Query',\n name,\n undefined,\n {},\n target,\n propertyKey,\n parameterIndex,\n );\n };\n}\n\nexport function Cookie(name: string, expireInSecond: number = 3600) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam(\n 'Cookie',\n name,\n expireInSecond,\n {},\n target,\n propertyKey,\n parameterIndex,\n );\n };\n}\n\nexport function Header(name?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam(\n 'Header',\n name,\n undefined,\n {},\n target,\n propertyKey,\n parameterIndex,\n );\n };\n}\n\nexport function Body(name?: string) {\n return function (\n target: any,\n propertyKey: string | symbol,\n parameterIndex: number,\n ) {\n metaParam('Body', name, undefined, {}, target, propertyKey, parameterIndex);\n };\n}\n","/* */ \nimport { CoreModels, crossPlatformPath, fse, path } from 'tnp-core/websql';\n\nimport { TaonController } from '../decorators/classes/controller-decorator';\nimport { POST } from '../decorators/http/http-methods-decorators';\nimport { Body, Path, Query } from '../decorators/http/http-params-decorators';\nimport type { EndpointContext } from '../endpoint-context';\nimport type { ContextsEndpointStorage } from '../endpoint-context-storage';\nimport type { Models } from '../models';\n\nimport { BaseFileUploadMiddleware } from './base-file-upload.middleware';\nimport { BaseInjector } from './base-injector';\n\nexport interface MulterFileUploadResponse {\n ok: boolean;\n originalName: string;\n /**\n * name change to this to avoid confusion with originalname\n * (similar to originalname with added uniq part)\n */\n savedAs: string;\n size: number;\n mimetype: string;\n}\n\n@TaonController<BaseController>({\n className: 'BaseController',\n})\nexport class BaseController<T = any> extends BaseInjector {\n /**\n * Hook that is called when taon app is inited\n * (all contexts are created and inited)\n */\n async afterAllCtxInited(options: {\n ctxStorage: ContextsEndpointStorage;\n }): Promise<void> {}\n\n //#region upload form data to server\n @POST({\n overrideContentType: 'multipart/form-data',\n middlewares: ({ parentMiddlewares }) => ({\n ...parentMiddlewares,\n BaseFileUploadMiddleware,\n }),\n })\n uploadFormDataToServer(\n @Body() formData: FormData,\n ): Models.Http.Response<MulterFileUploadResponse[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n\n //#region after file upload hook\n /**\n * Hook after file is uploaded\n * through `uploadFormDataToServer` or `uploadLocalFileToServer`\n */\n protected afterFileUploadAction(\n file: MulterFileUploadResponse,\n ): void | Promise<void> {\n // empty\n }\n\n //#region upload local file to server\n async uploadLocalFileToServer(\n absFilePath: string,\n options?: Pick<\n Models.Http.Rest.Ng2RestAxiosRequestConfig,\n 'onUploadProgress'\n >,\n ): Promise<MulterFileUploadResponse[]> {\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n/* */\n return (void 0);\n }\n //#endregion\n}\n","//#region imports\nimport { Helpers, _ } from 'tnp-core/websql';\n\nimport { TaonController } from '../decorators/classes/controller-decorator';\nimport { TaonEntityOptions } from '../decorators/classes/entity-decorator';\nimport {\n GET,\n PUT,\n DELETE,\n POST,\n HEAD,\n PATCH,\n} from '../decorators/http/http-methods-decorators';\nimport { Query, Path, Body } from '../decorators/http/http-params-decorators';\nimport { ClassHelpers } from '../helpers/class-helpers';\nimport { Models } from '../models';\nimport { Symbols } from '../symbols';\nimport { Validators } from '../validators';\n\nimport { BaseController } from './base-controller';\nimport { BaseRepository } from './base-repository';\n//#endregion\n\n/**\n * Please override property entityClassFn with entity class.\n */\n@TaonController({ className: 'BaseCrudController' })\nexport abstract class BaseCrudController<Entity> extends BaseController {\n //#region fields\n protected db: BaseRepository<Entity>;\n\n /**\n * Please provide entity as class propery entityClassFn:\n * @returns class function\n *\n */\n abstract entityClassResolveFn: () => any;\n //#endregion\n\n //#region init\n async _(): Promise<void> {\n if (!_.isFunction(this.entityClassResolveFn)) {\n Helpers.warn(\n `Skipping initing CRUD controller ${ClassHelpers.getName(\n this,\n )} because entityClassResolveFn is not provided.`,\n );\n return;\n }\n\n let entityClassFn = this.entityClassResolveFn();\n this.db = this.injectRepo(entityClassFn);\n\n if (entityClassFn) {\n const configEntity = Reflect.getMetadata(\n Symbols.metadata.options.entity,\n ClassHelpers.getClassFnFromObject(this),\n ) as TaonEntityOptions;\n if (configEntity?.createTable === false) {\n Helpers.warn(\n `Table for entity ${ClassHelpers.getName(\n entityClassFn,\n )} will not be created. Crud will not work properly.`,\n );\n }\n } else {\n Helpers.error(`Entity class not provided for controller ${ClassHelpers.getName(\n this,\n )}.\n\n Please provide entity as class propery entityClassFn:\n\n class ${ClassHelpers.getName(this)} extends BaseCrudController<Entity> {\n // ...\n entityClassResolveFn = ()=> MyEntityClass;\n // ...\n }\n\n `);\n }\n await super._();\n }\n //#endregion\n\n //#region bufferd changes\n @GET(`/:id/property/:property`)\n bufforedChanges(\n @Path(`id`) id: number | string,\n @Path(`property`) property: string,\n @Query('alreadyLength') alreadyLength?: number,\n ): Models.Http.Response<string | any[]> {\n //#region @websqlFunc\n return async (request, response) => {\n const model = await this.db.getBy(id);\n if (model === void 0) {\n return;\n }\n Validators.preventUndefinedModel(model, id);\n let value = model[property];\n let result: any;\n if (_.isString(value) || _.isArray(value)) {\n result = (value as string).slice(alreadyLength);\n }\n\n return result;\n };\n //#endregion\n }\n //#endregion\n\n //#region pagintation\n @GET()\n pagination(\n @Query('pageNumber') pageNumber: number = 1,\n @Query('pageSize') pageSize: number = 10,\n @Query('search') search: string = '',\n ): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async (request, response) => {\n if (this.db.repositoryExists) {\n const query = {\n page: pageNumber,\n take: pageSize,\n keyword: search,\n };\n // console.log({\n // query\n // })\n\n const take = query.take || 10;\n const page = query.page || 1;\n const skip = (page - 1) * take;\n const keyword = query.keyword || '';\n\n const [result, total] = await this.db.findAndCount({\n // where: { name: Like('%' + keyword + '%') },\n // order: { name: \"DESC\" },\n take: take,\n skip: skip,\n });\n\n response?.setHeader(Symbols.old.X_TOTAL_COUNT, total);\n // const lastPage = Math.ceil(total / take);\n // const nextPage = page + 1 > lastPage ? null : page + 1;\n // const prevPage = page - 1 < 1 ? null : page - 1;\n\n // console.log({\n // result,\n // total\n // })\n\n return result as Entity[];\n }\n return [];\n };\n //#endregion\n }\n //#endregion\n\n //#region get all\n @GET()\n getAll(): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async (request, response) => {\n if (this.db.repositoryExists) {\n const { models, totalCount } = await this.db.getAll();\n response?.setHeader(Symbols.old.X_TOTAL_COUNT, totalCount);\n return models;\n }\n return [];\n };\n //#endregion\n }\n //#endregion\n\n //#region get by id\n @GET(`/:id`)\n getBy(@Path(`id`) id: number | string): Models.Http.Response<Entity> {\n //#region @websqlFunc\n return async () => {\n const model = await this.db.getBy(id);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region update by id\n @PUT(`/:id`)\n updateById(\n @Path(`id`) id: number | string,\n @Body() item: Entity,\n ): Models.Http.Response<Entity> {\n //#region @websqlFunc\n\n return async () => {\n const model = await this.db.updateById<Entity>(id, item as any);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region patch by id\n @PATCH(`/:id`)\n patchById(\n @Path(`id`) id: number | string,\n @Body() item: Entity,\n ): Models.Http.Response<Entity> {\n //#region @websqlFunc\n\n return async () => {\n const model = await this.db.updateById<Entity>(id, item as any);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region bulk update\n @PUT()\n bulkUpdate(@Body() items: Entity[]): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async () => {\n if (!Array.isArray(items) || items?.length === 0) {\n return [];\n }\n const { models } = await this.db.bulkUpdate(items);\n return models;\n };\n //#endregion\n }\n //#endregion\n\n //#region delete by id\n @DELETE(`/:id`)\n deleteById(@Path(`id`) id: number): Models.Http.Response<Entity> {\n //#region @websqlFunc\n return async () => {\n const model = await this.db.deleteById(id);\n return model;\n };\n //#endregion\n }\n //#endregion\n\n //#region bulk delete\n @DELETE(`/bulkDelete/:ids`)\n bulkDelete(\n @Path(`ids`) ids: (number | string)[],\n ): Models.Http.Response<(number | string | Entity)[]> {\n //#region @websqlFunc\n return async () => {\n const models = await this.db.bulkDelete(ids);\n return models;\n };\n //#endregion\n }\n //#endregion\n\n //#region create\n @POST()\n create(@Body() item: Entity): Models.Http.Response<Entity> {\n //#region @websqlFunc\n return async () => {\n const model = await this.db.create(item as any);\n return model as Entity;\n };\n //#endregion\n }\n //#endregion\n\n //#region bulk create\n @POST()\n bulkCreate(@Body() items: Entity): Models.Http.Response<Entity[]> {\n //#region @websqlFunc\n return async () => {\n const models = await this.db.bulkCreate(items as any);\n return models as Entity[];\n };\n //#endregion\n }\n //#endregion\n}\n","import { MigrationInterface, QueryRunner } from 'taon-typeorm/websql';\nimport { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../helpers/class-helpers';\n\nimport { BaseInjector } from './base-injector';\n\nexport class BaseMigration extends BaseInjector implements MigrationInterface {\n /**\n * by default is READY to run\n */\n public isReadyToRun(): boolean {\n return true;\n }\n\n getDescription(): string {\n return _.startCase(ClassHelpers.getName(this));\n }\n\n async up(queryRunner: QueryRunner): Promise<any> {\n console.log(`[BaseMigration] Running migration UP \"${ClassHelpers.getName(this)}\"`);\n }\n async down(queryRunner: QueryRunner): Promise<any> {\n console.log(`[BaseMigration] Running migration DOWN \"${ClassHelpers.getName(this)}\"`);\n }\n}\n","import { BaseInjector } from './base-injector';\n\n/**\n * TODO\n * - global provider available in all contexts\n * - provider available in own context\n */\nexport class BaseProvider extends BaseInjector {}\n","import { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Subscriber decorator\n */\nexport function TaonSubscriber(options: TaonSubscriberOptions) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.subscriber,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className);\n } as any;\n}\n\nexport class TaonSubscriberOptions<T = any> extends DecoratorAbstractOpt {\n allowedEvents?: (keyof T)[];\n}\n","import {\n EntitySubscriberInterface,\n RecoverEvent,\n SoftRemoveEvent,\n InsertEvent,\n TransactionStartEvent,\n TransactionCommitEvent,\n TransactionRollbackEvent,\n RemoveEvent,\n UpdateEvent,\n} from 'taon-typeorm/websql';\nimport { BaseInjector } from './base-injector';\nimport { TaonSubscriber } from '../decorators/classes/subscriber-decorator';\nimport { _ } from 'tnp-core/websql';\n\n@TaonSubscriber({\n className: 'BaseSubscriberForEntity',\n})\nexport abstract class BaseSubscriberForEntity<Entity = any>\n extends BaseInjector\n implements EntitySubscriberInterface\n{\n abstract listenTo(): new (...args) => Entity;\n\n /**\n * Called after entity is loaded.\n */\n afterLoad(entity: any) {\n this.ctx.logDb &&\n console.log(`AFTER ENTITY LOADED: `, entity);\n }\n\n /**\n * Called before query execution.\n */\n beforeQuery(event: any) {\n // BeforeQueryEvent<any>\n this.ctx.logDb &&\n console.log(`BEFORE QUERY: `, event.query);\n }\n\n /**\n * Called after query execution.\n */\n afterQuery(event: any) {\n // AfterQueryEvent<any>\n this.ctx.logDb &&\n console.log(`AFTER QUERY: `, event.query);\n }\n\n /**\n * Called before entity insertion.\n */\n beforeInsert(event: InsertEvent<any>) {\n this.ctx.logDb &&\n console.log(`BEFORE ENTITY INSERTED: `, event.entity);\n }\n\n /**\n * Called after entity insertion.\n */\n afterInsert(event: InsertEvent<any>) {\n this.ctx.logDb &&\n console.log(`AFTER ENTITY INSERTED: `, event.entity);\n }\n\n /**\n * Called before entity update.\n */\n beforeUpdate(event: UpdateEvent<any>) {\n this.ctx.logDb &&\n console.log(`BEFORE ENTITY UPDATED: `, event.entity);\n }\n\n /**\n * Called after entity update.\n */\n afterUpdate(event: UpdateEvent<any>) {\n this.ctx.logDb &&\n console.log(`AFTER ENTITY UPDATED: `, event.entity);\n }\n\n /**\n * Called before entity removal.\n */\n beforeRemove(event: RemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `BEFORE ENTITY WITH ID ${event.entityId} REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called after entity removal.\n */\n afterRemove(event: RemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `AFTER ENTITY WITH ID ${event.entityId} REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called before entity removal.\n */\n beforeSoftRemove(event: SoftRemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `BEFORE ENTITY WITH ID ${event.entityId} SOFT REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called after entity removal.\n */\n afterSoftRemove(event: SoftRemoveEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `AFTER ENTITY WITH ID ${event.entityId} SOFT REMOVED: `,\n event.entity,\n );\n }\n\n /**\n * Called before entity recovery.\n */\n beforeRecover(event: RecoverEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `BEFORE ENTITY WITH ID ${event.entityId} RECOVERED: `,\n event.entity,\n );\n }\n\n /**\n * Called after entity recovery.\n */\n afterRecover(event: RecoverEvent<any>) {\n this.ctx.logDb &&\n console.log(\n `AFTER ENTITY WITH ID ${event.entityId} RECOVERED: `,\n event.entity,\n );\n }\n\n /**\n * Called before transaction start.\n */\n beforeTransactionStart(event: TransactionStartEvent) {\n this.ctx.logDb &&\n console.log(`BEFORE TRANSACTION STARTED: `, event);\n }\n\n /**\n * Called after transaction start.\n */\n afterTransactionStart(event: TransactionStartEvent) {\n this.ctx.logDb &&\n console.log(`AFTER TRANSACTION STARTED: `, event);\n }\n\n /**\n * Called before transaction commit.\n */\n beforeTransactionCommit(event: TransactionCommitEvent) {\n this.ctx.logDb &&\n console.log(`BEFORE TRANSACTION COMMITTED: `, event);\n }\n\n /**\n * Called after transaction commit.\n */\n afterTransactionCommit(event: TransactionCommitEvent) {\n this.ctx.logDb &&\n console.log(`AFTER TRANSACTION COMMITTED: `, event);\n }\n\n /**\n * Called before transaction rollback.\n */\n beforeTransactionRollback(event: TransactionRollbackEvent) {\n this.ctx.logDb &&\n console.log(`BEFORE TRANSACTION ROLLBACK: `, event);\n }\n\n /**\n * Called after transaction rollback.\n */\n afterTransactionRollback(event: TransactionRollbackEvent) {\n this.ctx.logDb &&\n console.log(`AFTER TRANSACTION ROLLBACK: `, event);\n }\n}\n","import * as abstractEntity from './base-abstract-entity';\nimport * as baseService from './base-angular-service';\nimport * as baseClass from './base-class';\nimport * as baseContext from './base-context';\nimport * as controller from './base-controller';\nimport * as crudController from './base-crud-controller';\nimport * as customRepository from './base-custom-repository';\nimport * as entity from './base-entity';\nimport * as baseMiddleware from './base-middleware';\nimport * as baseMigration from './base-migration';\nimport * as provider from './base-provider';\nimport * as repository from './base-repository';\nimport * as baseSubscriberEntity from './base-subscriber-for-entity';\nexport namespace Base {\n export import Controller = controller.BaseController;\n export import CrudController = crudController.BaseCrudController;\n export import Entity = entity.BaseEntity;\n export import AbstractEntity = abstractEntity.BaseAbstractEntity;\n export import AbstractEntityOmitKeys = abstractEntity.AbstractEntityOmitKeys;\n export import Provider = provider.BaseProvider;\n export import Class = baseClass.BaseClass;\n export import Repository = repository.BaseRepository;\n export import CustomRepository = customRepository.BaseCustomRepository;\n export import SubscriberForEntity = baseSubscriberEntity.BaseSubscriberForEntity;\n export import Migration = baseMigration.BaseMigration;\n export import Middleware = baseMiddleware.BaseMiddleware;\n export import AngularService = baseService.BaseAngularsService;\n export const Context = baseContext.BaseContext;\n}\n","import { Mapping } from 'ng2-rest/websql';\nimport { Entity as TypeormEntity, Tree } from 'taon-typeorm/websql'; // @websql\nimport { _ } from 'tnp-core/websql';\nimport { CLASS } from 'typescript-class-helpers/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Entity decorator\n */\nexport function TaonEntity<T = any>(options?: TaonEntityOptions<T>) {\n return function (constructor: Function) {\n options = options || ({} as any);\n options.uniqueKeyProp = options.uniqueKeyProp || ('id' as any);\n ClassHelpers.setName(constructor, options?.className);\n\n Mapping.DefaultModelWithMapping<T>(\n options?.defaultModelValues || {},\n _.merge(\n options?.defaultModelMapping || {},\n (options?.defaultModelMappingDeep || {}) as any,\n ),\n )(constructor);\n\n // TODO when entit metadata generator read use this\n Mapping.DefaultModelWithMapping<T>(void 0, {})(constructor);\n\n Reflect.defineMetadata(\n Symbols.metadata.options.entity,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n //#region @websql\n TypeormEntity(options?.className)(constructor);\n //#endregion\n CLASS.setName(constructor, options?.className); // TODO QUICK_FIX for ng2-rest\n };\n}\n\nexport class TaonEntityOptions<T = any> extends DecoratorAbstractOpt {\n /**\n * default unique property is \"id\"\n * for your entity it may be something else\n */\n uniqueKeyProp?: string;\n createTable?: boolean;\n defaultModelValues?: Mapping.ModelValue<T>;\n defaultModelMapping?: Mapping.Mapping<T>;\n defaultModelMappingDeep?: { [lodashPathes: string]: string | [string] };\n}\n","import { _ } from 'tnp-core/websql';\n\nimport { ClassHelpers } from '../../helpers/class-helpers';\nimport { Models } from '../../models';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Migration decorator\n */\nexport function TaonMigration(options: TaonMigrationOptions) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.migration,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className);\n } as any;\n}\n\nexport class TaonMigrationOptions<T = any> extends DecoratorAbstractOpt {}\n","import { ClassHelpers } from '../../helpers/class-helpers';\nimport { Symbols } from '../../symbols';\nimport { DecoratorAbstractOpt } from '../decorator-abstract-opt';\n\n/**\n * Provider decorator\n */\nexport function TaonProvider<T = any>(\n options?: TaonProviderOptions<T>,\n) {\n return function (constructor: Function) {\n Reflect.defineMetadata(\n Symbols.metadata.options.provider,\n options,\n constructor,\n );\n Reflect.defineMetadata(\n Symbols.metadata.className,\n options?.className || constructor.name,\n constructor,\n );\n ClassHelpers.setName(constructor, options?.className || constructor.name);\n };\n}\n\nexport class TaonProviderOptions<T = any> extends DecoratorAbstractOpt {\n // providers is a singleton for each context\n}\n","import * as methods from './http-methods-decorators';\nimport * as params from './http-params-decorators';\nimport { Models } from 'ng2-rest/websql';\n\nexport namespace Http {\n export import GET = methods.GET;\n export import POST = methods.POST;\n export import PUT = methods.PUT;\n export import DELETE = methods.DELETE;\n export import PATCH = methods.PATCH;\n export import HEAD = methods.HEAD;\n export import Response = Models.HttpResponse;\n export namespace Param {\n export import Query = params.Query;\n export import Path = params.Path;\n export import Body = params.Body;\n export import Cookie = params.Cookie;\n export import Header = params.Header;\n }\n}\n","import 'reflect-metadata'; // TODO this is needed for my decorators to work\nimport { NgZone } from '@angular/core'; // @browser\nimport * as coreHelpers from 'tnp-core/websql';\n\nimport * as base from './base-classes/base';\nimport * as createContextFn from './create-context';\nimport * as controllerDecorator from './decorators/classes/controller-decorator';\nimport * as entityDecorator from './decorators/classes/entity-decorator';\nimport * as middlewareDecorator from './decorators/classes/middleware-decorator';\nimport * as migrationDecorator from './decorators/classes/migration-decorator';\nimport * as providerDecorator from './decorators/classes/provider-decorator';\nimport * as repositoryDecorator from './decorators/classes/repository-decorator';\nimport * as subscriberDecorator from './decorators/classes/subscriber-decorator';\nimport * as http from './decorators/http/http-decorators';\nimport * as endpointContext from './endpoint-context';\nimport * as getResponse from './get-response-value';\nimport * as injectFn from './inject';\nimport * as models from './models';\nimport * as orm from './orm';\nimport * as allSymbols from './symbols';\n\nexport * from './ui';\n\nexport { EndpointContext } from './endpoint-context';\nexport { BaseRepository } from './base-classes/base-repository';\nexport { BaseCustomRepository } from './base-classes/base-custom-repository';\nexport { BaseController } from './base-classes/base-controller';\nexport { BaseProvider } from './base-classes/base-provider';\nexport { BaseEntity } from './base-classes/base-entity';\nexport { BaseContext } from './base-classes/base-context';\nexport { BaseMigration } from './base-classes/base-migration';\nexport { TaonAdditionalMiddlewareMethodInfo } from './base-classes/base-middleware';\nexport { createContext, TaonContext } from './create-context';\nexport { inject } from './inject';\nexport { Models } from './models';\nexport { BaseFileUploadMiddleware } from './base-classes/base-file-upload.middleware';\nexport * from './constants';\nexport { MulterFileUploadResponse } from './base-classes/base-controller';\nexport { ContextsEndpointStorage } from './endpoint-context-storage';\nexport { ClassHelpers } from './helpers/class-helpers';\nexport type {\n TaonClientMiddlewareInterceptOptions,\n TaonServerMiddlewareInterceptOptions,\n} from 'ng2-rest/websql';\n// TODO export all things\n\nexport namespace Taon {\n export import Response = models.Models.Http.Response;\n export import Http = http.Http;\n export import Base = base.Base;\n export import Orm = orm.Orm;\n export import StartParams = models.Models.StartParams;\n export const getResponseValue = getResponse.getResponseValue;\n\n //#region class decorators\n export import Controller = controllerDecorator.TaonController;\n export import Entity = entityDecorator.TaonEntity;\n export import Provider = providerDecorator.TaonProvider;\n export import Repository = repositoryDecorator.TaonRepository;\n export import Subscriber = subscriberDecorator.TaonSubscriber;\n export import Migration = migrationDecorator.TaonMigration;\n export import Middleware = middlewareDecorator.TaonMiddleware;\n //#endregion\n //#region aliases to helpers\n export const isBrowser = coreHelpers.Helpers.isBrowser;\n export const isNode = coreHelpers.Helpers.isNode;\n export const isWebSQL = coreHelpers.Helpers.isWebSQL;\n export const isElectron = coreHelpers.Helpers.isElectron;\n //#endregion\n export const createContext = createContextFn.createContext;\n export const createContextTemplate = createContextFn.createContextTemplate;\n\n export const inject = injectFn.inject;\n\n //#region @browser\n export const initNgZone = (ngZone: NgZone) => {\n endpointContext.EndpointContext.initNgZone(ngZone);\n };\n //#endregion\n\n export const symbols = allSymbols.Symbols;\n\n /**\n * @deprecated\n * use createContext instead\n */\n export const init = async (options: {\n host: string;\n entities: Function[];\n controllers: Function[];\n }) => {\n const BaseContext = (await import('./base-classes/base-context'))\n .BaseContext;\n const context = createContext(() => ({\n appId: 'default-app-not-used-anymore',\n contextName: 'default',\n host: options.host,\n contexts: { BaseContext },\n database: true,\n entities: Array.from(options.entities) as any,\n controllers: Array.from(options.controllers) as any,\n }));\n\n await context.initialize();\n return context;\n };\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["this","EntityDecorator","inject","taonInject","ModelsNg2Rest","TypeormEntity","controller.BaseController","crudController.BaseCrudController","entity.BaseEntity","abstractEntity.BaseAbstractEntity","provider.BaseProvider","baseClass.BaseClass","repository.BaseRepository","customRepository.BaseCustomRepository","baseSubscriberEntity.BaseSubscriberForEntity","baseMigration.BaseMigration","baseMiddleware.BaseMiddleware","baseService.BaseAngularsService","baseContext.BaseContext","methods.GET","methods.POST","methods.PUT","methods.DELETE","methods.PATCH","methods.HEAD","Models","params.Query","params.Path","params.Body","params.Cookie","params.Header","http.Http","base.Base","orm.Orm","getResponse.getResponseValue","controllerDecorator.TaonController","entityDecorator.TaonEntity","providerDecorator.TaonProvider","repositoryDecorator.TaonRepository","subscriberDecorator.TaonSubscriber","migrationDecorator.TaonMigration","middlewareDecorator.TaonMiddleware","createContextFn.createContext","createContextFn.createContextTemplate","injectFn.inject","endpointContext.EndpointContext","allSymbols.Symbols"],"mappings":"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"}
|