taon 19.0.39 → 19.0.46

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.
Files changed (117) hide show
  1. package/README.md +160 -160
  2. package/bin/start.js +279 -279
  3. package/bin/taon +6 -6
  4. package/bin/taon-debug +5 -5
  5. package/bin/taon-debug-brk +5 -5
  6. package/browser/README.md +24 -24
  7. package/browser/fesm2022/taon.mjs +113 -31
  8. package/browser/fesm2022/taon.mjs.map +1 -1
  9. package/browser/lib/context-db-migrations.d.ts +1 -1
  10. package/browser/lib/create-context.d.ts +9 -0
  11. package/browser/lib/endpoint-context.d.ts +4 -0
  12. package/browser/package.json +1 -1
  13. package/cli.js.map +1 -1
  14. package/index.js.map +1 -1
  15. package/lib/base-classes/base-abstract-entity.js.map +1 -1
  16. package/lib/base-classes/base-angular-service.js.map +1 -1
  17. package/lib/base-classes/base-class.js.map +1 -1
  18. package/lib/base-classes/base-context.js.map +1 -1
  19. package/lib/base-classes/base-controller.js.map +1 -1
  20. package/lib/base-classes/base-crud-controller.js.map +1 -1
  21. package/lib/base-classes/base-custom-repository.js.map +1 -1
  22. package/lib/base-classes/base-entity.js.map +1 -1
  23. package/lib/base-classes/base-injector.js.map +1 -1
  24. package/lib/base-classes/base-migration.js.map +1 -1
  25. package/lib/base-classes/base-provider.js.map +1 -1
  26. package/lib/base-classes/base-repository.js.map +1 -1
  27. package/lib/base-classes/base-subscriber-for-entity.js.map +1 -1
  28. package/lib/base-classes/base.js.map +1 -1
  29. package/lib/build-info._auto-generated_.d.ts +1 -1
  30. package/lib/build-info._auto-generated_.js +1 -1
  31. package/lib/build-info._auto-generated_.js.map +1 -1
  32. package/lib/constants.js.map +1 -1
  33. package/lib/context-db-migrations.js.map +1 -1
  34. package/lib/create-context.d.ts +9 -0
  35. package/lib/create-context.js +10 -2
  36. package/lib/create-context.js.map +1 -1
  37. package/lib/decorators/classes/controller-decorator.js.map +1 -1
  38. package/lib/decorators/classes/entity-decorator.js.map +1 -1
  39. package/lib/decorators/classes/migration-decorator.js.map +1 -1
  40. package/lib/decorators/classes/provider-decorator.js.map +1 -1
  41. package/lib/decorators/classes/repository-decorator.js.map +1 -1
  42. package/lib/decorators/classes/subscriber-decorator.js.map +1 -1
  43. package/lib/decorators/http/http-decorators.js.map +1 -1
  44. package/lib/decorators/http/http-methods-decorators.js.map +1 -1
  45. package/lib/decorators/http/http-params-decorators.js.map +1 -1
  46. package/lib/dependency-injection/di-container.js.map +1 -1
  47. package/lib/endpoint-context.d.ts +4 -0
  48. package/lib/endpoint-context.js +205 -121
  49. package/lib/endpoint-context.js.map +1 -1
  50. package/lib/entity-process.js.map +1 -1
  51. package/lib/env/env.angular-node-app.d.ts +6 -0
  52. package/lib/env/env.angular-node-app.js +8 -2
  53. package/lib/env/env.angular-node-app.js.map +1 -1
  54. package/lib/env/env.docs-webapp.d.ts +6 -0
  55. package/lib/env/env.docs-webapp.js +8 -2
  56. package/lib/env/env.docs-webapp.js.map +1 -1
  57. package/lib/env/env.electron-app.d.ts +6 -0
  58. package/lib/env/env.electron-app.js +8 -2
  59. package/lib/env/env.electron-app.js.map +1 -1
  60. package/lib/env/env.mobile-app.d.ts +6 -0
  61. package/lib/env/env.mobile-app.js +8 -2
  62. package/lib/env/env.mobile-app.js.map +1 -1
  63. package/lib/env/env.npm-lib-and-cli-tool.d.ts +6 -0
  64. package/lib/env/env.npm-lib-and-cli-tool.js +8 -2
  65. package/lib/env/env.npm-lib-and-cli-tool.js.map +1 -1
  66. package/lib/env/env.vscode-plugin.d.ts +6 -0
  67. package/lib/env/env.vscode-plugin.js +8 -2
  68. package/lib/env/env.vscode-plugin.js.map +1 -1
  69. package/lib/env/index.js.map +1 -1
  70. package/lib/formly/formly-group-wrapper-component.js.map +1 -1
  71. package/lib/formly/formly-repeat-component.js.map +1 -1
  72. package/lib/formly/formly.models.js.map +1 -1
  73. package/lib/formly/fromly.js.map +1 -1
  74. package/lib/formly/type-from-entity.js.map +1 -1
  75. package/lib/get-response-value.js.map +1 -1
  76. package/lib/helpers/class-helpers.js.map +1 -1
  77. package/lib/helpers/taon-helpers.js.map +1 -1
  78. package/lib/index._auto-generated_.js.map +1 -1
  79. package/lib/index.js.map +1 -1
  80. package/lib/inject.js.map +1 -1
  81. package/lib/models.js.map +1 -1
  82. package/lib/orm.js.map +1 -1
  83. package/lib/realtime/realtime-client.js.map +1 -1
  84. package/lib/realtime/realtime-core.js.map +1 -1
  85. package/lib/realtime/realtime-server.js.map +1 -1
  86. package/lib/realtime/realtime-strategy/index.js.map +1 -1
  87. package/lib/realtime/realtime-strategy/realtime-strategy-ipc.js.map +1 -1
  88. package/lib/realtime/realtime-strategy/realtime-strategy-mock.js.map +1 -1
  89. package/lib/realtime/realtime-strategy/realtime-strategy-socket-io.js.map +1 -1
  90. package/lib/realtime/realtime-strategy/realtime-strategy.js.map +1 -1
  91. package/lib/realtime/realtime-subs-manager.js.map +1 -1
  92. package/lib/realtime/realtime.models.js.map +1 -1
  93. package/lib/symbols.js.map +1 -1
  94. package/lib/ui/index.js +2 -2
  95. package/lib/ui/index.js.map +1 -1
  96. package/lib/ui/taon-admin-mode-configuration/index.js +2 -2
  97. package/lib/ui/taon-admin-mode-configuration/index.js.map +1 -1
  98. package/lib/validators.js.map +1 -1
  99. package/migrations/index.js.map +1 -1
  100. package/migrations/migrations_index._auto-generated_.js.map +1 -1
  101. package/old-app .js.map +1 -1
  102. package/package.json +2 -1
  103. package/playground.js.map +1 -1
  104. package/websql/README.md +24 -24
  105. package/websql/fesm2022/taon.mjs +135 -62
  106. package/websql/fesm2022/taon.mjs.map +1 -1
  107. package/websql/lib/create-context.d.ts +9 -0
  108. package/websql/lib/endpoint-context.d.ts +4 -0
  109. package/websql/package.json +1 -1
  110. package/browser/lib/env.d.ts +0 -3
  111. package/lib/env.d.ts +0 -2
  112. package/lib/env.js +0 -7
  113. package/lib/env.js.map +0 -1
  114. package/lib/storage.d.ts +0 -1
  115. package/lib/storage.js +0 -6
  116. package/lib/storage.js.map +0 -1
  117. package/websql/lib/env.d.ts +0 -3
