diff --git a/modules/code-generator/src/generator/ProjectBuilder.ts b/modules/code-generator/src/generator/ProjectBuilder.ts index ad513b70a..2a1282d6e 100644 --- a/modules/code-generator/src/generator/ProjectBuilder.ts +++ b/modules/code-generator/src/generator/ProjectBuilder.ts @@ -280,6 +280,8 @@ export class ProjectBuilder implements IProjectBuilder { postProcessors: this.postProcessors, contextData: { inStrictMode: this.inStrictMode, + tolerateEvalErrors: true, + evalErrorsHandler: '', ...this.extraContextData, }, ...options, diff --git a/modules/code-generator/src/plugins/component/rax/jsx.ts b/modules/code-generator/src/plugins/component/rax/jsx.ts index 32faded5c..ebc72104f 100644 --- a/modules/code-generator/src/plugins/component/rax/jsx.ts +++ b/modules/code-generator/src/plugins/component/rax/jsx.ts @@ -62,6 +62,7 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => const ir = next.ir as IContainerInfo; const rootScope = Scope.createRootScope(); + const { tolerateEvalErrors = true, evalErrorsHandler = '' } = next.contextData; // Rax 构建到小程序的时候,不能给组件起起别名,得直接引用,故这里将所有的别名替换掉 // 先收集下所有的 alias 的映射 @@ -86,7 +87,9 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => // 3. 通过 this.xxx 能拿到的东西太多了,而且自定义的 methods 可能会无意间破坏 Rax 框架或小程序框架在页面 this 上的东东 const customHandlers: HandlerSet = { expression(input: JSExpression, scope: IScope) { - return transformJsExpr(generateExpression(input, scope), scope); + return transformJsExpr(generateExpression(input, scope), scope, { + dontWrapEval: !tolerateEvalErrors, + }); }, function(input, scope: IScope) { return transformThis2Context(input.value || 'null', scope); @@ -138,17 +141,14 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => type: ChunkType.STRING, fileType: cfg.fileType, name: COMMON_CHUNK_NAME.CustomContent, - content: ` - + content: [ + tolerateEvalErrors && + ` function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} + } catch (error) { + ${evalErrorsHandler} } } @@ -156,16 +156,57 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => const res = __$$eval(expr); return Array.isArray(res) ? res : []; } - + `, + ` function __$$createChildContext(oldContext, ext) { return Object.assign({}, oldContext, ext); } - `, + ] + .filter(Boolean) + .join('\n'), linkAfter: [COMMON_CHUNK_NAME.FileExport], }); return next; + + function generateRaxLoopCtrl( + nodeItem: NodeSchema, + scope: IScope, + config?: NodeGeneratorConfig, + next?: NodePlugin, + ): CodePiece[] { + if (nodeItem.loop) { + const loopItemName = nodeItem.loopArgs?.[0] || 'item'; + const loopIndexName = nodeItem.loopArgs?.[1] || 'index'; + const subScope = scope.createSubScope([loopItemName, loopIndexName]); + const pieces: CodePiece[] = next ? next(nodeItem, subScope, config) : []; + + const loopDataExpr = tolerateEvalErrors + ? `__$$evalArray(() => (${transformThis2Context( + generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }), + scope, + )}))` + : `(${transformThis2Context( + generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }), + scope, + )})`; + + pieces.unshift({ + value: `${loopDataExpr}.map((${loopItemName}, ${loopIndexName}) => ((__$$context) => (`, + type: PIECE_TYPE.BEFORE, + }); + + pieces.push({ + value: `))(__$$createChildContext(__$$context, { ${loopItemName}, ${loopIndexName} })))`, + type: PIECE_TYPE.AFTER, + }); + + return pieces; + } + + return next ? next(nodeItem, scope, config) : []; + } }; return plugin; @@ -189,39 +230,6 @@ function isImportAliasDefineChunk(chunk: ICodeChunk): chunk is ICodeChunk & { ); } -function generateRaxLoopCtrl( - nodeItem: NodeSchema, - scope: IScope, - config?: NodeGeneratorConfig, - next?: NodePlugin, -): CodePiece[] { - if (nodeItem.loop) { - const loopItemName = nodeItem.loopArgs?.[0] || 'item'; - const loopIndexName = nodeItem.loopArgs?.[1] || 'index'; - const subScope = scope.createSubScope([loopItemName, loopIndexName]); - const pieces: CodePiece[] = next ? next(nodeItem, subScope, config) : []; - - const loopDataExpr = `__$$evalArray(() => (${transformThis2Context( - generateCompositeType(nodeItem.loop, scope, { handlers: config?.handlers }), - scope, - )}))`; - - pieces.unshift({ - value: `${loopDataExpr}.map((${loopItemName}, ${loopIndexName}) => ((__$$context) => (`, - type: PIECE_TYPE.BEFORE, - }); - - pieces.push({ - value: `))(__$$createChildContext(__$$context, { ${loopItemName}, ${loopIndexName} })))`, - type: PIECE_TYPE.AFTER, - }); - - return pieces; - } - - return next ? next(nodeItem, scope, config) : []; -} - function generateNodeAttrForRax( this: { cfg: PluginConfig }, attrData: { attrName: string; attrValue: CompositeValue }, diff --git a/modules/code-generator/src/plugins/component/react/jsx.ts b/modules/code-generator/src/plugins/component/react/jsx.ts index d6f7cf932..8d3dc3160 100644 --- a/modules/code-generator/src/plugins/component/react/jsx.ts +++ b/modules/code-generator/src/plugins/component/react/jsx.ts @@ -42,12 +42,14 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => ...pre, }; + const { tolerateEvalErrors = true, evalErrorsHandler = '' } = next.contextData; + // 这里会将内部的一些子上下文的访问(this.xxx)转换为 __$$context.xxx 的形式 // 与 Rax 所不同的是,这里不会将最顶层的 this 转换掉 const customHandlers: HandlerSet = { expression(input: JSExpression, scope: IScope) { return transformJsExpr(generateExpression(input, scope), scope, { - dontWrapEval: true, + dontWrapEval: !tolerateEvalErrors, dontTransformThis2ContextAtRootScope: true, }); }, @@ -111,7 +113,23 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => type: ChunkType.STRING, fileType: cfg.fileType, name: COMMON_CHUNK_NAME.CustomContent, - content: ` + content: [ + tolerateEvalErrors && + ` + function __$$eval(expr) { + try { + return expr(); + } catch (error) { + ${evalErrorsHandler} + } + } + + function __$$evalArray(expr) { + const res = __$$eval(expr); + return Array.isArray(res) ? res : []; + } + `, + ` function __$$createChildContext(oldContext, ext) { const childContext = { ...oldContext, @@ -121,6 +139,9 @@ const pluginFactory: BuilderComponentPluginFactory = (config?) => return childContext; } `, + ] + .filter(Boolean) + .join('\n'), linkAfter: [COMMON_CHUNK_NAME.FileExport], }); return next; diff --git a/modules/code-generator/src/solutions/icejs.ts b/modules/code-generator/src/solutions/icejs.ts index 4d96ae64b..0a9d5c60d 100644 --- a/modules/code-generator/src/solutions/icejs.ts +++ b/modules/code-generator/src/solutions/icejs.ts @@ -1,4 +1,4 @@ -import { IProjectBuilder } from '../types'; +import { IProjectBuilder, IProjectBuilderOptions } from '../types'; import { createProjectBuilder } from '../generator/ProjectBuilder'; @@ -22,15 +22,14 @@ import icejs from '../plugins/project/framework/icejs'; import { prettier } from '../postprocessor'; -export type IceJsProjectBuilderOptions = { - inStrictMode?: boolean; -}; +export interface IceJsProjectBuilderOptions extends IProjectBuilderOptions {} export default function createIceJsProjectBuilder( options?: IceJsProjectBuilderOptions, ): IProjectBuilder { return createProjectBuilder({ inStrictMode: options?.inStrictMode, + extraContextData: { ...options }, template: icejs.template, plugins: { components: [ diff --git a/modules/code-generator/src/solutions/rax-app.ts b/modules/code-generator/src/solutions/rax-app.ts index 690b49886..c2b3adac5 100644 --- a/modules/code-generator/src/solutions/rax-app.ts +++ b/modules/code-generator/src/solutions/rax-app.ts @@ -1,4 +1,4 @@ -import { IProjectBuilder } from '../types'; +import { IProjectBuilder, IProjectBuilderOptions } from '../types'; import { createProjectBuilder } from '../generator/ProjectBuilder'; @@ -22,8 +22,14 @@ import raxApp from '../plugins/project/framework/rax'; import { prettier } from '../postprocessor'; import { RaxFrameworkOptions } from '../plugins/project/framework/rax/types/RaxFrameworkOptions'; -export default function createRaxProjectBuilder(options?: RaxFrameworkOptions): IProjectBuilder { +export interface RaxProjectBuilderOptions extends IProjectBuilderOptions, RaxFrameworkOptions {} + +export default function createRaxProjectBuilder( + options?: RaxProjectBuilderOptions, +): IProjectBuilder { return createProjectBuilder({ + inStrictMode: options?.inStrictMode, + extraContextData: { ...options }, template: raxApp.template, plugins: { components: [ diff --git a/modules/code-generator/src/types/core.ts b/modules/code-generator/src/types/core.ts index 841b8fe02..b68f21ecc 100644 --- a/modules/code-generator/src/types/core.ts +++ b/modules/code-generator/src/types/core.ts @@ -63,10 +63,7 @@ export interface ICodeStruct extends IBaseCodeStruct { } /** 上下文数据,用来在插件之间共享一些数据 */ -export interface IContextData { - /** 是否处于严格模式 */ - inStrictMode?: boolean; - +export interface IContextData extends IProjectBuilderOptions { /** 是否使用了 Ref 的 API (this.$/this.$$) */ useRefApi?: boolean; @@ -139,6 +136,33 @@ export interface IProjectPlugins { [slotName: string]: BuilderComponentPlugin[]; } +export interface IProjectBuilderOptions { + /** 是否处于严格模式(默认: 否) */ + inStrictMode?: boolean; + + /** + * 是否要容忍对 JSExpression 求值时的异常 + * 默认:true + * 注: 如果容忍异常,则会在求值时包裹 try-catch 块, + * catch 到异常时默认会抛出一个 CustomEvent 事件里面包含异常信息和求值的表达式 + */ + tolerateEvalErrors?: boolean; + + /** + * 容忍异常的时候的的错误处理语句块 + * 默认: 无 + * 您可以设置为一个语句块,比如: + * window.dispatchEvent(new CustomEvent('lowcode-eval-error', { error, expr })) + * + * 一般可以结合埋点监控模块用来监控求值异常 + * + * 其中: + * - error: 异常信息 + * - expr: 求值的表达式 + */ + evalErrorsHandler?: string; +} + export interface IProjectBuilder { generateProject: (schema: ProjectSchema | string) => Promise; } diff --git a/modules/code-generator/test-cases/rax-app/demo01/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo01/expected/demo-project/src/pages/Home/index.jsx index 5e39ecbac..41a2a143c 100644 --- a/modules/code-generator/test-cases/rax-app/demo01/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo01/expected/demo-project/src/pages/Home/index.jsx @@ -129,13 +129,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo02/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo02/expected/demo-project/src/pages/Home/index.jsx index caaa64567..7bfda59ca 100644 --- a/modules/code-generator/test-cases/rax-app/demo02/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo02/expected/demo-project/src/pages/Home/index.jsx @@ -336,13 +336,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Detail/index.jsx b/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Detail/index.jsx index f4cff2fc6..3d0f24e47 100644 --- a/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Detail/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Detail/index.jsx @@ -138,13 +138,7 @@ export default Detail$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Home/index.jsx index 8b7719f92..9fcbc0d9c 100644 --- a/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/Home/index.jsx @@ -138,13 +138,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/List/index.jsx b/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/List/index.jsx index 9759b157d..bc49eceed 100644 --- a/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/List/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo03/expected/demo-project/src/pages/List/index.jsx @@ -141,13 +141,7 @@ export default List$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo04/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo04/expected/demo-project/src/pages/Home/index.jsx index f28ab5284..674b7f5ce 100644 --- a/modules/code-generator/test-cases/rax-app/demo04/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo04/expected/demo-project/src/pages/Home/index.jsx @@ -133,13 +133,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo05/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo05/expected/demo-project/src/pages/Home/index.jsx index 6dee43f56..2deb7a9cb 100644 --- a/modules/code-generator/test-cases/rax-app/demo05/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo05/expected/demo-project/src/pages/Home/index.jsx @@ -135,13 +135,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo06-jsslot/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo06-jsslot/expected/demo-project/src/pages/Home/index.jsx index 42d65d8ec..b557fce86 100644 --- a/modules/code-generator/test-cases/rax-app/demo06-jsslot/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo06-jsslot/expected/demo-project/src/pages/Home/index.jsx @@ -141,13 +141,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo07-newline-in-props/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo07-newline-in-props/expected/demo-project/src/pages/Home/index.jsx index cc14e59b6..e61d7b748 100644 --- a/modules/code-generator/test-cases/rax-app/demo07-newline-in-props/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo07-newline-in-props/expected/demo-project/src/pages/Home/index.jsx @@ -135,13 +135,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo08-jsslot-with-multiple-children/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo08-jsslot-with-multiple-children/expected/demo-project/src/pages/Home/index.jsx index 3b2ba46ea..59b2d16fd 100644 --- a/modules/code-generator/test-cases/rax-app/demo08-jsslot-with-multiple-children/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo08-jsslot-with-multiple-children/expected/demo-project/src/pages/Home/index.jsx @@ -141,13 +141,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo09-jsslot-with-conditional-children/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo09-jsslot-with-conditional-children/expected/demo-project/src/pages/Home/index.jsx index 0b8f800ab..e2828e5cc 100644 --- a/modules/code-generator/test-cases/rax-app/demo09-jsslot-with-conditional-children/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo09-jsslot-with-conditional-children/expected/demo-project/src/pages/Home/index.jsx @@ -144,13 +144,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo10-jsslot-with-loop-children/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo10-jsslot-with-loop-children/expected/demo-project/src/pages/Home/index.jsx index 5514f581a..bedeed024 100644 --- a/modules/code-generator/test-cases/rax-app/demo10-jsslot-with-loop-children/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo10-jsslot-with-loop-children/expected/demo-project/src/pages/Home/index.jsx @@ -146,13 +146,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo11-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx b/modules/code-generator/test-cases/rax-app/demo11-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx index c88f22314..27149fefe 100644 --- a/modules/code-generator/test-cases/rax-app/demo11-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo11-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx @@ -158,13 +158,7 @@ export default Aaaa$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo12-refs/expected/demo-project/src/pages/Home/index.jsx b/modules/code-generator/test-cases/rax-app/demo12-refs/expected/demo-project/src/pages/Home/index.jsx index 309e6cd96..5d6f4d1e0 100644 --- a/modules/code-generator/test-cases/rax-app/demo12-refs/expected/demo-project/src/pages/Home/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo12-refs/expected/demo-project/src/pages/Home/index.jsx @@ -149,13 +149,7 @@ export default Home$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/rax-app/demo13-datasource-prop/expected/demo-project/src/pages/Example/index.jsx b/modules/code-generator/test-cases/rax-app/demo13-datasource-prop/expected/demo-project/src/pages/Example/index.jsx index 370aab992..f601c582d 100644 --- a/modules/code-generator/test-cases/rax-app/demo13-datasource-prop/expected/demo-project/src/pages/Example/index.jsx +++ b/modules/code-generator/test-cases/rax-app/demo13-datasource-prop/expected/demo-project/src/pages/Example/index.jsx @@ -160,13 +160,7 @@ export default Example$$Page; function __$$eval(expr) { try { return expr(); - } catch (err) { - try { - if (window.handleEvalError) { - window.handleEvalError('Failed to evaluate: ', expr, err); - } - } catch (e) {} - } + } catch (error) {} } function __$$evalArray(expr) { diff --git a/modules/code-generator/test-cases/react-app/demo1/expected/demo-project/src/pages/Test/index.jsx b/modules/code-generator/test-cases/react-app/demo1/expected/demo-project/src/pages/Test/index.jsx index 2d712d5ec..581f3c883 100644 --- a/modules/code-generator/test-cases/react-app/demo1/expected/demo-project/src/pages/Test/index.jsx +++ b/modules/code-generator/test-cases/react-app/demo1/expected/demo-project/src/pages/Test/index.jsx @@ -131,7 +131,7 @@ class Test$$Page extends React.Component { return (
this.state.colNum)} style={{}} ref={this._refsManager.linkRef("testForm")} > @@ -154,9 +154,9 @@ class Test$$Page extends React.Component { {["a", "b", "c"].map((item, index) => ((__$$context) => - !!(index >= 1) && ( + !!__$$eval(() => index >= 1) && ( ))(__$$createChildContext(__$$context, { item, index })) )} @@ -170,6 +170,17 @@ class Test$$Page extends React.Component { export default Test$$Page; +function __$$eval(expr) { + try { + return expr(); + } catch (error) {} +} + +function __$$evalArray(expr) { + const res = __$$eval(expr); + return Array.isArray(res) ? res : []; +} + function __$$createChildContext(oldContext, ext) { const childContext = { ...oldContext, diff --git a/modules/code-generator/test-cases/react-app/demo2-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx b/modules/code-generator/test-cases/react-app/demo2-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx index 91e1630a7..d996564a9 100644 --- a/modules/code-generator/test-cases/react-app/demo2-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx +++ b/modules/code-generator/test-cases/react-app/demo2-utils-name-alias/expected/demo-project/src/pages/Aaaa/index.jsx @@ -87,6 +87,17 @@ class Aaaa$$Page extends React.Component { export default Aaaa$$Page; +function __$$eval(expr) { + try { + return expr(); + } catch (error) {} +} + +function __$$evalArray(expr) { + const res = __$$eval(expr); + return Array.isArray(res) ? res : []; +} + function __$$createChildContext(oldContext, ext) { const childContext = { ...oldContext, diff --git a/modules/code-generator/test-cases/react-app/demo2/expected/demo-project/src/pages/Test/index.jsx b/modules/code-generator/test-cases/react-app/demo2/expected/demo-project/src/pages/Test/index.jsx index c9f737575..eda8c2fbe 100644 --- a/modules/code-generator/test-cases/react-app/demo2/expected/demo-project/src/pages/Test/index.jsx +++ b/modules/code-generator/test-cases/react-app/demo2/expected/demo-project/src/pages/Test/index.jsx @@ -43,12 +43,12 @@ class Test$$Page extends React.Component { return (
this.state.colNum)} style={{}} ref={this._refsManager.linkRef("testForm")} > this.i18n("i18n-jwg27yo4"))} name="name" initValue="李雷" > @@ -92,6 +92,17 @@ class Test$$Page extends React.Component { export default Test$$Page; +function __$$eval(expr) { + try { + return expr(); + } catch (error) {} +} + +function __$$evalArray(expr) { + const res = __$$eval(expr); + return Array.isArray(res) ? res : []; +} + function __$$createChildContext(oldContext, ext) { const childContext = { ...oldContext, diff --git a/modules/code-generator/test-cases/react-app/demo3/expected/demo-project/src/pages/Test/index.jsx b/modules/code-generator/test-cases/react-app/demo3/expected/demo-project/src/pages/Test/index.jsx index ec43915d2..ec873882c 100644 --- a/modules/code-generator/test-cases/react-app/demo3/expected/demo-project/src/pages/Test/index.jsx +++ b/modules/code-generator/test-cases/react-app/demo3/expected/demo-project/src/pages/Test/index.jsx @@ -45,7 +45,7 @@ class Test$$Page extends React.Component { const { state } = __$$context; return (
- + this.state.title)} /> this.state.modalVisible)} footer="" __events={{ eventDataList: [ @@ -317,7 +317,7 @@ class Test$$Page extends React.Component { this.state.records)} columns={[ { title: "发布名称", @@ -342,7 +342,7 @@ class Test$$Page extends React.Component { }, { title: "发布时间", dataIndex: "publish_id" }, ]} - actions={this.actions || []} + actions={__$$eval(() => this.actions || [])} getActions={function () { return this.getActions.apply( this, @@ -362,6 +362,17 @@ class Test$$Page extends React.Component { export default Test$$Page; +function __$$eval(expr) { + try { + return expr(); + } catch (error) {} +} + +function __$$evalArray(expr) { + const res = __$$eval(expr); + return Array.isArray(res) ? res : []; +} + function __$$createChildContext(oldContext, ext) { const childContext = { ...oldContext, diff --git a/modules/code-generator/test-cases/react-app/demo6-literal-condition/expected/demo-project/src/pages/Test/index.jsx b/modules/code-generator/test-cases/react-app/demo6-literal-condition/expected/demo-project/src/pages/Test/index.jsx index 510685aea..5dc49fc62 100644 --- a/modules/code-generator/test-cases/react-app/demo6-literal-condition/expected/demo-project/src/pages/Test/index.jsx +++ b/modules/code-generator/test-cases/react-app/demo6-literal-condition/expected/demo-project/src/pages/Test/index.jsx @@ -131,7 +131,7 @@ class Test$$Page extends React.Component { return (
this.state.colNum)} style={{}} ref={this._refsManager.linkRef("testForm")} > @@ -156,7 +156,7 @@ class Test$$Page extends React.Component { ((__$$context) => !!false && ( ))(__$$createChildContext(__$$context, { item, index })) )} @@ -170,6 +170,17 @@ class Test$$Page extends React.Component { export default Test$$Page; +function __$$eval(expr) { + try { + return expr(); + } catch (error) {} +} + +function __$$evalArray(expr) { + const res = __$$eval(expr); + return Array.isArray(res) ? res : []; +} + function __$$createChildContext(oldContext, ext) { const childContext = { ...oldContext, diff --git a/modules/code-generator/test-cases/react-app/demo7-literal-condition2/expected/demo-project/src/pages/Test/index.jsx b/modules/code-generator/test-cases/react-app/demo7-literal-condition2/expected/demo-project/src/pages/Test/index.jsx index 591da2fcf..79fe13a04 100644 --- a/modules/code-generator/test-cases/react-app/demo7-literal-condition2/expected/demo-project/src/pages/Test/index.jsx +++ b/modules/code-generator/test-cases/react-app/demo7-literal-condition2/expected/demo-project/src/pages/Test/index.jsx @@ -200,7 +200,7 @@ class Test$$Page extends React.Component { > this.state.isModifyDialogVisible)} okText="确认" okType="" forceRender={false} @@ -293,13 +293,13 @@ class Test$$Page extends React.Component { flex={true} style={{ marginBottom: "24px" }} > - + this.state.currentStep)}> - {!!(this.state.currentStep === 0) && ( + {!!__$$eval(() => this.state.currentStep === 0) && ( this.state.customerProjectInfo + )} onValuesChange={function () { this.onValuesChange.apply( this, @@ -391,10 +393,11 @@ class Test$$Page extends React.Component { { label: "UI定制", value: "4", disabled: false }, ]} style={{ width: "600px" }} - disabled={ - this.state.customerProjectInfo.id > 0 && - !this.state.isModifyStatus - } + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} /> 0 && - !this.state.isModifyStatus - } + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} /> 0 && - !this.state.isModifyStatus - } + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} /> 0 && - !this.state.isModifyStatus - } + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} min={0} size="middle" /> @@ -543,7 +550,7 @@ class Test$$Page extends React.Component { )} - {!!(this.state.currentStep === 1) && ( + {!!__$$eval(() => this.state.currentStep === 1) && ( this.state.customerProjectInfo + )} onValuesChange={function () { this.onValuesChange.apply( this, @@ -614,11 +623,12 @@ class Test$$Page extends React.Component { > 0 && - !this.state.isModifyStatus - } + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} /> 0 && - !this.state.isModifyStatus - } + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} defaultValue="" min={0} /> @@ -767,11 +783,12 @@ class Test$$Page extends React.Component { > 0 && - !this.state.isModifyStatus - } + options={__$$eval(() => this.state.osVersionsArray)} + disabled={__$$eval( + () => + this.state.customerProjectInfo.id > 0 && + !this.state.isModifyStatus + )} placeholder="请选择系统版本" /> @@ -829,11 +847,12 @@ class Test$$Page extends React.Component { type="primary" htmlType="submit" style={{ float: "right", marginLeft: "20px" }} - loading={ - this.state.LOADING_ADD_OR_UPDATE_CUSTOMER_PROJECT - } + loading={__$$eval( + () => + this.state.LOADING_ADD_OR_UPDATE_CUSTOMER_PROJECT + )} > - {this.state.secondCommitText} + {__$$eval(() => this.state.secondCommitText)} - {!!(this.state.customerProjectInfo.status > 2) && ( + {!!__$$eval( + () => this.state.customerProjectInfo.status > 2 + ) && (