Have ideas to improve npm?Join in the discussion! »

    @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

    Install

    npm i @sighmir/indexeddb-export-import

    DownloadsWeekly Downloads

    1

    Version

    1.1.1

    License

    MIT

    Unpacked Size

    14.6 kB

    Total Files

    6

    Last publish

    Collaborators

    • avatar