weaver-e10-builder 1.5.13 → 1.5.14

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 (308) hide show
  1. package/dist/commands/actionflow.d.ts.map +1 -1
  2. package/dist/commands/actionflow.js +1 -0
  3. package/dist/commands/actionflow.js.map +1 -1
  4. package/dist/commands/designer-setters.d.ts.map +1 -1
  5. package/dist/commands/designer-setters.js +148 -47
  6. package/dist/commands/designer-setters.js.map +1 -1
  7. package/dist/commands/form-add-detail-table.d.ts.map +1 -1
  8. package/dist/commands/form-add-detail-table.js +53 -7
  9. package/dist/commands/form-add-detail-table.js.map +1 -1
  10. package/dist/commands/form-browser-definition.d.ts +14 -0
  11. package/dist/commands/form-browser-definition.d.ts.map +1 -0
  12. package/dist/commands/form-browser-definition.js +493 -0
  13. package/dist/commands/form-browser-definition.js.map +1 -0
  14. package/dist/commands/form-code.d.ts +5 -0
  15. package/dist/commands/form-code.d.ts.map +1 -0
  16. package/dist/commands/form-code.js +276 -0
  17. package/dist/commands/form-code.js.map +1 -0
  18. package/dist/commands/form-engine-linkage.d.ts +3 -0
  19. package/dist/commands/form-engine-linkage.d.ts.map +1 -0
  20. package/dist/commands/form-engine-linkage.js +199 -0
  21. package/dist/commands/form-engine-linkage.js.map +1 -0
  22. package/dist/commands/form-formula.d.ts.map +1 -1
  23. package/dist/commands/form-formula.js +7 -19
  24. package/dist/commands/form-formula.js.map +1 -1
  25. package/dist/commands/form-layout-template-advanced.d.ts +3 -0
  26. package/dist/commands/form-layout-template-advanced.d.ts.map +1 -0
  27. package/dist/commands/form-layout-template-advanced.js +115 -0
  28. package/dist/commands/form-layout-template-advanced.js.map +1 -0
  29. package/dist/commands/form-layout-template-easy.d.ts +3 -0
  30. package/dist/commands/form-layout-template-easy.d.ts.map +1 -0
  31. package/dist/commands/form-layout-template-easy.js +59 -0
  32. package/dist/commands/form-layout-template-easy.js.map +1 -0
  33. package/dist/commands/form-layout.d.ts.map +1 -1
  34. package/dist/commands/form-layout.js +77 -0
  35. package/dist/commands/form-layout.js.map +1 -1
  36. package/dist/commands/form-list-filter.js +1 -1
  37. package/dist/commands/form-list-filter.js.map +1 -1
  38. package/dist/commands/form-list-utils.d.ts +5 -0
  39. package/dist/commands/form-list-utils.d.ts.map +1 -1
  40. package/dist/commands/form-list-utils.js +23 -3
  41. package/dist/commands/form-list-utils.js.map +1 -1
  42. package/dist/commands/form-permission.d.ts.map +1 -1
  43. package/dist/commands/form-permission.js +55 -19
  44. package/dist/commands/form-permission.js.map +1 -1
  45. package/dist/commands/form-physical-table.d.ts.map +1 -1
  46. package/dist/commands/form-physical-table.js +8 -2
  47. package/dist/commands/form-physical-table.js.map +1 -1
  48. package/dist/commands/form.d.ts.map +1 -1
  49. package/dist/commands/form.js +143 -5
  50. package/dist/commands/form.js.map +1 -1
  51. package/dist/commands/menu.d.ts +68 -2
  52. package/dist/commands/menu.d.ts.map +1 -1
  53. package/dist/commands/menu.js +186 -41
  54. package/dist/commands/menu.js.map +1 -1
  55. package/dist/commands/page.d.ts.map +1 -1
  56. package/dist/commands/page.js +29 -6
  57. package/dist/commands/page.js.map +1 -1
  58. package/dist/commands/special.d.ts.map +1 -1
  59. package/dist/commands/special.js +3 -2
  60. package/dist/commands/special.js.map +1 -1
  61. package/dist/commands/wf-form.d.ts.map +1 -1
  62. package/dist/commands/wf-form.js +76 -31
  63. package/dist/commands/wf-form.js.map +1 -1
  64. package/dist/commands/workflow-auth-resp.js +2 -2
  65. package/dist/commands/workflow-auth-resp.js.map +1 -1
  66. package/dist/commands/workflow-base-settings.d.ts +3 -0
  67. package/dist/commands/workflow-base-settings.d.ts.map +1 -0
  68. package/dist/commands/workflow-base-settings.js +73 -0
  69. package/dist/commands/workflow-base-settings.js.map +1 -0
  70. package/dist/commands/workflow-condition.d.ts.map +1 -1
  71. package/dist/commands/workflow-condition.js +59 -450
  72. package/dist/commands/workflow-condition.js.map +1 -1
  73. package/dist/commands/workflow-export.d.ts +9 -0
  74. package/dist/commands/workflow-export.d.ts.map +1 -0
  75. package/dist/commands/workflow-export.js +121 -0
  76. package/dist/commands/workflow-export.js.map +1 -0
  77. package/dist/commands/workflow-node.d.ts.map +1 -1
  78. package/dist/commands/workflow-node.js +28 -53
  79. package/dist/commands/workflow-node.js.map +1 -1
  80. package/dist/commands/workflow-operator-batch.d.ts +3 -0
  81. package/dist/commands/workflow-operator-batch.d.ts.map +1 -0
  82. package/dist/commands/workflow-operator-batch.js +35 -0
  83. package/dist/commands/workflow-operator-batch.js.map +1 -0
  84. package/dist/commands/workflow-subprocess.d.ts.map +1 -1
  85. package/dist/commands/workflow-subprocess.js +21 -33
  86. package/dist/commands/workflow-subprocess.js.map +1 -1
  87. package/dist/commands/workflow.d.ts.map +1 -1
  88. package/dist/commands/workflow.js +18 -33
  89. package/dist/commands/workflow.js.map +1 -1
  90. package/dist/index.js +18 -1
  91. package/dist/index.js.map +1 -1
  92. package/dist/services/actionflow/browser_source.d.ts +9 -0
  93. package/dist/services/actionflow/browser_source.d.ts.map +1 -0
  94. package/dist/services/actionflow/browser_source.js +12 -0
  95. package/dist/services/actionflow/browser_source.js.map +1 -0
  96. package/dist/services/actionflow/components/date_trigger.js +1 -1
  97. package/dist/services/actionflow/components/date_trigger.js.map +1 -1
  98. package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
  99. package/dist/services/actionflow/components/document_actions.js +178 -25
  100. package/dist/services/actionflow/components/document_actions.js.map +1 -1
  101. package/dist/services/actionflow/components/enquiry_form.js +1 -1
  102. package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
  103. package/dist/services/actionflow/components/logic_flow_set.d.ts.map +1 -1
  104. package/dist/services/actionflow/components/logic_flow_set.js +80 -8
  105. package/dist/services/actionflow/components/logic_flow_set.js.map +1 -1
  106. package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
  107. package/dist/services/actionflow/components/meeting_create.js +1 -0
  108. package/dist/services/actionflow/components/meeting_create.js.map +1 -1
  109. package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
  110. package/dist/services/actionflow/components/schedule_create.js +2 -0
  111. package/dist/services/actionflow/components/schedule_create.js.map +1 -1
  112. package/dist/services/actionflow/components/time_batch_trigger.js +1 -1
  113. package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
  114. package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
  115. package/dist/services/actionflow/components/workflow_actions.js +6 -2
  116. package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
  117. package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
  118. package/dist/services/actionflow/context_preflight.js +103 -6
  119. package/dist/services/actionflow/context_preflight.js.map +1 -1
  120. package/dist/services/actionflow/form_source.d.ts +2 -0
  121. package/dist/services/actionflow/form_source.d.ts.map +1 -1
  122. package/dist/services/actionflow/form_source.js +8 -0
  123. package/dist/services/actionflow/form_source.js.map +1 -1
  124. package/dist/services/actionflow/formula_service.d.ts.map +1 -1
  125. package/dist/services/actionflow/formula_service.js +35 -19
  126. package/dist/services/actionflow/formula_service.js.map +1 -1
  127. package/dist/services/actionflow/logicflow_source.d.ts +5 -0
  128. package/dist/services/actionflow/logicflow_source.d.ts.map +1 -0
  129. package/dist/services/actionflow/logicflow_source.js +15 -0
  130. package/dist/services/actionflow/logicflow_source.js.map +1 -0
  131. package/dist/services/actionflow/preflight_service.d.ts +15 -0
  132. package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
  133. package/dist/services/actionflow/preflight_service.js +558 -26
  134. package/dist/services/actionflow/preflight_service.js.map +1 -1
  135. package/dist/services/actionflow/runtime_metadata.d.ts +8 -0
  136. package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -1
  137. package/dist/services/actionflow/runtime_metadata.js +25 -0
  138. package/dist/services/actionflow/runtime_metadata.js.map +1 -1
  139. package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
  140. package/dist/services/actionflow/workflow_compiler.js +50 -10
  141. package/dist/services/actionflow/workflow_compiler.js.map +1 -1
  142. package/dist/services/actionflow/workflow_source.d.ts +2 -0
  143. package/dist/services/actionflow/workflow_source.d.ts.map +1 -1
  144. package/dist/services/actionflow/workflow_source.js +7 -0
  145. package/dist/services/actionflow/workflow_source.js.map +1 -1
  146. package/dist/services/auth-resp-condition.d.ts +7 -3
  147. package/dist/services/auth-resp-condition.d.ts.map +1 -1
  148. package/dist/services/auth-resp-condition.js +58 -63
  149. package/dist/services/auth-resp-condition.js.map +1 -1
  150. package/dist/services/browser.d.ts +5 -0
  151. package/dist/services/browser.d.ts.map +1 -1
  152. package/dist/services/browser.js +16 -4
  153. package/dist/services/browser.js.map +1 -1
  154. package/dist/services/condition-rules.d.ts +2 -30
  155. package/dist/services/condition-rules.d.ts.map +1 -1
  156. package/dist/services/condition-rules.js +3 -219
  157. package/dist/services/condition-rules.js.map +1 -1
  158. package/dist/services/designer-dataset.d.ts +45 -0
  159. package/dist/services/designer-dataset.d.ts.map +1 -0
  160. package/dist/services/designer-dataset.js +156 -0
  161. package/dist/services/designer-dataset.js.map +1 -0
  162. package/dist/services/form-association.d.ts +7 -0
  163. package/dist/services/form-association.d.ts.map +1 -1
  164. package/dist/services/form-association.js +22 -1
  165. package/dist/services/form-association.js.map +1 -1
  166. package/dist/services/form-code.d.ts +53 -0
  167. package/dist/services/form-code.d.ts.map +1 -0
  168. package/dist/services/form-code.js +370 -0
  169. package/dist/services/form-code.js.map +1 -0
  170. package/dist/services/form-create.d.ts +20 -0
  171. package/dist/services/form-create.d.ts.map +1 -1
  172. package/dist/services/form-create.js +73 -1
  173. package/dist/services/form-create.js.map +1 -1
  174. package/dist/services/form-field-build.d.ts +1 -1
  175. package/dist/services/form-field-build.d.ts.map +1 -1
  176. package/dist/services/form-field-build.js +20 -1
  177. package/dist/services/form-field-build.js.map +1 -1
  178. package/dist/services/form-field-drop.d.ts +2 -0
  179. package/dist/services/form-field-drop.d.ts.map +1 -1
  180. package/dist/services/form-field-drop.js +2 -0
  181. package/dist/services/form-field-drop.js.map +1 -1
  182. package/dist/services/form-layout-detail-insert.d.ts +58 -0
  183. package/dist/services/form-layout-detail-insert.d.ts.map +1 -0
  184. package/dist/services/form-layout-detail-insert.js +293 -0
  185. package/dist/services/form-layout-detail-insert.js.map +1 -0
  186. package/dist/services/form-layout-insert.d.ts.map +1 -1
  187. package/dist/services/form-layout-insert.js +34 -2
  188. package/dist/services/form-layout-insert.js.map +1 -1
  189. package/dist/services/form-layout-source/compile.d.ts.map +1 -1
  190. package/dist/services/form-layout-source/compile.js +11 -4
  191. package/dist/services/form-layout-source/compile.js.map +1 -1
  192. package/dist/services/form-layout-template-advanced.d.ts +330 -0
  193. package/dist/services/form-layout-template-advanced.d.ts.map +1 -0
  194. package/dist/services/form-layout-template-advanced.js +1437 -0
  195. package/dist/services/form-layout-template-advanced.js.map +1 -0
  196. package/dist/services/form-layout-template-easy.d.ts +34 -0
  197. package/dist/services/form-layout-template-easy.d.ts.map +1 -0
  198. package/dist/services/form-layout-template-easy.js +159 -0
  199. package/dist/services/form-layout-template-easy.js.map +1 -0
  200. package/dist/services/form-layout-template-flow.d.ts +23 -0
  201. package/dist/services/form-layout-template-flow.d.ts.map +1 -0
  202. package/dist/services/form-layout-template-flow.js +99 -0
  203. package/dist/services/form-layout-template-flow.js.map +1 -0
  204. package/dist/services/form-permission-archive.d.ts +23 -1
  205. package/dist/services/form-permission-archive.d.ts.map +1 -1
  206. package/dist/services/form-permission-archive.js +54 -2
  207. package/dist/services/form-permission-archive.js.map +1 -1
  208. package/dist/services/form-physical-table.d.ts +10 -0
  209. package/dist/services/form-physical-table.d.ts.map +1 -1
  210. package/dist/services/form-physical-table.js +20 -0
  211. package/dist/services/form-physical-table.js.map +1 -1
  212. package/dist/services/form-view-linkage-functions.d.ts +19 -0
  213. package/dist/services/form-view-linkage-functions.d.ts.map +1 -0
  214. package/dist/services/form-view-linkage-functions.js +90 -0
  215. package/dist/services/form-view-linkage-functions.js.map +1 -0
  216. package/dist/services/matrix-condition.d.ts +32 -1
  217. package/dist/services/matrix-condition.d.ts.map +1 -1
  218. package/dist/services/matrix-condition.js +169 -6
  219. package/dist/services/matrix-condition.js.map +1 -1
  220. package/dist/services/menu-catalog.d.ts +24 -1
  221. package/dist/services/menu-catalog.d.ts.map +1 -1
  222. package/dist/services/menu-catalog.js +49 -2
  223. package/dist/services/menu-catalog.js.map +1 -1
  224. package/dist/services/workflow-base-settings.d.ts +117 -0
  225. package/dist/services/workflow-base-settings.d.ts.map +1 -0
  226. package/dist/services/workflow-base-settings.js +504 -0
  227. package/dist/services/workflow-base-settings.js.map +1 -0
  228. package/dist/services/workflow-condition-core.d.ts +48 -0
  229. package/dist/services/workflow-condition-core.d.ts.map +1 -0
  230. package/dist/services/workflow-condition-core.js +316 -0
  231. package/dist/services/workflow-condition-core.js.map +1 -0
  232. package/dist/services/workflow-context.d.ts +10 -0
  233. package/dist/services/workflow-context.d.ts.map +1 -0
  234. package/dist/services/workflow-context.js +15 -0
  235. package/dist/services/workflow-context.js.map +1 -0
  236. package/dist/services/workflow-export.d.ts +80 -0
  237. package/dist/services/workflow-export.d.ts.map +1 -0
  238. package/dist/services/workflow-export.js +150 -0
  239. package/dist/services/workflow-export.js.map +1 -0
  240. package/dist/services/workflow-field-permission-route.d.ts +75 -0
  241. package/dist/services/workflow-field-permission-route.d.ts.map +1 -0
  242. package/dist/services/workflow-field-permission-route.js +52 -0
  243. package/dist/services/workflow-field-permission-route.js.map +1 -0
  244. package/dist/services/workflow-field-permission.d.ts +18 -0
  245. package/dist/services/workflow-field-permission.d.ts.map +1 -0
  246. package/dist/services/workflow-field-permission.js +40 -0
  247. package/dist/services/workflow-field-permission.js.map +1 -0
  248. package/dist/services/workflow-node-layout.d.ts +11 -10
  249. package/dist/services/workflow-node-layout.d.ts.map +1 -1
  250. package/dist/services/workflow-node-layout.js +24 -62
  251. package/dist/services/workflow-node-layout.js.map +1 -1
  252. package/dist/services/workflow-operator-batch-condition.d.ts +23 -0
  253. package/dist/services/workflow-operator-batch-condition.d.ts.map +1 -0
  254. package/dist/services/workflow-operator-batch-condition.js +56 -0
  255. package/dist/services/workflow-operator-batch-condition.js.map +1 -0
  256. package/package.json +1 -1
  257. package/skill-docs/SKILL.md +155 -154
  258. package/skill-docs/_catalog.md +9 -2
  259. package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -17
  260. package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +23 -17
  261. package/skill-docs/assets/form-template/style-templates-advanced-base-example.json +1420 -0
  262. package/skill-docs/assets/form-template/style-templates-advanced-base.css +33 -0
  263. package/skill-docs/assets/form-template/style-templates-advanced-blue-crystal-example.json +1094 -0
  264. package/skill-docs/assets/form-template/style-templates-advanced-document-example.json +1251 -0
  265. package/skill-docs/assets/form-template/style-templates-advanced-grid-example.json +39 -0
  266. package/skill-docs/assets/form-template/style-templates-advanced-page-example.json +38 -0
  267. package/skill-docs/assets/form-template/style-templates-advanced-placements-example.json +30 -0
  268. package/skill-docs/assets/form-template/style-templates-advanced-standard-example.json +53 -0
  269. package/skill-docs/assets/form-template/style-templates-advanced-structure-example.json +25 -0
  270. package/skill-docs/assets/form-template/style-templates-advanced-table-example.json +1420 -0
  271. package/skill-docs/references/code-block/guide-code-block.md +141 -0
  272. package/skill-docs/references/code-block/guide-layout-css.md +107 -0
  273. package/skill-docs/references/code-block/ref-controls.md +60 -0
  274. package/skill-docs/references/code-block/ref-coverage.md +32 -0
  275. package/skill-docs/references/code-block/ref-details.md +57 -0
  276. package/skill-docs/references/code-block/ref-events-validation.md +42 -0
  277. package/skill-docs/references/code-block/ref-foundations-fields.md +56 -0
  278. package/skill-docs/references/code-block/ref-recipes.md +164 -0
  279. package/skill-docs/references/code-block/ref-troubleshooting.md +49 -0
  280. package/skill-docs/references/code-block/ref-ui-global.md +47 -0
  281. package/skill-docs/references/common/guide-plan-template.md +168 -167
  282. package/skill-docs/references/common/map.md +2 -1
  283. package/skill-docs/references/common/ref-cli-commands.md +54 -15
  284. package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +8 -4
  285. package/skill-docs/references/form/form-template/style-templates-advanced-css-guide.md +167 -0
  286. package/skill-docs/references/form/form-template/style-templates-advanced.md +315 -0
  287. package/skill-docs/references/form/form-template/style-templates-easy.md +55 -0
  288. package/skill-docs/references/form/form-template/style-templates-flow.md +27 -0
  289. package/skill-docs/references/form/form-template/style-templates.md +29 -0
  290. package/skill-docs/references/form/guide-browser-definition.md +148 -0
  291. package/skill-docs/references/form/guide-create-form.md +258 -250
  292. package/skill-docs/references/form/guide-form-archive-permission.md +29 -6
  293. package/skill-docs/references/form/guide-form-formula-functions.md +354 -354
  294. package/skill-docs/references/form/guide-form-layout-incremental.md +28 -0
  295. package/skill-docs/references/form/guide-form-layout-planning.md +11 -0
  296. package/skill-docs/references/form/guide-form-layout-source.md +4 -0
  297. package/skill-docs/references/form/guide-form-linkage.md +295 -259
  298. package/skill-docs/references/form/guide-form-physical-table.md +2 -0
  299. package/skill-docs/references/form/guide-form-view.md +3 -0
  300. package/skill-docs/references/form/ref-form-fields.md +301 -293
  301. package/skill-docs/references/form/ref-list-filter-date-params.md +83 -0
  302. package/skill-docs/references/menu/system-menus.md +12 -0
  303. package/skill-docs/references/workflow/condition-core-contract.md +63 -0
  304. package/skill-docs/references/workflow/guide-base-auth-share-remind.md +126 -0
  305. package/skill-docs/references/workflow/guide-workflow-condition.md +476 -447
  306. package/skill-docs/references/workflow/guide-workflow-node-layout.md +6 -0
  307. package/skill-docs/references/workflow/guide-workflow.md +28 -2
  308. package/skill-docs/references/form/style-templates.md +0 -97
