@egi/smart-db 2.0.4 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/assets/mysql/{database-init.sql → smart-db-core-init.sql} +0 -0
  2. package/assets/sqlite3/{database-init.sql → smart-db-core-init.sql} +0 -0
  3. package/bin/extract-db-api +19 -0
  4. package/drivers/smart-db-better-sqlite3.d.ts +11 -9
  5. package/drivers/smart-db-better-sqlite3.js +1 -1
  6. package/drivers/smart-db-mysql.d.ts +9 -7
  7. package/drivers/smart-db-mysql.js +1 -1
  8. package/drivers/smart-db-mysql2.d.ts +9 -7
  9. package/drivers/smart-db-mysql2.js +1 -1
  10. package/drivers/smart-db-sqlite3.d.ts +10 -8
  11. package/drivers/smart-db-sqlite3.js +1 -1
  12. package/helpers/{extract-db-interface.d.ts → extract-db-api.d.ts} +0 -0
  13. package/helpers/extract-db-api.js +1 -0
  14. package/models/abstract-model.d.ts +22 -0
  15. package/models/abstract-model.js +1 -0
  16. package/{model → models}/smart-db-core-table-model.d.ts +13 -11
  17. package/models/smart-db-core-table-model.js +1 -0
  18. package/{model → models}/smart-db-dictionary.d.ts +0 -2
  19. package/models/smart-db-dictionary.js +1 -0
  20. package/{model → models}/smart-db-log-model.d.ts +27 -25
  21. package/models/smart-db-log-model.js +1 -0
  22. package/{model → models}/smart-db-version-model.d.ts +29 -27
  23. package/models/smart-db-version-model.js +1 -0
  24. package/{model → models}/smart-db-version-view-model.d.ts +31 -30
  25. package/models/smart-db-version-view-model.js +1 -0
  26. package/{model → models}/sqlite-master-model.d.ts +16 -9
  27. package/models/sqlite-master-model.js +1 -0
  28. package/{model → models}/sqlite-sequence-model.d.ts +5 -5
  29. package/models/sqlite-sequence-model.js +1 -0
  30. package/package.json +54 -26
  31. package/smart-db-api.d.ts +12 -0
  32. package/smart-db-api.js +1 -0
  33. package/smart-db-globals.d.ts +22 -0
  34. package/smart-db-globals.js +1 -0
  35. package/smart-db-interfaces.d.ts +170 -0
  36. package/smart-db-interfaces.js +1 -0
  37. package/smart-db-log.d.ts +46 -20
  38. package/smart-db-log.js +1 -1
  39. package/smart-db-sql-build-data.d.ts +9 -0
  40. package/smart-db-sql-build-data.js +1 -0
  41. package/smart-db-upgrade-manager.d.ts +2 -2
  42. package/smart-db-upgrade-manager.js +1 -1
  43. package/smart-db.d.ts +44 -51
  44. package/smart-db.js +1 -1
  45. package/bin/extract-db-interface +0 -18
  46. package/helpers/extract-db-interface.js +0 -1
  47. package/index.d.ts +0 -10
  48. package/index.js +0 -1
  49. package/model/abstract-model.d.ts +0 -44
  50. package/model/abstract-model.js +0 -1
  51. package/model/smart-db-core-table-model.js +0 -1
  52. package/model/smart-db-dictionary.js +0 -1
  53. package/model/smart-db-log-model.js +0 -1
  54. package/model/smart-db-version-model.js +0 -1
  55. package/model/smart-db-version-view-model.js +0 -1
  56. package/model/sqlite-master-model.js +0 -1
  57. package/model/sqlite-sequence-model.js +0 -1
  58. package/smart-db-interface.d.ts +0 -173
  59. package/smart-db-interface.js +0 -1
