json-api-nestjs
Version:
JsonApi Plugin for NestJs
57 lines • 2.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.sharedConnect = sharedConnect;
exports.initMikroOrm = initMikroOrm;
const core_1 = require("@mikro-orm/core");
const postgresql_1 = require("@mikro-orm/postgresql");
const sql_highlighter_1 = require("@mikro-orm/sql-highlighter");
const knex_1 = require("knex");
const ClientPgLite = require("knex-pglite");
const entities_1 = require("../entities");
let knexInst;
async function sharedConnect() {
// @ts-ignore
// return globalThis.pgLite;
if (knexInst) {
return knexInst;
}
const pgLite = await Promise.all([
Promise.resolve().then(() => require('@electric-sql/pglite')),
Promise.resolve().then(() => require('@electric-sql/pglite/contrib/uuid_ossp')),
]).then(([{ PGlite }, { uuid_ossp }]) => new PGlite({
extensions: { uuid_ossp },
}));
knexInst = (0, knex_1.default)({
// @ts-ignore
client: ClientPgLite,
dialect: 'postgres',
// @ts-ignore
connection: { pglite: pgLite },
});
return knexInst;
}
async function initMikroOrm(knex, testDbName) {
const result = await knex.raw(`select 1 from pg_database where datname = '${testDbName}'`);
if (result['rows'].length === 0) {
await knex.raw(`create database ??`, [testDbName]);
}
const orm = await core_1.MikroORM.init({
highlighter: new sql_highlighter_1.SqlHighlighter(),
driver: postgresql_1.PostgreSqlDriver,
dbName: testDbName,
driverOptions: knexInst,
entities: [entities_1.Users, entities_1.UserGroups, entities_1.Roles, entities_1.Comments, entities_1.Addresses, entities_1.Notes],
allowGlobalContext: true,
schema: 'public',
debug: process.env['DB_LOGGING'] !== '0' ? ['query', 'query-params'] : false,
});
if (result['rows'].length === 0) {
const sql = await orm.getSchemaGenerator().getCreateSchemaSQL();
const statements = sql.split(';').filter((s) => s.trim().length > 0); // Разбиваем на отдельные команды
for (const statement of statements) {
await orm.em.execute(statement);
}
}
return orm;
}
//# sourceMappingURL=init-db.js.map