Packages
plinth
0.9.3
0.10.2
0.10.1
0.10.0
0.9.3
0.9.2
0.9.1
0.9.0
0.8.2
0.8.1
0.8.0
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
0.5.3
0.5.2
0.5.1
0.5.0
0.4.15
0.4.14
0.4.13
0.4.12
0.4.11
0.4.10
0.4.9
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.0
0.2.0
0.1.13
0.1.12
0.1.11
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
Bindings to Node.js and browser platform APIs
Current section
Files
Jump to
Current section
Files
src/plinth_indexeddb_ffi.mjs
import { Result$Ok, Result$Error } from "./gleam.mjs";
export function window_indexeddb(window) {
const indexeddb = window.indexedDB
if (indexeddb) {
return Result$Ok(indexeddb)
} else {
return Result$Error()
}
}
export function factory_open(factory, name, version) {
try {
return Result$Ok(factory.open(name, version))
} catch (error) {
return Result$Error(`${error}`)
}
}
export function open_db_on_success(request, callback) {
request.onsuccess = function () {
callback(request.result)
}
}
export function open_db_on_error(request, callback) {
request.onerror = function () {
callback(`${request.error}`)
}
}
// https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest#example
export function open_db_on_upgrade_needed(request, callback) {
request.onupgradeneeded = function (event) {
callback(event.target.result)
}
}
export function database_name(database) {
return database.name
}
export function database_version(database) {
return database.version
}
export function database_object_store_names(database) {
// The DOMStringList interface is a legacy type returned by some APIs and represents a non-modifiable list of strings (DOMString).
return Array.from(database.objectStoreNames)
}
export function database_create_object_store(database, name, options) {
try {
return Result$Ok(database.createObjectStore(name, options))
} catch (error) {
return Result$Error(`${error}`)
}
}
export function database_transaction(database, store_names, mode, durability) {
try {
const transaction = database.transaction(store_names, mode, { durability })
return Result$Ok(transaction)
} catch (error) {
return Result$Error(`${error}`)
}
}
export function transaction_object_store(transaction, name) {
try {
return Result$Ok(transaction.objectStore(name))
} catch (error) {
return Result$Error(`${error}`)
}
}
export async function object_store_get_all(object_store) {
try {
const db_request = object_store.getAll()
const results = await db_request_to_promise(db_request)
return Result$Ok(results)
} catch (error) {
return Result$Error(`${error}`)
}
}
export async function object_store_put(object_store, item, key) {
try {
console.log(item)
const db_request = key ? object_store.put(item, key) : object_store.put(item)
const results = await db_request_to_promise(db_request)
return Result$Ok(results)
} catch (error) {
return Result$Error(`${error}`)
}
}
function db_request_to_promise(db_request) {
return new Promise(function (resolve) {
db_request.onsuccess = function (event) {
resolve(event.target.result);
};
db_request.onerror = function (event) {
console.warn("KEYSTORE - get failed:", event);
reject(event);
};
});
}