strapi-documents-extend
v1.0.0
Published
Extend Strapi documents service with additional methods and standard pagination metadata
Downloads
4
Maintainers
Readme
Strapi Documents Extend
Extend Strapi documents service with additional methods and standard pagination metadata.
Features
- Adds
findAllmethod to Strapi documents service - Returns standard Strapi pagination metadata
- TypeScript support
- No configuration needed
- Zero dependencies
- Compatible with Strapi v5.0.0 and above
Requirements
- Strapi v5.0.0 or higher
- Node.js v16.0.0 or higher
Installation
npm install strapi-documents-extendSetup
In your Strapi project, update your ./src/index.ts or ./src/index.js:
// import here
import { extendDocuments } from 'strapi-documents-extend';
export default {
register() {},
bootstrap({ strapi }) {
extendDocuments(strapi); // Extends Strapi documents service
}
};Usage
JavaScript
// In your controller
module.exports = {
async find(ctx) {
const { page, pageSize } = ctx.query;
const response = await strapi.documents('api::product.product').findAll({
filters: { status: 'published' },
sort: ['createdAt:desc'],
populate: ['category', 'images'],
pagination: {
page,
pageSize
}
});
return response;
}
};TypeScript
// In your controller
export default {
async find(ctx) {
const { page, pageSize } = ctx.query;
// @ts-ignore - Required due to Strapi types extension
const response = await strapi.documents('api::product.product').findAll({
filters: { status: 'published' },
sort: ['createdAt:desc'],
populate: ['category', 'images'],
pagination: {
page,
pageSize
}
});
return response;
}
};Response Format
interface Response<T> {
data: T[];
meta: {
pagination: {
page: number;
pageSize: number;
pageCount: number;
total: number;
}
}
}Example response:
{
"data": [
{
"id": 1,
"attributes": {
"name": "Product 1",
"status": "published",
"createdAt": "2025-05-01T12:00:00.000Z",
"updatedAt": "2025-05-01T12:00:00.000Z"
}
}
],
"meta": {
"pagination": {
"page": 1,
"pageSize": 25,
"pageCount": 1,
"total": 1
}
}
}Available Options
| Option | Type | Description |
|--------|------|-------------|
| filters | Object | Strapi filters to apply |
| sort | string[] | Sort criteria (e.g. ['createdAt:desc']) |
| populate | string[] \| Object | Relations to populate |
| fields | string[] | Fields to select |
| pagination.page | number | Page number (default: 1) |
| pagination.pageSize | number | Items per page (default: 25) |
| publicationState | 'live' \| 'preview' | Publication state |
| locale | string | Locale to fetch |
Important Notes
TypeScript Usage
When using TypeScript, you need to add @ts-ignore before calling findAll method:
// This requires @ts-ignore
const response = await strapi.documents('api::product.product').findAll(params);This is necessary because we extend Strapi's types at runtime. The functionality works correctly, but TypeScript needs the ignore flag to compile.
Type Safety
Even though we use @ts-ignore, the method is still type-safe. You'll get proper typing for:
- The response format
- Query parameters
- Filters
- Pagination options
Repository
- GitHub: strapi-documents-extend
- Issues: Report a bug
Author
Daniel SP
- GitHub: @dansp89
License
MIT
Copyright © 2025 Daniel SP
