-
To set up the required libraries, install TypeORM, better-sqlite3, and their TypeScript types:
-
SaaSHub
SaaSHub - Software Alternatives and Reviews. SaaSHub helps you find the best software and product alternatives
-
TypeORM
ORM for TypeScript and JavaScript. Supports MySQL, PostgreSQL, MariaDB, SQLite, MS SQL Server, Oracle, SAP Hana, WebSQL databases. Works in NodeJS, Browser, Ionic, Cordova and Electron platforms.
// src/main/database/dataSource.ts import path from "node:path"; import "reflect-metadata"; import { DataSource } from "typeorm"; import { UserEntity } from "./entities/user/user.entity"; import { PostEntity } from "./entities/post/post.entity"; const isElectron = !!process.versions.electron; # simple trick to see if the data source is called from the Electron app or CLI (for migrations scripts) const isProduction = process.env.NODE_ENV === "production"; let databasePath: string; if (isElectron) { // eslint-disable-next-line @typescript-eslint/no-require-imports const { app } = require("electron"); databasePath = path.join( app.getPath("userData"), app.isPackaged ? "app-name.sqlite" : "app-name.dev.sqlite" ); } else { // use hardcoded path for running migrations in development (macOS) databasePath = path.join( "/Users/user/Library/Application Support/app-name/", isProduction ? "app-name.sqlite" : "app-name.dev.sqlite" ); } // https://typeorm.io/data-source-options#better-sqlite3-data-source-options const dataSource = new DataSource({ type: "better-sqlite3", database: databasePath, entities: [UserEntity, PostEntity], migrations: [ path.join(__dirname, isElectron ? "database" : "", "/migrations/*.{js,ts}"), ], synchronize: false, # important logging: true # use this for debugging }); export const entityManager = dataSource.createEntityManager(); export default dataSource;
-
I started with a basic Electron + TypeScript + React project and use pnpm as my package manager. This tutorial assumes you already have a working Electron app.