From ba9d4f84c68ac6a3b8c8edc983766f353be319e6 Mon Sep 17 00:00:00 2001 From: kokokuo Date: Tue, 3 May 2022 16:24:55 +0800 Subject: [PATCH] feature(core): add interface contract of artifact and validator --- packages/core/src/index.ts | 2 + packages/core/src/models/artifact.ts | 57 +++++++++++++++++++++++ packages/core/src/models/index.ts | 1 + packages/core/src/validators/index.ts | 1 + packages/core/src/validators/interface.ts | 8 ++++ 5 files changed, 69 insertions(+) create mode 100644 packages/core/src/models/artifact.ts create mode 100644 packages/core/src/models/index.ts create mode 100644 packages/core/src/validators/index.ts create mode 100644 packages/core/src/validators/interface.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index e87855f4..a988e8e2 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1 +1,3 @@ export * from './lib/core'; +export * from './models'; +export * from './validators'; diff --git a/packages/core/src/models/artifact.ts b/packages/core/src/models/artifact.ts new file mode 100644 index 00000000..43cadac4 --- /dev/null +++ b/packages/core/src/models/artifact.ts @@ -0,0 +1,57 @@ +/* +=== Schema Sample Format === +name: user +url: /user/:id +request: + parameters: + id: + in: query # path / query / header + description: user id + validators: + - name: Date + args: + format: 'yyyy-MM-dd' + - name: required +error: + - code: Forbidden + message: 'You are not allowed to access this resource' + */ + +export enum FieldInType { + QUERY = 'QUERY', + HEADER = 'HEADER', +} + +export interface ValidatorDefinition { + name: string; + args: T; +} + +export interface RequestParameter { + fieldName: string; + // the field put in query parameter or headers + fieldIn: FieldInType; + description: string; + validators: Array; +} + +export interface ErrorInfo { + code: string; + message: string; +} + +export interface APISchema { + // graphql operation name + operationName: string; + // restful url path + urlPath: string; + // template, could be name or path + templateSource: string; + request: Array; + errors: Array; + response: any; +} + +export interface BuiltArtifact { + apiSchemas: Array; +} diff --git a/packages/core/src/models/index.ts b/packages/core/src/models/index.ts new file mode 100644 index 00000000..eca8d074 --- /dev/null +++ b/packages/core/src/models/index.ts @@ -0,0 +1 @@ +export * from './artifact'; diff --git a/packages/core/src/validators/index.ts b/packages/core/src/validators/index.ts new file mode 100644 index 00000000..fc141f79 --- /dev/null +++ b/packages/core/src/validators/index.ts @@ -0,0 +1 @@ +export * from './interface'; diff --git a/packages/core/src/validators/interface.ts b/packages/core/src/validators/interface.ts new file mode 100644 index 00000000..4794d9ee --- /dev/null +++ b/packages/core/src/validators/interface.ts @@ -0,0 +1,8 @@ +export interface IValidator { + // validator name + name: string; + // validate Schema format + validateSchema(args: T): boolean; + // validate input data + validateData(data: string, args: T): boolean; +}