From 12ce54e95d72e6ca29ea252080e0454155ebb6a2 Mon Sep 17 00:00:00 2001 From: dm1sh Date: Sat, 31 Jul 2021 21:29:25 +0300 Subject: [PATCH] Added IndexedDB --- package.json | 1 + src/constants.ts | 2 ++ src/serviceWorker/db.ts | 13 +++++++++++++ src/serviceWorker/index.ts | 3 ++- src/serviceWorker/schema.ts | 9 +++++++++ 5 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 src/serviceWorker/db.ts create mode 100644 src/serviceWorker/schema.ts diff --git a/package.json b/package.json index c6bcecc..81a82e1 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "webpack-dev-server": "^3.11.2" }, "dependencies": { + "idb": "^6.1.2", "react": "^17.0.2", "react-dom": "^17.0.2", "wouter": "^2.7.4" diff --git a/src/constants.ts b/src/constants.ts index 7473c9b..d4cd177 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,3 +1,5 @@ export const API_URL = process.env.PUBLIC_API_URL; // export const BASE_URL = process.env.PUBLIC_BASE_URL; export const CACHE = "v1"; +export const DB_NAME = "publite"; +export const DB_VERSION = 1; diff --git a/src/serviceWorker/db.ts b/src/serviceWorker/db.ts new file mode 100644 index 0000000..aa64808 --- /dev/null +++ b/src/serviceWorker/db.ts @@ -0,0 +1,13 @@ +import * as idb from "idb"; +import { DB_NAME, DB_VERSION } from "../constants"; +import { PubliteDB } from "./schema"; + +/** + * Opens IndexedDB for interactions + */ +export const openDB = () => + idb.openDB(DB_NAME, DB_VERSION, { + upgrade: (db, oldVersion, _, tsx) => { + if (oldVersion < 1) db.createObjectStore("Books", { keyPath: "hash" }); + }, + }); diff --git a/src/serviceWorker/index.ts b/src/serviceWorker/index.ts index 93013ad..fcd6ebd 100644 --- a/src/serviceWorker/index.ts +++ b/src/serviceWorker/index.ts @@ -1,4 +1,5 @@ import { precache } from "./cache"; +import { openDB as createDB } from "./db"; declare const self: ServiceWorkerGlobalScope; @@ -7,4 +8,4 @@ self.addEventListener("install", (event) => { event.waitUntil(precache()); }); -export type {}; +self.addEventListener("activate", (event) => event.waitUntil(createDB())); diff --git a/src/serviceWorker/schema.ts b/src/serviceWorker/schema.ts new file mode 100644 index 0000000..5615b19 --- /dev/null +++ b/src/serviceWorker/schema.ts @@ -0,0 +1,9 @@ +import { DBSchema } from "idb"; +import { BookT } from "../types/book"; + +export interface PubliteDB extends DBSchema { + Books: { + key: string; + value: BookT; + }; +}