@@ -14,7 +14,6 @@ import axios from 'axios';
14
14
  import { JSON10 } from 'json10/websql';
15
15
  import { Observable, Subject, from } from 'rxjs';
16
16
  import { io } from 'socket.io-client';
17
- import { Stor } from 'taon-storage/websql';
18
17
  import { MySqlQuerySource } from 'taon-type-sql/websql';
19
18
 
20
19
  //#region @websql
@@ -1374,8 +1373,6 @@ class DITaonContainer {
1374
1373
  }
1375
1374
  }
1376
1375
 
1377
- const ENV$1 = Helpers.isBrowser ? window['ENV'] : global['ENV'];
1378
-
1379
1376
  const getResponseValue = (response, options) => {
1380
1377
  //#region @websqlFunc
1381
1378
  const { req, res } = options || {};
@@ -2551,8 +2548,9 @@ class RealtimeCore {
2551
2548
  }
2552
2549
  }
2553
2550
 
2551
+ //#region import
2554
2552
  //#endregion
2555
- const ENV = Helpers.isBrowser ? window['ENV'] : global['ENV'];
2553
+ const ENV = globalThis['ENV'];
2556
2554
  // @Injectable({ providedIn: 'root' }) TODO make it angular service
2557
2555
  class TaonAdminService {
2558
2556
  static get Instance() {
@@ -2595,22 +2593,6 @@ class TaonAdminService {
2595
2593
  }
2596
2594
  logout() { }
2597
2595
  }
2598
- __decorate([
2599
- (Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false)),
2600
- __metadata("design:type", Boolean)
2601
- ], TaonAdminService.prototype, "adminPanelIsOpen", void 0);
2602
- __decorate([
2603
- (Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false)),
2604
- __metadata("design:type", Boolean)
2605
- ], TaonAdminService.prototype, "draggablePopupMode", void 0);
2606
- __decorate([
2607
- (Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false)),
2608
- __metadata("design:type", Boolean)
2609
- ], TaonAdminService.prototype, "draggablePopupModeFullScreen", void 0);
2610
- __decorate([
2611
- (Stor.property.in.localstorage.for(TaonAdminService).withDefaultValue(false)),
2612
- __metadata("design:type", Boolean)
2613
- ], TaonAdminService.prototype, "keepWebsqlDbDataAfterReload", void 0);
2614
2596
 
