Browse Source

feat: allow specifying db config through JSON string or JSON file

Signed-off-by: Eladio Mora <8742215+ejose19@users.noreply.github.com>
pull/473/head
Eladio Mora 3 years ago
parent
commit
baf6db88ca
No known key found for this signature in database
GPG Key ID: 9BEDF7CC137762C
  1. 60
      packages/nocodb/src/__tests__/noco/NcConfigFactory.test.ts
  2. 18
      packages/nocodb/src/__tests__/noco/dbConfig.json
  3. 12
      packages/nocodb/src/lib/utils/NcConfigFactory.ts

60
packages/nocodb/src/__tests__/noco/NcConfigFactory.test.ts

@ -5,6 +5,24 @@ import {NcConfigFactory} from "../../lib";
describe('Config Factory Tests', () => {
const expectedObject = {
client: 'pg',
connection: {
host: 'localhost',
port: 5432,
user: 'postgres',
password: 'xgene',
database: 'abcde'
},
pool: {
min: 1,
max: 2
},
ssl: {
rejectUnauthorized: false
},
acquireConnectionTimeout: 600000
};
before(function (done) {
done();
@ -17,27 +35,35 @@ describe('Config Factory Tests', () => {
it('Generate config from string', function (done) {
const config = NcConfigFactory.metaUrlToDbConfig(`pg://localhost:5432?u=postgres&p=xgene&d=abcde`);
expect(config.client).to.be.eq('pg')
expect(config.connection).to.be.a('object')
expect(config.connection.user).to.be.eq('postgres')
expect(config.connection.port).to.be.eq(5432)
expect(config.connection.password).to.be.eq('xgene')
expect(config.connection.database).to.be.eq('abcde')
const { pool, ssl, ...rest } = expectedObject;
expect(config).to.deep.equal(rest);
done();
});
it('Connection string with nested property', function (done) {
const config = NcConfigFactory.metaUrlToDbConfig(`pg://localhost:5432?u=postgres&p=xgene&d=abcde&pool.min=1&pool.max=2&ssl.rejectUnauthorized=false`);
expect(config.client).to.be.eq('pg')
expect(config.connection).to.be.a('object')
expect(config.connection.user).to.be.eq('postgres')
expect(config.connection.port).to.be.eq(5432)
expect(config.connection.password).to.be.eq('xgene')
expect(config.connection.database).to.be.eq('abcde')
expect(config.pool).to.be.a('object')
expect(config.pool.min).to.be.eq(1)
expect(config.pool.max).to.be.eq(2)
expect(config.ssl).to.be.a('object')
expect(config.ssl.rejectUnauthorized).to.be.eq(false)
expect(config).to.deep.equal(expectedObject);
done();
});
it('Allow creating config from JSON string', function(done) {
try {
process.env.NC_DB_JSON = JSON.stringify(expectedObject);
const { meta: { db: config } } = NcConfigFactory.make();
expect(config).to.deep.equal(expectedObject);
done();
} finally {
delete process.env.NC_DB_JSON;
}
});
it('Allow creating config from JSON file', function(done) {
try {
process.env.NC_DB_JSON_FILE = `${__dirname}/dbConfig.json`;
const { meta: { db: config } } = NcConfigFactory.make();
expect(config).to.deep.equal(expectedObject);
done();
} finally {
delete process.env.NC_DB_JSON_FILE;
}
});
});

18
packages/nocodb/src/__tests__/noco/dbConfig.json

@ -0,0 +1,18 @@
{
"client": "pg",
"connection": {
"host": "localhost",
"port": 5432,
"user": "postgres",
"password": "xgene",
"database": "abcde"
},
"pool": {
"min": 1,
"max": 2
},
"ssl": {
"rejectUnauthorized": false
},
"acquireConnectionTimeout": 600000
}

12
packages/nocodb/src/lib/utils/NcConfigFactory.ts

@ -50,8 +50,18 @@ export default class NcConfigFactory implements NcConfig {
config.meta.db.connection.filename = path.join(config.toolDir, config.meta.db.connection.filename)
}
if (process.env.NC_DB_JSON) {
config.meta.db = JSON.parse(process.env.NC_DB_JSON);
} else if (process.env.NC_DB_JSON_FILE) {
const filePath = process.env.NC_DB_JSON_FILE;
if (process.env.NC_DB) {
if (!fs.existsSync(filePath)) {
throw new Error(`NC_DB_JSON_FILE not found: ${filePath}`);
}
const fileContent = fs.readFileSync(filePath, { encoding: 'utf8' });
config.meta.db = JSON.parse(fileContent);
} else if (process.env.NC_DB) {
config.meta.db = this.metaUrlToDbConfig(process.env.NC_DB)
}

Loading…
Cancel
Save