0.3.3 • Published 10 months ago

expo-ink v0.3.3

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

expo-ink

A lightweight, type-safe, and asynchronous ORM for expo-sqlite. Leverages TypeScript to ensure rigid type safety throughout table definitions and queries. Supports automatic migrations.

Installation

npm install expo-ink

Basic usage

Initializing the database and tables

The library provides the functions createDB and createTable for creating databases and tables, respectively.

To create the database:

db.ts

import { createDB } from 'expo-ink';

export const db = createDB({
  dbName: 'example-app',
  version: 0,
});

To create a table:

tables.ts

import { createTable, ColumnType, ColumnConstraint } from 'expo-ink';
import { db } from './db';

/** Interface to use throughout the application */
interface Todo {
  title: string;
  description: string;
  datePosted: number;
  completed: boolean;
}

/** Column definitions for the table */
const TodoColumns: Columns<Todo> = {
  title: {
    dataType: ColumnType.TEXT,
    constraints: [ColumnConstraint.UNIQUE],
  },
  description: { dataType: ColumnType.TEXT },
  datePosted: { dataType: ColumnType.INTEGER },
  completed: { dataType: ColumnType.BOOLEAN, default: false },
};


// Table to use throughout the application
export const todoTable = createTable({
  tableName: 'todos',
  columns: TodoColumns,
  db: db,
});

To use a table within a component:

App.tsx

// Pretend there are the necessary imports here
import { todoTable } from './tables';

export default function App() {
  const [todos, setTodos] = useState<Todo[]>([]);

  // Fetch the rows on first render
  useEffect(() => {
    todoTable.select({}).then((res: Todo[]) => setTodos(res));
  }, []);

  return (
    <SafeAreaView className="flex-1 items-center bg-gray-900">
      <TodoList todos={todos} />
    </SafeAreaView>
  );
}

Further examples

See the example app folder for more advanced usage.

Unsupported features

For any SQLite features not supported by this library, use the database property of ExpoSQLiteORM to access the modified expo-sqlite API directly (it's just a stable version of expo-sqlite).

Contributing

See the contributing guide to learn how to contribute to the repository and the development workflow.

License

MIT

0.3.3

10 months ago

0.3.2

10 months ago

0.3.1

10 months ago

0.3.0

10 months ago

0.2.1

10 months ago

0.2.0

10 months ago

0.1.1

10 months ago

0.1.0

10 months ago