npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@baukit/data-contracts-expo-sqlite

v0.3.0

Published

Expo SQLite implementation of the @baukit/data-contracts base storage contracts.

Downloads

155

Readme

@baukit/data-contracts-expo-sqlite

A zero-product-logic Expo SQLite implementation of @baukit/data-contracts' base storage contracts.

import { SqliteRecordStore } from '@baukit/data-contracts-expo-sqlite';
import * as SQLite from 'expo-sqlite';

interface CachedRecord {
  readonly id: string;
  readonly value: string;
}

const database = await SQLite.openDatabaseAsync('product.db');
const records = new SqliteRecordStore<CachedRecord>(database, 'cached-records');
await records.initialize();

For key/value data, schema metadata, and atomic compound writes, use the composite adapter:

import { ExpoSqliteStore } from '@baukit/data-contracts-expo-sqlite';

const storage = new ExpoSqliteStore<CachedRecord>(database, 'product');
await storage.initialize();
await storage.withTransaction((transaction) =>
  transaction.withTransaction((sameTransaction) =>
    sameTransaction.records.put({ id: 'one', value: 'cached' }),
  ),
);

Nested calls made on the transaction-scoped context join the ambient exclusive transaction. Independent root calls are serialized. close() closes the logical adapter; pass { closeDatabase: true } when it should also own the supplied database handle.

Namespaces share one fixed baukit_records table without colliding. Call initialize() before using a store. Records are serialized as JSON, pagination is bounded and keyset-based, and malformed persisted payloads produce a content-free error.

The package's fast Vitest suite uses a deterministic database fake. The Expo SQLite device-conformance app mirrors the shared contract cases against real expo-sqlite on Android, including creation/reopening, namespace isolation, malformed data, rollback, schema-metadata upgrades, and authenticated E→F→E database isolation. Products derive the database name and resolve its registry with @baukit/data-contracts before opening the Expo database. iOS is a scheduled/manual macOS gate.

Boundaries

The package implements @baukit/data-contracts on Expo SQLite and nothing else. It does not choose a database name, open a singleton, define product entities, or implement cache policy.

Passing the database handle in rather than opening one is what makes an authenticated product able to derive its database name per identity, which is what the shared E→F→E isolation cases exercise.

@baukit/data-contracts-dexie is the same contract on the web.