mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 06:10:31 +00:00
fix: Database connection lost error
This commit is contained in:
@@ -69,9 +69,8 @@
|
|||||||
"is-my-json-valid": "^2.20.5",
|
"is-my-json-valid": "^2.20.5",
|
||||||
"js-money": "^0.6.3",
|
"js-money": "^0.6.3",
|
||||||
"jsonwebtoken": "^8.5.1",
|
"jsonwebtoken": "^8.5.1",
|
||||||
"knex": "^0.95.15",
|
"knex": "^3.1.0",
|
||||||
"knex-cleaner": "^1.3.0",
|
"knex-cleaner": "^1.3.0",
|
||||||
"knex-db-manager": "^0.6.1",
|
|
||||||
"libphonenumber-js": "^1.9.6",
|
"libphonenumber-js": "^1.9.6",
|
||||||
"lodash": "^4.17.15",
|
"lodash": "^4.17.15",
|
||||||
"lru-cache": "^6.0.0",
|
"lru-cache": "^6.0.0",
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ module.exports = {
|
|||||||
*/
|
*/
|
||||||
tenant: {
|
tenant: {
|
||||||
db_client: process.env.TENANT_DB_CLIENT || process.env.DB_CLIENT || 'mysql',
|
db_client: process.env.TENANT_DB_CLIENT || process.env.DB_CLIENT || 'mysql',
|
||||||
db_name_prefix: process.env.TENANT_DB_NAME_PERFIX,
|
db_name_prefix: process.env.TENANT_DB_NAME_PERFIX || 'bigcapital_tenant_',
|
||||||
db_host: process.env.TENANT_DB_HOST || process.env.DB_HOST,
|
db_host: process.env.TENANT_DB_HOST || process.env.DB_HOST,
|
||||||
db_user: process.env.TENANT_DB_USER || process.env.DB_USER,
|
db_user: process.env.TENANT_DB_USER || process.env.DB_USER,
|
||||||
db_password: process.env.TENANT_DB_PASSWORD || process.env.DB_PASSWORD,
|
db_password: process.env.TENANT_DB_PASSWORD || process.env.DB_PASSWORD,
|
||||||
|
|||||||
@@ -51,5 +51,4 @@ export interface ISystemService {
|
|||||||
cache();
|
cache();
|
||||||
repositories();
|
repositories();
|
||||||
knex();
|
knex();
|
||||||
dbManager();
|
|
||||||
}
|
}
|
||||||
@@ -21,7 +21,7 @@ export default class ComputeItemCostJob {
|
|||||||
|
|
||||||
agenda.define(
|
agenda.define(
|
||||||
'compute-item-cost',
|
'compute-item-cost',
|
||||||
{ priority: 'high', concurrency: 1 },
|
{ priority: 'high', concurrency: 20 },
|
||||||
this.handler.bind(this)
|
this.handler.bind(this)
|
||||||
);
|
);
|
||||||
this.agenda.on('start:compute-item-cost', this.onJobStart.bind(this));
|
this.agenda.on('start:compute-item-cost', this.onJobStart.bind(this));
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export default class OrganizationSetupJob {
|
|||||||
constructor(agenda) {
|
constructor(agenda) {
|
||||||
agenda.define(
|
agenda.define(
|
||||||
'organization-setup',
|
'organization-setup',
|
||||||
{ priority: 'high', concurrency: 1 },
|
{ priority: 'high', concurrency: 20 },
|
||||||
this.handler
|
this.handler
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ export default class WriteInvoicesJournalEntries {
|
|||||||
|
|
||||||
agenda.define(
|
agenda.define(
|
||||||
eventName,
|
eventName,
|
||||||
{ priority: 'normal', concurrency: 1 },
|
{ priority: 'normal', concurrency: 20 },
|
||||||
this.handler.bind(this)
|
this.handler.bind(this)
|
||||||
);
|
);
|
||||||
agenda.on(`complete:${eventName}`, this.onJobCompleted.bind(this));
|
agenda.on(`complete:${eventName}`, this.onJobCompleted.bind(this));
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
import knexManager from 'knex-db-manager';
|
|
||||||
import { systemKnexConfig, systemDbManager } from 'config/knexConfig';
|
|
||||||
|
|
||||||
export default () => knexManager.databaseManagerFactory({
|
|
||||||
knex: systemKnexConfig,
|
|
||||||
dbManager: systemDbManager,
|
|
||||||
});
|
|
||||||
@@ -3,7 +3,6 @@ import LoggerInstance from '@/loaders/logger';
|
|||||||
import agendaFactory from '@/loaders/agenda';
|
import agendaFactory from '@/loaders/agenda';
|
||||||
import SmsClientLoader from '@/loaders/smsClient';
|
import SmsClientLoader from '@/loaders/smsClient';
|
||||||
import mailInstance from '@/loaders/mail';
|
import mailInstance from '@/loaders/mail';
|
||||||
import dbManagerFactory from '@/loaders/dbManager';
|
|
||||||
import i18n from '@/loaders/i18n';
|
import i18n from '@/loaders/i18n';
|
||||||
import repositoriesLoader from '@/loaders/systemRepositories';
|
import repositoriesLoader from '@/loaders/systemRepositories';
|
||||||
import Cache from '@/services/Cache';
|
import Cache from '@/services/Cache';
|
||||||
@@ -16,7 +15,6 @@ export default ({ mongoConnection, knex }) => {
|
|||||||
try {
|
try {
|
||||||
const agendaInstance = agendaFactory({ mongoConnection });
|
const agendaInstance = agendaFactory({ mongoConnection });
|
||||||
const smsClientInstance = SmsClientLoader(config.easySMSGateway.api_key);
|
const smsClientInstance = SmsClientLoader(config.easySMSGateway.api_key);
|
||||||
const dbManager = dbManagerFactory(knex);
|
|
||||||
const cacheInstance = new Cache();
|
const cacheInstance = new Cache();
|
||||||
|
|
||||||
Container.set('logger', LoggerInstance);
|
Container.set('logger', LoggerInstance);
|
||||||
@@ -24,7 +22,6 @@ export default ({ mongoConnection, knex }) => {
|
|||||||
Container.set('SMSClient', smsClientInstance);
|
Container.set('SMSClient', smsClientInstance);
|
||||||
Container.set('mail', mailInstance);
|
Container.set('mail', mailInstance);
|
||||||
|
|
||||||
Container.set('dbManager', dbManager);
|
|
||||||
LoggerInstance.info(
|
LoggerInstance.info(
|
||||||
'[DI] Database manager has been injected into container.'
|
'[DI] Database manager has been injected into container.'
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -18,8 +18,4 @@ export default class HasSystemService implements SystemService {
|
|||||||
cache() {
|
cache() {
|
||||||
return this.container('cache');
|
return this.container('cache');
|
||||||
}
|
}
|
||||||
|
|
||||||
dbManager() {
|
|
||||||
return this.container('dbManager');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,16 @@
|
|||||||
import { Container } from 'typedi';
|
import { Container } from 'typedi';
|
||||||
import Knex from 'knex';
|
import { Knex, knex } from 'knex';
|
||||||
import { knexSnakeCaseMappers } from 'objection';
|
import { knexSnakeCaseMappers } from 'objection';
|
||||||
import { tenantKnexConfig, tenantSeedConfig } from '@/config/knexConfig';
|
import { tenantKnexConfig, tenantSeedConfig } from '@/config/knexConfig';
|
||||||
import config from '@/config';
|
import config from '@/config';
|
||||||
import { ITenant, ITenantDBManager } from '@/interfaces';
|
import { ITenant, ITenantDBManager } from '@/interfaces';
|
||||||
import SystemService from '@/services/Tenancy/SystemService';
|
import SystemService from '@/services/Tenancy/SystemService';
|
||||||
import { TenantDBAlreadyExists } from '@/exceptions';
|
import { TenantDBAlreadyExists } from '@/exceptions';
|
||||||
|
import { sanitizeDatabaseName } from '@/utils/sanitizers';
|
||||||
|
|
||||||
export default class TenantDBManager implements ITenantDBManager {
|
export default class TenantDBManager implements ITenantDBManager {
|
||||||
static knexCache: { [key: string]: Knex } = {};
|
static knexCache: { [key: string]: Knex } = {};
|
||||||
|
|
||||||
// System database manager.
|
|
||||||
dbManager: any;
|
|
||||||
|
|
||||||
// System knex instance.
|
// System knex instance.
|
||||||
sysKnex: Knex;
|
sysKnex: Knex;
|
||||||
|
|
||||||
@@ -23,7 +21,6 @@ export default class TenantDBManager implements ITenantDBManager {
|
|||||||
constructor() {
|
constructor() {
|
||||||
const systemService = Container.get(SystemService);
|
const systemService = Container.get(SystemService);
|
||||||
|
|
||||||
this.dbManager = systemService.dbManager();
|
|
||||||
this.sysKnex = systemService.knex();
|
this.sysKnex = systemService.knex();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -32,7 +29,9 @@ export default class TenantDBManager implements ITenantDBManager {
|
|||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
private getDatabaseName(tenant: ITenant) {
|
private getDatabaseName(tenant: ITenant) {
|
||||||
return `${config.tenant.db_name_prefix}${tenant.organizationId}`;
|
return sanitizeDatabaseName(
|
||||||
|
`${config.tenant.db_name_prefix}${tenant.organizationId}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -59,7 +58,9 @@ export default class TenantDBManager implements ITenantDBManager {
|
|||||||
await this.throwErrorIfTenantDBExists(tenant);
|
await this.throwErrorIfTenantDBExists(tenant);
|
||||||
|
|
||||||
const databaseName = this.getDatabaseName(tenant);
|
const databaseName = this.getDatabaseName(tenant);
|
||||||
await this.dbManager.createDb(databaseName);
|
await this.sysKnex.raw(
|
||||||
|
`CREATE DATABASE ${databaseName} DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -72,7 +73,6 @@ export default class TenantDBManager implements ITenantDBManager {
|
|||||||
if (!isExists) {
|
if (!isExists) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.dropDatabase(tenant);
|
await this.dropDatabase(tenant);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +83,7 @@ export default class TenantDBManager implements ITenantDBManager {
|
|||||||
public async dropDatabase(tenant: ITenant) {
|
public async dropDatabase(tenant: ITenant) {
|
||||||
const databaseName = this.getDatabaseName(tenant);
|
const databaseName = this.getDatabaseName(tenant);
|
||||||
|
|
||||||
await this.dbManager.dropDb(databaseName);
|
await this.sysKnex.raw(`DROP DATABASE IF EXISTS ${databaseName}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -118,7 +118,7 @@ export default class TenantDBManager implements ITenantDBManager {
|
|||||||
let knexInstance = TenantDBManager.knexCache[key];
|
let knexInstance = TenantDBManager.knexCache[key];
|
||||||
|
|
||||||
if (!knexInstance) {
|
if (!knexInstance) {
|
||||||
knexInstance = Knex({
|
knexInstance = knex({
|
||||||
...tenantKnexConfig(tenant),
|
...tenantKnexConfig(tenant),
|
||||||
...knexSnakeCaseMappers({ upperCase: true }),
|
...knexSnakeCaseMappers({ upperCase: true }),
|
||||||
});
|
});
|
||||||
|
|||||||
4
packages/server/src/utils/sanitizers.ts
Normal file
4
packages/server/src/utils/sanitizers.ts
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
export function sanitizeDatabaseName(dbName: string) {
|
||||||
|
// Replace any character that is not alphanumeric or an underscore with an underscore
|
||||||
|
return dbName.replace(/[^a-zA-Z0-9_]/g, '');
|
||||||
|
}
|
||||||
101
pnpm-lock.yaml
generated
101
pnpm-lock.yaml
generated
@@ -183,14 +183,11 @@ importers:
|
|||||||
specifier: ^8.5.1
|
specifier: ^8.5.1
|
||||||
version: 8.5.1
|
version: 8.5.1
|
||||||
knex:
|
knex:
|
||||||
specifier: ^0.95.15
|
specifier: ^3.1.0
|
||||||
version: 0.95.15(mysql2@1.7.0)(mysql@2.18.1)
|
version: 3.1.0(mysql2@1.7.0)(mysql@2.18.1)
|
||||||
knex-cleaner:
|
knex-cleaner:
|
||||||
specifier: ^1.3.0
|
specifier: ^1.3.0
|
||||||
version: 1.3.1
|
version: 1.3.1
|
||||||
knex-db-manager:
|
|
||||||
specifier: ^0.6.1
|
|
||||||
version: 0.6.2(knex@0.95.15)
|
|
||||||
libphonenumber-js:
|
libphonenumber-js:
|
||||||
specifier: ^1.9.6
|
specifier: ^1.9.6
|
||||||
version: 1.11.1
|
version: 1.11.1
|
||||||
@@ -256,7 +253,7 @@ importers:
|
|||||||
version: 2.2.0
|
version: 2.2.0
|
||||||
objection:
|
objection:
|
||||||
specifier: ^3.0.0
|
specifier: ^3.0.0
|
||||||
version: 3.1.4(knex@0.95.15)
|
version: 3.1.4(knex@3.1.0)
|
||||||
objection-filter:
|
objection-filter:
|
||||||
specifier: ^4.0.1
|
specifier: ^4.0.1
|
||||||
version: 4.4.0(objection@3.1.4)
|
version: 4.4.0(objection@3.1.4)
|
||||||
@@ -9507,6 +9504,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==}
|
resolution: {integrity: sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/colorette@2.0.19:
|
||||||
|
resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/colorette@2.0.20:
|
/colorette@2.0.20:
|
||||||
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
|
||||||
|
|
||||||
@@ -9531,6 +9532,11 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
delayed-stream: 1.0.0
|
delayed-stream: 1.0.0
|
||||||
|
|
||||||
|
/commander@10.0.1:
|
||||||
|
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/commander@2.15.1:
|
/commander@2.15.1:
|
||||||
resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==}
|
resolution: {integrity: sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==}
|
||||||
dev: true
|
dev: true
|
||||||
@@ -13154,7 +13160,6 @@ packages:
|
|||||||
|
|
||||||
/getopts@2.3.0:
|
/getopts@2.3.0:
|
||||||
resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==}
|
resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==}
|
||||||
dev: true
|
|
||||||
|
|
||||||
/getpass@0.1.7:
|
/getpass@0.1.7:
|
||||||
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
|
resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==}
|
||||||
@@ -16477,19 +16482,6 @@ packages:
|
|||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/knex-db-manager@0.6.2(knex@0.95.15):
|
|
||||||
resolution: {integrity: sha512-IQ7kmjzT1/V129QasorbVAksY5QOYhtf1i9ExTaOrMa2k8aiViv/IR4n33aBXRK2JwLeHNZMVOJOvM2iP2BYQg==}
|
|
||||||
engines: {node: '>=8.0.0'}
|
|
||||||
deprecated: 'Tests for #88 are failing'
|
|
||||||
peerDependencies:
|
|
||||||
knex: 0.x
|
|
||||||
dependencies:
|
|
||||||
bluebird: 3.7.2
|
|
||||||
glob: 7.2.3
|
|
||||||
knex: 0.95.15(mysql2@1.7.0)(mysql@2.18.1)
|
|
||||||
lodash: 4.17.21
|
|
||||||
dev: false
|
|
||||||
|
|
||||||
/knex-factory@0.0.6:
|
/knex-factory@0.0.6:
|
||||||
resolution: {integrity: sha512-K8VAu9E1IZzmJ1XEuH1sGm9SP4vqQgRsE4yRfs7bSMVuVyI8yqbiv3I1J+HvtA//c6yp6EYikSpvtKfR0mi/Og==}
|
resolution: {integrity: sha512-K8VAu9E1IZzmJ1XEuH1sGm9SP4vqQgRsE4yRfs7bSMVuVyI8yqbiv3I1J+HvtA//c6yp6EYikSpvtKfR0mi/Og==}
|
||||||
dependencies:
|
dependencies:
|
||||||
@@ -16540,6 +16532,54 @@ packages:
|
|||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/knex@3.1.0(mysql2@1.7.0)(mysql@2.18.1):
|
||||||
|
resolution: {integrity: sha512-GLoII6hR0c4ti243gMs5/1Rb3B+AjwMOfjYm97pu0FOQa7JH56hgBxYf5WK2525ceSbBY1cjeZ9yk99GPMB6Kw==}
|
||||||
|
engines: {node: '>=16'}
|
||||||
|
hasBin: true
|
||||||
|
peerDependencies:
|
||||||
|
better-sqlite3: '*'
|
||||||
|
mysql: '*'
|
||||||
|
mysql2: '*'
|
||||||
|
pg: '*'
|
||||||
|
pg-native: '*'
|
||||||
|
sqlite3: '*'
|
||||||
|
tedious: '*'
|
||||||
|
peerDependenciesMeta:
|
||||||
|
better-sqlite3:
|
||||||
|
optional: true
|
||||||
|
mysql:
|
||||||
|
optional: true
|
||||||
|
mysql2:
|
||||||
|
optional: true
|
||||||
|
pg:
|
||||||
|
optional: true
|
||||||
|
pg-native:
|
||||||
|
optional: true
|
||||||
|
sqlite3:
|
||||||
|
optional: true
|
||||||
|
tedious:
|
||||||
|
optional: true
|
||||||
|
dependencies:
|
||||||
|
colorette: 2.0.19
|
||||||
|
commander: 10.0.1
|
||||||
|
debug: 4.3.4(supports-color@5.5.0)
|
||||||
|
escalade: 3.1.2
|
||||||
|
esm: 3.2.25
|
||||||
|
get-package-type: 0.1.0
|
||||||
|
getopts: 2.3.0
|
||||||
|
interpret: 2.2.0
|
||||||
|
lodash: 4.17.21
|
||||||
|
mysql: 2.18.1
|
||||||
|
mysql2: 1.7.0
|
||||||
|
pg-connection-string: 2.6.2
|
||||||
|
rechoir: 0.8.0
|
||||||
|
resolve-from: 5.0.0
|
||||||
|
tarn: 3.0.2
|
||||||
|
tildify: 2.0.0
|
||||||
|
transitivePeerDependencies:
|
||||||
|
- supports-color
|
||||||
|
dev: false
|
||||||
|
|
||||||
/kuler@2.0.0:
|
/kuler@2.0.0:
|
||||||
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
|
resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -18788,7 +18828,7 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.3.4(supports-color@5.5.0)
|
debug: 4.3.4(supports-color@5.5.0)
|
||||||
lodash: 4.17.21
|
lodash: 4.17.21
|
||||||
objection: 3.1.4(knex@0.95.15)
|
objection: 3.1.4(knex@3.1.0)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
dev: false
|
dev: false
|
||||||
@@ -18798,7 +18838,7 @@ packages:
|
|||||||
peerDependencies:
|
peerDependencies:
|
||||||
objection: '>= 0.8'
|
objection: '>= 0.8'
|
||||||
dependencies:
|
dependencies:
|
||||||
objection: 3.1.4(knex@0.95.15)
|
objection: 3.1.4(knex@3.1.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/objection-unique@1.2.2(objection@3.1.4):
|
/objection-unique@1.2.2(objection@3.1.4):
|
||||||
@@ -18810,10 +18850,10 @@ packages:
|
|||||||
lodash.castarray: 4.4.0
|
lodash.castarray: 4.4.0
|
||||||
lodash.compact: 3.0.1
|
lodash.compact: 3.0.1
|
||||||
lodash.isempty: 4.4.0
|
lodash.isempty: 4.4.0
|
||||||
objection: 3.1.4(knex@0.95.15)
|
objection: 3.1.4(knex@3.1.0)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/objection@3.1.4(knex@0.95.15):
|
/objection@3.1.4(knex@3.1.0):
|
||||||
resolution: {integrity: sha512-BI1YQ18JicfoODgCdKxmw4W8f24/e9hCEQpOTux0xmyd8hOidOzDd1WopOMxqxo7FA+Jfw8XTfZIUaqDnS7r0g==}
|
resolution: {integrity: sha512-BI1YQ18JicfoODgCdKxmw4W8f24/e9hCEQpOTux0xmyd8hOidOzDd1WopOMxqxo7FA+Jfw8XTfZIUaqDnS7r0g==}
|
||||||
engines: {node: '>=14.0.0'}
|
engines: {node: '>=14.0.0'}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@@ -18822,7 +18862,7 @@ packages:
|
|||||||
ajv: 8.13.0
|
ajv: 8.13.0
|
||||||
ajv-formats: 2.1.1(ajv@8.13.0)
|
ajv-formats: 2.1.1(ajv@8.13.0)
|
||||||
db-errors: 0.2.3
|
db-errors: 0.2.3
|
||||||
knex: 0.95.15(mysql2@1.7.0)(mysql@2.18.1)
|
knex: 3.1.0(mysql2@1.7.0)(mysql@2.18.1)
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
/oblivious-set@1.0.0:
|
/oblivious-set@1.0.0:
|
||||||
@@ -19438,6 +19478,10 @@ packages:
|
|||||||
resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
|
resolution: {integrity: sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==}
|
||||||
dev: false
|
dev: false
|
||||||
|
|
||||||
|
/pg-connection-string@2.6.2:
|
||||||
|
resolution: {integrity: sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==}
|
||||||
|
dev: false
|
||||||
|
|
||||||
/picocolors@0.2.1:
|
/picocolors@0.2.1:
|
||||||
resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
|
resolution: {integrity: sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==}
|
||||||
dev: false
|
dev: false
|
||||||
@@ -22065,6 +22109,13 @@ packages:
|
|||||||
dependencies:
|
dependencies:
|
||||||
resolve: 1.22.8
|
resolve: 1.22.8
|
||||||
|
|
||||||
|
/rechoir@0.8.0:
|
||||||
|
resolution: {integrity: sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==}
|
||||||
|
engines: {node: '>= 10.13.0'}
|
||||||
|
dependencies:
|
||||||
|
resolve: 1.22.8
|
||||||
|
dev: false
|
||||||
|
|
||||||
/recursive-readdir@2.2.2:
|
/recursive-readdir@2.2.2:
|
||||||
resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==}
|
resolution: {integrity: sha512-nRCcW9Sj7NuZwa2XvH9co8NPeXUBhZP7CRKJtU+cS6PW9FpCIFoI5ib0NT1ZrbNuPoRy0ylyCaUL8Gih4LSyFg==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|||||||
Reference in New Issue
Block a user