@@ -0,0 +1,276 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { AuthSession } from '../core/auth.js';
3
+ import { ApiClient } from '../core/client.js';
4
+ import { assertDesignerReadableLayoutCode, assertLayoutReadback, buildLayoutSaveRequest, decodeFormEcode, decodeLayoutCode, encodeFormEcode, encodeLayoutCode, updateCode, } from '../services/form-code.js';
5
+ function route(target) {
6
+ return target === 'workflow' ? '/api/workflow/core/form' : '/api/ebuilder/form/form';
7
+ }
8
+ async function context(program, target, id, appId) {
9
+ const auth = await AuthSession.fromOptions(program.opts());
10
+ if (!auth)
11
+ throw new Error('无法加载认证');
12
+ const client = new ApiClient(auth);
13
+ const base = auth.getBaseUrl();
14
+ let formId = id;
15
+ if (target === 'ebuilderform') {
16
+ const res = await client.get(`${base}/api/ebuilder/form/obj/getInfo/${id}`);
17
+ formId = String(res?.data?.formId || '');
18
+ if (!formId)
19
+ throw new Error(`无法从 objId=${id} 获取 formId`);
20
+ }
21
+ return { client, base, formId, customParam: appId ? { appId } : {} };
22
+ }
23
+ function success(res, operation) {
24
+ if (res?.code !== 200 || !res?.status)
25
+ throw new Error(`${operation}失败: ${res?.msg || '接口未成功'}`);
26
+ return res.data;
27
+ }
28
+ async function getLayout(client, base, target, formId, layoutId, appId) {
29
+ if (target === 'ebuilderform' && !appId)
30
+ throw new Error('EB 布局源码读取需要 --app-id');
31
+ const path = `${route(target)}/builder/getFormLayout${appId && target === 'ebuilderform' ? `?apid=${appId}&formId=${formId}` : `?formId=${formId}`}`;
32
+ const body = {
33
+ formId, module: target, customParam: target === 'ebuilderform' ? { terminal: '', objId: formId } : {}, formTableIdList: [],
34
+ designerParam: { onlyLayout: false, convert: false }, form: { id: formId }, layoutMultiId: layoutId,
35
+ };
36
+ const data = success(await client.post(`${base}${path}`, body, { ebbusinessid: formId }), '读取布局');
37
+ if (!Array.isArray(data?.formLayout?.pageLayouts))
38
+ throw new Error('布局快照缺少 pageLayouts');
39
+ if (String(data.formLayout.multipleLayoutId || '') !== layoutId)
40
+ throw new Error('回读布局 ID 与指定 ID 不一致');
41
+ return data;
42
+ }
43
+ function files(opts) {
44
+ if (!opts.js && !opts.css)
45
+ throw new Error('至少指定 --js 或 --css 文件');
46
+ return {
47
+ ...(opts.js ? { js: readFileSync(opts.js, 'utf8') } : {}),
48
+ ...(opts.css ? { css: readFileSync(opts.css, 'utf8') } : {}),
49
+ };
50
+ }
51
+ async function page(client, base, target, formId, appId) {
52
+ const body = { module: target, formId, pageNo: 1, pageSize: 100 };
53
+ if (appId)
54
+ body.customParam = { appId };
55
+ const path = `${route(target)}/ecode/page${appId && target === 'ebuilderform' ? `?apid=${appId}` : ''}`;
56
+ const data = success(await client.post(`${base}${path}`, body), '读取表单 ecode');
57
+ return data?.page?.records || [];
58
+ }
59
+ async function detailCode(client, base, target, ecodeId) {
60
+ const detail = success(await client.post(`${base}${route(target)}/ecode/get`, {
61
+ module: target, ecodeId, needPermission: true,
62
+ }), '读取表单级 ecode 详情');
63
+ const raw = detail?.formEcode?.ecodeConfig?.ecode;
64
+ if (!raw)
65
+ throw new Error('表单级 ecode 详情未返回代码');
66
+ return JSON.parse(raw);
67
+ }
68
+ export function registerFormCodeCommands(parent, program, target) {
69
+ const code = parent.command('code').description('布局源码与表单级 ecode');
70
+ const layout = code.command('layout').description('指定布局、终端的 JS/CSS 源码');
71
+ layout.command('read')
72
+ .argument('<form>', target === 'workflow' ? '流程表单 formId' : 'EB 表单 objId')
73
+ .requiredOption('--layout-id <id>', '布局 ID')
74
+ .requiredOption('--terminal <type>', 'PC 或 MOBILE')
75
+ .option('--app-id <id>', 'EB 应用 ID(读取布局源码时必需)')
76
+ .action(async (id, o) => {
77
+ try {
78
+ const { client, base, formId } = await context(program, target, id, o.appId);
79
+ const snapshot = await getLayout(client, base, target, formId, o.layoutId, o.appId);
80
+ const current = snapshot.formLayout.pageLayouts.find((p) => p.terminalType === o.terminal?.toUpperCase());
81
+ if (!current)
82
+ throw new Error(`布局中没有 ${o.terminal} 终端页面`);
83
+ console.log(JSON.stringify({ formId, layoutId: o.layoutId, terminal: current.terminalType, code: decodeLayoutCode(current.sourceCode?.ecode) }, null, 2));
84
+ }
85
+ catch (e) {
86
+ console.error(e.message);
87
+ process.exitCode = 1;
88
+ }
89
+ });
90
+ layout.command('set')
91
+ .argument('<form>', target === 'workflow' ? '流程表单 formId' : 'EB 表单 objId')
92
+ .requiredOption('--layout-id <id>', '布局 ID')
93
+ .requiredOption('--terminal <type>', 'PC 或 MOBILE')
94
+ .option('--app-id <id>', 'EB 应用 ID(保存布局源码时必需)')
95
+ .option('--js <file>', 'JavaScript 源文件')
96
+ .option('--css <file>', 'CSS 源文件')
97
+ .action(async (id, o) => {
98
+ try {
99
+ const change = files(o);
100
+ if (target === 'ebuilderform' && !o.appId)
101
+ throw new Error('EB 布局源码写入需要 --app-id');
102
+ const { client, base, formId } = await context(program, target, id, o.appId);
103
+ const snapshot = await getLayout(client, base, target, formId, o.layoutId, o.appId);
104
+ const pages = snapshot.formLayout.pageLayouts;
105
+ const current = pages.find((p) => p.terminalType === o.terminal?.toUpperCase());
106
+ if (!current)
107
+ throw new Error(`布局中没有 ${o.terminal} 终端页面`);
108
+ const pageId = String(current.pageId || '');
109
+ const next = updateCode(decodeLayoutCode(current.sourceCode?.ecode), change, 'layout', pageId);
110
+ current.sourceCode = { ...(current.sourceCode || {}), ecode: encodeLayoutCode(next) };
111
+ current.sourceCode.cssCache ||= { ebd_page: `#ebpage_${pageId} .weapp-ebpv-styled-flow{margin:auto;height:100%;}` };
112
+ const path = target === 'workflow'
113
+ ? `${route(target)}/builder/saveFormAndLayout`
114
+ : `${route(target)}/builder/saveFormAndLayout?apid=${o.appId}`;
115
+ success(await client.post(`${base}${path}`, buildLayoutSaveRequest(snapshot, target, formId, o.layoutId), { ebbusinessid: formId }), '保存布局源码');
116
+ const saved = await getLayout(client, base, target, formId, o.layoutId, o.appId);
117
+ const savedPage = saved.formLayout.pageLayouts.find((p) => p.terminalType === o.terminal?.toUpperCase());
118
+ if (!savedPage)
119
+ throw new Error(`保存后布局中没有 ${o.terminal} 终端页面`);
120
+ // 设计器用 JSON.parse(decodeURI(ecode)) 读取;回读后再按同一路径验一遍。
121
+ assertDesignerReadableLayoutCode(savedPage.sourceCode?.ecode);
122
+ assertLayoutReadback(next, decodeLayoutCode(savedPage.sourceCode?.ecode), pageId, {
123
+ js: change.js !== undefined,
124
+ css: change.css !== undefined,
125
+ });
126
+ console.log(JSON.stringify({ success: true, formId, layoutId: o.layoutId, terminal: o.terminal, jsUpdated: change.js !== undefined, cssUpdated: change.css !== undefined }));
127
+ }
128
+ catch (e) {
129
+ console.error(e.message);
130
+ process.exitCode = 1;
131
+ }
132
+ });
133
+ const ecode = code.command('ecode').description('表单级 ecode(独立于布局源码)');
134
+ ecode.command('list').argument('<form>').option('--app-id <id>', 'EB 应用 ID').action(async (id, o) => {
135
+ try {
136
+ const { client, base, formId } = await context(program, target, id, o.appId);
137
+ console.log(JSON.stringify(await page(client, base, target, formId, o.appId), null, 2));
138
+ }
139
+ catch (e) {
140
+ console.error(e.message);
141
+ process.exitCode = 1;
142
+ }
143
+ });
144
+ ecode.command('read').argument('<form>').argument('<ecodeId>')
145
+ .option('--app-id <id>', 'EB 应用 ID')
146
+ .action(async (id, ecodeId, o) => {
147
+ try {
148
+ const { client, base, formId } = await context(program, target, id, o.appId);
149
+ const records = await page(client, base, target, formId, o.appId);
150
+ const row = records.find((item) => String(item.id) === ecodeId);
151
+ if (!row)
152
+ throw new Error(`未找到表单级 ecode:${ecodeId}`);
153
+ const encoded = row.ecodeConfig?.ecodeEncodes;
154
+ const code = row.ecodeId ? await detailCode(client, base, target, row.ecodeId) : (encoded ? decodeFormEcode(encoded) : undefined);
155
+ console.log(JSON.stringify({ ...row, code }, null, 2));
156
+ }
157
+ catch (e) {
158
+ console.error(e.message);
159
+ process.exitCode = 1;
160
+ }
161
+ });
162
+ ecode.command('add').argument('<form>')
163
+ .requiredOption('--name <name>', '配置名称')
164
+ .option('--app-id <id>', 'EB 应用 ID')
165
+ .option('--js <file>', 'JavaScript 源文件')
166
+ .option('--css <file>', 'CSS 源文件')
167
+ .action(async (id, o) => {
168
+ try {
169
+ const change = files(o);
170
+ if (target === 'ebuilderform' && !o.appId)
171
+ throw new Error('EB 表单级 ecode 需要 --app-id');
172
+ const { client, base, formId, customParam } = await context(program, target, id, o.appId);
173
+ if ((await page(client, base, target, formId, o.appId)).some((item) => item.ecodeName === o.name)) {
174
+ throw new Error(`已存在同名表单级 ecode:${o.name}`);
175
+ }
176
+ const codePair = updateCode(decodeFormEcode(undefined), change, 'form', formId);
177
+ const body = {
178
+ module: target, formId, ecodeChange: true,
179
+ formEcode: { ecodeName: o.name, showOrder: 0, status: true, effectType: 'form',
180
+ ecodeDetails: [{ effectId: formId }], ecodeConfig: { ecodeEncodes: encodeFormEcode(codePair) } },
181
+ };
182
+ if (target === 'ebuilderform')
183
+ body.customParam = customParam;
184
+ const path = `${route(target)}/ecode/save${o.appId && target === 'ebuilderform' ? `?apid=${o.appId}` : ''}`;
185
+ success(await client.post(`${base}${path}`, body), '保存表单级 ecode');
186
+ const records = await page(client, base, target, formId, o.appId);
187
+ const created = records.find((item) => item.ecodeName === o.name);
188
+ if (!created)
189
+ throw new Error('保存成功,但列表未读回该 ecode');
190
+ if (created.ecodeId) {
191
+ const actual = await detailCode(client, base, target, created.ecodeId);
192
+ if ((change.js !== undefined && actual.js?.content !== change.js)
193
+ || (change.css !== undefined && actual.css?.content !== change.css))
194
+ throw new Error('表单级 ecode 保存后代码读回不一致');
195
+ }
196
+ console.log(JSON.stringify({ success: true, formId, name: o.name }));
197
+ }
198
+ catch (e) {
199
+ console.error(e.message);
200
+ process.exitCode = 1;
201
+ }
202
+ });
203
+ ecode.command('edit').argument('<form>').argument('<ecodeId>')
204
+ .option('--app-id <id>', 'EB 应用 ID')
205
+ .option('--name <name>', '新名称;不传则保留原名称')
206
+ .option('--js <file>', '替换 JavaScript 源文件')
207
+ .option('--css <file>', '替换 CSS 源文件')
208
+ .action(async (id, ecodeId, o) => {
209
+ try {
210
+ if (!o.js && !o.css && !o.name)
211
+ throw new Error('至少指定 --js、--css 或 --name');
212
+ if (target === 'ebuilderform' && !o.appId)
213
+ throw new Error('EB 表单级 ecode 需要 --app-id');
214
+ const { client, base, formId } = await context(program, target, id, o.appId);
215
+ const records = await page(client, base, target, formId, o.appId);
216
+ const row = records.find((item) => String(item.id) === ecodeId);
217
+ if (!row)
218
+ throw new Error(`未找到表单级 ecode:${ecodeId}`);
219
+ const hasCodeChange = Boolean(o.js || o.css);
220
+ const formEcode = {
221
+ id: ecodeId, ecodeName: o.name || row.ecodeName,
222
+ status: row.status, ecodeDetails: row.ecodeDetails,
223
+ };
224
+ if (hasCodeChange) {
225
+ const next = updateCode(await detailCode(client, base, target, row.ecodeId), files(o), 'form', formId);
226
+ formEcode.ecodeConfig = { ecodeId: row.ecodeId, ecodeEncodes: encodeFormEcode(next) };
227
+ }
228
+ success(await client.post(`${base}${route(target)}/ecode/edit${o.appId && target === 'ebuilderform' ? `?apid=${o.appId}` : ''}`, {
229
+ module: target, formId, ecodeChange: hasCodeChange, formEcode,
230
+ }), '修改表单级 ecode');
231
+ const updated = (await page(client, base, target, formId, o.appId)).find((item) => String(item.id) === ecodeId);
232
+ if (!updated || updated.ecodeName !== formEcode.ecodeName)
233
+ throw new Error('修改后列表读回不一致');
234
+ if (hasCodeChange) {
235
+ const actual = await detailCode(client, base, target, row.ecodeId);
236
+ const change = files(o);
237
+ if ((change.js !== undefined && actual.js?.content !== change.js)
238
+ || (change.css !== undefined && actual.css?.content !== change.css))
239
+ throw new Error('修改后代码读回不一致');
240
+ }
241
+ console.log(JSON.stringify({ success: true, formId, ecodeId, codeUpdated: hasCodeChange }));
242
+ }
243
+ catch (e) {
244
+ console.error(e.message);
245
+ process.exitCode = 1;
246
+ }
247
+ });
248
+ {
249
+ ecode.command('status').argument('<form>').argument('<ecodeId>')
250
+ .option('--app-id <id>', 'EB 应用 ID')
251
+ .requiredOption('--state <state>', 'on 或 off')
252
+ .action(async (id, ecodeId, o) => {
253
+ try {
254
+ if (!['on', 'off'].includes(o.state))
255
+ throw new Error('--state 只能是 on 或 off');
256
+ if (target === 'ebuilderform' && !o.appId)
257
+ throw new Error('EB 表单级 ecode 需要 --app-id');
258
+ const { client, base, formId } = await context(program, target, id, o.appId);
259
+ const status = o.state === 'on';
260
+ success(await client.post(`${base}${route(target)}/ecode/update/status${o.appId && target === 'ebuilderform' ? `?apid=${o.appId}` : ''}`, {
261
+ module: target, formId, formEcode: { id: ecodeId, status },
262
+ }), '更新表单级 ecode 状态');
263
+ const records = await page(client, base, target, formId, o.appId);
264
+ const row = records.find((item) => String(item.id) === ecodeId);
265
+ if (!row || Boolean(row.status) !== status)
266
+ throw new Error('状态更新后读回不一致');
267
+ console.log(JSON.stringify({ success: true, formId, ecodeId, status }));
268
+ }
269
+ catch (e) {
270
+ console.error(e.message);
271
+ process.exitCode = 1;
272
+ }
273
+ });
274
+ }
275
+ }
276
+ //# sourceMappingURL=form-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-code.js","sourceRoot":"","sources":["../../src/commands/form-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,eAAe,EAC/F,gBAAgB,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,GAChE,MAAM,0BAA0B,CAAC;AAMlC,SAAS,KAAK,CAAC,MAAc;IAC3B,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,yBAAyB,CAAC;AACvF,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAgB,EAAE,MAAc,EAAE,EAAU,EAAE,KAAc;IACjF,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAiB,CAAC,CAAC;IAC1E,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;IAC/B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,KAAK,cAAc,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,kCAAkC,EAAE,EAAE,CAAC,CAAC;QAC5E,MAAM,GAAG,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACvE,CAAC;AAED,SAAS,OAAO,CAAC,GAAQ,EAAE,SAAiB;IAC1C,IAAI,GAAG,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,OAAO,GAAG,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,MAAiB,EAAE,IAAY,EAAE,MAAc,EAAE,MAAc,EAAE,QAAgB,EAAE,KAAc;IACxH,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjF,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,yBAAyB,KAAK,IAAI,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,MAAM,EAAE,CAAC,CAAC,CAAC,WAAW,MAAM,EAAE,EAAE,CAAC;IACrJ,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,eAAe,EAAE,EAAE;QAC1H,aAAa,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,QAAQ;KACpG,CAAC;IACF,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;IAClG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACzF,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,IAAI,EAAE,CAAC,KAAK,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACvG,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,KAAK,CAAC,IAAiB;IAC9B,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACnE,OAAO;QACL,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,MAAiB,EAAE,IAAY,EAAE,MAAc,EAAE,MAAc,EAAE,KAAc;IACjG,MAAM,IAAI,GAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC;IACvE,IAAI,KAAK;QAAE,IAAI,CAAC,WAAW,GAAG,EAAE,KAAK,EAAE,CAAC;IACxC,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,KAAK,IAAI,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACxG,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAC9E,OAAO,IAAI,EAAE,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;AACnC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,MAAiB,EAAE,IAAY,EAAE,MAAc,EAAE,OAAe;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,EAAE;QAC5E,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI;KAC9C,CAAC,EAAE,gBAAgB,CAAC,CAAC;IACtB,MAAM,GAAG,GAAG,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC;IAClD,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAe,EAAE,OAAgB,EAAE,MAAc;IACxF,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACxE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnB,QAAQ,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;SACzE,cAAc,CAAC,kBAAkB,EAAE,OAAO,CAAC;SAC3C,cAAc,CAAC,mBAAmB,EAAE,aAAa,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,CAAc,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,QAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACrF,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAC/G,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,EAAE,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5J,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEL,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SAClB,QAAQ,CAAC,QAAQ,EAAE,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC;SACzE,cAAc,CAAC,kBAAkB,EAAE,OAAO,CAAC;SAC3C,cAAc,CAAC,mBAAmB,EAAE,aAAa,CAAC;SAClD,MAAM,CAAC,eAAe,EAAE,qBAAqB,CAAC;SAC9C,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,CAAc,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACnF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,QAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACrF,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,WAAW,CAAC;YAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YACrF,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC/F,OAAO,CAAC,UAAU,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC;YACtF,OAAO,CAAC,UAAU,CAAC,QAAQ,KAAK,EAAE,QAAQ,EAAE,WAAW,MAAM,oDAAoD,EAAE,CAAC;YACpH,MAAM,IAAI,GAAG,MAAM,KAAK,UAAU;gBAChC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,4BAA4B;gBAC9C,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;YACjE,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,QAAS,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;YAChJ,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,QAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAClF,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,KAAK,CAAC,CAAC,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC;YAC9G,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC,QAAQ,OAAO,CAAC,CAAC;YAC/D,qDAAqD;YACrD,gCAAgC,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC9D,oBAAoB,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE;gBAChF,EAAE,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS;gBAC3B,GAAG,EAAE,MAAM,CAAC,GAAG,KAAK,SAAS;aAC9B,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/K,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEL,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACtE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,CAAc,EAAE,EAAE;QACvH,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC1F,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;SAC3D,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC;SACnC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAe,EAAE,CAAc,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;YAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAClI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;SACpC,cAAc,CAAC,eAAe,EAAE,MAAM,CAAC;SACvC,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC;SACnC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC;SACvC,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,CAAc,EAAE,EAAE;QAC3C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACvF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC1F,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvG,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YAChF,MAAM,IAAI,GAAQ;gBAChB,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI;gBACzC,SAAS,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM;oBAC5E,YAAY,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE,YAAY,EAAE,eAAe,CAAC,QAAQ,CAAC,EAAE,EAAE;aACnG,CAAC;YACF,IAAI,MAAM,KAAK,cAAc;gBAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;YAC9D,MAAM,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC5G,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;YACvE,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACpD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;gBACvE,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,EAAE,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;uBAC5D,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACjH,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACvE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;SAC3D,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC;SACnC,MAAM,CAAC,eAAe,EAAE,cAAc,CAAC;SACvC,MAAM,CAAC,aAAa,EAAE,mBAAmB,CAAC;SAC1C,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC;SACpC,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAe,EAAE,CAAc,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC5E,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACvF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAC7E,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAClE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;YACrE,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,EAAE,CAAC,CAAC;YACrD,MAAM,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAQ;gBACrB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,SAAS;gBAC/C,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,YAAY;aACnD,CAAC;YACF,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBACvG,SAAS,CAAC,WAAW,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;YACxF,CAAC;YACD,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC/H,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS;aAC9D,CAAC,EAAE,aAAa,CAAC,CAAC;YACnB,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;YACrH,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YACzF,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;gBACnE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,EAAE,OAAO,KAAK,MAAM,CAAC,EAAE,CAAC;uBAC5D,CAAC,MAAM,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC,GAAG,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YACvG,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QAC9F,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEL,CAAC;QACC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC;aAC7D,MAAM,CAAC,eAAe,EAAE,UAAU,CAAC;aACnC,cAAc,CAAC,iBAAiB,EAAE,UAAU,CAAC;aAC7C,MAAM,CAAC,KAAK,EAAE,EAAU,EAAE,OAAe,EAAE,CAAoC,EAAE,EAAE;YAClF,IAAI,CAAC;gBACH,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC;oBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC9E,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,CAAC,CAAC,KAAK;oBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBACvF,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAC7E,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC;gBAChC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC,KAAK,IAAI,MAAM,KAAK,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE;oBACxI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;iBAC3D,CAAC,EAAE,gBAAgB,CAAC,CAAC;gBACtB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;gBAClE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC;gBACrE,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,MAAM;oBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC1E,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;YAAC,OAAO,CAAM,EAAE,CAAC;gBAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;gBAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACP,CAAC;AACH,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from 'commander';
2
+ export declare function registerFormEngineLinkageCommands(program: Command): void;
3
+ //# sourceMappingURL=form-engine-linkage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-engine-linkage.d.ts","sourceRoot":"","sources":["../../src/commands/form-engine-linkage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCzC,wBAAgB,iCAAiC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+IxE"}
@@ -0,0 +1,199 @@
1
+ import { ApiClient } from '../core/client.js';
2
+ import { AuthSession } from '../core/auth.js';
3
+ import { buildConditionDetail, normalizeOperator, operatorTakesValue, readLinkageConfig, resolveWorkflowEffect } from '../services/form-linkage-condition.js';
4
+ const ROUTES = {
5
+ workflow: '/api/workflow/core',
6
+ biaoge: '/api/formdatareport',
7
+ };
8
+ const PROPS = ['hide', 'show', 'edit', 'readonly', 'required', 'hideLine', 'hideRow'];
9
+ function moduleRoute(value) {
10
+ if (value !== 'workflow' && value !== 'biaoge')
11
+ throw new Error('--module 仅支持已核对的 workflow 或 biaoge');
12
+ return { module: value, route: ROUTES[value] };
13
+ }
14
+ function checked(res, action) {
15
+ if (res?.code !== 200 || !res?.status)
16
+ throw new Error(`${action}失败: ${res?.msg || '接口返回异常'}`);
17
+ return res.data;
18
+ }
19
+ function findUnique(items, key, name) {
20
+ const hits = items.filter((item) => String(item[key] ?? item.name ?? item.title ?? item.content) === name
21
+ || String(item.id ?? item.valueKey) === name || String(item.dataKey) === name);
22
+ if (hits.length !== 1)
23
+ throw new Error(`${name} ${hits.length ? '匹配多个' : '未在可选列表中找到'},请先查询 fields/targets 并使用精确名称或 ID`);
24
+ return hits[0];
25
+ }
26
+ function systemValue(field, input) {
27
+ if (input.sourceContent)
28
+ return input.sourceContent;
29
+ const valueType = String(field.valueType || 'TEXT').toUpperCase();
30
+ if (valueType === 'OBJECT' && Array.isArray(field.scenarioFieldOptions)) {
31
+ const option = field.scenarioFieldOptions.find((o) => String(o.id) === String(input.value) || o.content === input.value);
32
+ if (!option)
33
+ throw new Error(`系统字段 ${field.name} 的值不在选项中;请查询 fields`);
34
+ return { valueType: 'OBJECT', optionValue: { valueType: 'TEXT', textValue: String(option.id), name: option.content } };
35
+ }
36
+ if (valueType === 'DATE')
37
+ return { valueType: 'DATE', dateValue: String(input.value ?? '') };
38
+ if (valueType === 'TEXT')
39
+ return { valueType: 'TEXT', textValue: String(input.value ?? '') };
40
+ throw new Error(`系统字段 ${field.name} 的 ${valueType} 比较值需显式提供 sourceContent`);
41
+ }
42
+ export function registerFormEngineLinkageCommands(program) {
43
+ const root = program.command('form-engine').description('表单引擎跨模块配置(已确认 workflow / biaoge)');
44
+ const linkage = root.command('linkage').description('非 EB 表单的显示属性联动;EB 表单使用 form linkage');
45
+ async function context(moduleName) {
46
+ const { module, route } = moduleRoute(moduleName);
47
+ const auth = await AuthSession.fromOptions(program.opts());
48
+ if (!auth)
49
+ throw new Error('无法加载认证');
50
+ return { module, route, client: new ApiClient(auth), baseUrl: auth.getBaseUrl() };
51
+ }
52
+ async function fields(ctx, formId) {
53
+ return checked(await ctx.client.get(`${ctx.baseUrl}${ctx.route}/form/condition/getConditionFields?${new URLSearchParams({ formId, module: ctx.module, subFormId: '0', type: 'source' })}`), '查询条件字段');
54
+ }
55
+ async function targets(ctx, formId) {
56
+ const data = checked(await ctx.client.post(`${ctx.baseUrl}${ctx.route}/common/browser/complete/form_dataDrivenColumn`, {
57
+ browserMultiple: true, formId, module: ctx.module, groupId: 'formField', makeComplexField: true,
58
+ openTab: true, scenarioType: 'VIEW_LINKAGE_TARGET',
59
+ notComponentKeyList: ['DividingLine', 'ColumnPanel', 'MultiTypeField', 'WPSEditor'],
60
+ needI18n: true, newly: 1, searchValue: '',
61
+ }), '查询变更字段');
62
+ if (!Array.isArray(data?.data))
63
+ throw new Error('变更字段列表格式未知');
64
+ return data.data;
65
+ }
66
+ async function get(ctx, formId, id) {
67
+ const data = checked(await ctx.client.get(`${ctx.baseUrl}${ctx.route}/form/setting/viewlinkage/id?${new URLSearchParams({ id, formId, module: ctx.module })}`), '读取联动');
68
+ if (!data || String(data.id) !== id || String(data.formId) !== formId)
69
+ throw new Error('联动不存在或不属于该表单');
70
+ return data;
71
+ }
72
+ async function list(ctx, formId) {
73
+ const data = checked(await ctx.client.post(`${ctx.baseUrl}${ctx.route}/form/setting/viewlinkage/queryByPages`, {
74
+ formId, refId: formId, module: ctx.module, pageNo: 1, pageSize: 200,
75
+ }), '读取联动列表');
76
+ const rows = data?.result ?? data?.list ?? data?.records;
77
+ if (!Array.isArray(rows))
78
+ throw new Error('联动列表格式未知');
79
+ return rows;
80
+ }
81
+ async function build(ctx, formId, name, cfg, workflowId) {
82
+ if (!Array.isArray(cfg.conditions) || !cfg.conditions.length || !Array.isArray(cfg.actions) || !cfg.actions.length) {
83
+ throw new Error('config 须含非空 conditions[] 与 actions[]');
84
+ }
85
+ if (cfg.conditions.some((c) => !c.field) || cfg.actions.some((a) => !PROPS.includes(a.prop) || !Array.isArray(a.fields) || !a.fields.length)) {
86
+ throw new Error(`条件须指定 field;动作须指定 prop 和 fields[],prop 可用 ${PROPS.join('/')}`);
87
+ }
88
+ if (cfg.actions.some((a) => a.linkageObj && a.linkageObj !== 'field')) {
89
+ throw new Error('此命令只支持字段变更对象 field;其他对象的模块报文尚未核对');
90
+ }
91
+ if (cfg.detailType && !['AND', 'OR'].includes(cfg.detailType))
92
+ throw new Error('detailType 仅支持 AND/OR');
93
+ const available = await fields(ctx, formId);
94
+ const sourceFields = [...(available.bizFields || []), ...(available.formFields || [])];
95
+ const targetFields = await targets(ctx, formId);
96
+ const conditionDetails = cfg.conditions.map((c) => {
97
+ const field = findUnique(sourceFields, 'name', String(c.field));
98
+ const isSystem = Boolean(field.valueKey && !field.id);
99
+ const operator = normalizeOperator(c.operator);
100
+ const { detail, warnings } = buildConditionDetail({ fieldId: String(isSystem ? field.valueKey : field.id), operator,
101
+ ...(isSystem && operatorTakesValue(operator) ? { sourceContent: systemValue(field, c) } : { value: c.value, options: c.options, sourceContent: c.sourceContent }) });
102
+ warnings.forEach((warning) => console.error(` ⚠ ${warning}`));
103
+ return detail;
104
+ });
105
+ const linkageDetails = cfg.actions.map((a, i) => ({
106
+ formId, id: String(i), linkageObj: 'field', linkageProp: a.prop,
107
+ linkageShowValue: a.fields.map((field) => findUnique(targetFields, 'name', String(field))), detailOptions: [],
108
+ }));
109
+ let effect = { effectType: 'form', effectName: '当前表单', effectValue: formId };
110
+ let refId = formId;
111
+ if (ctx.module === 'workflow') {
112
+ const resolved = await resolveWorkflowEffect(ctx.client, ctx.baseUrl, {
113
+ module: ctx.module, route: ctx.route + '/form', formId, dimension: cfg.effect,
114
+ workflowId, nodeKey: cfg.nodeId || cfg.node, layoutId: cfg.layoutId,
115
+ });
116
+ effect = resolved.effect;
117
+ refId = resolved.refId;
118
+ }
119
+ else if (cfg.effect && cfg.effect !== 'form' && cfg.effect !== '当前表单') {
120
+ throw new Error('biaoge 当前仅支持“当前表单”生效维度;其他维度待报文核对');
121
+ }
122
+ const formData = checked(await ctx.client.post(`${ctx.baseUrl}${ctx.route}/form/formmanage/getForm`, {
123
+ module: ctx.module, form: { id: formId }, baseSettingPartType: 'basic',
124
+ }), '读取表单');
125
+ const formName = formData?.formName || formData?.name;
126
+ if (!formName)
127
+ throw new Error('无法读到表单名称');
128
+ return {
129
+ fdEffect: { formId, effectModule: ctx.module, effectType: effect.effectType, effectName: effect.effectName,
130
+ optionList: [{ effectValue: effect.effectValue, effectName: effect.optionName || effect.effectName }] },
131
+ condition: { targetId: formId, targetName: formName, targetModule: ctx.module, conditionType: 'FIELD',
132
+ ...(cfg.detailType ? { detailType: cfg.detailType } : {}), conditionDetails, formulaId: '', formulaName: '' },
133
+ linkageDetails, module: ctx.module, formId, refId, enableState: cfg.enabled === false ? '0' : '1', linkageName: name,
134
+ };
135
+ }
136
+ function run(fn) { void fn().catch((e) => { console.error(`显示属性联动失败: ${e.message}`); process.exitCode = 1; }); }
137
+ linkage.command('fields').argument('<formId>').requiredOption('--module <workflow|biaoge>')
138
+ .action((formId, o) => run(async () => { const ctx = await context(o.module); console.log(JSON.stringify(await fields(ctx, formId), null, 2)); }));
139
+ linkage.command('targets').argument('<formId>').requiredOption('--module <workflow|biaoge>')
140
+ .action((formId, o) => run(async () => { const ctx = await context(o.module); console.log(JSON.stringify(await targets(ctx, formId), null, 2)); }));
141
+ linkage.command('add').argument('<formId>').argument('<name>').requiredOption('--module <workflow|biaoge>')
142
+ .requiredOption('--config <json>').option('--workflow-id <id>')
143
+ .action((formId, name, o) => run(async () => {
144
+ if (name.length > 200)
145
+ throw new Error('联动名称不能超过 200 字');
146
+ const ctx = await context(o.module);
147
+ const payload = await build(ctx, formId, name, readLinkageConfig(o.config), o.workflowId);
148
+ checked(await ctx.client.post(`${ctx.baseUrl}${ctx.route}/form/setting/viewlinkage/add`, payload), '新增联动');
149
+ console.log(JSON.stringify({ success: true, formId, name, module: ctx.module, refId: payload.refId }));
150
+ }));
151
+ linkage.command('list').argument('<formId>').requiredOption('--module <workflow|biaoge>')
152
+ .action((formId, o) => run(async () => { const ctx = await context(o.module); console.log(JSON.stringify(await list(ctx, formId), null, 2)); }));
153
+ linkage.command('get').argument('<formId>').argument('<id>').requiredOption('--module <workflow|biaoge>')
154
+ .action((formId, id, o) => run(async () => { const ctx = await context(o.module); console.log(JSON.stringify(await get(ctx, formId, id), null, 2)); }));
155
+ linkage.command('state').argument('<formId>').argument('<id>').requiredOption('--module <workflow|biaoge>')
156
+ .requiredOption('--set <on|off>')
157
+ .action((formId, id, o) => run(async () => {
158
+ const state = o.set === 'on' ? '1' : o.set === 'off' ? '0' : '';
159
+ if (!state)
160
+ throw new Error('--set 仅接受 on/off');
161
+ const ctx = await context(o.module);
162
+ await get(ctx, formId, id);
163
+ checked(await ctx.client.post(`${ctx.baseUrl}${ctx.route}/form/setting/viewlinkage/updateEnableStateByEntity`, { formId, id, enableState: state }), '修改状态');
164
+ const saved = await get(ctx, formId, id);
165
+ if (String(saved.enableState) !== state)
166
+ throw new Error('状态回读不一致');
167
+ console.log(JSON.stringify({ success: true, id, enableState: state }));
168
+ }));
169
+ linkage.command('update').argument('<formId>').argument('<id>').requiredOption('--module <workflow|biaoge>')
170
+ .option('--name <text>').option('--config <json>').option('--workflow-id <id>')
171
+ .action((formId, id, o) => run(async () => {
172
+ if (!o.name && !o.config)
173
+ throw new Error('须提供 --name 或 --config');
174
+ if (o.name?.length > 200)
175
+ throw new Error('联动名称不能超过 200 字');
176
+ const ctx = await context(o.module);
177
+ const old = await get(ctx, formId, id);
178
+ const payload = { fdEffect: old.fdEffect, condition: old.condition, linkageDetails: old.linkageDetails,
179
+ module: ctx.module, formId, refId: old.refId, id, enableState: old.enableState, linkageName: o.name || old.linkageName };
180
+ if (o.config) {
181
+ const generated = await build(ctx, formId, payload.linkageName, readLinkageConfig(o.config), o.workflowId);
182
+ Object.assign(payload, { fdEffect: generated.fdEffect, condition: generated.condition,
183
+ linkageDetails: generated.linkageDetails, refId: generated.refId });
184
+ }
185
+ checked(await ctx.client.post(`${ctx.baseUrl}${ctx.route}/form/setting/viewlinkage/update`, payload), '更新联动');
186
+ const saved = await get(ctx, formId, id);
187
+ if (saved.linkageName !== payload.linkageName)
188
+ throw new Error('名称回读不一致');
189
+ console.log(JSON.stringify({ success: true, id, name: saved.linkageName }));
190
+ }));
191
+ linkage.command('delete').argument('<formId>').argument('<id>').requiredOption('--module <workflow|biaoge>')
192
+ .action((formId, id, o) => run(async () => {
193
+ const ctx = await context(o.module);
194
+ await get(ctx, formId, id);
195
+ checked(await ctx.client.get(`${ctx.baseUrl}${ctx.route}/form/setting/viewlinkage/deleteByIds?${new URLSearchParams({ ids: id, formId, module: ctx.module })}`), '删除联动');
196
+ console.log(JSON.stringify({ success: true, deleted: id }));
197
+ }));
198
+ }
199
+ //# sourceMappingURL=form-engine-linkage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-engine-linkage.js","sourceRoot":"","sources":["../../src/commands/form-engine-linkage.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form-formula.d.ts","sourceRoot":"","sources":["../../src/commands/form-formula.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC;;;;;;;;GAQG;AAEH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA0SpF"}
1
+ {"version":3,"file":"form-formula.d.ts","sourceRoot":"","sources":["../../src/commands/form-formula.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC;;;;;;;;GAQG;AAEH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CA4RpF"}
@@ -3,6 +3,7 @@ import { resolveFormRecord } from '../services/form-id.js';
3
3
  import { AuthSession } from '../core/auth.js';
4
4
  import { ApiClient, losslessParse } from '../core/client.js';
5
5
  import { buildFormulaParameters, defaultReturnType } from '../services/formula-detail.js';
6
+ import { loadViewLinkageFunctions } from '../services/form-view-linkage-functions.js';
6
7
  /**
7
8
  * Form formula — 表单字段函数公式。
8
9
  *
@@ -265,25 +266,12 @@ export function registerFormFormulaCommands(formCmd, program) {
265
266
  process.exit(1);
266
267
  const client = new ApiClient(auth);
267
268
  const baseUrl = auth.getBaseUrl();
268
- const res = await client.post(`${baseUrl}/api/excel/formula/funcList`, {
269
- extendParam: JSON.stringify(cmdOpts.scene === 'form-view-linkage'
270
- ? { isFormViewLinkage: true } : { createType: 'once' }),
271
- });
272
- // 与 @weapp/excel 的显示属性联动编辑器保持一致:该场景部分函数尚无前端执行实现。
273
- const hiddenForFormViewLinkage = new Set([
274
- 'isfloat', 'endwith', 'nvl', 'code', 'rmb', 'bahttext', 'dollar',
275
- 'proper', 'textjoin', 'ltrim', 'rtrim', 'asc', 'concatenate', 'encodeurl',
276
- 'numberstring', 'dollarde', 'dollarfr', 'replaceall', 'lunar',
277
- 'quarter', 'yeardelta', 'time', 'currdatetime', 'getdatevalue',
278
- 'compareworkdate', 'currdate', 'timevalue', 'yearfrac', 'days360',
279
- 'notempty', 'checkdups', 'random', 'randbetween', 'sign', 'sin',
280
- 'tan', 'def', 'earlier', 'floor', 'int',
281
- ]);
282
- const categories = (res?.data || [])
283
- .filter((cat) => !cmdOpts.category || (cat.chineseName || cat.name || '').includes(cmdOpts.category))
284
- .map((cat) => cmdOpts.scene === 'form-view-linkage' && cat.dataType !== 'custom'
285
- ? { ...cat, children: (cat.children || []).filter((fn) => !hiddenForFormViewLinkage.has(String(fn.name || '').toLowerCase())) }
286
- : cat);
269
+ const categories = (cmdOpts.scene === 'form-view-linkage'
270
+ ? await loadViewLinkageFunctions(client, baseUrl)
271
+ : (await client.post(`${baseUrl}/api/excel/formula/funcList`, {
272
+ extendParam: JSON.stringify({ createType: 'once' }),
273
+ }))?.data || [])
274
+ .filter((cat) => !cmdOpts.category || (cat.chineseName || cat.name || '').includes(cmdOpts.category));
287
275
  if (opts.json) {
288
276
  console.log(JSON.stringify(categories, null, 2));
289
277
  }