pub(crate) async fn new_with_name(name: &str) -> Result<Self, IdbError> {
        // Build the database
        let rexie = Rexie::builder(name)
            // IndexedDB uses versions to track database schema changes
            // If the structure of this DB ever changes, this MUST be changed, and this should be
            // considered a non-API-breaking, but app-breaking change!
            .version(1)
            .add_object_store(
                // We'll store many versions of frozen state so that the user can revert to
                // previous states
                ObjectStore::new("frozen_state")
                    // We don't provide a key path because that would lock us in to storing only JS
                    // objects, and we want to store strings
                    .auto_increment(true), /* IndexedDB doesn't need us to register value types,
                                            * only things that should be indexed (gotta love JS
                                            * type safety haven't you!) */
            )
            .build()
            .await
            .map_err(|err| IdbError::BuildError { source: err })?;

        Ok(Self { db: Rc::new(rexie) })
    }
Creates a new store for this origin. If it already exists from a
previous visit, the existing one will be interfaced with. This also
allows the provision of a custom name for the DB.
packages/perseus/src/state/freeze_idb.rs