@lcap/nasl 4.4.0-beta.9 → 4.4.0-rc.2

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.
Files changed (204) hide show
  1. package/out/generator/genBundleFiles.d.ts.map +1 -1
  2. package/out/generator/genBundleFiles.js +32 -3
  3. package/out/generator/genBundleFiles.js.map +1 -1
  4. package/out/generator/qiankun.d.ts +1 -1
  5. package/out/generator/qiankun.d.ts.map +1 -1
  6. package/out/generator/qiankun.js +4 -0
  7. package/out/generator/qiankun.js.map +1 -1
  8. package/out/generator/release-body/body.d.ts +0 -1
  9. package/out/generator/release-body/body.d.ts.map +1 -1
  10. package/out/generator/release-body/body.js +1 -390
  11. package/out/generator/release-body/body.js.map +1 -1
  12. package/out/generator/release-body/data.d.ts.map +1 -1
  13. package/out/generator/release-body/data.js +1 -10
  14. package/out/generator/release-body/data.js.map +1 -1
  15. package/out/generator/release-body/share-content.js.map +1 -1
  16. package/out/generator/release-body/types.d.ts +1 -0
  17. package/out/generator/release-body/types.d.ts.map +1 -1
  18. package/out/generator/templates/chunk.js +1 -1
  19. package/out/generator/templates/runtime.js +2 -2
  20. package/out/natural/exports/nasl2Files.d.ts.map +1 -0
  21. package/out/natural/{getContext → exports}/nasl2Files.js +4 -4
  22. package/out/natural/exports/nasl2Files.js.map +1 -0
  23. package/out/natural/{transform2BatchActions.d.ts → exports/transform2BatchActions.d.ts} +1 -1
  24. package/out/natural/exports/transform2BatchActions.d.ts.map +1 -0
  25. package/out/natural/{transform2BatchActions.js → exports/transform2BatchActions.js} +68 -19
  26. package/out/natural/exports/transform2BatchActions.js.map +1 -0
  27. package/out/natural/index.d.ts +12 -12
  28. package/out/natural/index.d.ts.map +1 -1
  29. package/out/natural/index.js +12 -14
  30. package/out/natural/index.js.map +1 -1
  31. package/out/natural/{genNaturalTS.d.ts → old/getContext/genNaturalTS.d.ts} +12 -12
  32. package/out/natural/old/getContext/genNaturalTS.d.ts.map +1 -0
  33. package/out/natural/{genNaturalTS.js → old/getContext/genNaturalTS.js} +65 -65
  34. package/out/natural/old/getContext/genNaturalTS.js.map +1 -0
  35. package/out/natural/old/getContext/genTextualNASL.d.ts.map +1 -0
  36. package/out/natural/old/getContext/genTextualNASL.js.map +1 -0
  37. package/out/natural/{getContext → old/getContext}/getUILib.d.ts +1 -1
  38. package/out/natural/old/getContext/getUILib.d.ts.map +1 -0
  39. package/out/natural/{getContext → old/getContext}/getUILib.js +14 -14
  40. package/out/natural/old/getContext/getUILib.js.map +1 -0
  41. package/out/natural/{getContext → old/getContext}/index.d.ts +3 -3
  42. package/out/natural/old/getContext/index.d.ts.map +1 -0
  43. package/out/natural/{getContext → old/getContext}/index.js +4 -4
  44. package/out/natural/old/getContext/index.js.map +1 -0
  45. package/out/natural/old/getContext/naslStdlibMap.d.ts.map +1 -0
  46. package/out/natural/{getContext → old/getContext}/naslStdlibMap.js +10 -10
  47. package/out/natural/old/getContext/naslStdlibMap.js.map +1 -0
  48. package/out/natural/{transformTS2UI.d.ts → old/parser/transformTS2UI.d.ts} +2 -2
  49. package/out/natural/old/parser/transformTS2UI.d.ts.map +1 -0
  50. package/out/natural/{transformTS2UI.js → old/parser/transformTS2UI.js} +12 -13
  51. package/out/natural/old/parser/transformTS2UI.js.map +1 -0
  52. package/out/natural/{transformTSCode.d.ts → old/parser/transformTSCode.d.ts} +1 -1
  53. package/out/natural/old/parser/transformTSCode.d.ts.map +1 -0
  54. package/out/natural/{transformTSCode.js → old/parser/transformTSCode.js} +6 -6
  55. package/out/natural/old/parser/transformTSCode.js.map +1 -0
  56. package/out/natural/{tools.d.ts → old/tools.d.ts} +0 -4
  57. package/out/natural/old/tools.d.ts.map +1 -0
  58. package/out/natural/{tools.js → old/tools.js} +7 -25
  59. package/out/natural/old/tools.js.map +1 -0
  60. package/out/natural/{parseNaturalTS.d.ts → parser/parseNaturalTS.d.ts} +1 -1
  61. package/out/natural/parser/parseNaturalTS.d.ts.map +1 -0
  62. package/out/natural/{parseNaturalTS.js → parser/parseNaturalTS.js} +14 -10
  63. package/out/natural/parser/parseNaturalTS.js.map +1 -0
  64. package/out/natural/{parseNaturalTSXView.d.ts → parser/parseNaturalTSXView.d.ts} +1 -2
  65. package/out/natural/parser/parseNaturalTSXView.d.ts.map +1 -0
  66. package/out/natural/{parseNaturalTSXView.js → parser/parseNaturalTSXView.js} +51 -58
  67. package/out/natural/parser/parseNaturalTSXView.js.map +1 -0
  68. package/out/natural/transforms/checker/checkDataQueryCalleeNameOrder.d.ts +7 -0
  69. package/out/natural/transforms/checker/checkDataQueryCalleeNameOrder.d.ts.map +1 -0
  70. package/out/natural/transforms/checker/checkDataQueryCalleeNameOrder.js +38 -0
  71. package/out/natural/transforms/checker/checkDataQueryCalleeNameOrder.js.map +1 -0
  72. package/out/natural/transforms/checker/checkDefaultValue.d.ts +13 -0
  73. package/out/natural/transforms/checker/checkDefaultValue.d.ts.map +1 -0
  74. package/out/natural/transforms/checker/checkDefaultValue.js +33 -0
  75. package/out/natural/transforms/checker/checkDefaultValue.js.map +1 -0
  76. package/out/natural/transforms/checker/checkViewElement.d.ts +29 -0
  77. package/out/natural/transforms/checker/checkViewElement.d.ts.map +1 -0
  78. package/out/natural/transforms/checker/checkViewElement.js +422 -0
  79. package/out/natural/transforms/checker/checkViewElement.js.map +1 -0
  80. package/out/natural/transforms/checker/index.d.ts +17 -0
  81. package/out/natural/transforms/checker/index.d.ts.map +1 -0
  82. package/out/natural/transforms/checker/index.js +26 -0
  83. package/out/natural/transforms/checker/index.js.map +1 -0
  84. package/out/natural/transforms/transform2Entity.d.ts +8 -1
  85. package/out/natural/transforms/transform2Entity.d.ts.map +1 -1
  86. package/out/natural/transforms/transform2Entity.js +88 -18
  87. package/out/natural/transforms/transform2Entity.js.map +1 -1
  88. package/out/natural/transforms/transform2Enum.d.ts +1 -1
  89. package/out/natural/transforms/transform2Enum.d.ts.map +1 -1
  90. package/out/natural/transforms/transform2Enum.js +5 -1
  91. package/out/natural/transforms/transform2Enum.js.map +1 -1
  92. package/out/natural/transforms/transform2GlobalLogicDeclaration.d.ts +1 -1
  93. package/out/natural/transforms/transform2GlobalLogicDeclaration.d.ts.map +1 -1
  94. package/out/natural/transforms/transform2GlobalLogicDeclaration.js +3 -3
  95. package/out/natural/transforms/transform2GlobalLogicDeclaration.js.map +1 -1
  96. package/out/natural/transforms/transform2Logic.d.ts +1 -1
  97. package/out/natural/transforms/transform2Logic.d.ts.map +1 -1
  98. package/out/natural/transforms/transform2Logic.js +4 -4
  99. package/out/natural/transforms/transform2Logic.js.map +1 -1
  100. package/out/natural/transforms/transform2LogicItem.d.ts +6 -3
  101. package/out/natural/transforms/transform2LogicItem.d.ts.map +1 -1
  102. package/out/natural/transforms/transform2LogicItem.js +99 -110
  103. package/out/natural/transforms/transform2LogicItem.js.map +1 -1
  104. package/out/natural/transforms/transform2MetadataType.d.ts +1 -1
  105. package/out/natural/transforms/transform2MetadataType.d.ts.map +1 -1
  106. package/out/natural/transforms/transform2MetadataType.js +1 -1
  107. package/out/natural/transforms/transform2MetadataType.js.map +1 -1
  108. package/out/natural/transforms/transform2Param.d.ts +4 -0
  109. package/out/natural/transforms/transform2Param.d.ts.map +1 -0
  110. package/out/natural/transforms/transform2Param.js +114 -0
  111. package/out/natural/transforms/transform2Param.js.map +1 -0
  112. package/out/natural/transforms/transform2Structure.d.ts +1 -1
  113. package/out/natural/transforms/transform2Structure.d.ts.map +1 -1
  114. package/out/natural/transforms/transform2Structure.js +13 -2
  115. package/out/natural/transforms/transform2Structure.js.map +1 -1
  116. package/out/natural/transforms/transform2TypeAnnotation.d.ts +1 -1
  117. package/out/natural/transforms/transform2TypeAnnotation.d.ts.map +1 -1
  118. package/out/natural/transforms/transform2TypeAnnotation.js +2 -2
  119. package/out/natural/transforms/transform2TypeAnnotation.js.map +1 -1
  120. package/out/natural/transforms/transform2ValidationRule.d.ts +1 -1
  121. package/out/natural/transforms/transform2ValidationRule.d.ts.map +1 -1
  122. package/out/natural/transforms/transform2ValidationRule.js +1 -1
  123. package/out/natural/transforms/transform2ValidationRule.js.map +1 -1
  124. package/out/natural/transforms/transform2Variable.d.ts +2 -1
  125. package/out/natural/transforms/transform2Variable.d.ts.map +1 -1
  126. package/out/natural/transforms/transform2Variable.js +22 -2
  127. package/out/natural/transforms/transform2Variable.js.map +1 -1
  128. package/out/natural/transforms/transformThemeAndStyle.d.ts +1 -1
  129. package/out/natural/transforms/transformThemeAndStyle.d.ts.map +1 -1
  130. package/out/natural/transforms/transformThemeAndStyle.js +1 -1
  131. package/out/natural/transforms/transformThemeAndStyle.js.map +1 -1
  132. package/out/natural/transforms/utils/fetchFromComments.d.ts +3 -0
  133. package/out/natural/transforms/utils/fetchFromComments.d.ts.map +1 -0
  134. package/out/natural/transforms/utils/fetchFromComments.js +10 -0
  135. package/out/natural/transforms/utils/fetchFromComments.js.map +1 -0
  136. package/out/natural/transforms/utils/misc.d.ts +16 -0
  137. package/out/natural/transforms/utils/misc.d.ts.map +1 -0
  138. package/out/natural/transforms/utils/misc.js +240 -0
  139. package/out/natural/transforms/utils/misc.js.map +1 -0
  140. package/out/natural/transforms/utils/parseDecorator.d.ts +46 -0
  141. package/out/natural/transforms/utils/parseDecorator.d.ts.map +1 -0
  142. package/out/natural/transforms/utils/parseDecorator.js +180 -0
  143. package/out/natural/transforms/utils/parseDecorator.js.map +1 -0
  144. package/out/natural/utils/index.d.ts +59 -0
  145. package/out/natural/utils/index.d.ts.map +1 -0
  146. package/out/natural/utils/index.js +168 -0
  147. package/out/natural/utils/index.js.map +1 -0
  148. package/out/server/extendBaseNode.js +14 -0
  149. package/out/server/extendBaseNode.js.map +1 -1
  150. package/out/server/findReference.js +1 -1
  151. package/out/server/findReference.js.map +1 -1
  152. package/out/server/naslServer.d.ts.map +1 -1
  153. package/out/server/naslServer.js +33 -17
  154. package/out/server/naslServer.js.map +1 -1
  155. package/out/server/translator.js.map +1 -1
  156. package/out/service/autofix/rules/rule-convert-incompatible-assignment-to-union.js.map +1 -1
  157. package/out/service/storage/init.d.ts.map +1 -1
  158. package/out/service/storage/init.js +9 -2
  159. package/out/service/storage/init.js.map +1 -1
  160. package/out/templator/block2nasl/transformBlock2Nasl.js +2 -2
  161. package/out/templator/block2nasl/transformBlock2Nasl.js.map +1 -1
  162. package/out/utils/can-i-use.d.ts.map +1 -1
  163. package/out/utils/can-i-use.js +1 -0
  164. package/out/utils/can-i-use.js.map +1 -1
  165. package/package.json +9 -9
  166. package/sandbox/stdlib/nasl.core.ts +2 -0
  167. package/sandbox/stdlib/nasl.io.ts +1 -1
  168. package/sandbox/stdlib/nasl.oql.ts +2 -0
  169. package/out/natural/genNaturalTS.d.ts.map +0 -1
  170. package/out/natural/genNaturalTS.js.map +0 -1
  171. package/out/natural/genTextualNASL.d.ts.map +0 -1
  172. package/out/natural/genTextualNASL.js.map +0 -1
  173. package/out/natural/getContext/getUILib.d.ts.map +0 -1
  174. package/out/natural/getContext/getUILib.js.map +0 -1
  175. package/out/natural/getContext/index.d.ts.map +0 -1
  176. package/out/natural/getContext/index.js.map +0 -1
  177. package/out/natural/getContext/nasl2Files.d.ts.map +0 -1
  178. package/out/natural/getContext/nasl2Files.js.map +0 -1
  179. package/out/natural/getContext/naslStdlibMap.d.ts.map +0 -1
  180. package/out/natural/getContext/naslStdlibMap.js.map +0 -1
  181. package/out/natural/parseNaturalTS.d.ts.map +0 -1
  182. package/out/natural/parseNaturalTS.js.map +0 -1
  183. package/out/natural/parseNaturalTSXView.d.ts.map +0 -1
  184. package/out/natural/parseNaturalTSXView.js.map +0 -1
  185. package/out/natural/tools.d.ts.map +0 -1
  186. package/out/natural/tools.js.map +0 -1
  187. package/out/natural/transform2BatchActions.d.ts.map +0 -1
  188. package/out/natural/transform2BatchActions.js.map +0 -1
  189. package/out/natural/transformTS2UI.d.ts.map +0 -1
  190. package/out/natural/transformTS2UI.js.map +0 -1
  191. package/out/natural/transformTSCode.d.ts.map +0 -1
  192. package/out/natural/transformTSCode.js.map +0 -1
  193. package/out/natural/transforms/checkViewElement.d.ts +0 -12
  194. package/out/natural/transforms/checkViewElement.d.ts.map +0 -1
  195. package/out/natural/transforms/checkViewElement.js +0 -143
  196. package/out/natural/transforms/checkViewElement.js.map +0 -1
  197. package/out/natural/transforms/utils.d.ts +0 -137
  198. package/out/natural/transforms/utils.d.ts.map +0 -1
  199. package/out/natural/transforms/utils.js +0 -714
  200. package/out/natural/transforms/utils.js.map +0 -1
  201. /package/out/natural/{getContext → exports}/nasl2Files.d.ts +0 -0
  202. /package/out/natural/{genTextualNASL.d.ts → old/getContext/genTextualNASL.d.ts} +0 -0
  203. /package/out/natural/{genTextualNASL.js → old/getContext/genTextualNASL.js} +0 -0
  204. /package/out/natural/{getContext → old/getContext}/naslStdlibMap.d.ts +0 -0
