@furystack/sequelize-store 1.0.15 → 1.0.16

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.
@@ -5,14 +5,10 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
5
5
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
6
  return c > 3 && r && Object.defineProperty(target, key, r), r;
7
7
  };
8
- var __importDefault = (this && this.__importDefault) || function (mod) {
9
- return (mod && mod.__esModule) ? mod : { "default": mod };
10
- };
11
8
  Object.defineProperty(exports, "__esModule", { value: true });
12
9
  exports.SequelizeClientFactory = void 0;
13
10
  const inject_1 = require("@furystack/inject");
14
11
  const sequelize_1 = require("sequelize");
15
- const semaphore_async_await_1 = __importDefault(require("semaphore-async-await"));
16
12
  const operatorsAliases = {
17
13
  $eq: sequelize_1.Op.eq,
18
14
  $ne: sequelize_1.Op.ne,
@@ -59,38 +55,20 @@ const operatorsAliases = {
59
55
  let SequelizeClientFactory = class SequelizeClientFactory {
60
56
  constructor() {
61
57
  this.connections = new Map();
62
- this.connectionLock = new semaphore_async_await_1.default(1);
63
58
  }
64
59
  async dispose() {
65
- try {
66
- await this.connectionLock.acquire();
67
- await Promise.all([...this.connections.values()].map((c) => c.close()));
68
- this.connections.clear();
69
- }
70
- finally {
71
- this.connectionLock.release();
72
- }
60
+ await Promise.all([...this.connections.values()].map((c) => c.close()));
61
+ this.connections.clear();
73
62
  }
74
- async getSequelizeClient(options) {
63
+ getSequelizeClient(options) {
75
64
  const key = JSON.stringify(options);
76
65
  const existing = this.connections.get(key);
77
66
  if (existing) {
78
67
  return existing;
79
68
  }
80
- try {
81
- await this.connectionLock.acquire();
82
- const existingCreated = this.connections.get(key);
83
- if (existingCreated) {
84
- return existingCreated;
85
- }
86
- // const client = await connect(url, options)
87
- const client = new sequelize_1.Sequelize({ ...options, operatorsAliases });
88
- this.connections.set(key, client);
89
- return client;
90
- }
91
- finally {
92
- this.connectionLock.release();
93
- }
69
+ const client = new sequelize_1.Sequelize({ ...options, operatorsAliases });
70
+ this.connections.set(key, client);
71
+ return client;
94
72
  }
95
73
  };
96
74
  SequelizeClientFactory = __decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"sequelize-client-factory.js","sourceRoot":"","sources":["../src/sequelize-client-factory.ts"],"names":[],"mappings":";;;;;;;;;;;;AACA,8CAA8C;AAC9C,yCAAkD;AAClD,kFAA6C;AAE7C,MAAM,gBAAgB,GAAG;IACvB,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,IAAI,EAAE,cAAE,CAAC,GAAG;IACZ,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,IAAI,EAAE,cAAE,CAAC,GAAG;IACZ,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,IAAI,EAAE,cAAE,CAAC,GAAG;IACZ,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,IAAI,EAAE,cAAE,CAAC,KAAK;IACd,MAAM,EAAE,cAAE,CAAC,KAAK;IAChB,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,KAAK,EAAE,cAAE,CAAC,IAAI;IACd,QAAQ,EAAE,cAAE,CAAC,OAAO;IACpB,MAAM,EAAE,cAAE,CAAC,KAAK;IAChB,SAAS,EAAE,cAAE,CAAC,QAAQ;IACtB,MAAM,EAAE,cAAE,CAAC,MAAM;IACjB,OAAO,EAAE,cAAE,CAAC,MAAM;IAClB,UAAU,EAAE,cAAE,CAAC,SAAS;IACxB,QAAQ,EAAE,cAAE,CAAC,OAAO;IACpB,WAAW,EAAE,cAAE,CAAC,UAAU;IAC1B,WAAW,EAAE,cAAE,CAAC,UAAU;IAC1B,SAAS,EAAE,cAAE,CAAC,QAAQ;IACtB,QAAQ,EAAE,cAAE,CAAC,OAAO;IACpB,WAAW,EAAE,cAAE,CAAC,UAAU;IAC1B,QAAQ,EAAE,cAAE,CAAC,OAAO;IACpB,SAAS,EAAE,cAAE,CAAC,QAAQ;IACtB,UAAU,EAAE,cAAE,CAAC,SAAS;IACxB,SAAS,EAAE,cAAE,CAAC,QAAQ;IACtB,WAAW,EAAE,cAAE,CAAC,UAAU;IAC1B,YAAY,EAAE,cAAE,CAAC,WAAW;IAC5B,cAAc,EAAE,cAAE,CAAC,aAAa;IAChC,aAAa,EAAE,cAAE,CAAC,YAAY;IAC9B,IAAI,EAAE,cAAE,CAAC,GAAG;IACZ,GAAG,EAAE,cAAE,CAAC,EAAE;IACV,IAAI,EAAE,cAAE,CAAC,GAAG;IACZ,IAAI,EAAE,cAAE,CAAC,GAAG;IACZ,OAAO,EAAE,cAAE,CAAC,MAAM;IAClB,IAAI,EAAE,cAAE,CAAC,GAAG;CACb,CAAA;AAED;;GAEG;AAEI,IAAM,sBAAsB,GAA5B,MAAM,sBAAsB;IAA5B;QACG,gBAAW,GAA2B,IAAI,GAAG,EAAE,CAAA;QAEtC,mBAAc,GAAG,IAAI,+BAAS,CAAC,CAAC,CAAC,CAAA;IAiCpD,CAAC;IA/BQ,KAAK,CAAC,OAAO;QAClB,IAAI;YACF,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;YACnC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACvE,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAA;SACzB;gBAAS;YACR,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;SAC9B;IACH,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAAC,OAAgB;QAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAA;SAChB;QAED,IAAI;YACF,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;YACnC,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YACjD,IAAI,eAAe,EAAE;gBACnB,OAAO,eAAe,CAAA;aACvB;YACD,6CAA6C;YAC7C,MAAM,MAAM,GAAG,IAAI,qBAAS,CAAC,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAA;YAC9D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YACjC,OAAO,MAAM,CAAA;SACd;gBAAS;YACR,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAA;SAC9B;IACH,CAAC;CACF,CAAA;AApCY,sBAAsB;IADlC,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;GACzB,sBAAsB,CAoClC;AApCY,wDAAsB"}
1
+ {"version":3,"file":"sequelize-client-factory.js","sourceRoot":"","sources":["../src/sequelize-client-factory.ts"],"names":[],"mappings":"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"}
@@ -24,15 +24,12 @@ class SequelizeStore {
24
24
  return this.initializedModel;
25
25
  }
26
26
  try {
27
- const client = await this.options.getSequelizeClient();
27
+ const client = this.options.getSequelizeClient();
28
28
  if (this.options.initModel) {
29
29
  await this.options.initModel(client);
30
30
  await client.sync();
31
31
  }
32
32
  const model = client.model(this.options.model.name);
33
- if (!model) {
34
- throw Error(`'No initialized Sequelize model found for '${this.options.model.name}'`);
35
- }
36
33
  this.initializedModel = model;
37
34
  return model;
38
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"sequelize-store.js","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sequelize-store.js","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const core_1 = require("@furystack/core");
4
4
  const store_manager_helpers_1 = require("./store-manager-helpers");
5
5
  const sequelize_1 = require("sequelize");
6
+ const utils_1 = require("@furystack/utils");
7
+ const inject_1 = require("@furystack/inject");
8
+ const sequelize_client_factory_1 = require("./sequelize-client-factory");
6
9
  jest.mock('uuid', () => {
7
10
  return {
8
11
  v1: jest.fn(() => 'uuid'),
@@ -57,5 +60,96 @@ describe('Sequelize Store', () => {
57
60
  return store;
58
61
  },
59
62
  });
63
+ it('should return the cached sequelize client instance from the factory', async () => {
64
+ await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
65
+ const factory = i.getInstance(sequelize_client_factory_1.SequelizeClientFactory);
66
+ const settings = {
67
+ dialect: 'sqlite',
68
+ storage: ':memory:',
69
+ logging: false,
70
+ };
71
+ const client1 = factory.getSequelizeClient(settings);
72
+ const client2 = factory.getSequelizeClient(settings);
73
+ expect(client1).toBe(client2);
74
+ });
75
+ });
76
+ it('should return the cached model from the store class', async () => {
77
+ await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
78
+ (0, store_manager_helpers_1.useSequelize)({
79
+ injector: i,
80
+ model: TestSequelizeClass,
81
+ primaryKey: 'id',
82
+ options: {
83
+ dialect: 'sqlite',
84
+ storage: ':memory:',
85
+ logging: false,
86
+ },
87
+ initModel: async (sequelize) => {
88
+ await (0, utils_1.sleepAsync)(100);
89
+ TestSequelizeClass.init({
90
+ id: {
91
+ type: sequelize_1.DataTypes.INTEGER,
92
+ autoIncrement: true,
93
+ primaryKey: true,
94
+ },
95
+ stringValue1: {
96
+ type: sequelize_1.DataTypes.STRING,
97
+ },
98
+ stringValue2: {
99
+ type: sequelize_1.DataTypes.STRING,
100
+ },
101
+ numberValue1: {
102
+ type: sequelize_1.DataTypes.INTEGER,
103
+ },
104
+ numberValue2: {
105
+ type: sequelize_1.DataTypes.INTEGER,
106
+ },
107
+ booleanValue: {
108
+ type: sequelize_1.DataTypes.BOOLEAN,
109
+ },
110
+ dateValue: {
111
+ type: sequelize_1.DataTypes.DATE,
112
+ },
113
+ }, { sequelize, timestamps: false });
114
+ },
115
+ });
116
+ const store = i
117
+ .getInstance(core_1.StoreManager)
118
+ .getStoreFor(TestSequelizeClass, 'id');
119
+ const model1Promise = store.getModel();
120
+ const model2 = await store.getModel();
121
+ const model1 = await model1Promise;
122
+ expect(model2).toBe(model1);
123
+ const model3 = await store.getModel();
124
+ expect(model3).toBe(model1);
125
+ });
126
+ });
127
+ it('should throw if the sequelize model is not initialized', async () => {
128
+ await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
129
+ (0, store_manager_helpers_1.useSequelize)({
130
+ injector: i,
131
+ model: TestSequelizeClass,
132
+ primaryKey: 'id',
133
+ options: {
134
+ dialect: 'sqlite',
135
+ storage: ':memory:',
136
+ logging: false,
137
+ },
138
+ initModel: async () => {
139
+ // won't init the model here
140
+ },
141
+ });
142
+ const store = i
143
+ .getInstance(core_1.StoreManager)
144
+ .getStoreFor(TestSequelizeClass, 'id');
145
+ expect.assertions(1);
146
+ try {
147
+ await store.getModel();
148
+ }
149
+ catch (error) {
150
+ expect(error.message).toBe('TestSequelizeClass has not been defined'); // will be thrown by sequelize
151
+ }
152
+ });
153
+ });
60
154
  });
