@sqb/connect 4.1.0 → 4.1.3

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/dist/index.d.ts CHANGED
@@ -30,3 +30,4 @@ export * from './orm/decorators/link.decorator';
30
30
  export * from './orm/decorators/primarykey.decorator';
31
31
  export * from './orm/decorators/transform.decorator';
32
32
  export { isColumnElement, isEmbeddedElement, isAssociationElement, isEntityClass } from './orm/util/orm.helper';
33
+ export * from './orm/backward';
package/dist/index.js CHANGED
@@ -39,3 +39,4 @@ Object.defineProperty(exports, "isColumnElement", { enumerable: true, get: funct
39
39
  Object.defineProperty(exports, "isEmbeddedElement", { enumerable: true, get: function () { return orm_helper_1.isEmbeddedElement; } });
40
40
  Object.defineProperty(exports, "isAssociationElement", { enumerable: true, get: function () { return orm_helper_1.isAssociationElement; } });
41
41
  Object.defineProperty(exports, "isEntityClass", { enumerable: true, get: function () { return orm_helper_1.isEntityClass; } });
42
+ tslib_1.__exportStar(require("./orm/backward"), exports);
@@ -0,0 +1,13 @@
1
+ import { PickWritable, Type } from 'ts-gems';
2
+ import { Entity } from './decorators/entity.decorator';
3
+ export declare function getInsertColumnNames<T, K extends keyof PickWritable<T>>(ctor: Type<T>): K[];
4
+ export declare function getUpdateColumnNames<T, K extends keyof PickWritable<T>>(ctor: Type<T>): K[];
5
+ export declare function getNonAssociationElementNames<T, K extends keyof PickWritable<T>>(ctor: Type<T>): K[];
6
+ export declare function mixinEntities<A, B>(derivedCtor: Type<A>, baseB: Type<B>): Type<A & B>;
7
+ export declare function mixinEntities<A, B, C>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>): Type<A & B & C>;
8
+ export declare function mixinEntities<A, B, C, D>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>): Type<A & B & C & D>;
9
+ export declare function mixinEntities<A, B, C, D, E>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>): Type<A & B & C & D & E>;
10
+ export declare function mixinEntities<A, B, C, D, E, F>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>, baseF: Type<F>): Type<A & B & C & D & E & F>;
11
+ export declare const OmitEntity: typeof Entity.Omit;
12
+ export declare const PickEntity: typeof Entity.Pick;
13
+ export declare const UnionEntity: typeof Entity.Union;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnionEntity = exports.PickEntity = exports.OmitEntity = exports.mixinEntities = exports.getNonAssociationElementNames = exports.getUpdateColumnNames = exports.getInsertColumnNames = void 0;
4
+ const entity_decorator_1 = require("./decorators/entity.decorator");
5
+ function getInsertColumnNames(ctor) {
6
+ return entity_decorator_1.Entity.getInsertColumnNames(ctor);
7
+ }
8
+ exports.getInsertColumnNames = getInsertColumnNames;
9
+ function getUpdateColumnNames(ctor) {
10
+ return entity_decorator_1.Entity.getUpdateColumnNames(ctor);
11
+ }
12
+ exports.getUpdateColumnNames = getUpdateColumnNames;
13
+ function getNonAssociationElementNames(ctor) {
14
+ return entity_decorator_1.Entity.getNonAssociationElementNames(ctor);
15
+ }
16
+ exports.getNonAssociationElementNames = getNonAssociationElementNames;
17
+ function mixinEntities(derivedCtor, ...bases) {
18
+ // @ts-ignore
19
+ return entity_decorator_1.Entity.mixin(derivedCtor, ...bases);
20
+ }
21
+ exports.mixinEntities = mixinEntities;
22
+ exports.OmitEntity = entity_decorator_1.Entity.Omit;
23
+ exports.PickEntity = entity_decorator_1.Entity.Pick;
24
+ exports.UnionEntity = entity_decorator_1.Entity.Union;
@@ -4,25 +4,30 @@ import { ColumnElementMetadata } from '../model/column-element-metadata';
4
4
  import { EmbeddedElementMetadata } from '../model/embedded-element-metadata';
5
5
  import { AnyElementMetadata, EntityMetadata, EntityOptions } from '../model/entity-metadata';
6
6
  import { IndexMetadata } from '../model/index-metadata';
