lcd-router-webpack-plugin 9.2.10 → 9.2.11-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/babel/index.d.ts.map +1 -1
- package/lib/babel/index.js +2 -0
- package/lib/babel/index.js.map +1 -1
- package/lib/babel/plugins/detect-state-yield-assignment.d.ts +3 -0
- package/lib/babel/plugins/detect-state-yield-assignment.d.ts.map +1 -0
- package/lib/babel/plugins/detect-state-yield-assignment.js +175 -0
- package/lib/babel/plugins/detect-state-yield-assignment.js.map +1 -0
- package/package.json +1 -1
package/lib/babel/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/babel/index.ts"],"names":[],"mappings":";AAGA,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/babel/index.ts"],"names":[],"mappings":";AAGA,wBAoCG"}
|
package/lib/babel/index.js
CHANGED
|
@@ -19,6 +19,8 @@ var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
|
19
19
|
}], [require.resolve("./plugins/enhance-reducer"), {
|
|
20
20
|
pageRootAbs: pathService.getPageRootAbs(),
|
|
21
21
|
reducerName: options.reducerName
|
|
22
|
+
}], [require.resolve("./plugins/detect-state-yield-assignment"), {
|
|
23
|
+
pageRootAbs: pathService.getPageRootAbs()
|
|
22
24
|
}]]
|
|
23
25
|
};
|
|
24
26
|
});
|
package/lib/babel/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_helperPluginUtils","require","_utils","_default","declare","api","options","assertVersion","pathService","PathService","plugins","resolve","srcAbs","getSrcRootAbs","disableBuiltInRoute","pageRootAbs","getPageRootAbs","externals","reducerName","exports","default"],"sources":["../../index.ts"],"sourcesContent":["import { declare } from '@babel/helper-plugin-utils';\nimport { PathService, Options } from '../utils';\n\nexport default declare((api, options: Options) => {\n api.assertVersion(7);\n\n const pathService = new PathService(options);\n\n return {\n plugins: [\n [\n require.resolve('./plugins/replace-source'),\n {\n srcAbs: pathService.getSrcRootAbs(),\n disableBuiltInRoute: options.disableBuiltInRoute,\n },\n ],\n [\n require.resolve('./plugins/external-wrap'),\n {\n pageRootAbs: pathService.getPageRootAbs(),\n externals: options.externals,\n },\n ],\n [\n require.resolve('./plugins/enhance-reducer'),\n {\n pageRootAbs: pathService.getPageRootAbs(),\n reducerName: options.reducerName,\n },\n ],\n ],\n };\n});\n"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAgD,IAAAE,QAAA,GAEjC,IAAAC,0BAAO,EAAC,CAACC,GAAG,EAAEC,OAAgB,KAAK;EAChDD,GAAG,CAACE,aAAa,CAAC,CAAC,CAAC;EAEpB,MAAMC,WAAW,GAAG,IAAIC,kBAAW,CAACH,OAAO,CAAC;EAE5C,OAAO;IACLI,OAAO,EAAE,CACP,CACET,OAAO,CAACU,OAAO,4BAA4B,EAC3C;MACEC,MAAM,EAAEJ,WAAW,CAACK,aAAa,EAAE;MACnCC,mBAAmB,EAAER,OAAO,CAACQ;IAC/B,CAAC,CACF,EACD,CACEb,OAAO,CAACU,OAAO,2BAA2B,EAC1C;MACEI,WAAW,EAAEP,WAAW,CAACQ,cAAc,EAAE;MACzCC,SAAS,EAAEX,OAAO,CAACW;IACrB,CAAC,CACF,EACD,CACEhB,OAAO,CAACU,OAAO,6BAA6B,EAC5C;MACEI,WAAW,EAAEP,WAAW,CAACQ,cAAc,EAAE;MACzCE,WAAW,EAAEZ,OAAO,CAACY;IACvB,CAAC,CACF;EAEL,CAAC;AACH,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","names":["_helperPluginUtils","require","_utils","_default","declare","api","options","assertVersion","pathService","PathService","plugins","resolve","srcAbs","getSrcRootAbs","disableBuiltInRoute","pageRootAbs","getPageRootAbs","externals","reducerName","exports","default"],"sources":["../../index.ts"],"sourcesContent":["import { declare } from '@babel/helper-plugin-utils';\nimport { PathService, Options } from '../utils';\n\nexport default declare((api, options: Options) => {\n api.assertVersion(7);\n\n const pathService = new PathService(options);\n\n return {\n plugins: [\n [\n require.resolve('./plugins/replace-source'),\n {\n srcAbs: pathService.getSrcRootAbs(),\n disableBuiltInRoute: options.disableBuiltInRoute,\n },\n ],\n [\n require.resolve('./plugins/external-wrap'),\n {\n pageRootAbs: pathService.getPageRootAbs(),\n externals: options.externals,\n },\n ],\n [\n require.resolve('./plugins/enhance-reducer'),\n {\n pageRootAbs: pathService.getPageRootAbs(),\n reducerName: options.reducerName,\n },\n ],\n [\n require.resolve('./plugins/detect-state-yield-assignment'),\n {\n pageRootAbs: pathService.getPageRootAbs(),\n },\n ],\n ],\n };\n});\n"],"mappings":";;;;;;AAAA,IAAAA,kBAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAAgD,IAAAE,QAAA,GAEjC,IAAAC,0BAAO,EAAC,CAACC,GAAG,EAAEC,OAAgB,KAAK;EAChDD,GAAG,CAACE,aAAa,CAAC,CAAC,CAAC;EAEpB,MAAMC,WAAW,GAAG,IAAIC,kBAAW,CAACH,OAAO,CAAC;EAE5C,OAAO;IACLI,OAAO,EAAE,CACP,CACET,OAAO,CAACU,OAAO,4BAA4B,EAC3C;MACEC,MAAM,EAAEJ,WAAW,CAACK,aAAa,EAAE;MACnCC,mBAAmB,EAAER,OAAO,CAACQ;IAC/B,CAAC,CACF,EACD,CACEb,OAAO,CAACU,OAAO,2BAA2B,EAC1C;MACEI,WAAW,EAAEP,WAAW,CAACQ,cAAc,EAAE;MACzCC,SAAS,EAAEX,OAAO,CAACW;IACrB,CAAC,CACF,EACD,CACEhB,OAAO,CAACU,OAAO,6BAA6B,EAC5C;MACEI,WAAW,EAAEP,WAAW,CAACQ,cAAc,EAAE;MACzCE,WAAW,EAAEZ,OAAO,CAACY;IACvB,CAAC,CACF,EACD,CACEjB,OAAO,CAACU,OAAO,2CAA2C,EAC1D;MACEI,WAAW,EAAEP,WAAW,CAACQ,cAAc;IACzC,CAAC,CACF;EAEL,CAAC;AACH,CAAC,CAAC;AAAAG,OAAA,CAAAC,OAAA,GAAAjB,QAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-state-yield-assignment.d.ts","sourceRoot":"","sources":["../../../src/babel/plugins/detect-state-yield-assignment.ts"],"names":[],"mappings":";AAOA,wBAoLG"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _helperPluginUtils = require("@babel/helper-plugin-utils");
|
|
8
|
+
var _default = (0, _helperPluginUtils.declare)((api, options) => {
|
|
9
|
+
const {
|
|
10
|
+
assertVersion,
|
|
11
|
+
types: t
|
|
12
|
+
} = api;
|
|
13
|
+
assertVersion(7);
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* 检查节点是否是 this.state 的成员表达式
|
|
17
|
+
* 包括: this.state.xxx, this.state.xx1.xx2 等
|
|
18
|
+
*/
|
|
19
|
+
function isThisStateMemberExpression(node) {
|
|
20
|
+
if (!t.isMemberExpression(node)) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// 找到最顶层的对象
|
|
25
|
+
let current = node;
|
|
26
|
+
while (t.isMemberExpression(current.object)) {
|
|
27
|
+
current = current.object;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// 检查最顶层是否是 this.state
|
|
31
|
+
// 此时 current 应该是类似 this.state 的结构
|
|
32
|
+
if (t.isMemberExpression(current) && t.isThisExpression(current.object) && t.isIdentifier(current.property, {
|
|
33
|
+
name: 'state'
|
|
34
|
+
})) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* 检查表达式中是否包含 yield
|
|
42
|
+
*/
|
|
43
|
+
function containsYieldExpression(node) {
|
|
44
|
+
if (!node) return false;
|
|
45
|
+
if (t.isYieldExpression(node)) {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// 检查二元表达式 (例如: yield fn() || [])
|
|
50
|
+
if (t.isLogicalExpression(node) || t.isBinaryExpression(node)) {
|
|
51
|
+
return containsYieldExpression(node.left) || containsYieldExpression(node.right);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// 检查条件表达式 (例如: (yield fn()) ? a : b)
|
|
55
|
+
if (t.isConditionalExpression(node)) {
|
|
56
|
+
return containsYieldExpression(node.test) || containsYieldExpression(node.consequent) || containsYieldExpression(node.alternate);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// 检查序列表达式 (例如: (a, yield fn()))
|
|
60
|
+
if (t.isSequenceExpression(node)) {
|
|
61
|
+
return node.expressions.some(expr => containsYieldExpression(expr));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// 检查括号表达式
|
|
65
|
+
if (t.isParenthesizedExpression(node)) {
|
|
66
|
+
return containsYieldExpression(node.expression);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// 检查 await 表达式
|
|
70
|
+
if (t.isAwaitExpression(node)) {
|
|
71
|
+
return containsYieldExpression(node.argument);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// 检查一元表达式 (例如: !yield fn())
|
|
75
|
+
if (t.isUnaryExpression(node)) {
|
|
76
|
+
return containsYieldExpression(node.argument);
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* 检查对象属性中是否有 this.state 赋值包含 yield
|
|
83
|
+
*/
|
|
84
|
+
function checkObjectProperties(properties, path, filename) {
|
|
85
|
+
properties.forEach(prop => {
|
|
86
|
+
if (t.isObjectProperty(prop) && containsYieldExpression(prop.value)) {
|
|
87
|
+
// 检查是否在对象展开后的属性中
|
|
88
|
+
throw path.buildCodeFrameError(`[lcd-router-webpack-plugin] 检测到不安全的语法: 在 generator 函数中不能使用 "this.state.xxx = yield fn()" 形式的赋值。\n` + `这种写法可能导致状态更新不生效。\n` + `文件: ${filename}\n` + `建议修改为: const result = yield fn(); this.state.xxx = result;`);
|
|
89
|
+
}
|
|
90
|
+
// 递归检查嵌套对象
|
|
91
|
+
if (t.isObjectProperty(prop) && t.isObjectExpression(prop.value)) {
|
|
92
|
+
checkObjectProperties(prop.value.properties, path, filename);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
name: 'babel-plugin-detect-state-yield-assignment',
|
|
98
|
+
visitor: {
|
|
99
|
+
// 检测赋值表达式
|
|
100
|
+
AssignmentExpression(path, state) {
|
|
101
|
+
const filename = state.filename || 'unknown';
|
|
102
|
+
|
|
103
|
+
// 检查是否在 generator 函数内
|
|
104
|
+
const generatorParent = path.findParent(p => p.isFunctionDeclaration({
|
|
105
|
+
generator: true
|
|
106
|
+
}) || p.isFunctionExpression({
|
|
107
|
+
generator: true
|
|
108
|
+
}) || p.isObjectMethod({
|
|
109
|
+
generator: true
|
|
110
|
+
}) || p.isClassMethod({
|
|
111
|
+
generator: true
|
|
112
|
+
}));
|
|
113
|
+
if (!generatorParent) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const {
|
|
117
|
+
left,
|
|
118
|
+
right
|
|
119
|
+
} = path.node;
|
|
120
|
+
|
|
121
|
+
// 情况1: 直接赋值 this.state.xxx = yield fn()
|
|
122
|
+
// 情况2: 嵌套赋值 this.state.xx1.xx2 = (yield fn222()) || []
|
|
123
|
+
if (isThisStateMemberExpression(left) && containsYieldExpression(right)) {
|
|
124
|
+
throw path.buildCodeFrameError(`[lcd-router-webpack-plugin] 检测到不安全的语法: 在 generator 函数中不能使用 "this.state.xxx = yield fn()" 形式的赋值。\n` + `这种写法可能导致状态更新不生效。\n` + `文件: ${filename}\n` + `建议修改为: const result = yield fn(); this.state.xxx = result;`);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// 情况3: 对象赋值 this.state.f2 = { ...this.state.f2, [xx1]: yield fn() }
|
|
128
|
+
if (isThisStateMemberExpression(left) && t.isObjectExpression(right)) {
|
|
129
|
+
checkObjectProperties(right.properties, path, filename);
|
|
130
|
+
}
|
|
131
|
+
},
|
|
132
|
+
// 检测变量声明中的对象属性
|
|
133
|
+
VariableDeclarator(path, state) {
|
|
134
|
+
const filename = state.filename || 'unknown';
|
|
135
|
+
|
|
136
|
+
// 检查是否在 generator 函数内
|
|
137
|
+
const generatorParent = path.findParent(p => p.isFunctionDeclaration({
|
|
138
|
+
generator: true
|
|
139
|
+
}) || p.isFunctionExpression({
|
|
140
|
+
generator: true
|
|
141
|
+
}) || p.isObjectMethod({
|
|
142
|
+
generator: true
|
|
143
|
+
}) || p.isClassMethod({
|
|
144
|
+
generator: true
|
|
145
|
+
}));
|
|
146
|
+
if (!generatorParent) {
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
const {
|
|
150
|
+
init
|
|
151
|
+
} = path.node;
|
|
152
|
+
|
|
153
|
+
// 检查对象表达式中的属性
|
|
154
|
+
if (t.isObjectExpression(init)) {
|
|
155
|
+
init.properties.forEach(prop => {
|
|
156
|
+
if (t.isObjectProperty(prop)) {
|
|
157
|
+
// 检查属性值是否包含对 this.state 的赋值
|
|
158
|
+
if (t.isAssignmentExpression(prop.value)) {
|
|
159
|
+
const {
|
|
160
|
+
left,
|
|
161
|
+
right
|
|
162
|
+
} = prop.value;
|
|
163
|
+
if (isThisStateMemberExpression(left) && containsYieldExpression(right)) {
|
|
164
|
+
throw path.buildCodeFrameError(`[lcd-router-webpack-plugin] 检测到不安全的语法: 在 generator 函数中不能使用 "this.state.xxx = yield fn()" 形式的赋值。\n` + `这种写法可能导致状态更新不生效。\n` + `文件: ${filename}\n` + `建议修改为: const result = yield fn(); this.state.xxx = result;`);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
};
|
|
173
|
+
});
|
|
174
|
+
exports.default = _default;
|
|
175
|
+
//# sourceMappingURL=detect-state-yield-assignment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-state-yield-assignment.js","names":["_helperPluginUtils","require","_default","declare","api","options","assertVersion","types","t","isThisStateMemberExpression","node","isMemberExpression","current","object","isThisExpression","isIdentifier","property","name","containsYieldExpression","isYieldExpression","isLogicalExpression","isBinaryExpression","left","right","isConditionalExpression","test","consequent","alternate","isSequenceExpression","expressions","some","expr","isParenthesizedExpression","expression","isAwaitExpression","argument","isUnaryExpression","checkObjectProperties","properties","path","filename","forEach","prop","isObjectProperty","value","buildCodeFrameError","isObjectExpression","visitor","AssignmentExpression","state","generatorParent","findParent","p","isFunctionDeclaration","generator","isFunctionExpression","isObjectMethod","isClassMethod","VariableDeclarator","init","isAssignmentExpression","exports","default"],"sources":["../../../detect-state-yield-assignment.ts"],"sourcesContent":["import type * as __babel__core from '@babel/core';\nimport { declare } from '@babel/helper-plugin-utils';\n\ninterface Options {\n pageRootAbs?: string;\n}\n\nexport default declare<Options>((api, options) => {\n const { assertVersion, types: t } = api;\n assertVersion(7);\n\n /**\n * 检查节点是否是 this.state 的成员表达式\n * 包括: this.state.xxx, this.state.xx1.xx2 等\n */\n function isThisStateMemberExpression(node: any): boolean {\n if (!t.isMemberExpression(node)) {\n return false;\n }\n\n // 找到最顶层的对象\n let current = node;\n while (t.isMemberExpression(current.object)) {\n current = current.object;\n }\n\n // 检查最顶层是否是 this.state\n // 此时 current 应该是类似 this.state 的结构\n if (\n t.isMemberExpression(current) &&\n t.isThisExpression(current.object) &&\n t.isIdentifier(current.property, { name: 'state' })\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * 检查表达式中是否包含 yield\n */\n function containsYieldExpression(node: any): boolean {\n if (!node) return false;\n\n if (t.isYieldExpression(node)) {\n return true;\n }\n\n // 检查二元表达式 (例如: yield fn() || [])\n if (t.isLogicalExpression(node) || t.isBinaryExpression(node)) {\n return containsYieldExpression(node.left) || containsYieldExpression(node.right);\n }\n\n // 检查条件表达式 (例如: (yield fn()) ? a : b)\n if (t.isConditionalExpression(node)) {\n return (\n containsYieldExpression(node.test) ||\n containsYieldExpression(node.consequent) ||\n containsYieldExpression(node.alternate)\n );\n }\n\n // 检查序列表达式 (例如: (a, yield fn()))\n if (t.isSequenceExpression(node)) {\n return node.expressions.some((expr: any) => containsYieldExpression(expr));\n }\n\n // 检查括号表达式\n if (t.isParenthesizedExpression(node)) {\n return containsYieldExpression(node.expression);\n }\n\n // 检查 await 表达式\n if (t.isAwaitExpression(node)) {\n return containsYieldExpression(node.argument);\n }\n\n // 检查一元表达式 (例如: !yield fn())\n if (t.isUnaryExpression(node)) {\n return containsYieldExpression(node.argument);\n }\n\n return false;\n }\n\n /**\n * 检查对象属性中是否有 this.state 赋值包含 yield\n */\n function checkObjectProperties(properties: any[], path: any, filename: string) {\n properties.forEach((prop) => {\n if (t.isObjectProperty(prop) && containsYieldExpression(prop.value)) {\n // 检查是否在对象展开后的属性中\n throw path.buildCodeFrameError(\n `[lcd-router-webpack-plugin] 检测到不安全的语法: 在 generator 函数中不能使用 \"this.state.xxx = yield fn()\" 形式的赋值。\\n` +\n `这种写法可能导致状态更新不生效。\\n` +\n `文件: ${filename}\\n` +\n `建议修改为: const result = yield fn(); this.state.xxx = result;`,\n );\n }\n // 递归检查嵌套对象\n if (t.isObjectProperty(prop) && t.isObjectExpression(prop.value)) {\n checkObjectProperties(prop.value.properties, path, filename);\n }\n });\n }\n\n return {\n name: 'babel-plugin-detect-state-yield-assignment',\n visitor: {\n // 检测赋值表达式\n AssignmentExpression(path, state) {\n const filename = state.filename || 'unknown';\n\n // 检查是否在 generator 函数内\n const generatorParent = path.findParent(\n (p) =>\n p.isFunctionDeclaration({ generator: true }) ||\n p.isFunctionExpression({ generator: true }) ||\n p.isObjectMethod({ generator: true }) ||\n p.isClassMethod({ generator: true }),\n );\n\n if (!generatorParent) {\n return;\n }\n\n const { left, right } = path.node;\n\n // 情况1: 直接赋值 this.state.xxx = yield fn()\n // 情况2: 嵌套赋值 this.state.xx1.xx2 = (yield fn222()) || []\n if (isThisStateMemberExpression(left) && containsYieldExpression(right)) {\n throw path.buildCodeFrameError(\n `[lcd-router-webpack-plugin] 检测到不安全的语法: 在 generator 函数中不能使用 \"this.state.xxx = yield fn()\" 形式的赋值。\\n` +\n `这种写法可能导致状态更新不生效。\\n` +\n `文件: ${filename}\\n` +\n `建议修改为: const result = yield fn(); this.state.xxx = result;`,\n );\n }\n\n // 情况3: 对象赋值 this.state.f2 = { ...this.state.f2, [xx1]: yield fn() }\n if (isThisStateMemberExpression(left) && t.isObjectExpression(right)) {\n checkObjectProperties(right.properties, path, filename);\n }\n },\n\n // 检测变量声明中的对象属性\n VariableDeclarator(path, state) {\n const filename = state.filename || 'unknown';\n\n // 检查是否在 generator 函数内\n const generatorParent = path.findParent(\n (p) =>\n p.isFunctionDeclaration({ generator: true }) ||\n p.isFunctionExpression({ generator: true }) ||\n p.isObjectMethod({ generator: true }) ||\n p.isClassMethod({ generator: true }),\n );\n\n if (!generatorParent) {\n return;\n }\n\n const { init } = path.node;\n\n // 检查对象表达式中的属性\n if (t.isObjectExpression(init)) {\n init.properties.forEach((prop) => {\n if (t.isObjectProperty(prop)) {\n // 检查属性值是否包含对 this.state 的赋值\n if (t.isAssignmentExpression(prop.value)) {\n const { left, right } = prop.value;\n if (isThisStateMemberExpression(left) && containsYieldExpression(right)) {\n throw path.buildCodeFrameError(\n `[lcd-router-webpack-plugin] 检测到不安全的语法: 在 generator 函数中不能使用 \"this.state.xxx = yield fn()\" 形式的赋值。\\n` +\n `这种写法可能导致状态更新不生效。\\n` +\n `文件: ${filename}\\n` +\n `建议修改为: const result = yield fn(); this.state.xxx = result;`,\n );\n }\n }\n }\n });\n }\n },\n },\n };\n});\n"],"mappings":"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"}
|