lazy-fetch-props
v1.0.2
Published
`lazy-fetch-props` is a TypeScript library that provides a way to lazily load and resolve properties in JavaScript objects. It is particularly useful when dealing with large datasets or when you need to fetch data from an API on-demand.
Readme
Lazy Props
lazy-fetch-props is a TypeScript library that provides a way to lazily load and resolve properties in JavaScript objects. It is particularly useful when dealing with large datasets or when you need to fetch data from an API on-demand.
Installation
To install the library, use npm or yarn:
npm install lazy-fetch-propsor
yarn add lazy-fetch-propsUsage
Basic Example
Here is a basic example of how to use lazy-fetch-props to lazily load properties from an API:
import { createLazyLoaderProxy } from 'lazy-fetch-props';
const target = {
user: {
ref: '123',
collection: 'users'
}
};
const options = {
endpoint: 'https://api.example.com',
fetchUrl: '/api/v1/data/:collection/:ref'
};
const proxy = createLazyLoaderProxy(target, options);
(async () => {
const user = await proxy.user;
console.log(user); // { name: 'John Doe', ref: '123', collection: 'users', _meta: { _loaded: true } }
})();Handling Arrays
lazy-fetch-props can also handle arrays of lazy reference objects:
import { createLazyLoaderProxy } from 'lazy-fetch-props';
const target = {
users: [
{ ref: '123', collection: 'users' },
{ ref: '456', collection: 'users' }
]
};
const options = {
endpoint: 'https://api.example.com',
fetchUrl: '/api/v1/data/:collection/:ref'
};
const proxy = createLazyLoaderProxy(target, options);
(async () => {
const users = await Promise.all(proxy.users);
console.log(users);
// [
// { name: 'John Doe', ref: '123', collection: 'users', _meta: { _loaded: true } },
// { name: 'Jane Doe', ref: '456', collection: 'users', _meta: { _loaded: true } }
// ]
})();Custom Fetcher
You can provide a custom fetcher function to handle the data fetching logic:
import { createLazyLoaderProxy } from 'lazy-fetch-props';
const target = {
user: {
ref: '123',
collection: 'users'
}
};
const options = {
fetcher: async (prop) => {
const response = await fetch(`https://api.example.com/api/v1/data/${prop.collection}/${prop.ref}`);
return response.json();
}
};
const proxy = createLazyLoaderProxy(target, options);
(async () => {
const user = await proxy.user;
console.log(user); // { name: 'John Doe', ref: '123', collection: 'users', _meta: { _loaded: true } }
})();API
createLazyLoaderProxy(target, options)
Creates a proxy object that lazily loads properties.
target: The target object to be proxied.options: An object containing the following optional properties:isRefObject: A function to determine if an object is a reference object.fetcher: A custom fetcher function to handle data fetching.endpoint: The base URL for the API.fetchUrl: The URL template for fetching data.getCachedKey: A function to get the cache key for a property.getCachedValue: A function to get the cached value for a key.
License
This project is licensed under the MIT License.