@@ -1,6 +1,6 @@
1
- import { AbstractModel, GenericModel, ModelAttributeMap } from "./abstract-model";
2
- import { SqlValueType } from "../smart-db-interface";
3
- export interface SmartDbVersionViewModelData extends Record<string, any> {
1
+ import { GenericModelData, ModelAttributeMap, SqlValueType } from "../smart-db-interfaces";
2
+ import { AbstractModel } from "./abstract-model";
3
+ export interface SmartDbVersionViewModelData extends GenericModelData {
4
4
  id?: number;
5
5
  module?: string;
6
6
  sequence?: number;
@@ -11,7 +11,7 @@ export interface SmartDbVersionViewModelData extends Record<string, any> {
11
11
  installDate?: Date;
12
12
  versionString?: SqlValueType;
13
13
  }
14
- export declare class SmartDbVersionViewModel extends AbstractModel {
14
+ export declare class SmartDbVersionViewModel extends AbstractModel<SmartDbVersionViewModel, SmartDbVersionViewModelData> {
15
15
  private _id?;
16
16
  private _module?;
17
17
  private _sequence?;
@@ -22,49 +22,50 @@ export declare class SmartDbVersionViewModel extends AbstractModel {
22
22
  private _installDate?;
23
23
  private _versionString?;
24
24
  static readonly attributeMap: ModelAttributeMap;
25
+ constructor(data?: SmartDbVersionViewModel | SmartDbVersionViewModelData);
25
26
  static getClassName(): string;
26
27
  static getTableName(): string;
27
28
  static getPrimaryKey(): string;
28
- static from(other: AbstractModel | GenericModel): SmartDbVersionViewModel;
29
- clone(): AbstractModel;
29
+ static from(other: SmartDbVersionViewModel | SmartDbVersionViewModelData): SmartDbVersionViewModel;
30
+ clone(): SmartDbVersionViewModel;
30
31
  getClassName(): string;
31
32
  getTableName(): string;
32
33
  getPrimaryKey(): string;
33
34
  getAttributeMap(): ModelAttributeMap;
34
35
  get id(): number;
35
36
  set id(id: number);
36
- get ver_id(): number;
37
- set ver_id(id: number);
37
+ get installDate(): Date;
38
+ set installDate(installDate: Date);
38
39
  get module(): string;
39
40
  set module(module: string);
40
- get ver_module(): string;
41
- set ver_module(module: string);
41
+ get releaseType(): string;
42
+ set releaseType(releaseType: string);
43
+ get revision(): string;
44
+ set revision(revision: string);
42
45
  get sequence(): number;
43
46
  set sequence(sequence: number);
44
- get ver_sequence(): number;
45
- set ver_sequence(sequence: number);
46
- get version(): string;
47
- set version(version: string);
48
- get ver_version(): string;
49
- set ver_version(version: string);
50
47
  get subVersion(): string;
51
48
  set subVersion(subVersion: string);
52
- get ver_sub_version(): string;
53
- set ver_sub_version(subVersion: string);
54
- get revision(): string;
55
- set revision(revision: string);
56
- get ver_revision(): string;
57
- set ver_revision(revision: string);
58
- get releaseType(): string;
59
- set releaseType(releaseType: string);
60
- get ver_release_type(): string;
61
- set ver_release_type(releaseType: string);
62
- get installDate(): Date;
63
- set installDate(installDate: Date);
49
+ get ver_id(): number;
50
+ set ver_id(id: number);
64
51
  get ver_install_date(): Date;
65
52
  set ver_install_date(installDate: Date);
66
- get versionString(): SqlValueType;
67
- set versionString(versionString: SqlValueType);
53
+ get ver_module(): string;
54
+ set ver_module(module: string);
55
+ get ver_release_type(): string;
56
+ set ver_release_type(releaseType: string);
57
+ get ver_revision(): string;
58
+ set ver_revision(revision: string);
59
+ get ver_sequence(): number;
60
+ set ver_sequence(sequence: number);
61
+ get ver_sub_version(): string;
62
+ set ver_sub_version(subVersion: string);
63
+ get ver_version(): string;
64
+ set ver_version(version: string);
68
65
  get ver_version_string(): SqlValueType;
69
66
  set ver_version_string(versionString: SqlValueType);
67
+ get version(): string;
68
+ set version(version: string);
69
+ get versionString(): SqlValueType;
70
+ set versionString(versionString: SqlValueType);
70
71
  }
@@ -0,0 +1 @@
1
+ import{AbstractModel}from"./abstract-model";export class SmartDbVersionViewModel extends AbstractModel{constructor(e){super(),e&&this.assign(e)}static getClassName(){return"SmartDbVersionViewModel"}static getTableName(){return"smart_db_version_view"}static getPrimaryKey(){return""}static from(e){let t=null;return e&&(t=new SmartDbVersionViewModel,e instanceof SmartDbVersionViewModel?Object.assign(t,e):t.assign(e)),t}clone(){return SmartDbVersionViewModel.from(this)}getClassName(){return"SmartDbVersionViewModel"}getTableName(){return"smart_db_version_view"}getPrimaryKey(){return""}getAttributeMap(){return SmartDbVersionViewModel.attributeMap}get id(){return this._id}set id(e){this._id=e}get installDate(){return this._installDate}set installDate(e){this._installDate=e}get module(){return this._module}set module(e){this._module=e}get releaseType(){return this._releaseType}set releaseType(e){this._releaseType=e}get revision(){return this._revision}set revision(e){this._revision=e}get sequence(){return this._sequence}set sequence(e){this._sequence=e}get subVersion(){return this._subVersion}set subVersion(e){this._subVersion=e}get ver_id(){return this._id}set ver_id(e){this._id=e}get ver_install_date(){return this._installDate}set ver_install_date(e){this._installDate=e}get ver_module(){return this._module}set ver_module(e){this._module=e}get ver_release_type(){return this._releaseType}set ver_release_type(e){this._releaseType=e}get ver_revision(){return this._revision}set ver_revision(e){this._revision=e}get ver_sequence(){return this._sequence}set ver_sequence(e){this._sequence=e}get ver_sub_version(){return this._subVersion}set ver_sub_version(e){this._subVersion=e}get ver_version(){return this._version}set ver_version(e){this._version=e}get ver_version_string(){return this._versionString}set ver_version_string(e){this._versionString=e}get version(){return this._version}set version(e){this._version=e}get versionString(){return this._versionString}set versionString(e){this._versionString=e}}SmartDbVersionViewModel.attributeMap={id:{alias:"ver_id",typeScriptStyle:!0,type:"number",attribute:"_id"},ver_id:{physical:!0,type:"number",attribute:"_id"},module:{alias:"ver_module",typeScriptStyle:!0,type:"string",attribute:"_module"},ver_module:{physical:!0,type:"string",attribute:"_module"},sequence:{alias:"ver_sequence",typeScriptStyle:!0,type:"number",attribute:"_sequence"},ver_sequence:{physical:!0,type:"number",attribute:"_sequence"},version:{alias:"ver_version",typeScriptStyle:!0,type:"string",attribute:"_version"},ver_version:{physical:!0,type:"string",attribute:"_version"},subVersion:{alias:"ver_sub_version",typeScriptStyle:!0,type:"string",attribute:"_subVersion"},ver_sub_version:{physical:!0,type:"string",attribute:"_subVersion"},revision:{alias:"ver_revision",typeScriptStyle:!0,type:"string",attribute:"_revision"},ver_revision:{physical:!0,type:"string",attribute:"_revision"},releaseType:{alias:"ver_release_type",typeScriptStyle:!0,type:"string",attribute:"_releaseType"},ver_release_type:{physical:!0,type:"string",attribute:"_releaseType"},installDate:{alias:"ver_install_date",typeScriptStyle:!0,type:"Date",attribute:"_installDate"},ver_install_date:{physical:!0,type:"Date",attribute:"_installDate"},versionString:{alias:"ver_version_string",typeScriptStyle:!0,type:"SqlValueType",attribute:"_versionString"},ver_version_string:{physical:!0,type:"SqlValueType",attribute:"_versionString"}};
@@ -1,5 +1,12 @@
1
- import { AbstractModel, ModelAttributeMap } from "./abstract-model";
2
- export declare class SqliteMasterModel extends AbstractModel {
1
+ import { ModelAttributeMap } from "../smart-db-interfaces";
2
+ import { AbstractModel } from "./abstract-model";
3
+ export interface SqliteMasterModelData extends Record<string, any> {
4
+ name?: string;
5
+ type?: string;
6
+ rootpage?: number;
7
+ sql?: string;
8
+ }
9
+ export declare class SqliteMasterModel extends AbstractModel<SqliteMasterModel, SqliteMasterModelData> {
3
10
  private _type?;
4
11
  private _name;
5
12
  private _tbl_name?;
@@ -8,22 +15,22 @@ export declare class SqliteMasterModel extends AbstractModel {
8
15
  static readonly attributeMap: ModelAttributeMap;
9
16
  static getClassName(): string;
10
17
  static getTableName(): string;
11
- static from(other: any): SqliteMasterModel;
18
+ static from(other: SqliteMasterModel): SqliteMasterModel;
12
19
  clone(): SqliteMasterModel;
13
20
  getClassName(): string;
14
21
  getTableName(): string;
15
22
  getAttributeMap(): ModelAttributeMap;
16
23
  getPrimaryKey(): string;
17
- get type(): string;
18
- set type(type: string);
19
24
  get name(): string;
20
25
  set name(name: string);
21
- get tbl_name(): string;
22
- set tbl_name(tblNname: string);
23
- get tblName(): string;
24
- set tblName(tblNname: string);
25
26
  get rootpage(): number;
26
27
  set rootpage(rootpage: number);
27
28
  get sql(): string;
28
29
  set sql(sql: string);
30
+ get tblName(): string;
31
+ set tblName(tblNname: string);
32
+ get tbl_name(): string;
33
+ set tbl_name(tblNname: string);
34
+ get type(): string;
35
+ set type(type: string);
29
36
  }
@@ -0,0 +1 @@
1
+ import{AbstractModel}from"./abstract-model";export class SqliteMasterModel extends AbstractModel{static getClassName(){return"SqliteMasterModel"}static getTableName(){return"sqlite_master"}static from(t){let e=null;return t&&(e=new SqliteMasterModel,t instanceof SqliteMasterModel?Object.assign(e,t):e.assign(t)),e}clone(){return SqliteMasterModel.from(this)}getClassName(){return"SqliteMasterModel"}getTableName(){return"sqlite_master"}getAttributeMap(){return SqliteMasterModel.attributeMap}getPrimaryKey(){return"name"}get name(){return this._name}set name(t){this._name=t}get rootpage(){return this._rootpage}set rootpage(t){this._rootpage=t}get sql(){return this._sql}set sql(t){this._sql=t}get tblName(){return this._tbl_name}set tblName(t){this._tbl_name=t}get tbl_name(){return this._tbl_name}set tbl_name(t){this._tbl_name=t}get type(){return this._type}set type(t){this._type=t}}SqliteMasterModel.attributeMap={type:{type:"string",attribute:"_type"},name:{type:"string",attribute:"_name"},tbl_name:{type:"string",attribute:"_tbl_name"},tblName:{alias:"tbl_name",type:"string",attribute:"_tbl_name"},rootpage:{type:"number",attribute:"_rootpage"},sql:{type:"string",attribute:"_sql"}};
@@ -1,18 +1,18 @@
1
- import { AbstractModel, GenericModel, ModelAttributeMap } from "./abstract-model";
2
- import { SqlValueType } from "../smart-db-interface";
1
+ import { GenericModelData, ModelAttributeMap, SqlValueType } from "../smart-db-interfaces";
2
+ import { AbstractModel } from "./abstract-model";
3
3
  export interface SqliteSequenceModelData extends Record<string, any> {
4
4
  name?: SqlValueType;
5
5
  seq?: SqlValueType;
6
6
  }
7
- export declare class SqliteSequenceModel extends AbstractModel {
7
+ export declare class SqliteSequenceModel extends AbstractModel<SqliteSequenceModel, SqliteSequenceModelData> {
8
8
  private _name?;
9
9
  private _seq?;
10
10
  static readonly attributeMap: ModelAttributeMap;
11
11
  static getClassName(): string;
12
12
  static getTableName(): string;
13
13
  static getPrimaryKey(): string;
14
- static from(other: AbstractModel | GenericModel): SqliteSequenceModel;
15
- clone(): AbstractModel;
14
+ static from(other: SqliteSequenceModel | GenericModelData): SqliteSequenceModel;
15
+ clone(): SqliteSequenceModel;
16
16
  getClassName(): string;
17
17
  getTableName(): string;
18
18
  getPrimaryKey(): string;
@@ -0,0 +1 @@
1
+ import{AbstractModel}from"./abstract-model";export class SqliteSequenceModel extends AbstractModel{static getClassName(){return"SqliteSequenceModel"}static getTableName(){return"sqlite_sequence"}static getPrimaryKey(){return""}static from(e){let t=null;return e&&(t=new SqliteSequenceModel,e instanceof SqliteSequenceModel?Object.assign(t,e):t.assign(e)),t}clone(){return SqliteSequenceModel.from(this)}getClassName(){return"SqliteSequenceModel"}getTableName(){return"sqlite_sequence"}getPrimaryKey(){return""}getAttributeMap(){return SqliteSequenceModel.attributeMap}get name(){return this._name}set name(e){this._name=e}get seq(){return this._seq}set seq(e){this._seq=e}}SqliteSequenceModel.attributeMap={name:{physical:!0,typeScriptStyle:!0,type:"SqlValueType",attribute:"_name"},seq:{physical:!0,typeScriptStyle:!0,type:"SqlValueType",attribute:"_seq"}};
package/package.json CHANGED
@@ -1,9 +1,20 @@
1
1
  {
2
2
  "name": "@egi/smart-db",
3
- "version": "2.0.4",
3
+ "version": "2.2.0",
4
4
  "description": "Unified Smart DB Access",
5
- "main": "dist/index.js",
5
+ "author": "Marcel Egloff",
6
6
  "type": "module",
7
+ "browser": {
8
+ "fs": false,
9
+ "path": false,
10
+ "os": false
11
+ },
12
+ "keywords": [
13
+ "MySql",
14
+ "Sqlite3",
15
+ "Smart",
16
+ "DB"
17
+ ],
7
18
  "scripts": {
8
19
  "test": "echo \"Error: no test specified\" && exit 1",
9
20
  "copy-assets": "bin/copy-assets",
@@ -16,41 +27,58 @@
16
27
  "tsc-pro": "tsc --build tsconfig.pro.json",
17
28
  "tsc-watch": "tsc --build tsconfig.json --watch",
18
29
  "terser": "node dist/helpers/terser-tree 'dist/**/*.js' && rm -f dist/helpers/terser-tree.*",
19
- "extract-db-interface": "bin/extract-db-interface && tsc --build tsconfig.test-model.json"
30
+ "extract-db-api": "bin/extract-db-api && tsc --build tsconfig.test-model.json"
31
+ },
32
+ "exports": {
33
+ ".": "./dist/smart-db-api.js",
34
+ "./drivers/smart-db-sqlite3": "./dist/drivers/smart-db-sqlite3.js",
35
+ "./drivers/smart-db-better-sqlite3": "./dist/drivers/smart-db-better-sqlite3.js",
36
+ "./drivers/smart-db-mysql": "./dist/drivers/smart-db-mysql.js",
37
+ "./drivers/smart-db-mysql2": "./dist/drivers/smart-db-mysql2.js"
38
+ },
39
+ "types": "./dist/smart-db-api.d.ts",
40
+ "typesVersions": {
41
+ "*": {
42
+ "drivers/smart-db-sqlite3": [
43
+ "./dist/drivers/smart-db-sqlite3.d.ts"
44
+ ],
45
+ "drivers/smart-db-better-sqlite3": [
46
+ "./dist/drivers/smart-db-better-sqlite3.d.ts"
47
+ ],
48
+ "drivers/smart-db-better-mysql": [
49
+ "./dist/drivers/smart-db-better-mysql.d.ts"
50
+ ],
51
+ "drivers/smart-db-better-mysql2": [
52
+ "./dist/drivers/smart-db-better-mysql2.d.ts"
53
+ ]
54
+ }
20
55
  },
21
56
  "bin": {
22
- "extract-db-interface": "./bin/extract-db-interface",
23
- "extract-db-interface.js": "./"
57
+ "extract-db-api": "bin/extract-db-api",
58
+ "extract-db-api.js": "./"
24
59
  },
25
- "keywords": [
26
- "MySql",
27
- "Sqlite3",
28
- "Smart",
29
- "DB"
30
- ],
31
- "author": "Marcel Egloff",
32
- "license": "UNLICENSED",
33
60
  "dependencies": {
34
- "lodash": "^4.17.15",
35
- "sqlite3": "^5.0.0",
61
+ "lodash": "^4.17.21",
62
+ "sqlite3": "^5.0.2",
36
63
  "terser": "^4.8.0"
37
64
  },
38
65
  "devDependencies": {
39
- "@types/better-sqlite3": "^5.4.0",
40
- "@types/glob": "^7.1.2",
41
- "@types/lodash": "^4.14.155",
42
- "@types/mysql": "^2.15.14",
43
- "@types/node": "^14.0.13",
44
- "@types/sqlite3": "^3.1.6",
45
- "@types/uglify-js": "^3.9.2",
46
- "glob": "^7.1.6",
47
- "mocha": "^8.0.1",
66
+ "@types/better-sqlite3": "^5.4.2",
67
+ "@types/glob": "^7.1.3",
68
+ "@types/lodash": "^4.14.170",
69
+ "@types/mysql": "^2.15.18",
70
+ "@types/node": "^16.11.19",
71
+ "@types/sqlite3": "^3.1.7",
72
+ "@types/uglify-js": "^3.13.0",
73
+ "glob": "^7.1.7",
74
+ "mocha": "^8.4.0",
48
75
  "npm-run-all": "^4.1.5",
49
- "uglify-js": "^3.10.0"
76
+ "uglify-js": "^3.13.10"
50
77
  },
51
78
  "optionalDependencies": {
52
79
  "better-sqlite3": "^7.1.0",
53
80
  "mysql": "^2.18.1",
54
81
  "mysql2": "^2.1.0"
55
- }
82
+ },
83
+ "license": "UNLICENSED"
56
84
  }
@@ -0,0 +1,12 @@
1
+ export * from "./smart-db";
2
+ export * from "./models/abstract-model";
3
+ export * from "./models/smart-db-core-table-model";
4
+ export * from "./models/smart-db-dictionary";
5
+ export * from "./models/smart-db-log-model";
6
+ export * from "./models/smart-db-version-model";
7
+ export * from "./models/smart-db-version-view-model";
8
+ export * from "./models/sqlite-master-model";
9
+ export * from "./models/sqlite-sequence-model";
10
+ export * from "./smart-db-log";
11
+ export * from "./smart-db-globals";
12
+ export * from "./smart-db-interfaces";
@@ -0,0 +1 @@
1
+ export*from"./smart-db";export*from"./models/abstract-model";export*from"./models/smart-db-core-table-model";export*from"./models/smart-db-dictionary";export*from"./models/smart-db-log-model";export*from"./models/smart-db-version-model";export*from"./models/smart-db-version-view-model";export*from"./models/sqlite-master-model";export*from"./models/sqlite-sequence-model";export*from"./smart-db-log";export*from"./smart-db-globals";export*from"./smart-db-interfaces";
@@ -0,0 +1,22 @@
1
+ import { SqlFieldDescriptor, SqlOperation, SqlOperationType, SqlValueType } from "./smart-db-interfaces";
2
+ export declare const OP: (op: SqlOperationType, value?: SqlValueType | SqlValueType[], key?: string, literalOp?: SqlOperationType) => SqlOperation;
3
+ export declare const VALUE: (value: SqlValueType, alias?: string, literal?: boolean) => SqlFieldDescriptor;
4
+ export declare const FIELD: (value: string, alias?: string) => SqlFieldDescriptor;
5
+ export declare const COUNT: (value?: string, alias?: string) => SqlFieldDescriptor;
6
+ export declare const COALESCE: (values: (SqlFieldDescriptor | SqlValueType)[], alias?: string) => SqlFieldDescriptor;
7
+ export declare const NVL: (values: (SqlFieldDescriptor | SqlValueType)[], alias?: string) => SqlFieldDescriptor;
8
+ export declare const LITERAL: (key: string, value: SqlValueType, op?: SqlOperationType) => SqlOperation;
9
+ export declare const GT: (value: SqlValueType) => SqlOperation;
10
+ export declare const GE: (value: SqlValueType) => SqlOperation;
11
+ export declare const LT: (value: SqlValueType) => SqlOperation;
12
+ export declare const LE: (value: SqlValueType) => SqlOperation;
13
+ export declare const EQ: (value: SqlValueType) => SqlOperation;
14
+ export declare const NE: (value: any) => SqlOperation;
15
+ export declare const IN: (value: SqlValueType[]) => SqlOperation;
16
+ export declare const IS_NULL: () => SqlOperation;
17
+ export declare const IS_NOT_NULL: () => SqlOperation;
18
+ export declare const SmartDbDateRegexp: RegExp;
19
+ export declare const SmartDbTimestampRegexp: RegExp;
20
+ export declare function toSmartDbDate(d: Date | number): string;
21
+ export declare function toSmartDbTimestamp(d: Date | number): string;
22
+ export declare function smartDbToDate(d: Date | number | string): Date | null;
@@ -0,0 +1 @@
1
+ import _ from"lodash";import{SqlFieldOperationType,SqlOperationType}from"./smart-db-interfaces";export const OP=(e,t,o,r)=>o?{operation:e,value:t,key:o,literalOperation:r}:{operation:e,value:t};export const VALUE=(e,t,o)=>({operation:SqlFieldOperationType.VALUE,value:e,alias:t,literal:o});export const FIELD=(e,t)=>({operation:SqlFieldOperationType.FIELD,value:e,alias:t});export const COUNT=(e,t)=>({operation:SqlFieldOperationType.COUNT,value:e,alias:t});export const COALESCE=(e,t)=>({operation:SqlFieldOperationType.COALESCE,value:e,alias:t});export const NVL=(e,t)=>COALESCE(e,t);export const LITERAL=(e,t,o)=>OP(SqlOperationType.LITERAL,t,e,o||SqlOperationType.EQ);export const GT=e=>OP(SqlOperationType.GT,e);export const GE=e=>OP(SqlOperationType.GE,e);export const LT=e=>OP(SqlOperationType.LT,e);export const LE=e=>OP(SqlOperationType.LE,e);export const EQ=e=>OP(SqlOperationType.EQ,e);export const NE=e=>OP(SqlOperationType.NE,e);export const IN=e=>OP(SqlOperationType.IN,e);export const IS_NULL=()=>OP(SqlOperationType.IS_NULL);export const IS_NOT_NULL=()=>OP(SqlOperationType.IS_NOT_NULL);export const SmartDbDateRegexp=/^(\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d)(Z| GMT| GMT[-+]\d{1,2})?$/;export const SmartDbTimestampRegexp=/^(\d{4}-[01]\d-[0-3]\d [0-2]\d:[0-5]\d:[0-5]\d\.\d{3})(Z| GMT| GMT[-+]\d{1,2})?$/;export function toSmartDbDate(e){let t;return e&&(_.isNumber(e)&&(e=new Date(e)),t=e.toISOString().substr(0,19).replace("T"," ")),t}export function toSmartDbTimestamp(e){let t;return e&&(_.isNumber(e)&&(e=new Date(e)),t=e.toISOString().substr(0,23).replace("T"," ")),t}export function smartDbToDate(e){let t=null;return _.isDate(e)?t=e:(_.isNumber(e)||_.isString(e)&&(e.match(SmartDbDateRegexp)||e.match(SmartDbTimestampRegexp)))&&(t=new Date(e)),t}
@@ -0,0 +1,170 @@
1
+ import { AbstractModel } from "./models/abstract-model";
2
+ import { SmartDbDictionary } from "./models/smart-db-dictionary";
3
+ import { SmartDbVersionViewModel } from "./models/smart-db-version-view-model";
4
+ import { SmartDbSqlBuildData } from "./smart-db-sql-build-data";
5
+ export interface SmartDbOptions {
6
+ module: string;
7
+ sqlFilesDirectory: string;
8
+ smartDbDictionary?: typeof SmartDbDictionary | any[];
9
+ skipAutoUpgrade?: boolean;
10
+ }
11
+ export interface SmartDbRunResult {
12
+ lastId: number;
13
+ changes: number;
14
+ affected: number;
15
+ }
16
+ export interface SmartDbTableInfo {
17
+ name: string;
18
+ fields: SmartDbFieldDescription[];
19
+ }
20
+ export interface SmartDbFieldDescription {
21
+ cid?: string | number;
22
+ name: string;
23
+ type: string;
24
+ virtual?: boolean;
25
+ notNull?: boolean;
26
+ defaultValue?: number | string | boolean;
27
+ isPk?: boolean;
28
+ }
29
+ export interface SmartDbSqlComparison {
30
+ compare: string | SqlFieldDescriptor;
31
+ with: string | SqlFieldDescriptor;
32
+ operation?: SqlOperationType;
33
+ }
34
+ export declare type SqlValueType = string | number | boolean | Date;
35
+ export declare enum FieldNamingStyle {
36
+ Database = 0,
37
+ TypeScript = 1,
38
+ All = 2
39
+ }
40
+ export declare type GenericModelData = Record<string, SqlValueType>;
41
+ export interface AttributeInfo {
42
+ attribute: string;
43
+ type: string;
44
+ alias?: string;
45
+ physical?: boolean;
46
+ virtual?: boolean;
47
+ alternative?: boolean;
48
+ typeScriptStyle?: boolean;
49
+ }
50
+ export interface ModelAttributeMap {
51
+ [key: string]: AttributeInfo;
52
+ }
53
+ export interface AbstractModelGlobals<T extends AbstractModel<T, D>, D extends GenericModelData> {
54
+ attributeMap: ModelAttributeMap;
55
+ getTableName: () => string;
56
+ from: (other: T | D) => T;
57
+ }
58
+ export interface SqlWhere {
59
+ or?: SqlWhere | SqlWhere[];
60
+ and?: SqlWhere | SqlWhere[];
61
+ expression?: SmartDbSqlComparison[];
62
+ [key: string]: SqlValueType | SqlValueType[] | SqlOperation | SqlWhere | SqlWhere[] | SmartDbSqlComparison[];
63
+ }
64
+ export declare type SqlUpdateValues = Record<string, SqlValueType>;
65
+ export declare type SqlOrderBy = string | string[];
66
+ declare type SqlGroupBy = string | string[];
67
+ export interface SqlLimit {
68
+ offset?: number;
69
+ limit?: number;
70
+ }
71
+ export interface SectionDescription<T extends AbstractModel<T, D>, D extends GenericModelData> {
72
+ model: (new () => T) | string;
73
+ where?: SqlWhere;
74
+ fields?: string | SqlFieldDescriptor | (string | SqlFieldDescriptor)[] | null;
75
+ groupBy?: SqlGroupBy;
76
+ limit?: SqlLimit;
77
+ }
78
+ export interface SmartDbSqlOptions<T extends AbstractModel<T, D>, D extends GenericModelData> {
79
+ firstOnly?: boolean;
80
+ where?: SqlWhere;
81
+ fields?: string | SqlFieldDescriptor | (string | SqlFieldDescriptor)[] | null;
82
+ orderBy?: SqlOrderBy;
83
+ groupBy?: SqlGroupBy;
84
+ limit?: SqlLimit;
85
+ count?: boolean;
86
+ distinct?: boolean;
87
+ collapseRow?: boolean;
88
+ indexedBy?: string;
89
+ union?: SectionDescription<T, D> | SectionDescription<T, D>[];
90
+ minus?: SectionDescription<T, D> | SectionDescription<T, D>[];
91
+ intersect?: SectionDescription<T, D> | SectionDescription<T, D>[];
92
+ }
93
+ export declare enum SqlOperationType {
94
+ GT = ">",
95
+ GE = ">=",
96
+ LT = "<",
97
+ LE = "<=",
98
+ EQ = "=",
99
+ NE = "!=",
100
+ IN = "IN",
101
+ LIKE = "LIKE",
102
+ NOT_LIKE = "NOT LIKE",
103
+ IS_NULL = "IS NULL",
104
+ IS_NOT_NULL = "IS NOT NULL",
105
+ LITERAL = "LITERAL",
106
+ VALUE = "VALUE"
107
+ }
108
+ export declare enum SqlFieldOperationType {
109
+ VALUE = "VALUE",
110
+ FIELD = "FIELD",
111
+ COUNT = "COUNT",
112
+ COALESCE = "COALESCE"
113
+ }
114
+ export interface SqlFieldDescriptor {
115
+ operation: SqlFieldOperationType;
116
+ value: SqlFieldDescriptor | SqlValueType | (SqlFieldDescriptor | SqlValueType)[];
117
+ alias?: string;
118
+ literal?: boolean;
119
+ }
120
+ export interface SqlOperation {
121
+ operation: SqlOperationType;
122
+ value: SqlValueType | SqlValueType[];
123
+ key?: string;
124
+ literalOperation?: SqlOperationType;
125
+ }
126
+ export interface KeyValueList {
127
+ [key: string]: SqlValueType;
128
+ }
129
+ export interface IndexedGenericModelData<T extends AbstractModel<T, D>, D extends GenericModelData> {
130
+ [key: string]: T | GenericModelData;
131
+ }
132
+ export interface SmartDbSqlBuildDataResults {
133
+ sql: string;
134
+ values: SqlValueType[];
135
+ }
136
+ export interface SmartDbApi {
137
+ initDb(appOptions: SmartDbOptions): Promise<SmartDbVersionViewModel[]>;
138
+ exists<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), type?: "view" | "table" | "index", indexTableName?: string): Promise<boolean>;
139
+ existsSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), type?: "view" | "table" | "index", indexTableName?: string): boolean;
140
+ get<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), options: SmartDbSqlOptions<T, D>): Promise<(T | D)[] | T | D | SqlValueType | IndexedGenericModelData<T, D> | string | string[]>;
141
+ getSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), options: SmartDbSqlOptions<T, D>): (T | D)[] | T | D | IndexedGenericModelData<T, D> | SqlValueType | string[] | false;
142
+ getFirst<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), where?: SqlWhere, fields?: string | string[] | null, orderBy?: SqlOrderBy): Promise<T>;
143
+ getFirstSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), where?: SqlWhere, fields?: string | string[] | null, orderBy?: SqlOrderBy): T | false;
144
+ getAll<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), where?: SqlWhere, fields?: string | string[] | null, orderBy?: SqlOrderBy, limit?: SqlLimit): Promise<T[]>;
145
+ getAllSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), where?: SqlWhere, fields?: string | string[] | null, orderBy?: SqlOrderBy, limit?: SqlLimit): T[] | false;
146
+ delete<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), where?: SqlWhere): Promise<number>;
147
+ deleteSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), where?: SqlWhere): number | false;
148
+ update<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), values: SqlUpdateValues | T, where?: SqlWhere): Promise<number>;
149
+ updateSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), values: SqlUpdateValues | T, where?: SqlWhere): number | false;
150
+ insert<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), values: SqlUpdateValues | T): Promise<number>;
151
+ insertSync<T extends AbstractModel<T, D>, D extends GenericModelData>(modelClass: string | (new () => T), values: SqlUpdateValues | T): number | false;
152
+ exec(script: string): Promise<void>;
153
+ execSync(script: string): SmartDbDatabase | false;
154
+ getLastError(): any;
155
+ getLastBuildData(): SmartDbSqlBuildData;
156
+ getDbQuote(): string;
157
+ getTableInfo(table: string): Promise<SmartDbTableInfo>;
158
+ toDate(d: Date | number | string): Date | null;
159
+ getDbConnector(): string | SmartDbConnector;
160
+ toDbTimestamp(d: Date | number): string;
161
+ toDbDate(d: Date | number): string;
162
+ hasConcurrentTransactions(): boolean;
163
+ closeSync(): boolean;
164
+ close(): Promise<void>;
165
+ }
166
+ export interface SmartDbDatabase {
167
+ }
168
+ export interface SmartDbConnector {
169
+ }
170
+ export {};
@@ -0,0 +1 @@
1
+ export var FieldNamingStyle;!function(e){e[e.Database=0]="Database",e[e.TypeScript=1]="TypeScript",e[e.All=2]="All"}(FieldNamingStyle||(FieldNamingStyle={}));export var SqlOperationType;!function(e){e.GT=">",e.GE=">=",e.LT="<",e.LE="<=",e.EQ="=",e.NE="!=",e.IN="IN",e.LIKE="LIKE",e.NOT_LIKE="NOT LIKE",e.IS_NULL="IS NULL",e.IS_NOT_NULL="IS NOT NULL",e.LITERAL="LITERAL",e.VALUE="VALUE"}(SqlOperationType||(SqlOperationType={}));export var SqlFieldOperationType;!function(e){e.VALUE="VALUE",e.FIELD="FIELD",e.COUNT="COUNT",e.COALESCE="COALESCE"}(SqlFieldOperationType||(SqlFieldOperationType={}));
package/smart-db-log.d.ts CHANGED
@@ -1,11 +1,37 @@
1
- import { SmartDbInterface, SeverityLevel, SeverityCode } from "./smart-db-interface";
2
- export declare enum SmartDbLogType {
3
- Frontend = "frontend",
4
- Backend = "backend",
5
- Database = "database",
6
- UpgradeManager = "upgrade-mananger",
7
- Other = "other"
8
- }
1
+ import { SmartDbApi } from "./smart-db-interfaces";
2
+ export declare const SmartDbLogLocation: {
3
+ Frontend: string;
4
+ Backend: string;
5
+ Database: string;
6
+ UpgradeManager: string;
7
+ Other: string;
8
+ };
9
+ export declare type SmartDbLogLocationType = typeof SmartDbLogLocation;
10
+ export declare type SmartDbLogLocationKey = keyof SmartDbLogLocationType;
11
+ export declare type SmartDbLogLocationValue = SmartDbLogLocationType[keyof SmartDbLogLocationType];
12
+ export declare const SeverityCode: {
13
+ readonly Fatal: "F";
14
+ readonly Error: "E";
15
+ readonly Warning: "W";
16
+ readonly Info: "I";
17
+ readonly Debug: "D";
18
+ readonly Local: "L";
19
+ };
20
+ export declare type SeverityCodeType = typeof SeverityCode;
21
+ export declare type SeverityCodeKey = keyof SeverityCodeType;
22
+ export declare type SeverityCodeValue = SeverityCodeType[keyof SeverityCodeType];
23
+ export declare const SeverityLevel: {
24
+ readonly None: 0;
25
+ readonly Fatal: 1;
26
+ readonly Error: 2;
27
+ readonly Warning: 3;
28
+ readonly Info: 4;
29
+ readonly Debug: 5;
30
+ readonly All: 9;
31
+ };
32
+ export declare type SeverityLevelType = typeof SeverityLevel;
33
+ export declare type SeverityLevelKey = keyof SeverityLevelType;
34
+ export declare type SeverityLevelValue = SeverityLevelType[keyof SeverityLevelType];
9
35
  export declare class SmartDbLog {
10
36
  private db;
11
37
  private dbLogLevel;
@@ -13,20 +39,20 @@ export declare class SmartDbLog {
13
39
  private userId;
14
40
  private dbLogging;
15
41
  private isLogging;
16
- constructor(db?: SmartDbInterface);
17
- getConsoleLogLevel(): SeverityLevel;
18
- setConsoleLogLevel(consoleLogLevel: SeverityLevel): void;
19
- getDbLogLevel(): SeverityLevel;
20
- setDbLogLevel(dbLogLevel: SeverityLevel): void;
21
- setDb(db: SmartDbInterface): void;
42
+ constructor(db?: SmartDbApi);
43
+ getConsoleLogLevel(): SeverityLevelValue;
44
+ setConsoleLogLevel(consoleLogLevel: SeverityLevelValue): void;
45
+ getDbLogLevel(): SeverityLevelValue;
46
+ setDbLogLevel(dbLogLevel: SeverityLevelValue): void;
47
+ setDb(db: SmartDbApi): void;
22
48
  setUserId(userId: string | number): void;
23
49
  setDbLogging(dbLogging: boolean): void;
24
50
  getDbLogging(): boolean;
25
- logFatal(type: SmartDbLogType, location: string, message: string | Error, data?: any): void;
26
- logError(type: SmartDbLogType, location: string, message: string | Error, data?: any): void;
27
- logWarning(type: SmartDbLogType, location: string, message: string | Error, data?: any): void;
28
- logInfo(type: SmartDbLogType, location: string, message: string | Error, data?: any): void;
29
- logDebug(type: SmartDbLogType, location: string, message: string | Error, data?: any): void;
30
- writeLog(type: SmartDbLogType, location: string, severity: SeverityCode, message: string | Error, data: unknown, timestamp?: Date | string | number): void;
51
+ logFatal(type: SmartDbLogLocationValue, location: string, message: string | Error, data?: any): void;
52
+ logError(type: SmartDbLogLocationValue, location: string, message: string | Error, data?: any): void;
53
+ logWarning(type: SmartDbLogLocationValue, location: string, message: string | Error, data?: any): void;
54
+ logInfo(type: SmartDbLogLocationValue, location: string, message: string | Error, data?: any): void;
55
+ logDebug(type: SmartDbLogLocationValue, location: string, message: string | Error, data?: any): void;
56
+ writeLog(type: SmartDbLogLocationValue, location: string, severity: SeverityCodeValue, message: string | Error, data: unknown, timestamp?: Date | string | number): void;
31
57
  }
32
58
  export declare const smartDbLog: SmartDbLog;
package/smart-db-log.js CHANGED
@@ -1 +1 @@
1
- "use strict";var __importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t};Object.defineProperty(exports,"__esModule",{value:!0});var SmartDbLogType,smart_db_interface_1=require("./smart-db-interface"),smart_db_1=require("./smart-db"),smart_db_log_model_1=require("./model/smart-db-log-model"),_=__importStar(require("lodash"));!function(e){e.Frontend="frontend",e.Backend="backend",e.Database="database",e.UpgradeManager="upgrade-mananger",e.Other="other"}(SmartDbLogType=exports.SmartDbLogType||(exports.SmartDbLogType={}));var SmartDbLog=function(){function e(e){this.dbLogLevel=smart_db_interface_1.SeverityLevel.Info,this.consoleLogLevel=smart_db_interface_1.SeverityLevel.Error,this.userId=null,this.dbLogging=!1,this.isLogging=!1,this.db=e}return e.prototype.getConsoleLogLevel=function(){return this.consoleLogLevel},e.prototype.setConsoleLogLevel=function(e){this.consoleLogLevel=e},e.prototype.getDbLogLevel=function(){return this.dbLogLevel},e.prototype.setDbLogLevel=function(e){this.dbLogLevel=e},e.prototype.setDb=function(e){var t=this;this.db=e,this.db?this.db.exists(smart_db_log_model_1.SmartDbLogModel).then((function(e){t.dbLogging=e})).catch((function(e){throw e})):this.dbLogging=!1},e.prototype.setUserId=function(e){this.userId=e},e.prototype.setDbLogging=function(e){this.dbLogging=e},e.prototype.getDbLogging=function(){return this.dbLogging},e.prototype.logFatal=function(e,t,r,o){this.writeLog(e,t,smart_db_interface_1.SeverityCode.Fatal,r,o)},e.prototype.logError=function(e,t,r,o){this.writeLog(e,t,smart_db_interface_1.SeverityCode.Error,r,o)},e.prototype.logWarning=function(e,t,r,o){this.writeLog(e,t,smart_db_interface_1.SeverityCode.Warning,r,o)},e.prototype.logInfo=function(e,t,r,o){this.writeLog(e,t,smart_db_interface_1.SeverityCode.Info,r,o)},e.prototype.logDebug=function(e,t,r,o){this.writeLog(e,t,smart_db_interface_1.SeverityCode.Debug,r,o)},e.prototype.writeLog=function(e,t,r,o,i,a){var s=this;try{if(this.isLogging)console.error("recursive logging error:",e,t,r,o,i);else{this.isLogging=!0;var n,g,b=smart_db_interface_1.SeverityLevel.None;switch(r){case smart_db_interface_1.SeverityCode.Fatal:n=console.error,b=smart_db_interface_1.SeverityLevel.Fatal;break;case smart_db_interface_1.SeverityCode.Error:n=console.error,b=smart_db_interface_1.SeverityLevel.Error;break;case smart_db_interface_1.SeverityCode.Warning:n=console.warn,b=smart_db_interface_1.SeverityLevel.Warning;break;case smart_db_interface_1.SeverityCode.Info:n=console.info,b=smart_db_interface_1.SeverityLevel.Info;break;case smart_db_interface_1.SeverityCode.Debug:n=console.debug,b=smart_db_interface_1.SeverityLevel.Debug}if(_.isString(a)){var l=a.match(smart_db_1.SmartDb.DbTimestampRegexp),d=l&&a.match(smart_db_1.SmartDb.DbDateRegexp);g=l?l[1]:d?d[1]+".000":smart_db_1.SmartDb.toDbTimestamp(new Date)}else g=_.isDate(a)?smart_db_1.SmartDb.toDbTimestamp(a):_.isNumber(a)?smart_db_1.SmartDb.toDbTimestamp(new Date(a)):smart_db_1.SmartDb.toDbTimestamp(new Date);if(_.isObjectLike(o))if(o instanceof Error)i||(i=o),o=o.message;else try{o=JSON.stringify(o)}catch(e){o=o.toString()}if(i){if(i instanceof Error)i=i.stack;else if(_.isObject(i))try{i=JSON.stringify(i)}catch(e){i=i.toString(),this.db&&this.dbLogLevel>=b&&console.error("unable to stringify log data",i)}else i.toString?i=i.toString():(i=null,this.db&&this.dbLogLevel>=b&&console.error("unable to store log data",i));i&&(o+=" ("+i+")")}if(this.consoleLogLevel>=b){var c=e.substr(0,1).toUpperCase();e==SmartDbLogType.Database&&this.db&&n(r+"-"+c+"-"+g+": last statement:",this.db.getLastBuildData()),n(r+"-"+c+"-"+g+": "+o)}if(this.dbLogging&&this.dbLogLevel>=b)try{e==SmartDbLogType.Database&&(i||(i=JSON.stringify(this.db.getLastBuildData()))),this.db.insert(smart_db_log_model_1.SmartDbLogModel,{severity:r,type:e,location:t,info:o,data:i,user:this.userId,timestamp:new Date(g)}).catch((function(e){console.error("F-B-"+g+": unable to write the log statement below to database",e);try{n("F-B-"+g+": last statement:",s.db.getLastBuildData())}catch(e){n("F-B-"+g+": last statement not available")}}))}catch(e){console.error("unable to write to log",e)}}this.isLogging=!1}catch(e){this.isLogging=!1,console.error("fatal logging error",e)}},e}();exports.SmartDbLog=SmartDbLog,exports.smartDbLog=new SmartDbLog;
1
+ import _ from"lodash";import{SmartDbLogModel}from"./models/smart-db-log-model";import{SmartDbDateRegexp,SmartDbTimestampRegexp,toSmartDbTimestamp}from"./smart-db-globals";export const SmartDbLogLocation={Frontend:"frontend",Backend:"backend",Database:"database",UpgradeManager:"upgrade-manager",Other:"other"};export const SeverityCode={Fatal:"F",Error:"E",Warning:"W",Info:"I",Debug:"D",Local:"L"};export const SeverityLevel={None:0,Fatal:1,Error:2,Warning:3,Info:4,Debug:5,All:9};export class SmartDbLog{constructor(e){this.userId=null,this.dbLogging=!0,this.isLogging=!1,this.db=e,this.dbLogLevel=SeverityLevel.Info,this.consoleLogLevel=SeverityLevel.Info}getConsoleLogLevel(){return this.consoleLogLevel}setConsoleLogLevel(e){this.consoleLogLevel=e}getDbLogLevel(){return this.dbLogLevel}setDbLogLevel(e){this.dbLogLevel=e}setDb(e){this.db=e,this.db?this.db.exists(SmartDbLogModel).then(e=>{this.dbLogging=e}).catch(e=>{throw e}):this.dbLogging=!1}setUserId(e){this.userId=e}setDbLogging(e){this.dbLogging=e}getDbLogging(){return this.dbLogging}logFatal(e,t,o,r){this.writeLog(e,t,SeverityCode.Fatal,o,r)}logError(e,t,o,r){this.writeLog(e,t,SeverityCode.Error,o,r)}logWarning(e,t,o,r){this.writeLog(e,t,SeverityCode.Warning,o,r)}logInfo(e,t,o,r){this.writeLog(e,t,SeverityCode.Info,o,r)}logDebug(e,t,o,r){this.writeLog(e,t,SeverityCode.Debug,o,r)}writeLog(e,t,o,r,i,s){try{if(this.isLogging)console.error("recursive logging error:",e,t,o,r,i);else{this.isLogging=!0;let a,g,n=SeverityLevel.None;switch(o){case SeverityCode.Fatal:a=console.error,n=SeverityLevel.Fatal;break;case SeverityCode.Error:a=console.error,n=SeverityLevel.Error;break;case SeverityCode.Warning:a=console.warn,n=SeverityLevel.Warning;break;case SeverityCode.Info:a=console.info,n=SeverityLevel.Info;break;case SeverityCode.Debug:a=console.debug,n=SeverityLevel.Debug}if(_.isString(s)){const e=s.match(SmartDbTimestampRegexp),t=e&&s.match(SmartDbDateRegexp);g=e?e[1]:t?t[1]+".000":toSmartDbTimestamp(new Date)}else g=_.isDate(s)?toSmartDbTimestamp(s):_.isNumber(s)?toSmartDbTimestamp(new Date(s)):toSmartDbTimestamp(new Date);if(_.isObjectLike(r))if(r instanceof Error)i||(i=r),r=r.message;else try{r=JSON.stringify(r)}catch(e){r=r.toString()}else"boolean"==typeof r&&(r=r?"<true>":"<false>");if(i){if(i instanceof Error)i=i.stack;else if(_.isObject(i))try{i=JSON.stringify(i)}catch(e){i=i.toString(),this.db&&this.dbLogLevel>=n&&console.error("unable to stringify log data",i)}else i.toString?i=i.toString():(i=null,this.db&&this.dbLogLevel>=n&&console.error("unable to store log data",i));i&&(r+=` (${i})`)}if(this.consoleLogLevel>=n){const s=e.substr(0,1).toUpperCase();if(e==SmartDbLogLocation.Database&&this.db&&a(`${o}-${s}-${g}: last statement:`,this.db.getLastBuildData()),a(`${o}-${s}-${g}: ${r}`),this.dbLogging)try{e==SmartDbLogLocation.Database&&(i||(i=JSON.stringify(this.db.getLastBuildData()))),this.db.insertSync(SmartDbLogModel,{severity:o,type:e,location:t,info:r||"<empty>",data:i,user:this.userId,timestamp:new Date(g)})}catch(e){console.error(`F-B-${g}: unable to write the log statement below to database`,e,e.code,e.name,e.message);try{a(`F-B-${g}: last statement:`,this.db.getLastBuildData())}catch{a(`F-B-${g}: last statement not available`)}}}}this.isLogging=!1}catch(e){this.isLogging=!1,console.error("fatal logging error",e)}}}export const smartDbLog=new SmartDbLog;
@@ -0,0 +1,9 @@
1
+ import { SmartDbSqlBuildDataResults, SqlValueType } from "./smart-db-interfaces";
2
+ export declare class SmartDbSqlBuildData {
3
+ sql: string;
4
+ values: SqlValueType[];
5
+ constructor(sql?: string, values?: SqlValueType[]);
6
+ append(data: SmartDbSqlBuildData): void;
7
+ toString(): string;
8
+ results(): SmartDbSqlBuildDataResults;
9
+ }
@@ -0,0 +1 @@
1
+ import _ from"lodash";export class SmartDbSqlBuildData{constructor(s,t){this.sql=s||"",this.values=t||[]}append(s){this.sql=this.sql.trim()+" "+s.sql.trim(),this.values=_.concat(this.values,s.values)}toString(){return this.sql+" <= ("+this.values.join(", ")+")"}results(){return{sql:this.sql,values:this.values}}}