2615
2597
  //#endregion
2616
2598
  class EndpointContext {
@@ -2668,6 +2650,11 @@ class EndpointContext {
2668
2650
  constructor(originalConfig, configFn) {
2669
2651
  this.originalConfig = originalConfig;
2670
2652
  this.configFn = configFn;
2653
+ //#region static
2654
+ /**
2655
+ * JUST FOR TESTING PURPOSES
2656
+ */
2657
+ this.USE_MARIADB_MYSQL_IN_DOCKER = false;
2671
2658
  //#endregion
2672
2659
  // public static findForTraget(classFnOrObject: any): EndpointContext {
2673
2660
  // const obj = ClassHelpers.getClassFnFromObject(classFnOrObject) || {};
@@ -2839,7 +2826,7 @@ class EndpointContext {
2839
2826
  this.onlyMigrationRun = onlyMigrationRun;
2840
2827
  // @ts-ignore
2841
2828
  this.onlyMigrationRevertToTimestamp = onlyMigrationRevertToTimestamp;
2842
- this.config = this.configFn(ENV$1);
2829
+ this.config = this.configFn({});
2843
2830
  if (_.isObject(this.config.database)) {
2844
2831
  this.config.database = Models.DatabaseConfig.from(this.config.database).databaseConfigTypeORM;
2845
2832
  }
@@ -2903,10 +2890,34 @@ class EndpointContext {
2903
2890
  //#endregion
2904
2891
  //#region resolve database config
2905
2892
  if (this.config.database === true) {
2893
+ this.logFramework &&
2894
+ console.log(`
2895
+
2896
+ ASSIGNING AUTO GENERATED DATABASE CONFIG
2897
+
2898
+ `);
2906
2899
  this.databaseConfig = this.getAutoGeneratedConfig();
2907
2900
  }
2908
2901
  else if (_.isObject(this.config.database)) {
2909
- this.databaseConfig = _.merge(this.getAutoGeneratedConfig(), _.cloneDeep(this.config.database));
2902
+ this.logFramework &&
2903
+ console.log(`
2904
+
2905
+ OVERRIDE DATABASE CONFIG FROM CONFIGURATION
2906
+
2907
+ `);
2908
+ this.databaseConfig = this.getAutoGeneratedConfig();
2909
+ walk.Object(this.config.database, (value, lodashPath) => {
2910
+ if (_.isNil(value) || _.isFunction(value) || _.isObject(value)) {
2911
+ // skipping
2912
+ }
2913
+ else {
2914
+ this.logFramework &&
2915
+ console.info(`Overriding database config: ${lodashPath}=${value}`);
2916
+ _.set(this.databaseConfig, lodashPath, value);
2917
+ }
2918
+ }, {
2919
+ walkGetters: false,
2920
+ });
2910
2921
  }
2911
2922
  //#endregion
2912
2923
  //#region resolve session
@@ -3057,23 +3068,66 @@ class EndpointContext {
3057
3068
  //#endregion
3058
3069
  //#region methods & getters / get auto generated config
3059
3070
  getAutoGeneratedConfig() {
3071
+ this.logFramework &&
3072
+ console.log(`
3073
+
3074
+
3075
+ IS RUNNING IN DOCKER: ${UtilsOs.isRunningInDocker()}
3076
+
3077
+ `);
3060
3078
  //#region @websqlFunc
3061
3079
  let databaseConfig = Models.DatabaseConfig.from({});
3062
3080
  if (UtilsOs.isRunningInDocker()) {
3063
- Helpers.info('Running in docker, using in mysql database');
3064
- // TODO auto resolve database config in docker
3065
- databaseConfig = Models.DatabaseConfig.from({
3066
- database: `db-${this.contextName}.sqlite`,
3067
- type: 'mysql',
3068
- recreateMode: 'PRESERVE_DATA+MIGRATIONS',
3069
- logging: this.logDb,
3070
- databasePort: 3306,
3071
- databaseHost: 'localhost',
3072
- databaseUsername: 'root',
3073
- databasePassword: 'admin',
3074
- });
3081
+ if (this.USE_MARIADB_MYSQL_IN_DOCKER) {
3082
+ // Helpers.info('Running in docker, using in mysql database');
3083
+ // // TODO auto resolve database config in docker
3084
+ // databaseConfig = Models.DatabaseConfig.from({
3085
+ // database: `db-${this.contextName}.sqlite`,
3086
+ // type: 'mysql',
3087
+ // recreateMode: 'PRESERVE_DATA+MIGRATIONS',
3088
+ // logging: this.logDb,
3089
+ // databasePort: 3306,
3090
+ // databaseHost: 'localhost',
3091
+ // databaseUsername: 'root',
3092
+ // databasePassword: 'admin',
3093
+ // });
3094
+ }
3095
+ else {
3096
+ // TOOD @LAST for now.. just use sqljs in docker
3097
+ this.logFramework &&
3098
+ console.log(`
3099
+
3100
+ USING GENERATED CONFIG FOR SQLJS IN DOCKER
3101
+
3102
+ `);
3103
+ /* */
3104
+ /* */
3105
+ /* */
3106
+ /* */
3107
+ /* */
3108
+ databaseConfig = databaseConfig = Models.DatabaseConfig.from({
3109
+ location: `db-${this.contextName}.sqlite`,
3110
+ type: 'sqljs',
3111
+ useLocalForage: false,
3112
+ recreateMode: 'PRESERVE_DATA+MIGRATIONS',
3113
+ logging: true,
3114
+ });
3115
+ /* */
3116
+ /* */
3117
+ /* */
3118
+ /* */
3119
+ /* */
3120
+ /* */
3121
+ /* */
3122
+ /* */
3123
+ /* */
3124
+ /* */
3125
+ /* */
3126
+ /* */
3127
+ }
3075
3128
  }
3076
3129
  else {
3130
+ //#region auto resolve db config
3077
3131
  this.logFramework &&
3078
3132
  Helpers.info(`[taon][database] Automatically resolving database config for mode ${this.mode}`);
3079
3133
  switch (this.mode) {
@@ -3133,6 +3187,7 @@ class EndpointContext {
3133
3187
  break;
3134
3188
  //#endregion
3135
3189
  }
3190
+ //#endregion
3136
3191
  }
3137
3192
  return databaseConfig.databaseConfigTypeORM;
3138
3193
  //#endregion
@@ -3167,6 +3222,7 @@ class EndpointContext {
3167
3222
  /* */
3168
3223
  /* */
3169
3224
  /* */
3225
+ /* */
3170
3226
  return (void 0);
3171
3227
  }
3172
3228
  //#endregion
@@ -3603,6 +3659,18 @@ class EndpointContext {
3603
3659
  return ClassHelpers.getOrginalClass(entityFn);
3604
3660
  });
3605
3661
  const subscribers = this.getClassFunByArr(Models.ClassType.SUBSCRIBER);
3662
+ let autoSave = false;
3663
+ if (!_.isNil(this.databaseConfig.autoSave)) {
3664
+ autoSave = this.databaseConfig.autoSave;
3665
+ }
3666
+ else {
3667
+ if (this.USE_MARIADB_MYSQL_IN_DOCKER) {
3668
+ autoSave = !UtilsOs.isRunningInDocker(); // in docker I am using mysql or posgress
3669
+ }
3670
+ else {
3671
+ autoSave = true; // on docker with sqljs I need to save db
3672
+ }
3673
+ }
3606
3674
  const dataSourceDbConfig = _.isObject(this.databaseConfig)
3607
3675
  ? {
3608
3676
  type: this.databaseConfig.type,
@@ -3618,9 +3686,7 @@ class EndpointContext {
3618
3686
  synchronize: this.isRunOrRevertOnlyMigrationAppStart
3619
3687
  ? false
3620
3688
  : this.databaseConfig.synchronize,
3621
- autoSave: !_.isNil(this.databaseConfig.autoSave)
3622
- ? this.databaseConfig.autoSave
3623
- : !UtilsOs.isRunningInDocker(), // in docker I am using mysql or posgress
3689
+ autoSave,
3624
3690
  dropSchema: this.isRunOrRevertOnlyMigrationAppStart
3625
3691
  ? false
3626
3692
  : this.databaseConfig.dropSchema,
@@ -3641,7 +3707,10 @@ class EndpointContext {
3641
3707
  await this.connection.initialize();
3642
3708
  }
3643
3709
  catch (error) {
3710
+ console.error(`[taon][typeorm] Error while initializing connection for ${this.contextName}, ERROR STARTED `);
3711
+ console.error(error?.stack || '< No stack trace > ');
3644
3712
  console.error(error?.message || error);
3713
+ console.error(`[taon][typeorm] Error while initializing connection for ${this.contextName}, ERROR ENDS `);
3645
3714
  }
3646
3715
  if (!this.connection?.isInitialized) {
3647
3716
  console.log('WRONG CONFIG', dataSourceDbConfig);
@@ -4219,14 +4288,8 @@ class EndpointContext {
4219
4288
  this.logHttp && console.log(`${type?.toUpperCase()} ${expressPath} `);
4220
4289
  // console.log('INITING', methodConfig); // TODO inject in static
4221
4290
  //#region resolve storage
4222
- let storage;
4223
- if (Helpers.isBrowser) {
4224
- storage = window;
4225
- }
4226
- /* */
4227
- /* */
4228
- /* */
4229
- /* */
4291
+ // TODO not a good idea
4292
+ const storage = globalThis;
4230
4293
  //#endregion
4231
4294
  const orgMethods = target.prototype[methodConfig.methodName];
4232
4295
  //#region handle electron ipc request
@@ -4274,22 +4337,23 @@ class EndpointContext {
4274
4337
  //#region resolve variables
4275
4338
  const MIN_TIMEOUT = 500;
4276
4339
  const MIN_TIMEOUT_STEP = 200;
4277
- const timeout = window[Symbols.old.WEBSQL_REST_PROGRESS_TIMEOUT] || MIN_TIMEOUT;
4278
- let updateFun = window[Symbols.old.WEBSQL_REST_PROGRESS_FUN];
4279
- if (!window[Symbols.old.WEBSQL_REST_PROGRESS_FUN]) {
4280
- window[Symbols.old.WEBSQL_REST_PROGRESS_FUN] = new Subject();
4281
- }
4282
- updateFun = window[Symbols.old.WEBSQL_REST_PROGRESS_FUN];
4283
- let startFun = window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];
4284
- if (!window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START]) {
4285
- window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START] = new Subject();
4286
- }
4287
- startFun = window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];
4288
- let doneFun = window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];
4289
- if (!window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE]) {
4290
- window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE] = new Subject();
4291
- }
4292
- doneFun = window[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];
4340
+ const globalThisVar = globalThis; // TODO not a good idea! probably should be in context
4341
+ const timeout = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_TIMEOUT] || MIN_TIMEOUT;
4342
+ let updateFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN];
4343
+ if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN]) {
4344
+ globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN] = new Subject();
4345
+ }
4346
+ updateFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN];
4347
+ let startFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];
4348
+ if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START]) {
4349
+ globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START] = new Subject();
4350
+ }
4351
+ startFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_START];
4352
+ let doneFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];
4353
+ if (!globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE]) {
4354
+ globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE] = new Subject();
4355
+ }
4356
+ doneFun = globalThisVar[Symbols.old.WEBSQL_REST_PROGRESS_FUN_DONE];
4293
4357
  let periodsToUpdate = 0;
4294
4358
  if (timeout >= MIN_TIMEOUT) {
4295
4359
  periodsToUpdate = Math.floor(timeout / MIN_TIMEOUT_STEP);
@@ -4541,13 +4605,22 @@ instead
4541
4605
 
4542
4606
  //#region imports
4543
4607
  //#endregion
4608
+ /**
4609
+ * @returns function that returns context function.
4610
+ * Context function can be used to dynamically
4611
+ * create context with specific configuration.
4612
+ */
4544
4613
  const createContextTemplate = (configFn) => {
4545
4614
  return () => {
4546
4615
  return createContext(configFn);
4547
4616
  };
4548
4617
  };
4618
+ /**
4619
+ * REQURIED PROPERTY:
4620
+ * - contextName
4621
+ */
4549
4622
  const createContext = (configFn) => {
4550
- let config = configFn(ENV$1);
4623
+ let config = configFn({});
4551
4624
  const endpointContextRef = new EndpointContext(config, configFn);
4552
4625
  const res = {
4553
4626
  //#region types