add forest-express package types (#45970)

This commit is contained in:
SteveBunlon 2020-07-10 15:57:03 +02:00 committed by GitHub
parent 98ee4c56b2
commit 575459d204
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 442 additions and 0 deletions

View File

@ -0,0 +1,80 @@
import {
AggregatedFilters,
Filter,
Page,
Params, PermissionMiddlewareCreator,
PUBLIC_ROUTES, RecordCreator,
RecordGetter, RecordRemover, RecordsCounter, RecordSerializer,
RecordsGetter, RecordsRemover, RecordUpdater, StatSerialized, StatSerializer,
} from 'forest-express-mongoose';
import { RequestHandler } from 'express';
const MY_PUBLIC_ROUTES = PUBLIC_ROUTES;
const model = {
name: 'my-model',
};
const page: Page = {
number: '1',
size: '10',
};
const filter: Filter = {
field: 'my-field',
operator: 'is',
value: 'empty',
};
const params: Params = {
timezone: 'EU',
search: '',
fields: {
users: 'createdAt,firstname,id,lastname,updatedAt',
},
sort: 'ASC',
filters: filter,
page,
searchExtended: '0',
};
const recordGetter = new RecordGetter(model);
recordGetter.get('1234');
const recordsGetter = new RecordsGetter(model);
recordsGetter.getAll(params);
const recordsCounter = new RecordsCounter(model);
recordsCounter.count(params);
const recordUpdater = new RecordUpdater(model);
recordUpdater.update({}, '1234');
const recordCreator = new RecordCreator(model);
recordCreator.create({});
const recordRemover = new RecordRemover(model);
recordRemover.remove('1234');
const recordsRemover = new RecordsRemover(model);
recordsRemover.remove(['1234', '5678']);
const recordSerializer = new RecordSerializer(model);
recordSerializer.serialize([{}, {}]);
let requestHandler: RequestHandler;
const permissionMiddlewareCreator = new PermissionMiddlewareCreator('users');
requestHandler = permissionMiddlewareCreator.list();
requestHandler = permissionMiddlewareCreator.export();
requestHandler = permissionMiddlewareCreator.details();
requestHandler = permissionMiddlewareCreator.create();
requestHandler = permissionMiddlewareCreator.update();
requestHandler = permissionMiddlewareCreator.delete();
requestHandler = permissionMiddlewareCreator.smartAction();
let statSerialized: StatSerialized;
const stats = {
value: [1, 2, 3],
};
const statSerializer = new StatSerializer(stats);
statSerialized = statSerializer.perform();

117
types/forest-express-mongoose/index.d.ts vendored Normal file
View File

@ -0,0 +1,117 @@
// Type definitions for forest-express-mongoose 6.3
// Project: http://www.forestadmin.com
// Definitions by: Steve Bunlon <https://github.com/SteveBunlon>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
import { RequestHandler, Response } from "express";
// Everything related to Forest constants
export const PUBLIC_ROUTES: string[];
// Everything related to record manipulation
export class AbstractRecordTool {
constructor(model: object)
serialize(records: object[]): StatSerialized;
}
export class RecordGetter extends AbstractRecordTool {
get(recordId: string): Promise<object>;
}
export class RecordsGetter extends AbstractRecordTool {
getAll(params: Params): Promise<object[]>;
getIdsFromRequest(params: Params): Promise<string[]>;
}
export class RecordsCounter extends AbstractRecordTool {
count(params: Params): Promise<number>;
}
export class RecordsExporter extends AbstractRecordTool {
streamExport(response: Response, params: Params): Promise<void>;
}
export class RecordUpdater extends AbstractRecordTool {
deserialize(body: object): Promise<object>;
update(record: object, recordId: string): Promise<object>;
}
export class RecordCreator extends AbstractRecordTool {
deserialize(body: object): Promise<object>;
create(record: object): Promise<object>;
}
export class RecordRemover extends AbstractRecordTool {
remove(recordId: string): Promise<void>;
}
export class RecordsRemover extends AbstractRecordTool {
remove(recordIds: string[]): Promise<void>;
}
export class RecordSerializer extends AbstractRecordTool { }
// Everyting related to Forest permissions
export class PermissionMiddlewareCreator {
constructor(collectionName: string)
list(): RequestHandler;
export(): RequestHandler;
details(): RequestHandler;
create(): RequestHandler;
update(): RequestHandler;
delete(): RequestHandler;
smartAction(): RequestHandler;
}
// Everything related to Forest Charts
export interface StatSerialized {
data: {
type: string,
id: string,
attributes: {
value: any[]
}
};
}
export class StatSerializer {
constructor(stats: { value: any[] })
perform(): StatSerialized;
}
// Everything related to Forest request params
export interface Page {
number: string;
size: string;
}
export interface Filter {
field: string;
operator: string;
value: string;
}
export enum Aggregator {
AND = 'and',
OR = 'or'
}
export interface AggregatedFilters {
aggregator: Aggregator;
conditions: Filter[];
}
export interface Params {
timezone: string;
search: string;
fields: {[key: string]: string};
sort: string;
filters: Filter|AggregatedFilters;
page: Page;
searchExtended: string;
}

View File

@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"forest-express-mongoose-tests.ts"
]
}

