@itrocks/mysql 0.1.8 → 0.2.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/cjs/mysql.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- import { AnyObject } from '@itrocks/class-type';
2
- import { KeyOf } from '@itrocks/class-type';
3
1
  import { ObjectOrType } from '@itrocks/class-type';
4
2
  import { Type } from '@itrocks/class-type';
5
3
  import { ReflectProperty } from '@itrocks/reflect';
@@ -11,11 +9,12 @@ import { Options } from '@itrocks/storage';
11
9
  import { SearchType } from '@itrocks/storage';
12
10
  import { Connection } from 'mariadb';
13
11
  export declare const DEBUG = false;
12
+ export type AnyObject = Record<string, any>;
14
13
  interface Dependencies<QF extends object = object> {
15
- applyReadTransformer: <T extends object>(record: AnyObject, property: KeyOf<T>, object: T) => any;
16
- applySaveTransformer: <T extends object>(object: T, property: KeyOf<T>, record: AnyObject) => any;
17
- columnOf: (property: string) => string;
18
- componentOf: <T extends object>(target: T, property: KeyOf<T>) => boolean;
14
+ applyReadTransformer: <T extends object>(record: AnyObject, property: keyof T, object: T) => any;
15
+ applySaveTransformer: <T extends object>(object: T, property: keyof T, record: AnyObject) => any;
16
+ columnOf: (property: number | string | symbol) => string;
17
+ componentOf: <T extends object>(target: T, property: keyof T) => boolean;
19
18
  ignoreTransformedValue: any;
20
19
  QueryFunction: Type<QF>;
21
20
  queryFunctionCall: (value: QF) => [any, string];
@@ -41,11 +40,11 @@ export declare class Mysql extends DataSource {
41
40
  columnName<T extends object>(property: ReflectProperty<T>): string | undefined;
42
41
  connect(): Promise<Connection>;
43
42
  count<T extends object>(type: Type<T>, search?: SearchType<T>): Promise<number>;
44
- delete<T extends object>(object: Entity<T>, property?: KeyOf<Entity<T>>): Promise<T>;
45
- deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: KeyOf<Entity<T>>): Promise<void>;
46
- deleteRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
43
+ delete<T extends object>(object: Entity<T>, property?: keyof Entity<T>): Promise<T>;
44
+ deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: keyof Entity<T>): Promise<void>;
45
+ deleteRelatedId<T extends Entity>(object: T, property: keyof T, id: Identifier): Promise<void>;
47
46
  insert<T extends object>(object: T): Promise<Entity<T>>;
48
- insertRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
47
+ insertRelatedId<T extends Entity>(object: T, property: keyof T, id: Identifier): Promise<void>;
49
48
  propertiesToSearchSql(search: AnyObject): string;
50
49
  propertiesToSql(object: object): string;
51
50
  propertiesToSqlSelect<T extends object>(type: Type<T>): string;
@@ -53,16 +52,16 @@ export declare class Mysql extends DataSource {
53
52
  id: Identifier;
54
53
  }>[]>;
55
54
  read<T extends object>(type: Type<T>, id: Identifier): Promise<Entity<T>>;
