From c346137092e20689cc9f67dd27652e37113075f7 Mon Sep 17 00:00:00 2001 From: "guokai.jgk" Date: Mon, 26 Oct 2020 15:32:55 +0800 Subject: [PATCH] fix: eslint --- packages/datasource-engine/package.json | 2 +- .../src/core/reloadDataSourceFactory.ts | 10 +- packages/datasource-engine/src/utils.ts | 82 ++++++++--- .../_macro-abnormal.ts | 130 +++++++++--------- 4 files changed, 138 insertions(+), 86 deletions(-) diff --git a/packages/datasource-engine/package.json b/packages/datasource-engine/package.json index c19924a9d..efa301ff7 100644 --- a/packages/datasource-engine/package.json +++ b/packages/datasource-engine/package.json @@ -1,6 +1,6 @@ { "name": "@ali/lowcode-datasource-engine", - "version": "1.0.2-alpha.1", + "version": "1.0.2-alpha.2", "main": "dist/index.js", "files": [ "dist", diff --git a/packages/datasource-engine/src/core/reloadDataSourceFactory.ts b/packages/datasource-engine/src/core/reloadDataSourceFactory.ts index 8433d0d0a..b871c2f37 100644 --- a/packages/datasource-engine/src/core/reloadDataSourceFactory.ts +++ b/packages/datasource-engine/src/core/reloadDataSourceFactory.ts @@ -15,6 +15,7 @@ export const reloadDataSourceFactory = ( dataSource.list .filter( (el: RuntimeDataSourceConfig) => + // eslint-disable-next-line implicit-arrow-linebreak el.type === 'urlParams' && (typeof el.isInit === 'boolean' ? el.isInit : true), ) @@ -51,8 +52,13 @@ export const reloadDataSourceFactory = ( ds.isInit && ds.isSync ) { - // eslint-disable-next-line no-await-in-loop - await dataSourceMap[ds.id].load(); + try { + // eslint-disable-next-line no-await-in-loop + await dataSourceMap[ds.id].load(); + } catch (e) { + // TODO: 这个错误直接吃掉? + console.error(e); + } } } diff --git a/packages/datasource-engine/src/utils.ts b/packages/datasource-engine/src/utils.ts index b31076f28..19b277615 100644 --- a/packages/datasource-engine/src/utils.ts +++ b/packages/datasource-engine/src/utils.ts @@ -9,6 +9,7 @@ import { JSExpression, JSFunction, JSONObject, + RuntimeOptionsConfig, } from '@ali/lowcode-types'; export const transformExpression = ( @@ -123,25 +124,70 @@ export const buildOptions = ( ) => { const { options } = ds; if (!options) return undefined; + // eslint-disable-next-line space-before-function-paren return function() { - return { - uri: getRuntimeValueFromConfig('string', options.uri, context), - params: options.params ? buildJsonObj(options.params, context) : {}, - method: options.method - ? getRuntimeValueFromConfig('string', options.method, context) - : 'GET', - isCors: options.isCors - ? getRuntimeValueFromConfig('boolean', options.isCors, context) - : true, - timeout: options.timeout - ? getRuntimeValueFromConfig('number', options.timeout, context) - : 5000, - headers: options.headers - ? buildJsonObj(options.headers, context) - : undefined, - v: options.v - ? getRuntimeValueFromConfig('string', options.v, context) - : '1.0', + // 默认值 + const fetchOptions: RuntimeOptionsConfig = { + uri: '', + params: {}, + method: 'GET', + isCors: true, + timeout: 5000, + headers: undefined, + v: '1.0', }; + Object.keys(options).forEach((key: string) => { + switch (key) { + case 'uri': + fetchOptions.uri = getRuntimeValueFromConfig( + 'string', + options.uri, + context, + ); + break; + case 'params': + fetchOptions.params = buildJsonObj(options.params!, context); + break; + case 'method': + fetchOptions.method = getRuntimeValueFromConfig( + 'string', + options.method, + context, + ); + break; + case 'isCors': + fetchOptions.isCors = getRuntimeValueFromConfig( + 'boolean', + options.isCors, + context, + ); + break; + case 'timeout': + fetchOptions.timeout = getRuntimeValueFromConfig( + 'number', + options.timeout, + context, + ); + break; + case 'headers': + fetchOptions.headers = buildJsonObj(options.headers!, context); + break; + case 'v': + fetchOptions.v = getRuntimeValueFromConfig( + 'string', + options.v, + context, + ); + break; + default: + // 其余的除了做表达式或者 function 的转换,直接透传 + fetchOptions[key] = getRuntimeValueFromConfig( + 'unknown', + options[key], + context, + ); + } + }); + return fetchOptions; }; }; diff --git a/packages/datasource-engine/test/scenes/p0-0-sync-datasources-dealt-in-serial/_macro-abnormal.ts b/packages/datasource-engine/test/scenes/p0-0-sync-datasources-dealt-in-serial/_macro-abnormal.ts index f81db6b49..f0fa43060 100644 --- a/packages/datasource-engine/test/scenes/p0-0-sync-datasources-dealt-in-serial/_macro-abnormal.ts +++ b/packages/datasource-engine/test/scenes/p0-0-sync-datasources-dealt-in-serial/_macro-abnormal.ts @@ -25,72 +25,72 @@ export const abnormalScene: Macro<[ ]> = async ( t: ExecutionContext<{ clock: SinonFakeTimers }>, { create, dataSource }, - ) => { - const { clock } = t.context; +) => { + const { clock } = t.context; - const USER_DATA = { - id: 9527, - name: 'Alice', - }; - const ERROR_MSG = 'test error'; - const fetchHandler = sinon.fake(async ({ uri }) => { - await delay(100); - if (/user/.test(uri)) { - return { data: USER_DATA }; - } else { - throw new Error(ERROR_MSG); - } - }); - - const context = new MockContext>({}, (ctx) => create(bindRuntimeContext(dataSource, ctx), ctx, { - requestHandlersMap: { - fetch: fetchHandler, - }, - })); - - const setState = sinon.spy(context, 'setState'); - - // 一开始应该是初始状态 - t.is(context.dataSourceMap.user.status, RuntimeDataSourceStatus.Initial); - t.is(context.dataSourceMap.orders.status, RuntimeDataSourceStatus.Initial); - - const loading = context.reloadDataSource(); - - await clock.tickAsync(50); - - // 中间应该有 loading 态 - t.is(context.dataSourceMap.user.status, RuntimeDataSourceStatus.Loading); - - await clock.tickAsync(50); - - t.is(context.dataSourceMap.orders.status, RuntimeDataSourceStatus.Loading); - - await Promise.all([clock.runAllAsync(), loading]); - - // 最后 user 应该成功了,loaded - t.is(context.dataSourceMap.user.status, RuntimeDataSourceStatus.Loaded); - // 最后 orders 应该失败了,error 状态 - t.is(context.dataSourceMap.orders.status, RuntimeDataSourceStatus.Error); - - // 检查数据源的数据 - t.deepEqual(context.dataSourceMap.user.data, USER_DATA); - t.is(context.dataSourceMap.user.error, undefined); - t.deepEqual(context.dataSourceMap.orders.data, undefined); - t.not(context.dataSourceMap.orders.error, undefined); - t.regex(context.dataSourceMap.orders.error!.message, new RegExp(ERROR_MSG)); - - // 检查状态数据 - t.assert(setState.calledOnce); - t.deepEqual(context.state.user, USER_DATA); - t.is(context.state.orders, undefined); - - // fetchHandler 应该被调用了2次 - t.assert(fetchHandler.calledTwice); - - const firstListItemOptions = DATA_SOURCE_SCHEMA.list[0].options; - const fetchHandlerCallArgs = fetchHandler.firstCall.args[0]; - // 检查调用参数 - t.is(firstListItemOptions.uri, fetchHandlerCallArgs.uri); + const USER_DATA = { + id: 9527, + name: 'Alice', }; + const ERROR_MSG = 'test error'; + const fetchHandler = sinon.fake(async ({ uri }) => { + await delay(100); + if (/user/.test(uri)) { + return { data: USER_DATA }; + } else { + throw new Error(ERROR_MSG); + } + }); + + const context = new MockContext>({}, (ctx) => create(bindRuntimeContext(dataSource, ctx), ctx, { + requestHandlersMap: { + fetch: fetchHandler, + }, + })); + + const setState = sinon.spy(context, 'setState'); + + // 一开始应该是初始状态 + t.is(context.dataSourceMap.user.status, RuntimeDataSourceStatus.Initial); + t.is(context.dataSourceMap.orders.status, RuntimeDataSourceStatus.Initial); + + const loading = context.reloadDataSource(); + + await clock.tickAsync(50); + + // 中间应该有 loading 态 + t.is(context.dataSourceMap.user.status, RuntimeDataSourceStatus.Loading); + + await clock.tickAsync(50); + + t.is(context.dataSourceMap.orders.status, RuntimeDataSourceStatus.Loading); + + await Promise.all([clock.runAllAsync(), loading]); + + // 最后 user 应该成功了,loaded + t.is(context.dataSourceMap.user.status, RuntimeDataSourceStatus.Loaded); + // 最后 orders 应该失败了,error 状态 + t.is(context.dataSourceMap.orders.status, RuntimeDataSourceStatus.Error); + + // 检查数据源的数据 + t.deepEqual(context.dataSourceMap.user.data, USER_DATA); + t.is(context.dataSourceMap.user.error, undefined); + t.deepEqual(context.dataSourceMap.orders.data, undefined); + t.not(context.dataSourceMap.orders.error, undefined); + t.regex(context.dataSourceMap.orders.error!.message, new RegExp(ERROR_MSG)); + + // 检查状态数据 + t.assert(setState.calledOnce); + t.deepEqual(context.state.user, USER_DATA); + t.is(context.state.orders, undefined); + + // fetchHandler 应该被调用了2次 + t.assert(fetchHandler.calledTwice); + + const firstListItemOptions = DATA_SOURCE_SCHEMA.list[0].options; + const fetchHandlerCallArgs = fetchHandler.firstCall.args[0]; + // 检查调用参数 + t.is(firstListItemOptions.uri, fetchHandlerCallArgs.uri); +}; abnormalScene.title = (providedTitle) => providedTitle || 'abnormal scene';