strapi-documents-extend
v1.0.0
Published
Extend Strapi documents service with additional methods and standard pagination metadata
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
