From d709898a828f9e7ff9d566ae91c7fa89935e7041 Mon Sep 17 00:00:00 2001 From: Alexandre Bodin Date: Wed, 17 Nov 2021 19:01:52 +0100 Subject: [PATCH] Improve types to mvp --- .../src/api/address/controllers/address.js | 3 +- .../strapi/lib/core-api/controller/index.d.ts | 25 +++++++++ .../strapi/lib/core-api/service/index.d.ts | 21 ++++++++ .../lib/core-api/service/single-type.js | 3 ++ packages/core/strapi/lib/factories.d.ts | 52 +++---------------- .../lib/services/entity-service/index.d.ts | 2 +- 6 files changed, 58 insertions(+), 48 deletions(-) create mode 100644 packages/core/strapi/lib/core-api/controller/index.d.ts create mode 100644 packages/core/strapi/lib/core-api/service/index.d.ts diff --git a/examples/getstarted/src/api/address/controllers/address.js b/examples/getstarted/src/api/address/controllers/address.js index abc4e586d5..b942bce6ef 100644 --- a/examples/getstarted/src/api/address/controllers/address.js +++ b/examples/getstarted/src/api/address/controllers/address.js @@ -1,10 +1,9 @@ const { createCoreController } = require('@strapi/strapi').factories; -// NOTE: should the file name be useless ? if we use the uid we should generate the controller with the same uid instead ? - module.exports = createCoreController('api::address.address', { async find(ctx) { const { results } = await strapi.service('api::address.address').find(); + ctx.body = await this.sanitizeOutput(results); }, }); diff --git a/packages/core/strapi/lib/core-api/controller/index.d.ts b/packages/core/strapi/lib/core-api/controller/index.d.ts new file mode 100644 index 0000000000..bb68c9461c --- /dev/null +++ b/packages/core/strapi/lib/core-api/controller/index.d.ts @@ -0,0 +1,25 @@ +import { Context } from 'koa'; + +type Response = object; + +interface BaseController { + transformResponse(data: object, meta: object): object; + sanitizeOutput(data: object, ctx: Context): Promise; + sanitizeInput(data: object, ctx: Context): Promise; +} + +export interface SingleTypeController extends BaseController { + find(ctx: Context): Promise; + update(ctx: Context): Promise; + delete(ctx: Context): Promise; +} + +export interface CollectionTypeController extends BaseController { + find(ctx: Context): Promise; + findOne(ctx: Context): Promise; + create(ctx: Context): Promise; + update(ctx: Context): Promise; + delete(ctx: Context): Promise; +} + +export type Controller = SingleTypeController | CollectionTypeController; diff --git a/packages/core/strapi/lib/core-api/service/index.d.ts b/packages/core/strapi/lib/core-api/service/index.d.ts new file mode 100644 index 0000000000..783beff245 --- /dev/null +++ b/packages/core/strapi/lib/core-api/service/index.d.ts @@ -0,0 +1,21 @@ +type Entity = object; + +interface BaseService { + getFetchParams(params: object): object; +} + +export interface SingleTypeService extends BaseService { + find(params: object): Promise; + createOrUpdate(params: object): Promise; + delete(params: object): Promise; +} + +export interface CollectionTypeService extends BaseService { + find(params: object): Promise; + findOne(params: object): Promise; + create(params: object): Promise; + update(params: object): Promise; + delete(params: object): Promise; +} + +export type Service = SingleTypeService | CollectionTypeService; diff --git a/packages/core/strapi/lib/core-api/service/single-type.js b/packages/core/strapi/lib/core-api/service/single-type.js index c990cae085..04f7bb9ba7 100644 --- a/packages/core/strapi/lib/core-api/service/single-type.js +++ b/packages/core/strapi/lib/core-api/service/single-type.js @@ -8,6 +8,9 @@ const { ValidationError } = require('@strapi/utils').errors; const createSingleTypeService = ({ contentType }) => { const { uid } = contentType; + /** + * @type {import('./').SingleTypeService} + */ return { /** * Returns singleType content diff --git a/packages/core/strapi/lib/factories.d.ts b/packages/core/strapi/lib/factories.d.ts index d0e2f97cd3..488c569b15 100644 --- a/packages/core/strapi/lib/factories.d.ts +++ b/packages/core/strapi/lib/factories.d.ts @@ -1,48 +1,9 @@ -type SingleTypeControllerConfig = { - find(): void; - update(): void; - delete(): void; -}; +import { Service } from './core-api/service'; +import { Controller } from './core-api/controller'; -type CollectionTypeControllerConfig = { - find(): void; - findOne(): void; - create(): void; - update(): void; - delete(): void; -}; +type ControllerConfig = Controller; -type ControllerConfig = SingleTypeControllerConfig | CollectionTypeControllerConfig; - -interface SingleTypeController {} - -interface CollectionTypeController {} - -type Controller = SingleTypeController | CollectionTypeController; - -type SingleTypeServiceConfig = { - find(): void; - update(): void; - delete(): void; -}; - -type CollectionTypeServiceConfig = { - find(): void; - findOne(): void; - create(): void; - update(): void; - delete(): void; -}; - -type ServiceConfig = SingleTypeServiceConfig | CollectionTypeServiceConfig; - -interface SingleTypeService {} -interface CollectionTypeService {} - -type Service = SingleTypeService | CollectionTypeService; - -export function createCoreController(uid: string, cfg: ControllerConfig): Controller; -export function createCoreService(uid: string, cfg: ServiceConfig): Service; +type ServiceConfig = Service; type HandlerConfig = { auth: false | { scope: string[] }; @@ -75,10 +36,11 @@ interface Route { method: string; path: string; } - interface Router { prefix: string; routes: Route[]; } -export function createCoreRouter(uid: string, cfg: RouterConfig): Router; +export function createCoreRouter(uid: string, cfg: RouterConfig): () => Router; +export function createCoreController(uid: string, cfg: ControllerConfig): () => Controller; +export function createCoreService(uid: string, cfg: ServiceConfig): () => Service; diff --git a/packages/core/strapi/lib/services/entity-service/index.d.ts b/packages/core/strapi/lib/services/entity-service/index.d.ts index f0acc03d5b..438a68a612 100644 --- a/packages/core/strapi/lib/services/entity-service/index.d.ts +++ b/packages/core/strapi/lib/services/entity-service/index.d.ts @@ -35,7 +35,7 @@ type Params = { files?: any; }; -interface EntityService { +export interface EntityService { uploadFiles(uid: K, entity, files); wrapParams( params: Params,