typeorm-static
Static TypeORM connection using env vars.
Environment
Usage
Install:
npm i @types/dotenv dotenv reflect-metadata typeorm typeorm-static
Configure SQLite:
npm i sqlite3
cat >.env <<EOF
TYPEORM_DATABASE=db.sqlite3
TYPEORM_DRIVER_TYPE=sqlite
TYPEORM_LOGGING=all
EOF
Or PostgreSQL:
npm i pg
cat >.env <<EOF
TYPEORM_DRIVER_TYPE=postgres
TYPEORM_DRIVER_EXTRA={"ssl": false}
TYPEORM_HOST=localhost
TYPEORM_USERNAME=user
TYPEORM_PASSWORD=1
TYPEORM_DATABASE=user
TYPEORM_LOGGING=
EOF
Enable decorators in tsconfig.json:
{
"emitDecoratorMetadata": true,
"experimentalDecorators": true
}
Use:
const { config } = require("dotenv");
const { join } = require("path");
config({ path: join(__dirname, "..", ".env") });
import { Column, Entity } from "typeorm";
import { AbstractEntity, Bigint } from "typeorm-static";
@Entity()
export class Foobar extends AbstractEntity {
@Column("bigint", { transformer: Bigint })
public createdAt: number;
}
import "reflect-metadata";
import { Db, Id } from "typeorm-static";
import { Foobar } from "../../domain/Foobar/Foobar";
export class FoobarService {
public repository = Db.connection.getRepository(Foobar);
public async save(foobar: Foobar) {
foobar.createdAt = Date.now();
foobar.id = Id();
foobar = await this.repository.save(foobar);
return foobar;
}
}
import "reflect-metadata";
import { Db } from "typeorm-static";
import { Foobar } from "../../domain/Foobar/Foobar";
import { FoobarService } from "./FoobarService";
describe("FoobarService", () => {
it("saves", async () => {
await Db.createTestConnection();
await Db.createConnection();
const foobarService = new FoobarService();
let foobar: Foobar = {};
foobar = await foobarService.save(foobar);
console.assert(foobar.id);
});
});
Develop
git clone https://github.com/nykula/typeorm-static
cd typeorm-static
npm i
npm test
License
0BSD, public domain equivalent.