7
- import { Ctor } from '../orm.type';
8
7
  export declare function Entity(options?: EntityOptions | string): ClassDecorator;
9
8
  export declare namespace Entity {
10
9
  const getMetadata: typeof EntityMetadata.get;
11
10
  const getOwnMetadata: typeof EntityMetadata.getOwn;
12
- function getElement(ctor: Ctor, elementName: string): Maybe<AnyElementMetadata>;
13
- function getColumnElement(ctor: Ctor, elementName: string): Maybe<ColumnElementMetadata>;
14
- function getEmbeddedElement(ctor: Ctor, elementName: string): Maybe<EmbeddedElementMetadata>;
15
- function getAssociationElement(ctor: Ctor, elementName: string): Maybe<AssociationElementMetadata>;
16
- function getColumnElementByFieldName(ctor: Ctor, fieldName: string): Maybe<ColumnElementMetadata>;
17
- function getElementNames(ctor: Ctor, filter?: (el: AnyElementMetadata) => boolean): string[];
18
- function getColumnNames(ctor: Ctor): string[];
19
- function getEmbeddedElementNames(ctor: Ctor): string[];
20
- function getAssociationElementNames(ctor: Ctor): string[];
21
- function getNonAssociationElementNames(ctor: Ctor): string[];
22
- function getInsertColumnNames(ctor: Ctor): string[];
23
- function getUpdateColumnNames(ctor: Ctor): string[];
24
- function getPrimaryIndex(ctor: Ctor): Maybe<IndexMetadata>;
25
- function getPrimaryIndexColumns(ctor: Ctor): ColumnElementMetadata[];
11
+ function getElement<T>(ctor: Type<T>, key: keyof T | string): Maybe<AnyElementMetadata>;
12
+ function getColumnElement<T>(ctor: Type<T>, key: keyof T | string): Maybe<ColumnElementMetadata>;
13
+ function getEmbeddedElement<T>(ctor: Type<T>, key: keyof T | string): Maybe<EmbeddedElementMetadata>;
14
+ function getAssociationElement<T>(ctor: Type<T>, key: keyof T | string): Maybe<AssociationElementMetadata>;
15
+ function getColumnElementByFieldName(ctor: Type, fieldName: string): Maybe<ColumnElementMetadata>;
16
+ function find(ctor: Type, predicate: (el: AnyElementMetadata) => boolean): Maybe<AnyElementMetadata>;
17
+ function getElementNames(ctor: Type, filter?: (el: AnyElementMetadata) => boolean): string[];
18
+ function getColumnNames(ctor: Type): string[];
19
+ function getEmbeddedElementNames(ctor: Type): string[];
20
+ function getAssociationElementNames(ctor: Type): string[];
21
+ function getNonAssociationElementNames(ctor: Type): string[];
22
+ function getInsertColumnNames(ctor: Type): string[];
23
+ function getUpdateColumnNames(ctor: Type): string[];
24
+ function getPrimaryIndex(ctor: Type): Maybe<IndexMetadata>;
25
+ function getPrimaryIndexColumns(ctor: Type): ColumnElementMetadata[];
26
+ function mixin<A, B>(derivedCtor: Type<A>, baseB: Type<B>): Type<A & B>;
27
+ function mixin<A, B, C>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>): Type<A & B & C>;
28
+ function mixin<A, B, C, D>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>): Type<A & B & C & D>;
29
+ function mixin<A, B, C, D, E>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>): Type<A & B & C & D & E>;
30
+ function mixin<A, B, C, D, E, F>(derivedCtor: Type<A>, baseB: Type<B>, baseC: Type<C>, baseD: Type<D>, baseE: Type<E>, baseF: Type<F>): Type<A & B & C & D & E & F>;
26
31
  function Pick<T, K extends keyof T>(classRef: Type<T>, keys: readonly K[]): Type<Pick<T, typeof keys[number]>>;
27
32
  function Omit<T, K extends keyof T>(classRef: Type<T>, keys: readonly K[]): Type<Omit<T, typeof keys[number]>>;
28
33
  function Union<A, B>(baseA: Type<A>, baseB: Type<B>): Type<A & B>;
