Skip to content

nykula/typeorm-static

Repository files navigation

typeorm-static

Static TypeORM connection using env vars.

Environment

Usage

Install:

yarn add @types/dotenv dotenv reflect-metadata typeorm typeorm-static

Configure:

cat > .env <<EOF
TYPEORM_DATABASE=db.sqlite3
TYPEORM_DRIVER_EXTRA={}
TYPEORM_DRIVER_TYPE=sqlite
TYPEORM_LOGGING=all
EOF

Enable decorators in tsconfig.json:

{
  "emitDecoratorMetadata": true,
  "experimentalDecorators": true
}

Use:

// bin/index.js
const { config } = require("dotenv");
const { join } = require("path");

config({ path: join(__dirname, "..", ".env") });
// src/domain/Foobar/Foobar.ts

import { Entity } from "typeorm";
import { AbstractEntity } from "typeorm-static";

@Entity()
export class Foobar extends AbstractEntity { }
// src/app/Foobar/FoobarService.ts

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.id = Id();
    foobar = await this.repository.save(foobar);
    return foobar;
  }
}
// src/app/Foobar/FoobarService.test.ts

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(); // Drops schema.

    // Or...
    await Db.createConnection(); // No schema drop.

    const foobarService = new FoobarService();
    let foobar: Foobar = {};
    foobar = await foobarService.save(foobar);
    console.assert(foobar.id);
  })
});

Develop

git clone https://github.com/makepost/typeorm-static
cd typeorm-static
yarn
yarn prepare
yarn test
yarn coverage

License

MIT

About

Static TypeORM connection using env vars

Resources

License

Stars

Watchers

Forks

Packages

No packages published