A repository pattern implementation using JSON files.
npm install json-repositoryA TypeScript-based repository pattern implementation for managing JSON data files. This module provides a flexible way to create and manage repositories with different scopes: singleton, scoped, and transient.
To install the module, use pnpm:
pnpm add json-repository
You can create a repository using the createRepository function. This function allows you to specify the scope of the repository: singleton, scoped, or transient.
Example:
import { createRepository } from 'json-repository';
const repository = createRepository
Once you have a repository instance, you can perform various operations such as fetching all data, adding new items, updating existing items, and deleting items.
Example:
async function performOperations() {
const repository = createRepository
// Fetch all items
const items = await repository.getAll();
// Add a new item
await repository.add({ id: '1', name: 'New Item' });
// Update an existing item
await repository.update('1', { id: '1', name: 'Updated Item' });
// Delete an item
await repository.delete('1');
}
For React applications, you can use the useRepository utility function to integrate repositories with React hooks.
Example:
import { useRepository } from 'json-repository';
function MyComponent() {
const repository = useRepository
// Use the repository for operations
}
You can create a custom hook to manage repository data and integrate it with React components.
Custom Hook:
import { useRepository } from 'json-repository';
import { useEffect, useState } from 'react';
export function useCustomRepository
const repository = useRepository
const [data, setData] = useState
useEffect(() => {
async function fetchData() {
const allData = await repository.getAll();
setData(allData);
}
fetchData();
}, [repository]);
return { data, repository };
}
Component Example:
import { useCustomRepository } from '../hooks/useCustomRepository';
interface Item {
id: string;
name: string;
}
export default function HomePage() {
const { data, repository } = useCustomRepository
const addItem = async () => {
const newItem: Item = { id: '3', name: 'New Item' };
await repository.add(newItem);
// Refresh data after adding
const updatedData = await repository.getAll();
setData(updatedData);
};
return (
- Singleton: A single instance is shared across the entire application.
- Scoped: A new instance is created for each request or operation, but it can be reused within that scope.
- Transient: A new instance is created every time it is requested.
The module includes basic error handling to log and throw errors when creating or using repositories. Ensure to handle these errors in your application logic as needed.