From 0f8b47c4fc9def230cb3e8c343b49d4da90eac38 Mon Sep 17 00:00:00 2001 From: Xc Date: Mon, 25 Apr 2022 13:48:50 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AF=B9exceptionHa?= =?UTF-8?q?ndler=E7=9A=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/index.ts | 1 + src/platforms/wechatMp/index.ts | 174 ++++++++++++++++++++++++++------ src/types/ExceptionRoute.ts | 10 ++ test/test.ts | 10 +- 4 files changed, 155 insertions(+), 40 deletions(-) create mode 100644 src/types/ExceptionRoute.ts diff --git a/src/index.ts b/src/index.ts index d9ec45d2..5e39ab85 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,4 +6,5 @@ export { }; export * from './types/Feature'; +export * from './types/ExceptionRoute'; export { BasicFeatures } from './features'; diff --git a/src/platforms/wechatMp/index.ts b/src/platforms/wechatMp/index.ts index 06bb25b3..31f4ab5b 100644 --- a/src/platforms/wechatMp/index.ts +++ b/src/platforms/wechatMp/index.ts @@ -1,11 +1,12 @@ import './polyfill'; -import { Aspect, InputIllegalException, Checker, Context, DeduceFilter, EntityDict, RowStore, SelectionResult, StorageSchema, Trigger } from "oak-domain/lib/types"; +import { Aspect, OakInputIllegalException, Checker, Context, DeduceFilter, EntityDict, RowStore, SelectionResult, StorageSchema, Trigger, OakException } from "oak-domain/lib/types"; import { Feature } from '../../types/Feature'; import { initialize as init } from '../../initialize'; import { Pagination } from "../../types/Pagination"; import { BasicFeatures } from "../../features"; import assert from "assert"; import { assign } from "lodash"; +import { ExceptionHandler, ExceptionRouters } from '../../types/ExceptionRoute'; type OakComponentOption< ED extends EntityDict, @@ -116,17 +117,8 @@ async function execute, AD extend features: BasicFeatures & FD, fullpath: string, action?: string, isTry?: boolean) { - try { - await features.runningNode.execute(fullpath, action, isTry); - } - catch (err) { - const { message } = err as Error; - wx.showToast({ - title: message, - icon: 'error' - }); - throw err; - } + + await features.runningNode.execute(fullpath, action, isTry); } function callPicker, AD extends Record>, FD extends Record>>( @@ -161,7 +153,10 @@ function createPageOptions>, FD extends Record>, Proj extends ED[T]['Selection']['data'], - FormedData extends WechatMiniprogram.Component.DataOption>(options: OakPageOption, doSubscribe: ReturnType['subscribe'], features: BasicFeatures & FD) { + FormedData extends WechatMiniprogram.Component.DataOption>( + options: OakPageOption, doSubscribe: ReturnType['subscribe'], + features: BasicFeatures & FD, + exceptionRouterDict: Record) { const { formData, isList, pagination } = options; const componentOptions: WechatMiniprogram.Component.Options< { @@ -169,6 +164,10 @@ function createPageOptions, @@ -292,18 +291,67 @@ function createPageOptions( options: OakComponentOption, - doSubscribe: ReturnType['subscribe'], - features: BasicFeatures & FD) { + features: BasicFeatures & FD, + exceptionRouterDict: Record) { const { formData } = options; const componentOptions: WechatMiniprogram.Component.Options< @@ -397,6 +445,10 @@ function createComponentOptions, @@ -471,18 +523,67 @@ function createComponentOptions, AD ex storageSchema: StorageSchema, createFeatures: (basicFeatures: BasicFeatures) => FD, createContext: (store: RowStore) => Cxt, + exceptionRouters: ExceptionRouters = [], triggers?: Array>, checkers?: Array>, aspectDict?: AD, @@ -622,6 +724,12 @@ export function initialize, AD ex } ) { const { subscribe, features } = init(storageSchema, createFeatures, createContext, triggers, checkers, aspectDict, initialData); + const exceptionRouterDict: Record = {}; + for (const router of exceptionRouters) { + assign(exceptionRouterDict, { + [router[0].name]: router[1], + }); + } return { OakPage: < @@ -634,7 +742,7 @@ export function initialize, AD ex FormedData extends WechatMiniprogram.Component.DataOption = {}>( options: OakPageOption, componentOptions: WechatMiniprogram.Component.Options, true> = {}) => { - const oakOptions = createPageOptions(options, subscribe, features); + const oakOptions = createPageOptions(options, subscribe, features, exceptionRouterDict); const { properties, pageLifetimes, lifetimes, methods, data, observers } = oakOptions; const { properties: p2, pageLifetimes: pl2, lifetimes: l2, methods: m2, data: d2, observers: o2, ...restOptions } = componentOptions; @@ -672,7 +780,7 @@ export function initialize, AD ex Proj extends ED[T]['Selection']['data'], IS extends WechatMiniprogram.IAnyObject = {}, FormedData extends WechatMiniprogram.Component.DataOption = {}>(options: OakComponentOption, componentOptions: WechatMiniprogram.Component.Options = {}) => { - const oakOptions = createComponentOptions(options, subscribe, features); + const oakOptions = createComponentOptions(options, features, exceptionRouterDict); const { properties, pageLifetimes, lifetimes, methods, data, observers } = oakOptions; const { properties: p2, pageLifetimes: pl2, lifetimes: l2, methods: m2, data: d2, observers: o2, ...restOptions } = componentOptions; diff --git a/src/types/ExceptionRoute.ts b/src/types/ExceptionRoute.ts new file mode 100644 index 00000000..0e89f603 --- /dev/null +++ b/src/types/ExceptionRoute.ts @@ -0,0 +1,10 @@ +import { OakException } from "oak-domain/lib/types"; + +export interface ExceptionHandler { + hidden?: true; // 异常不显示警告 + level?: 'warning' | 'error'; // 警告提示程度 + handler?: (error: OakException) => void; // 如果是route则跳转,是函数则回调 + router?: string; +}; + +export type ExceptionRouters = Array<[new (...args: any) => OakException, ExceptionHandler]>; diff --git a/test/test.ts b/test/test.ts index d5f59e1b..32999276 100644 --- a/test/test.ts +++ b/test/test.ts @@ -1,9 +1,5 @@ -type A = { - name: 'bbb' - [k: string]: string; -}; +import { OakException, OakUserException } from 'oak-domain/lib/types'; -type B = keyof A; +const e = new OakUserException(); - -const b: B = 1; \ No newline at end of file +console.log(e instanceof OakException);