56
- readCollection<T extends object, PT extends object>(object: Entity<T>, property: KeyOf<T>, type?: Type<PT>): Promise<Awaited<PT & {
55
+ readCollection<T extends object, PT extends object>(object: Entity<T>, property: keyof T, type?: Type<PT>): Promise<Awaited<PT & {
57
56
  id: Identifier;
58
57
  }>[]>;
59
- readCollectionIds<T extends object, PT extends object>(object: Entity<T>, property: KeyOf<T>, type?: Type<PT>): Promise<Identifier[]>;
58
+ readCollectionIds<T extends object, PT extends object>(object: Entity<T>, property: keyof T, type?: Type<PT>): Promise<Identifier[]>;
60
59
  readMultiple<T extends object>(type: Type<T>, ids: Identifier[]): Promise<Entity<T>[]>;
61
60
  runSerialized<T extends object>(object: MayEntity<T>, task: () => Promise<Entity<T>>): Promise<Entity<T>>;
62
61
  save<T extends object>(object: MayEntity<T>): Promise<Entity<T>>;
63
- saveCollection<T extends object>(object: Entity<T>, property: KeyOf<T>, value: (Identifier | MayEntity)[]): Promise<void>;
64
- saveComponents<T extends object>(object: Entity<T>, property: KeyOf<T>, components: (Identifier | MayEntity)[]): Promise<void>;
65
- saveLinks<T extends object>(object: Entity<T>, property: KeyOf<T>, links: (Identifier | MayEntity)[]): Promise<void>;
62
+ saveCollection<T extends object>(object: Entity<T>, property: keyof T, value: (Identifier | MayEntity)[]): Promise<void>;
63
+ saveComponents<T extends object, C extends object>(object: Entity<T>, property: keyof T, components: (Identifier | MayEntity<C>)[]): Promise<void>;
64
+ saveLinks<T extends object>(object: Entity<T>, property: keyof T, links: (Identifier | MayEntity)[]): Promise<void>;
66
65
  search<T extends object>(type: Type<T>, search?: SearchType<T>, options?: Options): Promise<Entity<T>[]>;
67
66
  targetName<T extends object>(property: ReflectProperty<T>): string;
68
67
  update<T extends object>(object: Entity<T>): Promise<Entity<T>>;
package/cjs/mysql.js CHANGED
@@ -16,12 +16,13 @@ const sort_2 = require("@itrocks/sort");
16
16
  const storage_1 = require("@itrocks/storage");
17
17
  const storage_2 = require("@itrocks/storage");
18
18
  const storage_3 = require("@itrocks/storage");
19
+ const storage_4 = require("@itrocks/storage");
19
20
  const mariadb_1 = require("mariadb");
20
21
  exports.DEBUG = false;
21
22
  const depends = {
22
- applyReadTransformer: (record, property) => record[property],
23
+ applyReadTransformer: (record, property) => record[depends.columnOf(property)],
23
24
  applySaveTransformer: (object, property) => object[property],
24
- columnOf: name => name.toLowerCase(),
25
+ columnOf: name => name.toString().toLowerCase(),
25
26
  componentOf: () => false,
26
27
  ignoreTransformedValue: Symbol('ignoreTransformedValue'),
27
28
  QueryFunction: class {
@@ -48,6 +49,8 @@ class Mysql extends storage_1.DataSource {
48
49
  this.config = config;
49
50
  }
50
51
  columnName(property) {
52
+ if (typeof property.name !== 'string')
53
+ throw 'No column name for non-string property';
51
54
  const propertyType = property.type;
52
55
  if (propertyType instanceof property_type_1.CollectionType)
53
56
  return;
@@ -243,8 +246,8 @@ class Mysql extends storage_1.DataSource {
243
246
  });
244
247
  }
245
248
  async saveCollection(object, property, value) {
246
- if (property.endsWith('Ids')) {
247
- property = property.slice(0, -3);
249
+ if (property.toString().endsWith('Ids')) {
250
+ property = property.toString().slice(0, -3);
248
251
  }
249
252
  return depends.componentOf(object, property)
250
253
  ? this.saveComponents(object, property, value)
@@ -257,7 +260,7 @@ class Mysql extends storage_1.DataSource {
257
260
  const saved = new Array;
258
261
  let compositeProperty;
259
262
  for (const component of components) {
260
- if (typeof component !== 'object') {
263
+ if ((0, storage_2.isIdentifier)(component)) {
261
264
  saved.push(component);
262
265
  continue;
263
266
  }
@@ -276,7 +279,6 @@ class Mysql extends storage_1.DataSource {
276
279
  }
277
280
  }
278
281
  if (compositeProperty) {
279
- // @ts-ignore TS2322 Don't understand this error
280
282
  component[compositeProperty.name] = object;
281
283
  }
282
284
  saved.push((await this.save(component)).id);
@@ -289,7 +291,7 @@ class Mysql extends storage_1.DataSource {
289
291
  componentTable = depends.storeOf(propertyType);
290
292
  if (!componentTable) {
291
293
  throw 'Missing @Store on type ' + propertyType.name
292
- + ' used by @Component ' + new reflect_1.ReflectClass(object).name + '.' + property;
294
+ + ' used by @Component ' + new reflect_1.ReflectClass(object).name + '.' + property.toString();
293
295
  }
294
296
  }
295
297
  await connection.query('DELETE FROM `' + componentTable + '` WHERE id = ?', [storedId]);
@@ -328,14 +330,14 @@ class Mysql extends storage_1.DataSource {
328
330
  let limitOption = undefined;
329
331
  let sortOption = undefined;
330
332
  for (const option of this.options(options)) {
331
- if (option === storage_3.Sort) {
332
- sortOption = new storage_3.Sort((0, sort_2.sortOf)(type));
333
+ if (option === storage_4.Sort) {
334
+ sortOption = new storage_4.Sort((0, sort_2.sortOf)(type));
333
335
  }
334
- if (option instanceof storage_2.Limit) {
336
+ if (option instanceof storage_3.Limit) {
335
337
  limitOption = option;
336
338
  }
337
- if (option instanceof storage_3.Sort) {
338
- sortOption = option.properties.length ? option : new storage_3.Sort((0, sort_2.sortOf)(type));
339
+ if (option instanceof storage_4.Sort) {
340
+ sortOption = option.properties.length ? option : new storage_4.Sort((0, sort_2.sortOf)(type));
339
341
  }
340
342
  }
341
343
  const localSearch = { ...search };
@@ -363,8 +365,8 @@ class Mysql extends storage_1.DataSource {
363
365
  targetName(property) {
364
366
  const type = property.type.type;
365
367
  return ((0, class_type_3.isAnyType)(type) && depends.storeOf(type))
366
- ? property.name + 'Id'
367
- : property.name;
368
+ ? property.name.toString() + 'Id'
369
+ : property.name.toString();
368
370
  }
369
371
  async update(object) {
370
372
  const connection = this.connection ?? await this.connect();
package/esm/mysql.d.ts CHANGED
@@ -1,5 +1,3 @@
1
- import { AnyObject } from '@itrocks/class-type';
2
- import { KeyOf } from '@itrocks/class-type';
3
1
  import { ObjectOrType } from '@itrocks/class-type';
4
2
  import { Type } from '@itrocks/class-type';
5
3
  import { ReflectProperty } from '@itrocks/reflect';
@@ -11,11 +9,12 @@ import { Options } from '@itrocks/storage';
11
9
  import { SearchType } from '@itrocks/storage';
12
10
  import { Connection } from 'mariadb';
13
11
  export declare const DEBUG = false;
12
+ export type AnyObject = Record<string, any>;
14
13
  interface Dependencies<QF extends object = object> {
15
- applyReadTransformer: <T extends object>(record: AnyObject, property: KeyOf<T>, object: T) => any;
16
- applySaveTransformer: <T extends object>(object: T, property: KeyOf<T>, record: AnyObject) => any;
17
- columnOf: (property: string) => string;
18
- componentOf: <T extends object>(target: T, property: KeyOf<T>) => boolean;
14
+ applyReadTransformer: <T extends object>(record: AnyObject, property: keyof T, object: T) => any;
15
+ applySaveTransformer: <T extends object>(object: T, property: keyof T, record: AnyObject) => any;
16
+ columnOf: (property: number | string | symbol) => string;
17
+ componentOf: <T extends object>(target: T, property: keyof T) => boolean;
19
18
  ignoreTransformedValue: any;
20
19
  QueryFunction: Type<QF>;
21
20
  queryFunctionCall: (value: QF) => [any, string];
@@ -41,11 +40,11 @@ export declare class Mysql extends DataSource {
41
40
  columnName<T extends object>(property: ReflectProperty<T>): string | undefined;
42
41
  connect(): Promise<Connection>;
43
42
  count<T extends object>(type: Type<T>, search?: SearchType<T>): Promise<number>;
44
- delete<T extends object>(object: Entity<T>, property?: KeyOf<Entity<T>>): Promise<T>;
45
- deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: KeyOf<Entity<T>>): Promise<void>;
46
- deleteRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
43
+ delete<T extends object>(object: Entity<T>, property?: keyof Entity<T>): Promise<T>;
44
+ deleteId<T extends object>(type: ObjectOrType<T>, id: any, property?: keyof Entity<T>): Promise<void>;
45
+ deleteRelatedId<T extends Entity>(object: T, property: keyof T, id: Identifier): Promise<void>;
47
46
  insert<T extends object>(object: T): Promise<Entity<T>>;
48
- insertRelatedId<T extends Entity>(object: T, property: KeyOf<T>, id: Identifier): Promise<void>;
47
+ insertRelatedId<T extends Entity>(object: T, property: keyof T, id: Identifier): Promise<void>;
49
48
  propertiesToSearchSql(search: AnyObject): string;
50
49
  propertiesToSql(object: object): string;
51
50
  propertiesToSqlSelect<T extends object>(type: Type<T>): string;
@@ -53,16 +52,16 @@ export declare class Mysql extends DataSource {
53
52
  id: Identifier;
54
53
  }>[]>;
55
54
  read<T extends object>(type: Type<T>, id: Identifier): Promise<Entity<T>>;
56
- readCollection<T extends object, PT extends object>(object: Entity<T>, property: KeyOf<T>, type?: Type<PT>): Promise<Awaited<PT & {
55
+ readCollection<T extends object, PT extends object>(object: Entity<T>, property: keyof T, type?: Type<PT>): Promise<Awaited<PT & {
57
56
  id: Identifier;
58
57
  }>[]>;
59
- readCollectionIds<T extends object, PT extends object>(object: Entity<T>, property: KeyOf<T>, type?: Type<PT>): Promise<Identifier[]>;
58
+ readCollectionIds<T extends object, PT extends object>(object: Entity<T>, property: keyof T, type?: Type<PT>): Promise<Identifier[]>;
60
59
  readMultiple<T extends object>(type: Type<T>, ids: Identifier[]): Promise<Entity<T>[]>;
61
60
  runSerialized<T extends object>(object: MayEntity<T>, task: () => Promise<Entity<T>>): Promise<Entity<T>>;
62
61
  save<T extends object>(object: MayEntity<T>): Promise<Entity<T>>;
63
- saveCollection<T extends object>(object: Entity<T>, property: KeyOf<T>, value: (Identifier | MayEntity)[]): Promise<void>;
64
- saveComponents<T extends object>(object: Entity<T>, property: KeyOf<T>, components: (Identifier | MayEntity)[]): Promise<void>;
65
- saveLinks<T extends object>(object: Entity<T>, property: KeyOf<T>, links: (Identifier | MayEntity)[]): Promise<void>;
62
+ saveCollection<T extends object>(object: Entity<T>, property: keyof T, value: (Identifier | MayEntity)[]): Promise<void>;
63
+ saveComponents<T extends object, C extends object>(object: Entity<T>, property: keyof T, components: (Identifier | MayEntity<C>)[]): Promise<void>;
64
+ saveLinks<T extends object>(object: Entity<T>, property: keyof T, links: (Identifier | MayEntity)[]): Promise<void>;
66
65
  search<T extends object>(type: Type<T>, search?: SearchType<T>, options?: Options): Promise<Entity<T>[]>;
67
66
  targetName<T extends object>(property: ReflectProperty<T>): string;
68
67
  update<T extends object>(object: Entity<T>): Promise<Entity<T>>;
package/esm/mysql.js CHANGED
@@ -9,14 +9,15 @@ import { ReflectProperty } from '@itrocks/reflect';
9
9
  import { Reverse } from '@itrocks/sort';
10
10
  import { sortOf } from '@itrocks/sort';
11
11
  import { DataSource } from '@itrocks/storage';
12
+ import { isIdentifier } from '@itrocks/storage';
12
13
  import { Limit } from '@itrocks/storage';
13
14
  import { Sort } from '@itrocks/storage';
14
15
  import { createConnection } from 'mariadb';
15
16
  export const DEBUG = false;
16
17
  const depends = {
17
- applyReadTransformer: (record, property) => record[property],
18
+ applyReadTransformer: (record, property) => record[depends.columnOf(property)],
18
19
  applySaveTransformer: (object, property) => object[property],
19
- columnOf: name => name.toLowerCase(),
20
+ columnOf: name => name.toString().toLowerCase(),
20
21
  componentOf: () => false,
21
22
  ignoreTransformedValue: Symbol('ignoreTransformedValue'),
22
23
  QueryFunction: class {
@@ -43,6 +44,8 @@ export class Mysql extends DataSource {
43
44
  this.config = config;
44
45
  }
45
46
  columnName(property) {
47
+ if (typeof property.name !== 'string')
48
+ throw 'No column name for non-string property';
46
49
  const propertyType = property.type;
47
50
  if (propertyType instanceof CollectionType)
48
51
  return;
@@ -238,8 +241,8 @@ export class Mysql extends DataSource {
238
241
  });
239
242
  }
240
243
  async saveCollection(object, property, value) {
241
- if (property.endsWith('Ids')) {
242
- property = property.slice(0, -3);
244
+ if (property.toString().endsWith('Ids')) {
245
+ property = property.toString().slice(0, -3);
243
246
  }
244
247
  return depends.componentOf(object, property)
245
248
  ? this.saveComponents(object, property, value)
@@ -252,7 +255,7 @@ export class Mysql extends DataSource {
252
255
  const saved = new Array;
253
256
  let compositeProperty;
254
257
  for (const component of components) {
255
- if (typeof component !== 'object') {
258
+ if (isIdentifier(component)) {
256
259
  saved.push(component);
257
260
  continue;
258
261
  }
@@ -271,7 +274,6 @@ export class Mysql extends DataSource {
271
274
  }
272
275
  }
273
276
  if (compositeProperty) {
274
- // @ts-ignore TS2322 Don't understand this error
275
277
  component[compositeProperty.name] = object;
276
278
  }
277
279
  saved.push((await this.save(component)).id);
@@ -284,7 +286,7 @@ export class Mysql extends DataSource {
284
286
  componentTable = depends.storeOf(propertyType);
285
287
  if (!componentTable) {
286
288
  throw 'Missing @Store on type ' + propertyType.name
287
- + ' used by @Component ' + new ReflectClass(object).name + '.' + property;
289
+ + ' used by @Component ' + new ReflectClass(object).name + '.' + property.toString();
288
290
  }
289
291
  }
290
292
  await connection.query('DELETE FROM `' + componentTable + '` WHERE id = ?', [storedId]);
@@ -358,8 +360,8 @@ export class Mysql extends DataSource {
358
360
  targetName(property) {
359
361
  const type = property.type.type;
360
362
  return (isAnyType(type) && depends.storeOf(type))
361
- ? property.name + 'Id'
362
- : property.name;
363
+ ? property.name.toString() + 'Id'
364
+ : property.name.toString();
363
365
  }
364
366
  async update(object) {
365
367
  const connection = this.connection ?? await this.connect();
package/package.json CHANGED
@@ -61,5 +61,5 @@
61
61
  "build:esm": "tsc -p tsconfig.esm.json"
62
62
  },
63
63
  "types": "./esm/mysql.d.ts",
64
- "version": "0.1.8"
64
+ "version": "0.2.1"
65
65
  }