@sighmir/indexeddb-export-import

1.1.1 • Public • Published

indexeddb-export-import - JSON export/import for IndexedDB

During development and testing it may be useful to be able to save and load the contents of an IndexedDB database.

This project is a fork of Polarisation/indexeddb-export-import.
He wrote this as a Node.js module for use with a desktop Electron app - which has access to both the IndexedDB API and Node.js.

It had minimal dependencies so it was easy to reuse the functions in a browser environment where Node.js is not available.
I removed the dependencies and made it support browser and Node.js without needing any modifications, I also decided to use Objects instead of JSON Strings for the functions to allow typed variables.

NPM

Usage

You will need an open IDBDatabase connection.

The follwing example exports a database, clears all object stores, then re-imports the database. It uses Dexie.js to initiate the database, but this is not required.

Node.js:

const Dexie = require("Dexie");
const IDBExportImport = require("@sighmir/indexeddb-export-import");

const db = new Dexie("MyDB");
db.version(1).stores({
  things: "id++, thing_name, thing_description"
});
db.open()
  .then(async () => {
    try {
      const idb_db = db.backendDB(); // get native IDBDatabase object from Dexie wrapper

      // export to JSON, clear database, and import from JSON
      const exportObject = await IDBExportImport.exportToObject(idb_db);
      console.log("Exported as JSON: " + JSON.stringify(exportObject));

      await IDBExportImport.clearDatabase(idb_db);

      await IDBExportImport.importFromObject(idb_db, exportObject);
      console.log("Imported data successfully");
    } catch (err) {
      console.error(err);
    }
  })
  .catch(e => {
    console.error("Could not connect. " + e);
  });

Browser:

const request = indexedDB.open("MyDB");

request.onerror = event => {
  console.log("Failed to connect to IndexedDB!");
};

request.onsuccess = async event => {
  const idb_db = event.target.result;
  try {
    // export to JSON, clear database, and import from JSON
    const exportObject = await IDBExportImport.exportToObject(idb_db);

    console.log("Exported as JSON: " + JSON.stringify(exportObject));
    await IDBExportImport.clearDatabase(idb_db);

    await IDBExportImport.importFromObject(idb_db, exportObject);
    console.log("Imported data successfully");
  } catch (err) {
    console.error(err);
  }
};

API

async exportToObject(idb_db)

Export all data from an IndexedDB database.

Param Type Description
idb_db IDBDatabase

async importFromObject(idb_db, importObject)

Import data from Object into an IndexedDB database. This overwrites objects with the same keys.

Param Type Description
idb_db IDBDatabase
importObject object data to import, one key per object store

async clearDatabase(idb_db)

Clears a database of all data.

Param Type Description
idb_db IDBDatabase

Installation

Node.js:

$ npm install @sighmir/indexeddb-export-import

Browser:

<script src="https://cdn.jsdelivr.net/npm/@sighmir/indexeddb-export-import/index.js"></script>

License

MIT

Package Sidebar

Install

npm i @sighmir/indexeddb-export-import

Weekly Downloads

0

Version

1.1.1

License

MIT

Unpacked Size

14.6 kB

Total Files

6

Last publish

Collaborators

  • sighmir