mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-23 01:48:12 +00:00
fix: eslint
This commit is contained in:
parent
9d97e569b1
commit
c346137092
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@ali/lowcode-datasource-engine",
|
"name": "@ali/lowcode-datasource-engine",
|
||||||
"version": "1.0.2-alpha.1",
|
"version": "1.0.2-alpha.2",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"files": [
|
"files": [
|
||||||
"dist",
|
"dist",
|
||||||
|
|||||||
@ -15,6 +15,7 @@ export const reloadDataSourceFactory = (
|
|||||||
dataSource.list
|
dataSource.list
|
||||||
.filter(
|
.filter(
|
||||||
(el: RuntimeDataSourceConfig) =>
|
(el: RuntimeDataSourceConfig) =>
|
||||||
|
// eslint-disable-next-line implicit-arrow-linebreak
|
||||||
el.type === 'urlParams' &&
|
el.type === 'urlParams' &&
|
||||||
(typeof el.isInit === 'boolean' ? el.isInit : true),
|
(typeof el.isInit === 'boolean' ? el.isInit : true),
|
||||||
)
|
)
|
||||||
@ -51,8 +52,13 @@ export const reloadDataSourceFactory = (
|
|||||||
ds.isInit &&
|
ds.isInit &&
|
||||||
ds.isSync
|
ds.isSync
|
||||||
) {
|
) {
|
||||||
// eslint-disable-next-line no-await-in-loop
|
try {
|
||||||
await dataSourceMap[ds.id].load();
|
// eslint-disable-next-line no-await-in-loop
|
||||||
|
await dataSourceMap[ds.id].load();
|
||||||
|
} catch (e) {
|
||||||
|
// TODO: 这个错误直接吃掉?
|
||||||
|
console.error(e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import {
|
|||||||
JSExpression,
|
JSExpression,
|
||||||
JSFunction,
|
JSFunction,
|
||||||
JSONObject,
|
JSONObject,
|
||||||
|
RuntimeOptionsConfig,
|
||||||
} from '@ali/lowcode-types';
|
} from '@ali/lowcode-types';
|
||||||
|
|
||||||
export const transformExpression = (
|
export const transformExpression = (
|
||||||
@ -123,25 +124,70 @@ export const buildOptions = (
|
|||||||
) => {
|
) => {
|
||||||
const { options } = ds;
|
const { options } = ds;
|
||||||
if (!options) return undefined;
|
if (!options) return undefined;
|
||||||
|
// eslint-disable-next-line space-before-function-paren
|
||||||
return function() {
|
return function() {
|
||||||
return {
|
// 默认值
|
||||||
uri: getRuntimeValueFromConfig('string', options.uri, context),
|
const fetchOptions: RuntimeOptionsConfig = {
|
||||||
params: options.params ? buildJsonObj(options.params, context) : {},
|
uri: '',
|
||||||
method: options.method
|
params: {},
|
||||||
? getRuntimeValueFromConfig('string', options.method, context)
|
method: 'GET',
|
||||||
: 'GET',
|
isCors: true,
|
||||||
isCors: options.isCors
|
timeout: 5000,
|
||||||
? getRuntimeValueFromConfig('boolean', options.isCors, context)
|
headers: undefined,
|
||||||
: true,
|
v: '1.0',
|
||||||
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',
|
|
||||||
};
|
};
|
||||||
|
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;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@ -25,72 +25,72 @@ export const abnormalScene: Macro<[
|
|||||||
]> = async (
|
]> = async (
|
||||||
t: ExecutionContext<{ clock: SinonFakeTimers }>,
|
t: ExecutionContext<{ clock: SinonFakeTimers }>,
|
||||||
{ create, dataSource },
|
{ create, dataSource },
|
||||||
) => {
|
) => {
|
||||||
const { clock } = t.context;
|
const { clock } = t.context;
|
||||||
|
|
||||||
const USER_DATA = {
|
const USER_DATA = {
|
||||||
id: 9527,
|
id: 9527,
|
||||||
name: 'Alice',
|
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<Record<string, unknown>>({}, (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 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<Record<string, unknown>>({}, (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';
|
abnormalScene.title = (providedTitle) => providedTitle || 'abnormal scene';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user