@@ -19,24 +19,24 @@ exports.Entity = Entity;
19
19
  (function (Entity) {
20
20
  Entity.getMetadata = entity_metadata_1.EntityMetadata.get;
21
21
  Entity.getOwnMetadata = entity_metadata_1.EntityMetadata.getOwn;
22
- function getElement(ctor, elementName) {
22
+ function getElement(ctor, key) {
23
23
  const model = entity_metadata_1.EntityMetadata.get(ctor);
24
- return model && entity_metadata_1.EntityMetadata.getElement(model, elementName);
24
+ return model && entity_metadata_1.EntityMetadata.getElement(model, key);
25
25
  }
26
26
  Entity.getElement = getElement;
27
- function getColumnElement(ctor, elementName) {
27
+ function getColumnElement(ctor, key) {
28
28
  const model = entity_metadata_1.EntityMetadata.get(ctor);
29
- return model && entity_metadata_1.EntityMetadata.getColumnElement(model, elementName);
29
+ return model && entity_metadata_1.EntityMetadata.getColumnElement(model, key);
30
30
  }
31
31
  Entity.getColumnElement = getColumnElement;
32
- function getEmbeddedElement(ctor, elementName) {
32
+ function getEmbeddedElement(ctor, key) {
33
33
  const model = entity_metadata_1.EntityMetadata.get(ctor);
34
- return model && entity_metadata_1.EntityMetadata.getEmbeddedElement(model, elementName);
34
+ return model && entity_metadata_1.EntityMetadata.getEmbeddedElement(model, key);
35
35
  }
36
36
  Entity.getEmbeddedElement = getEmbeddedElement;
37
- function getAssociationElement(ctor, elementName) {
37
+ function getAssociationElement(ctor, key) {
38
38
  const model = entity_metadata_1.EntityMetadata.get(ctor);
39
- return model && entity_metadata_1.EntityMetadata.getAssociationElement(model, elementName);
39
+ return model && entity_metadata_1.EntityMetadata.getAssociationElement(model, key);
40
40
  }
41
41
  Entity.getAssociationElement = getAssociationElement;
42
42
  function getColumnElementByFieldName(ctor, fieldName) {
@@ -44,6 +44,11 @@ exports.Entity = Entity;
44
44
  return model && entity_metadata_1.EntityMetadata.getColumnElementByFieldName(model, fieldName);
45
45
  }
46
46
  Entity.getColumnElementByFieldName = getColumnElementByFieldName;
47
+ function find(ctor, predicate) {
48
+ const model = entity_metadata_1.EntityMetadata.get(ctor);
49
+ return model && entity_metadata_1.EntityMetadata.findElement(model, predicate);
50
+ }
51
+ Entity.find = find;
47
52
  function getElementNames(ctor, filter) {
48
53
  const model = entity_metadata_1.EntityMetadata.get(ctor);
49
54
  return (model && entity_metadata_1.EntityMetadata.getElementNames(model, filter)) || [];
@@ -89,18 +94,31 @@ exports.Entity = Entity;
89
94
  return entity_metadata_1.EntityMetadata.getPrimaryIndexColumns(model);
90
95
  }
91
96
  Entity.getPrimaryIndexColumns = getPrimaryIndexColumns;
97
+ function mixin(derivedCtor, ...bases) {
98
+ const trgMeta = entity_metadata_1.EntityMetadata.inject(derivedCtor);
99
+ for (const base of bases) {
100
+ (0, apply_mixins_1.applyMixins)(derivedCtor, base);
101
+ const srcMeta = entity_metadata_1.EntityMetadata.get(base);
102
+ if (srcMeta) {
103
+ entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta);
104
+ }
105
+ }
106
+ return derivedCtor;
107
+ }
108
+ Entity.mixin = mixin;
92
109
  function Pick(classRef, keys) {
93
110
  const PickEntityClass = class {
94
111
  constructor(...args) {
95
112
  applyConstructorProperties(this, classRef, args);
96
113
  }
97
114
  };
98
- const pickKeys = keys;
99
- (0, apply_mixins_1.applyMixins)(PickEntityClass, classRef, (k) => pickKeys.includes(k.toLowerCase()));
115
+ const pickKeys = keys.map(x => x.toLowerCase());
116
+ const filter = (k) => pickKeys.includes(k.toLowerCase());
117
+ (0, apply_mixins_1.applyMixins)(PickEntityClass, classRef, filter);
100
118
  const srcMeta = entity_metadata_1.EntityMetadata.get(classRef);
101
119
  if (srcMeta) {
102
120
  const trgMeta = entity_metadata_1.EntityMetadata.inject(PickEntityClass);
103
- entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, pickKeys);
121
+ entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, filter);
104
122
  }
105
123
  return PickEntityClass;
106
124
  }
@@ -112,13 +130,12 @@ exports.Entity = Entity;
112
130
  }
113
131
  };
114
132
  const omitKeys = keys.map(x => x.toLowerCase());
115
- (0, apply_mixins_1.applyMixins)(OmitEntityClass, classRef, (k) => !(omitKeys && !omitKeys.includes(k.toLowerCase())));
133
+ const filter = (k) => !omitKeys.includes(k.toLowerCase());
134
+ (0, apply_mixins_1.applyMixins)(OmitEntityClass, classRef, filter);
116
135
  const srcMeta = entity_metadata_1.EntityMetadata.get(classRef);
117
136
  if (srcMeta) {
118
- const elementKeys = Object.keys(srcMeta.elements)
119
- .filter(x => !omitKeys.includes(x));
120
137
  const trgMeta = entity_metadata_1.EntityMetadata.inject(OmitEntityClass);
121
- entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, elementKeys);
138
+ entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, filter);
122
139
  }
