This is the official documentation of the @forestadmin/agent Node.js agent.
Steps
Creating a custom data source will require you to work on the 3 following steps:
Declare the structure of the data
Declare the API capabilities
Code a translation layer
Minimal example
Read more
Implementing a data source using the "query translation" strategy is an advanced concept: you will need to have a deep understanding of Forest Admin internals.
This strategy is a good match when writing data sources for full-featured databases.
Before starting, it is highly advised to read and understand the following sections:
const { BaseCollection } =require('@forestadmin/datasource-toolkit');constaxios=require('axios'); // client for the target API// The real work is in writing this module// Expect a full featured query translation module to be over 1000 LOCsconstQueryGenerator=require('./forest-query-translation');/** Minimal implementation of a readonly data source */classMyCollectionextendsBaseCollection {constructor() {// Set name of the collection once importedsuper('myCollection');this.addField('id', {// Structure type:'Column', columnType:'Number', isPrimaryKey:true, isReadOnly:true,// field is readonly// As we are using the query translation strategy => define capabilities filterOperators:newSet(),// field is not filterable isSortable:false,// field is not sortable });this.addField('title', { type:'Column', columnType:'String', isReadOnly:true, filterOperators:newSet(), isSortable:false, }); }asynclist(filter, projection) {constparams=QueryGenerator.generateListQueryString(filter, projection);constresponse=axios.get('https://my-api/my-collection', { params });returnresponse.body.items; }asyncaggregate(filter, aggregation, limit) {constparams=QueryGenerator.generateAggregateQueryString(filter, projection);constresponse=axios.get('https://my-api/my-collection', { params });returnresponse.body.items; }}classMyDataSourceextendsBaseDataSource {constructor() {super( [newMyCollection(this)],// List of your collections ); }}module.exports= MyDataSource;