61
155
  //# sourceMappingURL=sequelize-store.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sequelize-store.spec.js","sourceRoot":"","sources":["../src/sequelize-store.spec.ts"],"names":[],"mappings":";;AAAA,0CAA0E;AAC1E,mEAAsD;AACtD,yCAA4C;AAE5C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE;IACrB,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QACzB,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;KAC1B,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,MAAM,kBAAmB,SAAQ,iBAAK;CAQrC;AAED,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAA,sBAAe,EAAC;QACd,QAAQ,EAAE,iBAAiB;QAC3B,cAAc,EAAE,IAAI;QACpB,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE;YACjB,IAAA,oCAAY,EAAC;gBACX,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,kBAAkB;gBACzB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE;oBACP,OAAO,EAAE,QAAQ;oBACjB,OAAO,EAAE,UAAU;oBACnB,OAAO,EAAE,KAAK;iBACf;gBACD,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;oBAC7B,kBAAkB,CAAC,IAAI,CACrB;wBACE,EAAE,EAAE;4BACF,IAAI,EAAE,qBAAS,CAAC,OAAO;4BACvB,aAAa,EAAE,IAAI;4BACnB,UAAU,EAAE,IAAI;yBACjB;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,qBAAS,CAAC,MAAM;yBACvB;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,qBAAS,CAAC,MAAM;yBACvB;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,qBAAS,CAAC,OAAO;yBACxB;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,qBAAS,CAAC,OAAO;yBACxB;wBACD,YAAY,EAAE;4BACZ,IAAI,EAAE,qBAAS,CAAC,OAAO;yBACxB;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,qBAAS,CAAC,IAAI;yBACrB;qBACF,EACD,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,CACjC,CAAA;gBACH,CAAC;aACF,CAAC,CAAA;YACF,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,CAAC,mBAAY,CAAC,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAAC,CAAA;YAC/E,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"sequelize-store.spec.js","sourceRoot":"","sources":["../src/sequelize-store.spec.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,7 @@ const useSequelize = function ({ injector, model, primaryKey, options, initModel