View File

@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }

View File

@ -0,0 +1,80 @@
import {
AggregatedFilters,
Filter,
Page,
Params, PermissionMiddlewareCreator,
PUBLIC_ROUTES, RecordCreator,
RecordGetter, RecordRemover, RecordsCounter, RecordSerializer,
RecordsGetter, RecordsRemover, RecordUpdater, StatSerialized, StatSerializer,
} from 'forest-express-sequelize';
import { RequestHandler } from 'express';
const MY_PUBLIC_ROUTES = PUBLIC_ROUTES;
const model = {
name: 'my-model',
};
const page: Page = {
number: '1',
size: '10',
};
const filter: Filter = {
field: 'my-field',
operator: 'is',
value: 'empty',
};
const params: Params = {
timezone: 'EU',
search: '',
fields: {
users: 'createdAt,firstname,id,lastname,updatedAt',
},
sort: 'ASC',
filters: filter,
page,
searchExtended: '0',
};
const recordGetter = new RecordGetter(model);
recordGetter.get('1234');
const recordsGetter = new RecordsGetter(model);
recordsGetter.getAll(params);
const recordsCounter = new RecordsCounter(model);
recordsCounter.count(params);
const recordUpdater = new RecordUpdater(model);
recordUpdater.update({}, '1234');
const recordCreator = new RecordCreator(model);
recordCreator.create({});
const recordRemover = new RecordRemover(model);
recordRemover.remove('1234');
const recordsRemover = new RecordsRemover(model);
recordsRemover.remove(['1234', '5678']);
const recordSerializer = new RecordSerializer(model);
recordSerializer.serialize([{}, {}]);
let requestHandler: RequestHandler;
const permissionMiddlewareCreator = new PermissionMiddlewareCreator('users');
requestHandler = permissionMiddlewareCreator.list();
requestHandler = permissionMiddlewareCreator.export();
requestHandler = permissionMiddlewareCreator.details();
requestHandler = permissionMiddlewareCreator.create();
requestHandler = permissionMiddlewareCreator.update();
requestHandler = permissionMiddlewareCreator.delete();
requestHandler = permissionMiddlewareCreator.smartAction();
let statSerialized: StatSerialized;
const stats = {
value: [1, 2, 3],
};
const statSerializer = new StatSerializer(stats);
statSerialized = statSerializer.perform();

View File

@ -0,0 +1,117 @@
// Type definitions for forest-express-sequelize 6.3
// Project: http://www.forestadmin.com
// Definitions by: Steve Bunlon <https://github.com/SteveBunlon>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
import { RequestHandler, Response } from "express";
// Everything related to Forest constants
export const PUBLIC_ROUTES: string[];
// Everything related to record manipulation
export class AbstractRecordTool {
constructor(model: object)
serialize(records: object[]): StatSerialized;
}
export class RecordGetter extends AbstractRecordTool {
get(recordId: string): Promise<object>;
}
export class RecordsGetter extends AbstractRecordTool {
getAll(params: Params): Promise<object[]>;
getIdsFromRequest(params: Params): Promise<string[]>;
}
export class RecordsCounter extends AbstractRecordTool {
count(params: Params): Promise<number>;
}
export class RecordsExporter extends AbstractRecordTool {
streamExport(response: Response, params: Params): Promise<void>;
}
export class RecordUpdater extends AbstractRecordTool {
deserialize(body: object): Promise<object>;
update(record: object, recordId: string): Promise<object>;
}
export class RecordCreator extends AbstractRecordTool {
deserialize(body: object): Promise<object>;
create(record: object): Promise<object>;
}
export class RecordRemover extends AbstractRecordTool {
remove(recordId: string): Promise<void>;
}
export class RecordsRemover extends AbstractRecordTool {
remove(recordIds: string[]): Promise<void>;
}
export class RecordSerializer extends AbstractRecordTool { }
// Everyting related to Forest permissions
export class PermissionMiddlewareCreator {
constructor(collectionName: string)
list(): RequestHandler;
export(): RequestHandler;
details(): RequestHandler;
create(): RequestHandler;
update(): RequestHandler;
delete(): RequestHandler;
smartAction(): RequestHandler;
}
// Everything related to Forest Charts
export interface StatSerialized {
data: {
type: string,
id: string,
attributes: {
value: any[]
}
};
}
export class StatSerializer {
constructor(stats: { value: any[] })
perform(): StatSerialized;
}
// Everything related to Forest request params
export interface Page {
number: string;
size: string;
}
export interface Filter {
field: string;
operator: string;
value: string;
}
export enum Aggregator {
AND = 'and',
OR = 'or'
}
export interface AggregatedFilters {
aggregator: Aggregator;
conditions: Filter[];
}
export interface Params {
timezone: string;
search: string;
fields: {[key: string]: string};
sort: string;
filters: Filter|AggregatedFilters;
page: Page;
searchExtended: string;
}

View File

@ -0,0 +1,23 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"baseUrl": "../",
"typeRoots": [
"../"
],
"types": [],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"index.d.ts",
"forest-express-sequelize-tests.ts"
]
}

View File

@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }