vona-module-a-version 5.0.28 → 5.0.30

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.js CHANGED
@@ -131,46 +131,68 @@ let ServiceDatabase = (_dec$7 = Service(), _dec2$7 = BeanInfo({
131
131
  get configDatabase() {
132
132
  return this.app.config.database;
133
133
  }
134
- get databasePrefix() {
135
- return `vona${__separator}test${__separator}${this.app.name}${__separator}`;
134
+ getDatabasePrefix(configInstanceBase) {
135
+ const instanceName = configInstanceBase?.isolate ? `isolate${__separator}${configInstanceBase.name}` : 'share';
136
+ return `vona${__separator}test${__separator}${this.app.name}${__separator}${instanceName}${__separator}`;
136
137
  }
137
138
  async databaseInitStartup() {
138
139
  // database
139
- await this.__database();
140
- // version start
141
- await this.scope.service.version.__start();
140
+ await this.__preparedatabases(true);
142
141
  }
143
142
  async databaseNameStartup() {
144
143
  // database
145
- await this.__database();
144
+ await this.__preparedatabases(false);
146
145
  }
147
- async __fetchDatabases(client) {
146
+ async __fetchDatabases(client, configInstanceBase) {
147
+ const databasePrefix = this.getDatabasePrefix(configInstanceBase);
148
148
  // dbs
149
- let dbs = await client.connection.schema.fetchDatabases(this.databasePrefix);
149
+ let dbs = await client.connection.schema.fetchDatabases(databasePrefix);
150
150
  // filter
151
151
  dbs = dbs.filter(db => {
152
- const _time = db.name.substring(this.databasePrefix.length);
152
+ const _time = db.name.substring(databasePrefix.length);
153
153
  return _time.length === __timeFormat.length;
154
154
  });
155
155
  // ok
156
156
  return dbs;
157
157
  }
158
- async __createDatabase(client) {
158
+ async __createDatabase(client, configInstanceBase) {
159
+ const databasePrefix = this.getDatabasePrefix(configInstanceBase);
159
160
  // create
160
- const databaseName = `${this.databasePrefix}${moment().format(__timeFormat)}`;
161
+ const databaseName = `${databasePrefix}${moment().format(__timeFormat)}`;
161
162
  await client.connection.schema.createDatabase(databaseName);
162
163
  return databaseName;
163
164
  }
164
- async __database() {
165
+ async __preparedatabases(versionStart) {
166
+ // default
167
+ await this.bean.database.switchDb(async () => {
168
+ await this.__preparedatabase(versionStart);
169
+ }, 'default');
170
+ // isolate
171
+ for (const configInstanceBase of this.app.config.instances) {
172
+ if (!configInstanceBase.isolate) continue;
173
+ if (!configInstanceBase.isolateClient) throw new Error(`should specify isolateClient for isolate instance: ${configInstanceBase.name}`);
174
+ await this.bean.database.switchDb(async () => {
175
+ await this.__preparedatabase(versionStart, configInstanceBase);
176
+ }, configInstanceBase.isolateClient);
177
+ }
178
+ }
179
+ async __preparedatabase(versionStart, configInstanceBase) {
180
+ await this.__preparedatabaseInner(configInstanceBase);
181
+ if (versionStart) {
182
+ await this.scope.service.version.__start();
183
+ }
184
+ }
185
+ async __preparedatabaseInner(configInstanceBase) {
165
186
  if (this.app.meta.isProd) {
166
187
  // donothing
167
188
  return;
168
189
  }
190
+ const databasePrefix = this.getDatabasePrefix(configInstanceBase);
169
191
  // client
170
192
  const client = this.bean.database.current.client;
171
193
  // get current database name
172
194
  let databaseName = client.getDatabaseName();
173
- const isTestDatabase = databaseName.indexOf(this.databasePrefix) === 0;
195
+ const isTestDatabase = databaseName.indexOf(databasePrefix) === 0;
174
196
  // dev/debug db
175
197
  if (this.app.meta.isDev) {
176
198
  // if enable testDatabase
@@ -180,14 +202,15 @@ let ServiceDatabase = (_dec$7 = Service(), _dec2$7 = BeanInfo({
180
202
  // donothing
181
203
  return;
182
204
  }
183
- const dbs = await this.__fetchDatabases(client);
205
+ const dbs = await this.__fetchDatabases(client, configInstanceBase);
184
206
  if (dbs.length === 0) {
185
- databaseName = await this.__createDatabase(client);
207
+ databaseName = await this.__createDatabase(client, configInstanceBase);
186
208
  } else {
187
209
  databaseName = dbs[0].name;
188
210
  }
189
211
  // set config and reload client
190
212
  await client.changeConfigAndReload(databaseName);
213
+ this.$logger.silly(chalk.cyan(`dialect: ${client.db.dialectName}`));
191
214
  this.$logger.silly(chalk.cyan(`database: ${databaseName}, pid: ${process.pid}`));
192
215
  }
193
216
  // test db
@@ -198,15 +221,16 @@ let ServiceDatabase = (_dec$7 = Service(), _dec2$7 = BeanInfo({
198
221
  return;
199
222
  }
200
223
  // drop old databases
201
- const dbs = await this.__fetchDatabases(client);
224
+ const dbs = await this.__fetchDatabases(client, configInstanceBase);
202
225
  for (const db of dbs) {
203
226
  await client.connection.schema.dropDatabase(db.name);
204
227
  }
205
228
  // create database
206
- const databaseName = await this.__createDatabase(client);
229
+ const databaseName = await this.__createDatabase(client, configInstanceBase);
207
230
  // set config and reload client
208
231
  await client.changeConfigAndReload(databaseName);
209
232
  // database ready
233
+ this.$logger.silly(chalk.cyan(`dialect: ${client.db.dialectName}`));
210
234
  this.$logger.silly(chalk.cyan(`database: ${databaseName}, pid: ${process.pid}`));
211
235
  }
212
236
  }
@@ -1,11 +1,14 @@
1
+ import type { ConfigInstanceBase } from 'vona-module-a-instance';
1
2
  import type { ServiceDatabaseClient } from 'vona-module-a-orm';
2
3
  import { BeanBase } from 'vona';
3
4
  export declare class ServiceDatabase extends BeanBase {
4
5
  get configDatabase(): import("vona-module-a-orm").ConfigDatabase;
5
- get databasePrefix(): string;
6
+ getDatabasePrefix(configInstanceBase?: ConfigInstanceBase): string;
6
7
  databaseInitStartup(): Promise<void>;
7
8
  databaseNameStartup(): Promise<void>;
8
- __fetchDatabases(client: ServiceDatabaseClient): Promise<import("vona-module-a-orm").IFetchDatabasesResultItem[]>;
9
- __createDatabase(client: ServiceDatabaseClient): Promise<string>;
10
- __database(): Promise<void>;
9
+ __fetchDatabases(client: ServiceDatabaseClient, configInstanceBase?: ConfigInstanceBase): Promise<import("vona-module-a-orm").IFetchDatabasesResultItem[]>;
10
+ __createDatabase(client: ServiceDatabaseClient, configInstanceBase?: ConfigInstanceBase): Promise<string>;
11
+ __preparedatabases(versionStart: boolean): Promise<void>;
12
+ __preparedatabase(versionStart: boolean, configInstanceBase?: ConfigInstanceBase): Promise<void>;
13
+ __preparedatabaseInner(configInstanceBase?: ConfigInstanceBase): Promise<void>;
11
14
  }
@@ -1,4 +1,5 @@
1
- import type { ConfigInstanceBase, IInstanceRecord } from 'vona';
1
+ import type { IInstanceRecord } from 'vona';
2
+ import type { ConfigInstanceBase } from 'vona-module-a-instance';
2
3
  import type { IInstanceStartupOptions } from 'vona-module-a-startup';
3
4
  import type { IMetaVersionOptions, IMetaVersionOptionsInner } from '../types/version.ts';
4
5
  import { BeanBase } from 'vona';
@@ -1,4 +1,5 @@
1
- import type { ConfigInstanceBase, IInstanceRecord } from 'vona';
1
+ import type { IInstanceRecord } from 'vona';
2
+ import type { ConfigInstanceBase } from 'vona-module-a-instance';
2
3
  export interface IMetaVersionOptions {
3
4
  scene: 'update' | 'init' | 'test';
4
5
  instanceName?: keyof IInstanceRecord;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vona-module-a-version",
3
3
  "type": "module",
4
- "version": "5.0.28",
4
+ "version": "5.0.30",
5
5
  "vonaModule": {
6
6
  "fileVersion": 1,
7
7
  "dependencies": {},