9
9
  const store = new sequelize_store_1.SequelizeStore({
10
10
  model,
11
11
  primaryKey,
12
- getSequelizeClient: async () => await clientFactory.getSequelizeClient(options),
12
+ getSequelizeClient: () => clientFactory.getSequelizeClient(options),
13
13
  initModel,
14
14
  });
15
15
  (0, core_1.addStore)(injector, store);
@@ -1 +1 @@
1
- {"version":3,"file":"store-manager-helpers.js","sourceRoot":"","sources":["../src/store-manager-helpers.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAG1C,yEAAmE;AACnE,uDAAkD;AAE3C,MAAM,YAAY,GAAG,UAA2B,EACrD,QAAQ,EACR,KAAK,EACL,UAAU,EACV,OAAO,EACP,SAAS,GAoBV;IACC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,iDAAsB,CAAC,CAAA;IAClE,MAAM,KAAK,GAAG,IAAI,gCAAc,CAAC;QAC/B,KAAK;QACL,UAAU;QACV,kBAAkB,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC;QAC/E,SAAS;KACV,CAAC,CAAA;IACF,IAAA,eAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC3B,CAAC,CAAA;AAlCY,QAAA,YAAY,gBAkCxB"}
1
+ {"version":3,"file":"store-manager-helpers.js","sourceRoot":"","sources":["../src/store-manager-helpers.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAG1C,yEAAmE;AACnE,uDAAkD;AAE3C,MAAM,YAAY,GAAG,UAA2B,EACrD,QAAQ,EACR,KAAK,EACL,UAAU,EACV,OAAO,EACP,SAAS,GAoBV;IACC,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,CAAC,iDAAsB,CAAC,CAAA;IAClE,MAAM,KAAK,GAAG,IAAI,gCAAc,CAAC;QAC/B,KAAK;QACL,UAAU;QACV,kBAAkB,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,CAAC;QACnE,SAAS;KACV,CAAC,CAAA;IACF,IAAA,eAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;AAC3B,CAAC,CAAA;AAlCY,QAAA,YAAY,gBAkCxB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/sequelize-store",
3
- "version": "1.0.15",
3
+ "version": "1.0.16",
4
4
  "description": "Sequelize-based Store implementation for FuryStack",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -27,17 +27,17 @@
27
27
  },
28
28
  "homepage": "https://github.com/furystack/furystack",
29
29
  "dependencies": {
30
- "@furystack/core": "^11.0.12",
31
- "@furystack/inject": "^7.0.4",
32
- "@furystack/logging": "^3.0.8",
33
- "@furystack/utils": "^3.0.8",
30
+ "@furystack/core": "^11.0.13",
31
+ "@furystack/inject": "^7.0.5",
32
+ "@furystack/logging": "^3.0.9",
33
+ "@furystack/utils": "^3.0.9",
34
34
  "semaphore-async-await": "^1.5.1",
35
- "sequelize": "^6.21.6"
35
+ "sequelize": "^6.23.1"
36
36
  },
37
37
  "devDependencies": {
38
- "@types/jest": "^29.0.0",
39
- "@types/node": "^18.7.16",
40
- "sqlite3": "5.0.11",
38
+ "@types/jest": "^29.0.3",
39
+ "@types/node": "^18.7.18",
40
+ "sqlite3": "5.1.1",
41
41
  "uuid": "^8.3.2"
42
42
  },
43
43
  "typings": "./types/index.d.ts"
@@ -1,7 +1,6 @@
1
1
  import { Disposable } from '@furystack/utils'
2
2
  import { Injectable } from '@furystack/inject'
3
3
  import { Sequelize, Options, Op } from 'sequelize'
4
- import Semaphore from 'semaphore-async-await'
5
4
 
6
5
  const operatorsAliases = {
7
6
  $eq: Op.eq,
@@ -51,37 +50,20 @@ const operatorsAliases = {
51
50
  export class SequelizeClientFactory implements Disposable {
52
51
  private connections: Map<string, Sequelize> = new Map()
53
52
 
54
- private readonly connectionLock = new Semaphore(1)
55
-
56
53
  public async dispose() {
57
- try {
58
- await this.connectionLock.acquire()
59
- await Promise.all([...this.connections.values()].map((c) => c.close()))
60
- this.connections.clear()
61
- } finally {
62
- this.connectionLock.release()
63
- }
54
+ await Promise.all([...this.connections.values()].map((c) => c.close()))
55
+ this.connections.clear()
64
56
  }
65
57
 
66
- public async getSequelizeClient(options: Options) {
58
+ public getSequelizeClient(options: Options) {
67
59
  const key = JSON.stringify(options)
68
60
  const existing = this.connections.get(key)
69
61
  if (existing) {
70
62
  return existing
71
63
  }
72
64
 
73
- try {
74
- await this.connectionLock.acquire()
75
- const existingCreated = this.connections.get(key)
76
- if (existingCreated) {
77
- return existingCreated
78
- }
79
- // const client = await connect(url, options)
80
- const client = new Sequelize({ ...options, operatorsAliases })
81
- this.connections.set(key, client)
82
- return client
83
- } finally {
84
- this.connectionLock.release()
85
- }
65
+ const client = new Sequelize({ ...options, operatorsAliases })
66
+ this.connections.set(key, client)
67
+ return client
86
68
  }
87
69
  }
@@ -1,6 +1,10 @@
1
1
  import { StoreManager, TestClass, createStoreTest } from '@furystack/core'
2
2
  import { useSequelize } from './store-manager-helpers'
3
3
  import { DataTypes, Model } from 'sequelize'
4
+ import { sleepAsync, usingAsync } from '@furystack/utils'
5
+ import { Injector } from '@furystack/inject'
6
+ import { SequelizeClientFactory } from './sequelize-client-factory'
7
+ import { SequelizeStore } from './sequelize-store'
4
8
 
5
9
  jest.mock('uuid', () => {
6
10
  return {
@@ -68,4 +72,104 @@ describe('Sequelize Store', () => {
68
72
  return store
69
73
  },
70
74
  })
75
+
76
+ it('should return the cached sequelize client instance from the factory', async () => {
77
+ await usingAsync(new Injector(), async (i) => {
78
+ const factory = i.getInstance(SequelizeClientFactory)
79
+ const settings = {
80
+ dialect: 'sqlite',
81
+ storage: ':memory:',
82
+ logging: false,
83
+ } as const
84
+ const client1 = factory.getSequelizeClient(settings)
85
+ const client2 = factory.getSequelizeClient(settings)
86
+ expect(client1).toBe(client2)
87
+ })
88
+ })
89
+
90
+ it('should return the cached model from the store class', async () => {
91
+ await usingAsync(new Injector(), async (i) => {
92
+ useSequelize({
93
+ injector: i,
94
+ model: TestSequelizeClass,
95
+ primaryKey: 'id',
96
+ options: {
97
+ dialect: 'sqlite',
98
+ storage: ':memory:',
99
+ logging: false,
100
+ },
101
+ initModel: async (sequelize) => {
102
+ await sleepAsync(100)
103
+ TestSequelizeClass.init(
104
+ {
105
+ id: {
106
+ type: DataTypes.INTEGER,
107
+ autoIncrement: true,
108
+ primaryKey: true,
109
+ },
110
+ stringValue1: {
111
+ type: DataTypes.STRING,
112
+ },
113
+ stringValue2: {
114
+ type: DataTypes.STRING,
115
+ },
116
+ numberValue1: {
117
+ type: DataTypes.INTEGER,
118
+ },
119
+ numberValue2: {
120
+ type: DataTypes.INTEGER,
121
+ },
122
+ booleanValue: {
123
+ type: DataTypes.BOOLEAN,
124
+ },
125
+ dateValue: {
126
+ type: DataTypes.DATE,
127
+ },
128
+ },
129
+ { sequelize, timestamps: false },
130
+ )
131
+ },
132
+ })
133
+ const store: SequelizeStore<TestSequelizeClass, 'id'> = i
134
+ .getInstance(StoreManager)
135
+ .getStoreFor(TestSequelizeClass, 'id')
136
+
137
+ const model1Promise = store.getModel()
138
+ const model2 = await store.getModel()
139
+
140
+ const model1 = await model1Promise
141
+
142
+ expect(model2).toBe(model1)
143
+ const model3 = await store.getModel()
144
+ expect(model3).toBe(model1)
145
+ })
146
+ })
147
+
148
+ it('should throw if the sequelize model is not initialized', async () => {
149
+ await usingAsync(new Injector(), async (i) => {
150
+ useSequelize({
151
+ injector: i,
152
+ model: TestSequelizeClass,
153
+ primaryKey: 'id',
154
+ options: {
155
+ dialect: 'sqlite',
156
+ storage: ':memory:',
157
+ logging: false,
158
+ },
159
+ initModel: async () => {
160
+ // won't init the model here
161
+ },
162
+ })
163
+ const store: SequelizeStore<TestSequelizeClass, 'id'> = i
164
+ .getInstance(StoreManager)
165
+ .getStoreFor(TestSequelizeClass, 'id')
166
+
167
+ expect.assertions(1)
168
+ try {
169
+ await store.getModel()
170
+ } catch (error) {
171
+ expect((error as Error).message).toBe('TestSequelizeClass has not been defined') // will be thrown by sequelize
172
+ }
173
+ })
174
+ })
71
175
  })
@@ -15,7 +15,7 @@ export interface SequelizeStoreSettings<T extends Model, TPrimaryKey extends key
15
15
  /**
16
16
  * Callback that returns the Sequelize client (provided by the client factory)
17
17
  */
18
- getSequelizeClient: () => Promise<Sequelize>
18
+ getSequelizeClient: () => Sequelize
19
19
  /**
20
20
  * Optional calback that will initialize the Model for the Sequelize instance
21
21
  */
@@ -43,18 +43,14 @@ export class SequelizeStore<T extends Model, TPrimaryKey extends keyof T> implem
43
43
  return this.initializedModel
44
44
  }
45
45
  try {
46
- const client = await this.options.getSequelizeClient()
46
+ const client = this.options.getSequelizeClient()
47
47
 
48
48
  if (this.options.initModel) {
49
49
  await this.options.initModel(client)
50
50
  await client.sync()
51
51
  }
52
52
 
53
- const model = client.model(this.options.model.name) as ModelStatic<T> | undefined
54
-
55
- if (!model) {
56
- throw Error(`'No initialized Sequelize model found for '${this.options.model.name}'`)
57
- }
53
+ const model = client.model(this.options.model.name) as ModelStatic<T>
58
54
 
59
55
  this.initializedModel = model
60
56
  return model
@@ -34,7 +34,7 @@ export const useSequelize = function <T extends Model>({
34
34
  const store = new SequelizeStore({
35
35
  model,
36
36
  primaryKey,
37
- getSequelizeClient: async () => await clientFactory.getSequelizeClient(options),
37
+ getSequelizeClient: () => clientFactory.getSequelizeClient(options),
38
38
  initModel,
39
39
  })
40
40
  addStore(injector, store)
@@ -5,8 +5,7 @@ import { Sequelize, Options } from 'sequelize';
5
5
  */
6
6
  export declare class SequelizeClientFactory implements Disposable {
7
7
  private connections;
8
- private readonly connectionLock;
9
8
  dispose(): Promise<void>;
10
- getSequelizeClient(options: Options): Promise<Sequelize>;
9
+ getSequelizeClient(options: Options): Sequelize;
11
10
  }
12
11
  //# sourceMappingURL=sequelize-client-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sequelize-client-factory.d.ts","sourceRoot":"","sources":["../src/sequelize-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAM,MAAM,WAAW,CAAA;AA4ClD;;GAEG;AACH,qBACa,sBAAuB,YAAW,UAAU;IACvD,OAAO,CAAC,WAAW,CAAoC;IAEvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAmB;IAErC,OAAO;IAUP,kBAAkB,CAAC,OAAO,EAAE,OAAO;CAqBjD"}
1
+ {"version":3,"file":"sequelize-client-factory.d.ts","sourceRoot":"","sources":["../src/sequelize-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAM,MAAM,WAAW,CAAA;AA2ClD;;GAEG;AACH,qBACa,sBAAuB,YAAW,UAAU;IACvD,OAAO,CAAC,WAAW,CAAoC;IAE1C,OAAO;IAKb,kBAAkB,CAAC,OAAO,EAAE,OAAO;CAW3C"}
@@ -13,7 +13,7 @@ export interface SequelizeStoreSettings<T extends Model, TPrimaryKey extends key
13
13
  /**
14
14
  * Callback that returns the Sequelize client (provided by the client factory)
15
15
  */
16
- getSequelizeClient: () => Promise<Sequelize>;
16
+ getSequelizeClient: () => Sequelize;
17
17
  /**
18
18
  * Optional calback that will initialize the Model for the Sequelize instance
19
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"sequelize-store.d.ts","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACrH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAA4B,MAAM,WAAW,CAAA;AAGnF,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,CAAC;IAClF;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IACxC;;OAEG;IACH,UAAU,EAAE,WAAW,CAAA;IACvB;;OAEG;IACH,kBAAkB,EAAE,MAAM,OAAO,CAAC,SAAS,CAAC,CAAA;IAC5C;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD;AAED;;GAEG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;IAsCpG,OAAO,CAAC,QAAQ,CAAC,OAAO;IArCpC,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,SAAgB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IAExD,OAAO,CAAC,QAAQ,CAAmB;IAEnC,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IAE5B,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBA6BnB,OAAO,EAAE,sBAAsB,CAAC,CAAC,EAAE,WAAW,CAAC;IAI/D,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAOhF,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC9C,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAsB/B,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIzE,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,OAAO;CAGrB"}
1
+ {"version":3,"file":"sequelize-store.d.ts","sourceRoot":"","sources":["../src/sequelize-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACrH,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAA4B,MAAM,WAAW,CAAA;AAGnF,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,CAAC;IAClF;;OAEG;IACH,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IACxC;;OAEG;IACH,UAAU,EAAE,WAAW,CAAA;IACvB;;OAEG;IACH,kBAAkB,EAAE,MAAM,SAAS,CAAA;IACnC;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACpD;AAED;;GAEG;AACH,qBAAa,cAAc,CAAC,CAAC,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,CAAC,CAAE,YAAW,aAAa,CAAC,CAAC,EAAE,WAAW,CAAC;IAkCpG,OAAO,CAAC,QAAQ,CAAC,OAAO;IAjCpC,SAAgB,UAAU,EAAE,WAAW,CAAA;IAEvC,SAAgB,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;IAExD,OAAO,CAAC,QAAQ,CAAmB;IAEnC,OAAO,CAAC,gBAAgB,CAAC,CAAgB;IAE5B,QAAQ,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAyBnB,OAAO,EAAE,sBAAsB,CAAC,CAAC,EAAE,WAAW,CAAC;IAI/D,GAAG,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAOhF,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ3D,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9C,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,EAC9C,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAsB/B,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIzE,MAAM,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrD,OAAO;CAGrB"}