@@ -0,0 +1,422 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkViewElement = exports.validateParentConstraints = exports.validateComponentFeature = void 0;
4
+ const utils_1 = require("../../utils");
5
+ const index_1 = require("./index");
6
+ /**
7
+ * 检查组件是否有指定的prop配置
8
+ * @param tagName 组件标签名
9
+ * @param propName 属性名
10
+ * @param lookupMap 查找Map
11
+ * @returns 返回 true 或 false
12
+ */
13
+ function getComponentProp(tagName, propName, lookupMap) {
14
+ const componentInfo = lookupMap.get(tagName);
15
+ if (!componentInfo) {
16
+ // 组件不存在不校验
17
+ return true;
18
+ }
19
+ return !!componentInfo.propsMap.get(propName) || false;
20
+ }
21
+ /**
22
+ * 检查组件是否有指定的事件配置
23
+ * @param tagName 组件标签名
24
+ * @param eventName 事件名
25
+ * @param lookupMap 查找Map
26
+ * @returns 返回 true 或 false
27
+ */
28
+ function getComponentEvent(tagName, eventName, lookupMap) {
29
+ const componentInfo = lookupMap.get(tagName);
30
+ if (!componentInfo) {
31
+ // 组件不存在不校验
32
+ return true;
33
+ }
34
+ return !!componentInfo.eventsMap.get(eventName) || false;
35
+ }
36
+ /**
37
+ * 检查组件是否有指定的slot配置
38
+ * @param tagName 组件标签名
39
+ * @param slotName 插槽名
40
+ * @param lookupMap 查找Map
41
+ * @returns 返回 true 或 false
42
+ */
43
+ function getComponentSlot(tagName, slotName, lookupMap) {
44
+ const componentInfo = lookupMap.get(tagName);
45
+ if (!componentInfo) {
46
+ // 组件不存在不校验
47
+ return true;
48
+ }
49
+ return !!componentInfo.slotsMap.get(slotName) || false;
50
+ }
51
+ /**
52
+ * 获取组件的完整配置信息
53
+ * @param tagName 组件标签名
54
+ * @param type 查找类型
55
+ * @param lookupMap 查找Map
56
+ * @returns 返回组件配置或null
57
+ */
58
+ function getComponentInfo(tagName, lookupMap, type) {
59
+ if (type === 'prop') {
60
+ return lookupMap.get(tagName)?.component?.propsNames || null;
61
+ }
62
+ else if (type === 'event') {
63
+ return lookupMap.get(tagName)?.component?.eventNames || null;
64
+ }
65
+ else if (type === 'slot') {
66
+ return lookupMap.get(tagName)?.component?.slotNames || null;
67
+ }
68
+ return lookupMap.get(tagName)?.component || null;
69
+ }
70
+ // 通用白名单
71
+ const COMMON_WHITE_LIST = new Set(['_if', 'destination', 'style', 'class', 'ref', 'widthStretch', 'heightStretch']);
72
+ /**
73
+ * 组件特性校验函数
74
+ * @param tag 组件标签名
75
+ * @param featureType 特性类型
76
+ * @param featureName 特性名称
77
+ * @param options 解析状态选项
78
+ * @param attr JSX属性节点
79
+ */
80
+ function validateComponentFeature(tag, featureType, featureName, options, attr) {
81
+ if (!options?.componentsMap)
82
+ return;
83
+ if (COMMON_WHITE_LIST.has(featureName))
84
+ return; // 在白名单中,不报错
85
+ const featureMap = {
86
+ event: getComponentEvent,
87
+ slot: getComponentSlot,
88
+ prop: getComponentProp,
89
+ };
90
+ const getFeatureInfo = featureMap[featureType];
91
+ const hasFeature = getFeatureInfo(tag, featureName, options.componentsMap);
92
+ if (!hasFeature) {
93
+ const supportFeatures = getComponentInfo(tag, options.componentsMap, featureType);
94
+ const featureTypeMap = {
95
+ event: '事件',
96
+ slot: '插槽',
97
+ prop: '属性',
98
+ };
99
+ const typeText = featureTypeMap[featureType];
100
+ const prefix = featureType === 'slot' ? '插槽有:' : featureType === 'prop' ? '属性有:' : '事件列表如下:';
101
+ // 非严格模式下
102
+ if (!options.strictForTraining) {
103
+ // 白名单检查:某些特定组件的特定属性不进行验证
104
+ if (featureType === 'prop') {
105
+ const propWhitelist = new Set(['el-table-column:width']);
106
+ const whitelistKey = `${tag}:${featureName}`;
107
+ if (propWhitelist.has(whitelistKey)) {
108
+ return; // 在白名单中,不报错
109
+ }
110
+ }
111
+ }
112
+ let explain = '';
113
+ if (featureType === 'prop' && ['title', 'label'].includes(featureName)) {
114
+ explain = `, 可能需要使用 slot${utils_1.naslTypes.firstUpperCase(featureName)}`;
115
+ }
116
+ return (0, utils_1.throwError)(options, `组件 ${tag} 不支持${typeText} ${featureName},当前支持的${prefix}${supportFeatures}${explain}`, attr);
117
+ }
118
+ }
119
+ exports.validateComponentFeature = validateComponentFeature;
120
+ /**
121
+ * 解析 parentAccept 表达式,生成友好的错误描述
122
+ * @param parentAccept parentAccept 表达式字符串
123
+ * @returns 友好的错误描述字符串
124
+ */
125
+ function parseParentAcceptDescription(parentAccept) {
126
+ try {
127
+ // 处理数组的 includes 方法:['el-table'].includes(target.tag)
128
+ const arrayIncludesMatch = parentAccept.match(/\[([^\]]+)\]\.includes\(target\.tag\)/);
129
+ if (arrayIncludesMatch) {
130
+ const items = arrayIncludesMatch[1]
131
+ .split(',')
132
+ .map((item) => item.trim().replace(/['"]/g, ''))
133
+ .filter(Boolean);
134
+ return items.join(' 或 ');
135
+ }
136
+ // 处理单个 endsWith:target.tag.endsWith('el-select')
137
+ const endsWithMatch = parentAccept.match(/target\.tag\.endsWith\(['"]([^'"]*)['"]\)/);
138
+ if (endsWithMatch && !parentAccept.includes('||')) {
139
+ return `以 ${endsWithMatch[1]} 结尾的组件`;
140
+ }
141
+ // 处理多个条件用 || 连接的情况
142
+ if (parentAccept.includes('||')) {
143
+ const conditions = parentAccept.split('||').map((condition) => condition.trim());
144
+ const tags = [];
145
+ for (const condition of conditions) {
146
+ // 精确匹配:target.tag === 'el-menu'
147
+ const exactMatch = condition.match(/target\.tag\s*===\s*['"]([^'"]*)['"]/);
148
+ if (exactMatch) {
149
+ tags.push(exactMatch[1]);
150
+ continue;
151
+ }
152
+ // endsWith 匹配:target.tag.endsWith('el-select')
153
+ const endsWithMatch = condition.match(/target\.tag\.endsWith\(['"]([^'"]*)['"]\)/);
154
+ if (endsWithMatch) {
155
+ tags.push(`以 ${endsWithMatch[1]} 结尾的组件`);
156
+ continue;
157
+ }
158
+ // 如果无法解析,添加通用描述
159
+ tags.push('符合条件的组件');
160
+ }
161
+ return tags.join(' 或 ');
162
+ }
163
+ // 处理单个精确匹配:target.tag === 'el-carousel'
164
+ const exactMatch = parentAccept.match(/target\.tag\s*===\s*['"]([^'"]*)['"]/);
165
+ if (exactMatch) {
166
+ return exactMatch[1];
167
+ }
168
+ // 处理 includes 方法但不是数组形式
169
+ if (parentAccept.includes('includes(target.tag)')) {
170
+ return '指定列表中的组件';
171
+ }
172
+ // 兜底返回通用描述
173
+ return '符合条件的父组件';
174
+ }
175
+ catch (error) {
176
+ return '符合条件的父组件';
177
+ }
178
+ }
179
+ // 表单组件变形映射表
180
+ const formComponentMap = {
181
+ 'el-input': 'el-form-input',
182
+ 'el-select': 'el-form-select',
183
+ 'el-cascader': 'el-form-cascader',
184
+ 'el-checkbox-group': 'el-form-checkbox-group',
185
+ 'el-input-number': 'el-form-input-number',
186
+ 'el-input-tag': 'el-form-input-tag',
187
+ 'el-rate': 'el-form-rate',
188
+ 'el-switch': 'el-form-switch',
189
+ 'el-tree-select': 'el-form-tree-select',
190
+ 'el-slider': 'el-form-slider',
191
+ 'el-upload': 'el-form-upload',
192
+ 'el-time-picker': 'el-form-time-picker',
193
+ 'el-time-select': 'el-form-time-select',
194
+ 'el-mention': 'el-form-mention',
195
+ 'el-date-picker': 'el-form-date-picker',
196
+ 'el-transfer': 'el-form-transfer',
197
+ 'el-radio-group': 'el-form-radio-group',
198
+ };
199
+ // 反向映射表,用于从表单组件名获取原始组件名
200
+ const reverseFormComponentMap = {};
201
+ Object.entries(formComponentMap).forEach(([original, form]) => {
202
+ reverseFormComponentMap[form] = original;
203
+ });
204
+ /**
205
+ * 验证父组件约束
206
+ * @param tag 当前组件标签
207
+ * @param options 解析状态选项
208
+ * @param node JSX节点
209
+ * @returns 如果违反约束则返回错误,否则返回 undefined
210
+ */
211
+ function validateParentConstraints(tag, options, node) {
212
+ // 检查组件库中的父组件约束
213
+ if (options.componentsMap) {
214
+ const componentInfo = getComponentInfo(tag, options.componentsMap);
215
+ const parentAccept = componentInfo?.ideusage?.parentAccept;
216
+ if (parentAccept && parentAccept?.includes('target.tag')) {
217
+ const parentTag = options.parentTag;
218
+ try {
219
+ // 创建验证函数来检查父组件是否符合要求
220
+ const createValidator = (expression, actualParentTag) => {
221
+ // 将所有 target.tag 替换为实际的父组件标签
222
+ const code = expression.replace(/target\.tag/g, JSON.stringify(actualParentTag || ''));
223
+ // 使用 Function 构造器创建验证函数
224
+ return new Function('return ' + code)();
225
+ };
226
+ let isValidParent = false;
227
+ let actualParentTag = parentTag;
228
+ if (parentTag) {
229
+ // 首先尝试用原始父组件标签验证
230
+ isValidParent = createValidator(parentAccept, parentTag);
231
+ // 如果验证失败,尝试使用对应的表单组件或原始组件进行验证
232
+ if (!isValidParent) {
233
+ // 如果当前父组件是表单组件,尝试用对应的原始组件验证
234
+ if (reverseFormComponentMap[parentTag]) {
235
+ const originalParentTag = reverseFormComponentMap[parentTag];
236
+ isValidParent = createValidator(parentAccept, originalParentTag);
237
+ if (isValidParent) {
238
+ actualParentTag = originalParentTag;
239
+ }
240
+ }
241
+ // 如果当前父组件是原始组件,尝试用对应的表单组件验证
242
+ else if (formComponentMap[parentTag]) {
243
+ const formParentTag = formComponentMap[parentTag];
244
+ isValidParent = createValidator(parentAccept, formParentTag);
245
+ if (isValidParent) {
246
+ actualParentTag = formParentTag;
247
+ }
248
+ }
249
+ }
250
+ }
251
+ else {
252
+ isValidParent = false;
253
+ }
254
+ if (parentTag && !isValidParent) {
255
+ // 解析 parentAccept 来生成更友好的错误信息
256
+ const expectedDescription = parseParentAcceptDescription(parentAccept);
257
+ return (0, utils_1.throwError)(options, `组件 ${tag} 必须放在 ${expectedDescription} 内部,但当前父组件是 ${parentTag}`, node);
258
+ }
259
+ else if (!parentTag) {
260
+ return (0, utils_1.throwError)(options, `组件 ${tag} 必须放在指定的父组件内部`, node);
261
+ }
262
+ }
263
+ catch (error) {
264
+ console.log(`组件 ${tag} 的 parentAccept 表达式无效: ${parentAccept}`);
265
+ }
266
+ }
267
+ }
268
+ }
269
+ exports.validateParentConstraints = validateParentConstraints;
270
+ /**
271
+ * 检查 el-table 组件
272
+ */
273
+ function checkElTable({ viewElement, node, options }) {
274
+ (0, index_1.addLint)(options, {
275
+ name: '表格列不推荐全设置宽度',
276
+ description: '从表格列中选取几个较长文本字段(如名称、地址、描述等)不设置宽度,以便自适应显示,其他列可根据展示内容和表格整体宽度酌情设置宽度。 使用style属性进行宽度设置。',
277
+ }, (rule) => {
278
+ // 检查所有子元素是否都是 el-table-column 且都有 width 样式
279
+ const allColumnsHaveWidth = viewElement.children.every((child) => {
280
+ return (child.tag === 'el-table-column' &&
281
+ child.staticStyle &&
282
+ child.staticStyle.includes('width:'));
283
+ });
284
+ if (allColumnsHaveWidth) {
285
+ return (0, utils_1.throwError)(options, `${rule.name}: ${rule.description}`, node);
286
+ }
287
+ });
288
+ }
289
+ /**
290
+ * 检查 el-form 组件
291
+ */
292
+ function checkElForm({ viewElement, node, options }) {
293
+ // 递归检查所有子孙元素中以 el-form 开头的组件是否有 rules 或 isRequired={true}
294
+ function hasRulesInFormItems(element) {
295
+ const reasons = [];
296
+ // 检查当前元素(以 el-form 开头但不是 el-form 本身)
297
+ if (element.tag.startsWith('el-form') && element.tag !== 'el-form') {
298
+ // 检查是否有 rules
299
+ if (element.bindAttrs.some((bindAttr) => bindAttr.name === 'rules')) {
300
+ reasons.push('rules');
301
+ }
302
+ // 检查是否有 isRequired={true}
303
+ const isRequiredAttr = element.bindAttrs.find((bindAttr) => bindAttr.name === 'isRequired');
304
+ if (isRequiredAttr && isRequiredAttr.value === true) {
305
+ reasons.push('isRequired');
306
+ }
307
+ }
308
+ // 递归检查子元素,但跳过嵌套的 el-form(它们会有自己的校验)
309
+ for (const child of element.children) {
310
+ if (child.tag === 'el-form') {
311
+ // 跳过嵌套的 el-form,因为它会有自己的检查
312
+ continue;
313
+ }
314
+ const childResult = hasRulesInFormItems(child);
315
+ if (childResult.hasRule) {
316
+ reasons.push(...childResult.reason);
317
+ }
318
+ }
319
+ return { hasRule: reasons.length > 0, reason: reasons };
320
+ }
321
+ const result = hasRulesInFormItems(viewElement);
322
+ const hasRef = viewElement.name;
323
+ if (result.hasRule && !hasRef) {
324
+ const uniqueReasons = Array.from(new Set(result.reason));
325
+ const reasonText = uniqueReasons.join(' 或 ');
326
+ (0, utils_1.throwError)(options, `表单缺少校验: 表单定义中包含校验规则 (${reasonText}),需要为 ElForm 设置 ref 属性,并在提交前调用 validated() 方法进行校验`, node);
327
+ }
328
+ }
329
+ /**
330
+ * 检查 el-date-picker 组件
331
+ */
332
+ function checkElDatePicker({ viewElement, node, options }) {
333
+ // 1. 禁止使用 valueFormat 属性
334
+ const valueFormatAttr = viewElement.bindAttrs.find((attr) => attr.name === 'valueFormat');
335
+ if (valueFormatAttr) {
336
+ (0, utils_1.throwError)(options, '日期选择器不允许设置 valueFormat 属性', node);
337
+ }
338
+ // 获取 type 属性值
339
+ const typeAttr = viewElement.bindAttrs.find((attr) => attr.name === 'type');
340
+ let typeValue;
341
+ if (typeAttr) {
342
+ if (typeAttr.type === 'static' || typeAttr.type === 'string') {
343
+ typeValue = typeof typeAttr.value === 'string' ? typeAttr.value : String(typeAttr.value);
344
+ // 2. 禁止使用的 type 值
345
+ const forbiddenTypes = ['dates', 'years', 'months'];
346
+ if (forbiddenTypes.includes(typeValue)) {
347
+ (0, utils_1.throwError)(options, `日期选择器 type 属性不允许设置值: ${typeValue}`, node);
348
+ }
349
+ }
350
+ }
351
+ // 3. 检查双向绑定规则
352
+ const rangeTypes = ['daterange', 'datetimerange', 'yearrange', 'monthrange'];
353
+ const singleTypes = ['date', 'datetime', 'year', 'month', 'week'];
354
+ const startValueAttr = viewElement.bindAttrs.find((attr) => attr.name === 'startValue');
355
+ const endValueAttr = viewElement.bindAttrs.find((attr) => attr.name === 'endValue');
356
+ const modelValueAttr = viewElement.bindAttrs.find((attr) => attr.name === 'modelValue');
357
+ const hasStartValue = startValueAttr && startValueAttr.sync;
358
+ const hasEndValue = endValueAttr && endValueAttr.sync;
359
+ const hasModelValue = modelValueAttr && modelValueAttr.sync;
360
+ if (typeValue) {
361
+ if (rangeTypes.includes(typeValue)) {
362
+ // 范围类型只能使用 startValue 和 endValue
363
+ if (hasModelValue) {
364
+ (0, utils_1.throwError)(options, `当 type 属性值为 '${typeValue}' 时,不能用 modelValue,只能用 startValue 和 endValue`, node);
365
+ }
366
+ }
367
+ else if (singleTypes.includes(typeValue)) {
368
+ // 单个类型只能使用 modelValue
369
+ if (hasStartValue || hasEndValue) {
370
+ (0, utils_1.throwError)(options, `当 type 属性值为 '${typeValue}' 时,不能用 startValue 和 endValue,只能用 modelValue`, node);
371
+ }
372
+ }
373
+ }
374
+ // 4. 添加 range 属性
375
+ const singleTypesForRange = ['datetime', 'date', 'year', 'month', 'week'];
376
+ // 检查是否已存在 range 属性
377
+ const existingRangeAttr = viewElement.bindAttrs.find((attr) => attr.name === 'range');
378
+ if (!existingRangeAttr) {
379
+ let rangeValue = true;
380
+ if (typeValue && singleTypesForRange.includes(typeValue)) {
381
+ rangeValue = false;
382
+ }
383
+ const rangeAttr = new utils_1.naslTypes.BindAttribute({
384
+ name: 'range',
385
+ type: 'static',
386
+ value: rangeValue,
387
+ });
388
+ viewElement.addBindAttribute(rangeAttr);
389
+ }
390
+ }
391
+ /**
392
+ * 检查 el-radio-button 组件
393
+ */
394
+ function checkElRadioButton({ node, options }) {
395
+ (0, utils_1.throwError)(options, '不支持使用 ElRadioButton 组件,请改用 ElRadioGroup 或 ElFormRadioGroup 组件(设置 type="button" 属性)配合 ElRadio 子组件实现', node);
396
+ }
397
+ /**
398
+ * 对 ViewElement 进行校验
399
+ * 根据组件标签调用相应的校验函数
400
+ */
401
+ function checkViewElement(params) {
402
+ const { viewElement } = params;
403
+ const { tag } = viewElement;
404
+ switch (tag) {
405
+ case 'el-table':
406
+ checkElTable(params);
407
+ break;
408
+ case 'el-form':
409
+ checkElForm(params);
410
+ break;
411
+ case 'el-date-picker':
412
+ checkElDatePicker(params);
413
+ break;
414
+ case 'el-radio-button':
415
+ checkElRadioButton(params);
416
+ break;
417
+ default:
418
+ break;
419
+ }
420
+ }
421
+ exports.checkViewElement = checkViewElement;
422
+ //# sourceMappingURL=checkViewElement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkViewElement.js","sourceRoot":"","sources":["../../../../src/natural/transforms/checker/checkViewElement.ts"],"names":[],"mappings":";;;AAAA,uCAAqF;AACrF,mCAAkC;AAmBlC;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,OAAe,EAAE,QAAgB,EAAE,SAAwB;IACnF,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,OAAe,EAAE,SAAiB,EAAE,SAAwB;IACrF,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;AAC3D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,OAAe,EAAE,QAAgB,EAAE,SAAwB;IACnF,MAAM,aAAa,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,WAAW;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC;AACzD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CACvB,OAAe,EACf,SAAwB,EACxB,IAAgC;IAEhC,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,UAAU,IAAI,IAAI,CAAC;IAC/D,CAAC;SAAM,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,UAAU,IAAI,IAAI,CAAC;IAC/D,CAAC;SAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QAC3B,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,IAAI,IAAI,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,SAAS,IAAI,IAAI,CAAC;AACnD,CAAC;AAED,QAAQ;AACR,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC,CAAC;AAEpH;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CACtC,GAAW,EACX,WAAsC,EACtC,WAAmB,EACnB,OAAuB,EACvB,IAA6B;IAE7B,IAAI,CAAC,OAAO,EAAE,aAAa;QAAE,OAAO;IACpC,IAAI,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC;QAAE,OAAO,CAAC,YAAY;IAE5D,MAAM,UAAU,GAAG;QACjB,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,gBAAgB;QACtB,IAAI,EAAE,gBAAgB;KACvB,CAAC;IAEF,MAAM,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,cAAc,CAAC,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAE3E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,eAAe,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,cAAc,GAAG;YACrB,KAAK,EAAE,IAAI;YACX,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,IAAI;SACX,CAAC;QACF,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;QAC7C,MAAM,MAAM,GACV,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;QAEhF,SAAS;QACT,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;YAC/B,yBAAyB;YACzB,IAAI,WAAW,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAEzD,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC7C,IAAI,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;oBACpC,OAAO,CAAC,YAAY;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,WAAW,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YACvE,OAAO,GAAG,gBAAgB,iBAAS,CAAC,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC;QACpE,CAAC;QACD,OAAO,IAAA,kBAAU,EACf,OAAO,EACP,MAAM,GAAG,OAAO,QAAQ,IAAI,WAAW,SAAS,MAAM,GAAG,eAAe,GAAG,OAAO,EAAE,EACpF,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC;AApDD,4DAoDC;AAED;;;;GAIG;AACH,SAAS,4BAA4B,CAAC,YAAoB;IACxD,IAAI,CAAC;QACH,sDAAsD;QACtD,MAAM,kBAAkB,GAAG,YAAY,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACvF,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,kBAAkB,CAAC,CAAC,CAAC;iBAChC,KAAK,CAAC,GAAG,CAAC;iBACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;iBAC/C,MAAM,CAAC,OAAO,CAAC,CAAC;YACnB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAED,iDAAiD;QACjD,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;QACtF,IAAI,aAAa,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,OAAO,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;QACvC,CAAC;QAED,mBAAmB;QACnB,IAAI,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;YACjF,MAAM,IAAI,GAAa,EAAE,CAAC;YAE1B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,gCAAgC;gBAChC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBAC3E,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;oBACzB,SAAS;gBACX,CAAC;gBAED,+CAA+C;gBAC/C,MAAM,aAAa,GAAG,SAAS,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBACnF,IAAI,aAAa,EAAE,CAAC;oBAClB,IAAI,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;oBACzC,SAAS;gBACX,CAAC;gBAED,gBAAgB;gBAChB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,CAAC;YAED,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QAED,wCAAwC;QACxC,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC9E,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;QAED,wBAAwB;QACxB,IAAI,YAAY,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;YAClD,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,WAAW;QACX,OAAO,UAAU,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;AACH,CAAC;AAED,YAAY;AACZ,MAAM,gBAAgB,GAA2B;IAC/C,UAAU,EAAE,eAAe;IAC3B,WAAW,EAAE,gBAAgB;IAC7B,aAAa,EAAE,kBAAkB;IACjC,mBAAmB,EAAE,wBAAwB;IAC7C,iBAAiB,EAAE,sBAAsB;IACzC,cAAc,EAAE,mBAAmB;IACnC,SAAS,EAAE,cAAc;IACzB,WAAW,EAAE,gBAAgB;IAC7B,gBAAgB,EAAE,qBAAqB;IACvC,WAAW,EAAE,gBAAgB;IAC7B,WAAW,EAAE,gBAAgB;IAC7B,gBAAgB,EAAE,qBAAqB;IACvC,gBAAgB,EAAE,qBAAqB;IACvC,YAAY,EAAE,iBAAiB;IAC/B,gBAAgB,EAAE,qBAAqB;IACvC,aAAa,EAAE,kBAAkB;IACjC,gBAAgB,EAAE,qBAAqB;CACxC,CAAC;AAEF,wBAAwB;AACxB,MAAM,uBAAuB,GAA2B,EAAE,CAAC;AAC3D,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE;IAC5D,uBAAuB,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;AAC3C,CAAC,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,SAAgB,yBAAyB,CACvC,GAAW,EACX,OAAuB,EACvB,IAA2B;IAE3B,eAAe;IACf,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;QAC1B,MAAM,aAAa,GAAG,gBAAgB,CAAC,GAAG,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,aAAa,EAAE,QAAQ,EAAE,YAAY,CAAC;QAE3D,IAAI,YAAY,IAAI,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YACpC,IAAI,CAAC;gBACH,qBAAqB;gBACrB,MAAM,eAAe,GAAG,CAAC,UAAkB,EAAE,eAAuB,EAAE,EAAE;oBACtE,6BAA6B;oBAC7B,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,CAAC;oBACvF,wBAAwB;oBACxB,OAAO,IAAI,QAAQ,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC1C,CAAC,CAAC;gBAEF,IAAI,aAAa,GAAG,KAAK,CAAC;gBAC1B,IAAI,eAAe,GAAG,SAAS,CAAC;gBAEhC,IAAI,SAAS,EAAE,CAAC;oBACd,iBAAiB;oBACjB,aAAa,GAAG,eAAe,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;oBAEzD,8BAA8B;oBAC9B,IAAI,CAAC,aAAa,EAAE,CAAC;wBACnB,4BAA4B;wBAC5B,IAAI,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;4BACvC,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;4BAC7D,aAAa,GAAG,eAAe,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;4BACjE,IAAI,aAAa,EAAE,CAAC;gCAClB,eAAe,GAAG,iBAAiB,CAAC;4BACtC,CAAC;wBACH,CAAC;wBACD,4BAA4B;6BACvB,IAAI,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;4BACrC,MAAM,aAAa,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;4BAClD,aAAa,GAAG,eAAe,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;4BAC7D,IAAI,aAAa,EAAE,CAAC;gCAClB,eAAe,GAAG,aAAa,CAAC;4BAClC,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,aAAa,GAAG,KAAK,CAAC;gBACxB,CAAC;gBAED,IAAI,SAAS,IAAI,CAAC,aAAa,EAAE,CAAC;oBAChC,8BAA8B;oBAC9B,MAAM,mBAAmB,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;oBACvE,OAAO,IAAA,kBAAU,EACf,OAAO,EACP,MAAM,GAAG,SAAS,mBAAmB,eAAe,SAAS,EAAE,EAC/D,IAAI,CACL,CAAC;gBACJ,CAAC;qBAAM,IAAI,CAAC,SAAS,EAAE,CAAC;oBACtB,OAAO,IAAA,kBAAU,EAAC,OAAO,EAAE,MAAM,GAAG,eAAe,EAAE,IAAI,CAAC,CAAC;gBAC7D,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,0BAA0B,YAAY,EAAE,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAnED,8DAmEC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAA0B;IAC1E,IAAA,eAAO,EACL,OAAO,EACP;QACE,IAAI,EAAE,aAAa;QACnB,WAAW,EACT,oFAAoF;KACvF,EACD,CAAC,IAAI,EAAE,EAAE;QACP,2CAA2C;QAC3C,MAAM,mBAAmB,GAAG,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;YAC/D,OAAO,CACL,KAAK,CAAC,GAAG,KAAK,iBAAiB;gBAC/B,KAAK,CAAC,WAAW;gBACjB,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACrC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,mBAAmB,EAAE,CAAC;YACxB,OAAO,IAAA,kBAAU,EAAC,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAA0B;IACzE,0DAA0D;IAC1D,SAAS,mBAAmB,CAAC,OAA8B;QACzD,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,qCAAqC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;YACnE,cAAc;YACd,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAED,0BAA0B;YAC1B,MAAM,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;YAC5F,IAAI,cAAc,IAAI,cAAc,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;gBACpD,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QAED,oCAAoC;QACpC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC5B,2BAA2B;gBAC3B,SAAS;YACX,CAAC;YACD,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC/C,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,MAAM,MAAM,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC;IAChC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACzD,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAA,kBAAU,EACR,OAAO,EACP,wBAAwB,UAAU,mDAAmD,EACrF,IAAI,CACL,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAA0B;IAC/E,yBAAyB;IACzB,MAAM,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC;IAC1F,IAAI,eAAe,EAAE,CAAC;QACpB,IAAA,kBAAU,EAAC,OAAO,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED,cAAc;IACd,MAAM,QAAQ,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IAC5E,IAAI,SAA6B,CAAC;IAElC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7D,SAAS,GAAG,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAEzF,kBAAkB;YAClB,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvC,IAAA,kBAAU,EAAC,OAAO,EAAE,wBAAwB,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED,cAAc;IACd,MAAM,UAAU,GAAG,CAAC,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;IAC7E,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAElE,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IACxF,MAAM,YAAY,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;IACpF,MAAM,cAAc,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC;IAExF,MAAM,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC;IAC5D,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,IAAI,CAAC;IACtD,MAAM,aAAa,GAAG,cAAc,IAAI,cAAc,CAAC,IAAI,CAAC;IAE5D,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACnC,iCAAiC;YACjC,IAAI,aAAa,EAAE,CAAC;gBAClB,IAAA,kBAAU,EACR,OAAO,EACP,gBAAgB,SAAS,8CAA8C,EACvE,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YAC3C,sBAAsB;YACtB,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;gBACjC,IAAA,kBAAU,EACR,OAAO,EACP,gBAAgB,SAAS,8CAA8C,EACvE,IAAI,CACL,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,iBAAiB;IACjB,MAAM,mBAAmB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAE1E,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,WAAW,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;IACtF,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,IAAI,UAAU,GAAG,IAAI,CAAC;QACtB,IAAI,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,UAAU,GAAG,KAAK,CAAC;QACrB,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,iBAAS,CAAC,aAAa,CAAC;YAC5C,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,UAAU;SAClB,CAAC,CAAC;QACH,WAAW,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,EAAE,IAAI,EAAE,OAAO,EAA0B;IACnE,IAAA,kBAAU,EACR,OAAO,EACP,oGAAoG,EACpG,IAAI,CACL,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,MAA8B;IAC7D,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;IAC/B,MAAM,EAAE,GAAG,EAAE,GAAG,WAAW,CAAC;IAE5B,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,UAAU;YACb,YAAY,CAAC,MAAM,CAAC,CAAC;YACrB,MAAM;QACR,KAAK,SAAS;YACZ,WAAW,CAAC,MAAM,CAAC,CAAC;YACpB,MAAM;QACR,KAAK,gBAAgB;YACnB,iBAAiB,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM;QACR,KAAK,iBAAiB;YACpB,kBAAkB,CAAC,MAAM,CAAC,CAAC;YAC3B,MAAM;QACR;YACE,MAAM;IACV,CAAC;AACH,CAAC;AApBD,4CAoBC"}
@@ -0,0 +1,17 @@
1
+ import { type ParseNaturalTSState } from '../../utils';
2
+ export { checkViewElement, validateComponentFeature, validateParentConstraints, } from './checkViewElement';
3
+ export { checkDefaultValue } from './checkDefaultValue';
4
+ export { checkDataQueryCalleeNameOrder } from './checkDataQueryCalleeNameOrder';
5
+ export interface LintRule {
6
+ name: string;
7
+ description?: string;
8
+ }
9
+ /**
10
+ * 在 strictForTraining 模式下执行 lint 检查逻辑
11
+ * 当 options.strictForTraining 为 true 时,执行传入的检查函数
12
+ * @param rule LintRule 对象,包含 name 和可选的 description
13
+ * @param options 解析状态选项
14
+ * @param lintFn 需要执行的 lint 检查函数
15
+ */
16
+ export declare function addLint<T extends ParseNaturalTSState>(options: T, rule: LintRule, lintFn: (rule: LintRule) => void): void;
17
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/natural/transforms/checker/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGvD,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAChF,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,mBAAmB,EACnD,OAAO,EAAE,CAAC,EACV,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,GAC/B,IAAI,CAIN"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addLint = exports.checkDataQueryCalleeNameOrder = exports.checkDefaultValue = exports.validateParentConstraints = exports.validateComponentFeature = exports.checkViewElement = void 0;
4
+ // 统一导出所有校验相关的函数
5
+ var checkViewElement_1 = require("./checkViewElement");
6
+ Object.defineProperty(exports, "checkViewElement", { enumerable: true, get: function () { return checkViewElement_1.checkViewElement; } });
7
+ Object.defineProperty(exports, "validateComponentFeature", { enumerable: true, get: function () { return checkViewElement_1.validateComponentFeature; } });
8
+ Object.defineProperty(exports, "validateParentConstraints", { enumerable: true, get: function () { return checkViewElement_1.validateParentConstraints; } });
9
+ var checkDefaultValue_1 = require("./checkDefaultValue");
10
+ Object.defineProperty(exports, "checkDefaultValue", { enumerable: true, get: function () { return checkDefaultValue_1.checkDefaultValue; } });
11
+ var checkDataQueryCalleeNameOrder_1 = require("./checkDataQueryCalleeNameOrder");
12
+ Object.defineProperty(exports, "checkDataQueryCalleeNameOrder", { enumerable: true, get: function () { return checkDataQueryCalleeNameOrder_1.checkDataQueryCalleeNameOrder; } });
13
+ /**
14
+ * 在 strictForTraining 模式下执行 lint 检查逻辑
15
+ * 当 options.strictForTraining 为 true 时,执行传入的检查函数
16
+ * @param rule LintRule 对象,包含 name 和可选的 description
17
+ * @param options 解析状态选项
18
+ * @param lintFn 需要执行的 lint 检查函数
19
+ */
20
+ function addLint(options, rule, lintFn) {
21
+ if (options.strictForTraining) {
22
+ lintFn(rule);
23
+ }
24
+ }
25
+ exports.addLint = addLint;
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/natural/transforms/checker/index.ts"],"names":[],"mappings":";;;AAEA,gBAAgB;AAChB,uDAI4B;AAH1B,oHAAA,gBAAgB,OAAA;AAChB,4HAAA,wBAAwB,OAAA;AACxB,6HAAA,yBAAyB,OAAA;AAE3B,yDAAwD;AAA/C,sHAAA,iBAAiB,OAAA;AAC1B,iFAAgF;AAAvE,8IAAA,6BAA6B,OAAA;AAMtC;;;;;;GAMG;AACH,SAAgB,OAAO,CACrB,OAAU,EACV,IAAc,EACd,MAAgC;IAEhC,IAAI,OAAO,CAAC,iBAAiB,EAAE,CAAC;QAC9B,MAAM,CAAC,IAAI,CAAC,CAAC;IACf,CAAC;AACH,CAAC;AARD,0BAQC"}
@@ -1,3 +1,10 @@
1
- import { babelTypes, naslTypes, ParseNaturalTSState } from './utils';
1
+ import { babelTypes, naslTypes, type ParseNaturalTSState } from '../utils';
2
+ /**
3
+ * 将节点转换为 DatabaseTypeAnnotation 实例
4
+ * @param node 数据库类型注解的节点(可能是标识符或调用表达式)
5
+ * @param parseState 解析状态
6
+ * @returns DatabaseTypeAnnotation 实例
7
+ */
8
+ export declare function transform2DatabaseTypeAnnotation(node: babelTypes.Identifier | babelTypes.CallExpression, parseState: ParseNaturalTSState): naslTypes.DatabaseTypeAnnotation | null;
2
9
  export declare function transform2Entity(node: babelTypes.ClassDeclaration, parseState: ParseNaturalTSState): naslTypes.Entity;
3
10
  //# sourceMappingURL=transform2Entity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transform2Entity.d.ts","sourceRoot":"","sources":["../../../src/natural/transforms/transform2Entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAuG,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAI1K,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,gBAAgB,EAAE,UAAU,EAAE,mBAAmB,GAAG,SAAS,CAAC,MAAM,CAcrH"}
1
+ {"version":3,"file":"transform2Entity.d.ts","sourceRoot":"","sources":["../../../src/natural/transforms/transform2Entity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAmD,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAqC5H;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,cAAc,EACvD,UAAU,EAAE,mBAAmB,GAC9B,SAAS,CAAC,sBAAsB,GAAG,IAAI,CAkCzC;AAED,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,UAAU,CAAC,gBAAgB,EACjC,UAAU,EAAE,mBAAmB,GAC9B,SAAS,CAAC,MAAM,CAgBlB"}