123
140
  return OmitEntityClass;
124
141
  }
@@ -130,11 +147,11 @@ exports.Entity = Entity;
130
147
  applyConstructorProperties(this, c, args);
131
148
  }
132
149
  };
150
+ const trgMeta = entity_metadata_1.EntityMetadata.inject(UnionClass);
133
151
  for (const base of bases) {
134
152
  (0, apply_mixins_1.applyMixins)(UnionClass, base);
135
153
  const srcMeta = entity_metadata_1.EntityMetadata.get(base);
136
154
  if (srcMeta) {
137
- const trgMeta = entity_metadata_1.EntityMetadata.inject(UnionClass);
138
155
  entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta);
139
156
  }
140
157
  }
@@ -27,6 +27,7 @@ export declare namespace EntityMetadata {
27
27
  function getColumnElement(entity: EntityMetadata, elementName: string): Maybe<ColumnElementMetadata>;
28
28
  function getEmbeddedElement(entity: EntityMetadata, elementName: string): Maybe<EmbeddedElementMetadata>;
29
29
  function getAssociationElement(entity: EntityMetadata, elementName: string): Maybe<AssociationElementMetadata>;
30
+ function findElement(entity: EntityMetadata, predicate: (el: AnyElementMetadata) => boolean): Maybe<AnyElementMetadata>;
30
31
  function getColumnElementByFieldName(entity: EntityMetadata, fieldName: string): Maybe<ColumnElementMetadata>;
31
32
  function getElementNames(entity: EntityMetadata, filter?: (el: AnyElementMetadata) => boolean): string[];
32
33
  function getColumnNames(entity: EntityMetadata): string[];
@@ -45,5 +46,5 @@ export declare namespace EntityMetadata {
45
46
  function defineEmbeddedElement(entity: EntityMetadata, name: string, type: TypeThunk, options?: EmbeddedElementOptions): EmbeddedElementMetadata;
46
47
  function defineAssociationElement(entity: EntityMetadata, propertyKey: string, association: AssociationNode): AssociationElementMetadata;
47
48
  function setPrimaryKeys(entity: EntityMetadata, column: string | string[], options?: Omit<IndexMetadata, 'columns' | 'unique' | 'primary'>): void;
48
- function mixin(derived: EntityMetadata, base: EntityMetadata, elements?: string[]): void;
49
+ function mixin(derived: EntityMetadata, base: EntityMetadata, filter?: (n: string) => boolean): void;
49
50
  }
@@ -63,19 +63,29 @@ var EntityMetadata;
63
63
  EntityMetadata.getElement = getElement;
64
64
  function getColumnElement(entity, elementName) {
65
65
  const el = getElement(entity, elementName);
66
- return (0, orm_helper_1.isColumnElement)(el) ? el : undefined;
66
+ if (el && !(0, orm_helper_1.isColumnElement)(el))
67
+ throw new Error(`"${el.name}" requested as "column" but it is "${el.kind}"`);
68
+ return el;
67
69
  }
68
70
  EntityMetadata.getColumnElement = getColumnElement;
69
71
  function getEmbeddedElement(entity, elementName) {
70
72
  const el = getElement(entity, elementName);
71
- return (0, orm_helper_1.isEmbeddedElement)(el) ? el : undefined;
73
+ if (el && !(0, orm_helper_1.isEmbeddedElement)(el))
74
+ throw new Error(`"${el.name}" requested as "embedded" but it is "${el.kind}"`);
75
+ return el;
72
76
  }
73
77
  EntityMetadata.getEmbeddedElement = getEmbeddedElement;
74
78
  function getAssociationElement(entity, elementName) {
75
79
  const el = getElement(entity, elementName);
76
- return (0, orm_helper_1.isAssociationElement)(el) ? el : undefined;
80
+ if (el && !(0, orm_helper_1.isAssociationElement)(el))
81
+ throw new Error(`"${el.name}" requested as "association" but it is "${el.kind}"`);
82
+ return el;
77
83
  }
78
84
  EntityMetadata.getAssociationElement = getAssociationElement;
85
+ function findElement(entity, predicate) {
86
+ return Object.values(entity.elements).find(predicate);
87
+ }
88
+ EntityMetadata.findElement = findElement;
79
89
  function getColumnElementByFieldName(entity, fieldName) {
80
90
  if (!fieldName)
81
91
  return;
@@ -131,7 +141,7 @@ var EntityMetadata;
131
141
  }
132
142
  EntityMetadata.getUpdateColumnNames = getUpdateColumnNames;
133
143
  function getPrimaryIndex(entity) {
134
- return entity.indexes.find(idx => idx.primary);
144
+ return entity.indexes && entity.indexes.find(idx => idx.primary);
135
145
  }
136
146
  EntityMetadata.getPrimaryIndex = getPrimaryIndex;
137
147
  function getPrimaryIndexColumns(entity) {
@@ -149,6 +159,8 @@ var EntityMetadata;
149
159
  }
150
160
  EntityMetadata.getPrimaryIndexColumns = getPrimaryIndexColumns;
151
161
  async function getForeignKeyFor(src, trg) {
162
+ if (!src.foreignKeys)
163
+ return;
152
164
  for (const f of src.foreignKeys) {
153
165
  if (await f.resolveTarget() === trg)
154
166
  return f;
@@ -277,10 +289,9 @@ var EntityMetadata;
277
289
  });
278
290
  }
