@sqb/connect 4.1.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/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,8 @@
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 const OmitEntity: typeof Entity.Omit;
7
+ export declare const PickEntity: typeof Entity.Pick;
8
+ export declare const UnionEntity: typeof Entity.Union;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnionEntity = exports.PickEntity = exports.OmitEntity = 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
+ exports.OmitEntity = entity_decorator_1.Entity.Omit;
18
+ exports.PickEntity = entity_decorator_1.Entity.Pick;
19
+ exports.UnionEntity = entity_decorator_1.Entity.Union;
@@ -4,25 +4,25 @@ 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
26
  function Pick<T, K extends keyof T>(classRef: Type<T>, keys: readonly K[]): Type<Pick<T, typeof keys[number]>>;
27
27
  function Omit<T, K extends keyof T>(classRef: Type<T>, keys: readonly K[]): Type<Omit<T, typeof keys[number]>>;
28
28
  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)) || [];
@@ -95,12 +100,13 @@ exports.Entity = Entity;
95
100
  applyConstructorProperties(this, classRef, args);
96
101
  }
97
102
  };
98
- const pickKeys = keys;
99
- (0, apply_mixins_1.applyMixins)(PickEntityClass, classRef, (k) => pickKeys.includes(k.toLowerCase()));
103
+ const pickKeys = keys.map(x => x.toLowerCase());
104
+ const filter = (k) => pickKeys.includes(k.toLowerCase());
105
+ (0, apply_mixins_1.applyMixins)(PickEntityClass, classRef, filter);
100
106
  const srcMeta = entity_metadata_1.EntityMetadata.get(classRef);
101
107
  if (srcMeta) {
102
108
  const trgMeta = entity_metadata_1.EntityMetadata.inject(PickEntityClass);
103
- entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, pickKeys);
109
+ entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, filter);
104
110
  }
105
111
  return PickEntityClass;
106
112
  }
@@ -112,13 +118,12 @@ exports.Entity = Entity;
112
118
  }
113
119
  };
114
120
  const omitKeys = keys.map(x => x.toLowerCase());
115
- (0, apply_mixins_1.applyMixins)(OmitEntityClass, classRef, (k) => !(omitKeys && !omitKeys.includes(k.toLowerCase())));
121
+ const filter = (k) => !omitKeys.includes(k.toLowerCase());
122
+ (0, apply_mixins_1.applyMixins)(OmitEntityClass, classRef, filter);
116
123
  const srcMeta = entity_metadata_1.EntityMetadata.get(classRef);
117
124
  if (srcMeta) {
118
- const elementKeys = Object.keys(srcMeta.elements)
119
- .filter(x => !omitKeys.includes(x));
120
125
  const trgMeta = entity_metadata_1.EntityMetadata.inject(OmitEntityClass);
121
- entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, elementKeys);
126
+ entity_metadata_1.EntityMetadata.mixin(trgMeta, srcMeta, filter);
122
127
  }
123
128
  return OmitEntityClass;
124
129
  }
@@ -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.1",
5
5
  "author": "Panates",
6
6
  "contributors": [
7
7
  "Eray Hanoglu <e.hanoglu@panates.com>"
@@ -72,4 +72,4 @@
72
72
  "lint": "eslint src/** --no-error-on-unmatched-pattern",
73
73
  "test": "TS_NODE_PROJECT='./test/tsconfig.json' mocha -r ts-node/register -r tsconfig-paths/register --reporter spec test/**/*.spec.ts"
74
74
  }
75
- }
75
+ }