279
291
  EntityMetadata.setPrimaryKeys = setPrimaryKeys;
280
- function mixin(derived, base, elements) {
281
- const elementKeys = elements && elements.map(x => x.toLowerCase());
282
- const hasElement = (k) => !(elementKeys && !elementKeys.includes(k.toLowerCase()));
283
- // applyMixins(derived, baseCtor, hasElement);
292
+ function mixin(derived, base, filter) {
293
+ // const elementKeys = elements && elements.map(x => x.toLowerCase());
294
+ const hasElement = (k) => !filter || filter(k);
284
295
  delete derived._elementNames;
285
296
  if (!derived.tableName) {
286
297
  derived.tableName = base.tableName;
@@ -316,6 +327,7 @@ var EntityMetadata;
316
327
  }
317
328
  }
318
329
  // Copy elements
330
+ derived.elements = derived.elements || {};
319
331
  for (const [n, p] of Object.entries(base.elements)) {
320
332
  if (!hasElement(n))
321
333
  continue;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sqb/connect",
3
3
  "description": "Multi-dialect database connection framework written with TypeScript",
4
- "version": "4.1.0",
4
+ "version": "4.1.3",
5
5
  "author": "Panates",
6
6
  "contributors": [
7
7
  "Eray Hanoglu <e.hanoglu@panates.com>"
@@ -36,17 +36,17 @@
36
36
  "putil-merge": "^3.8.0",
37
37
  "putil-promisify": "^1.8.5",
38
38
  "putil-taskqueue": "^2.5.4",
39
- "putil-varhelpers": "^1.6.3",
39
+ "putil-varhelpers": "^1.6.4",
40
40
  "reflect-metadata": "^0.1.13",
41
41
  "strict-typed-events": "^2.1.0",
42
42
  "ts-gems": "^1.5.2"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/debug": "^4.1.7",
46
- "@types/lodash": "^4.14.180"
46
+ "@types/lodash": "^4.14.182"
47
47
  },
48
48
  "peerDependencies": {
49
- "@sqb/builder": "^4.x.x"
49
+ "@sqb/builder": "^4.1.0"
50
50
  },
51
51
  "main": "dist/index.js",
52
52
  "types": "dist/index.d.ts",