@nocobase/plugin-flow-engine 2.1.0-beta.2 → 2.1.0-beta.21

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 (248) hide show
  1. package/LICENSE +201 -661
  2. package/README.md +79 -9
  3. package/dist/ai/ai-employees/nathan/index.d.ts +10 -0
  4. package/dist/ai/ai-employees/nathan/index.js +41 -0
  5. package/dist/ai/ai-employees/nathan/prompt.md +132 -0
  6. package/dist/ai/ai-employees/nathan/skills/frontend-developer/SKILLS.md +69 -0
  7. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.js +2 -2
  8. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.js +2 -2
  9. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.js +2 -2
  10. package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.js +2 -2
  11. package/dist/ai/docs/runjs/context/block-model.md +35 -35
  12. package/dist/ai/docs/runjs/context/collection-field.md +53 -51
  13. package/dist/ai/docs/runjs/context/collection.md +39 -39
  14. package/dist/ai/docs/runjs/context/data-source-manager.md +40 -30
  15. package/dist/ai/docs/runjs/context/data-source.md +52 -44
  16. package/dist/ai/docs/runjs/context/element.md +44 -38
  17. package/dist/ai/docs/runjs/context/exit-all.md +37 -35
  18. package/dist/ai/docs/runjs/context/exit.md +38 -35
  19. package/dist/ai/docs/runjs/context/filter-manager.md +36 -30
  20. package/dist/ai/docs/runjs/context/form.md +57 -57
  21. package/dist/ai/docs/runjs/context/get-model.md +22 -21
  22. package/dist/ai/docs/runjs/context/get-value.md +20 -19
  23. package/dist/ai/docs/runjs/context/get-var.md +61 -55
  24. package/dist/ai/docs/runjs/context/i18n.md +17 -14
  25. package/dist/ai/docs/runjs/context/import-async.md +333 -45
  26. package/dist/ai/docs/runjs/context/init-resource.md +20 -20
  27. package/dist/ai/docs/runjs/context/libs.md +31 -31
  28. package/dist/ai/docs/runjs/context/location.md +34 -31
  29. package/dist/ai/docs/runjs/context/logger.md +41 -40
  30. package/dist/ai/docs/runjs/context/make-resource.md +27 -26
  31. package/dist/ai/docs/runjs/context/message.md +42 -41
  32. package/dist/ai/docs/runjs/context/modal.md +44 -44
  33. package/dist/ai/docs/runjs/context/model.md +36 -33
  34. package/dist/ai/docs/runjs/context/notification.md +41 -40
  35. package/dist/ai/docs/runjs/context/off.md +14 -14
  36. package/dist/ai/docs/runjs/context/on.md +30 -29
  37. package/dist/ai/docs/runjs/context/open-view.md +40 -40
  38. package/dist/ai/docs/runjs/context/render.md +37 -32
  39. package/dist/ai/docs/runjs/context/request.md +46 -45
  40. package/dist/ai/docs/runjs/context/require-async.md +28 -25
  41. package/dist/ai/docs/runjs/context/resource.md +34 -34
  42. package/dist/ai/docs/runjs/context/route.md +36 -34
  43. package/dist/ai/docs/runjs/context/router.md +43 -31
  44. package/dist/ai/docs/runjs/context/set-value.md +18 -17
  45. package/dist/ai/docs/runjs/context/sql.md +7 -15
  46. package/dist/ai/docs/runjs/context/t.md +20 -17
  47. package/dist/ai/docs/runjs/context/view.md +49 -46
  48. package/dist/ai/docs/runjs/document.md +1 -0
  49. package/dist/ai/docs/runjs/import-modules.md +32 -32
  50. package/dist/ai/docs/runjs/index.md +13 -13
  51. package/dist/ai/docs/runjs/jsx.md +19 -19
  52. package/dist/ai/docs/runjs/model/form-block-model.md +1 -3
  53. package/dist/ai/docs/runjs/render.md +15 -15
  54. package/dist/ai/docs/runjs/resource/api-resource.md +53 -53
  55. package/dist/ai/docs/runjs/resource/multi-record-resource.md +64 -64
  56. package/dist/ai/docs/runjs/resource/single-record-resource.md +55 -55
  57. package/dist/ai/docs/runjs/resource/sql-resource.md +57 -57
  58. package/dist/ai/docs/runjs/window.md +5 -5
  59. package/dist/client/index.js +1 -1
  60. package/dist/externalVersion.js +12 -11
  61. package/dist/locale/en-US.json +1 -0
  62. package/dist/locale/index.d.ts +2 -0
  63. package/dist/locale/zh-CN.json +1 -0
  64. package/dist/node_modules/ses/dist/ses.cjs +1 -1
  65. package/dist/node_modules/ses/package.json +1 -1
  66. package/dist/node_modules/zod/index.cjs +1 -1
  67. package/dist/node_modules/zod/package.json +1 -1
  68. package/dist/server/collections/flowsql.js +1 -0
  69. package/dist/server/flow-surfaces/action-scope.d.ts +39 -0
  70. package/dist/server/flow-surfaces/action-scope.js +156 -0
  71. package/dist/server/flow-surfaces/apply/compiler.d.ts +13 -0
  72. package/dist/server/flow-surfaces/apply/compiler.js +971 -0
  73. package/dist/server/flow-surfaces/apply/layout.d.ts +34 -0
  74. package/dist/server/flow-surfaces/apply/layout.js +175 -0
  75. package/dist/server/flow-surfaces/apply/matching.d.ts +16 -0
  76. package/dist/server/flow-surfaces/apply/matching.js +181 -0
  77. package/dist/server/flow-surfaces/approval/blueprint-service.d.ts +84 -0
  78. package/dist/server/flow-surfaces/approval/blueprint-service.js +589 -0
  79. package/dist/server/flow-surfaces/approval/blueprint.d.ts +21 -0
  80. package/dist/server/flow-surfaces/approval/blueprint.js +187 -0
  81. package/dist/server/flow-surfaces/approval/builder.d.ts +225 -0
  82. package/dist/server/flow-surfaces/approval/builder.js +384 -0
  83. package/dist/server/flow-surfaces/approval/catalog-specs.d.ts +33 -0
  84. package/dist/server/flow-surfaces/approval/catalog-specs.js +156 -0
  85. package/dist/server/flow-surfaces/approval/index.d.ts +14 -0
  86. package/dist/server/flow-surfaces/approval/index.js +40 -0
  87. package/dist/server/flow-surfaces/approval/runtime-config.d.ts +44 -0
  88. package/dist/server/flow-surfaces/approval/runtime-config.js +299 -0
  89. package/dist/server/flow-surfaces/approval/semantic-use.d.ts +23 -0
  90. package/dist/server/flow-surfaces/approval/semantic-use.js +155 -0
  91. package/dist/server/flow-surfaces/association-interfaces.d.ts +10 -0
  92. package/dist/server/flow-surfaces/association-interfaces.js +39 -0
  93. package/dist/server/flow-surfaces/association-title-field.d.ts +20 -0
  94. package/dist/server/flow-surfaces/association-title-field.js +192 -0
  95. package/dist/server/flow-surfaces/blueprint/compile-blocks.d.ts +14 -0
  96. package/dist/server/flow-surfaces/blueprint/compile-blocks.js +1074 -0
  97. package/dist/server/flow-surfaces/blueprint/compile-plan.d.ts +13 -0
  98. package/dist/server/flow-surfaces/blueprint/compile-plan.js +308 -0
  99. package/dist/server/flow-surfaces/blueprint/compile-reaction.d.ts +11 -0
  100. package/dist/server/flow-surfaces/blueprint/compile-reaction.js +72 -0
  101. package/dist/server/flow-surfaces/blueprint/defaults.d.ts +26 -0
  102. package/dist/server/flow-surfaces/blueprint/defaults.js +133 -0
  103. package/dist/server/flow-surfaces/blueprint/index.d.ts +12 -0
  104. package/dist/server/flow-surfaces/blueprint/index.js +44 -0
  105. package/dist/server/flow-surfaces/blueprint/normalize-document.d.ts +10 -0
  106. package/dist/server/flow-surfaces/blueprint/normalize-document.js +416 -0
  107. package/dist/server/flow-surfaces/blueprint/private-utils.d.ts +26 -0
  108. package/dist/server/flow-surfaces/blueprint/private-utils.js +182 -0
  109. package/dist/server/flow-surfaces/blueprint/public-types.d.ts +201 -0
  110. package/dist/server/flow-surfaces/blueprint/public-types.js +24 -0
  111. package/dist/server/flow-surfaces/builder.d.ts +237 -0
  112. package/dist/server/flow-surfaces/builder.js +1129 -0
  113. package/dist/server/flow-surfaces/catalog-smart.d.ts +18 -0
  114. package/dist/server/flow-surfaces/catalog-smart.js +239 -0
  115. package/dist/server/flow-surfaces/catalog-smart.projector.d.ts +15 -0
  116. package/dist/server/flow-surfaces/catalog-smart.projector.js +157 -0
  117. package/dist/server/flow-surfaces/catalog-smart.types.d.ts +99 -0
  118. package/dist/server/flow-surfaces/catalog-smart.types.js +24 -0
  119. package/dist/server/flow-surfaces/catalog.d.ts +79 -0
  120. package/dist/server/flow-surfaces/catalog.js +3693 -0
  121. package/dist/server/flow-surfaces/chart-config.d.ts +121 -0
  122. package/dist/server/flow-surfaces/chart-config.js +1394 -0
  123. package/dist/server/flow-surfaces/compose-compiler.d.ts +116 -0
  124. package/dist/server/flow-surfaces/compose-compiler.js +175 -0
  125. package/dist/server/flow-surfaces/compose-runtime.d.ts +93 -0
  126. package/dist/server/flow-surfaces/compose-runtime.js +375 -0
  127. package/dist/server/flow-surfaces/configure-options.d.ts +23 -0
  128. package/dist/server/flow-surfaces/configure-options.js +893 -0
  129. package/dist/server/flow-surfaces/constants.d.ts +351 -0
  130. package/dist/server/flow-surfaces/constants.js +104 -0
  131. package/dist/server/flow-surfaces/context.d.ts +72 -0
  132. package/dist/server/flow-surfaces/context.js +556 -0
  133. package/dist/server/flow-surfaces/contract-guard.d.ts +19 -0
  134. package/dist/server/flow-surfaces/contract-guard.js +402 -0
  135. package/dist/server/flow-surfaces/core-field-default-bindings.d.ts +12 -0
  136. package/dist/server/flow-surfaces/core-field-default-bindings.js +157 -0
  137. package/dist/server/flow-surfaces/default-action-popup.d.ts +63 -0
  138. package/dist/server/flow-surfaces/default-action-popup.js +322 -0
  139. package/dist/server/flow-surfaces/default-block-actions.d.ts +32 -0
  140. package/dist/server/flow-surfaces/default-block-actions.js +209 -0
  141. package/dist/server/flow-surfaces/errors.d.ts +47 -0
  142. package/dist/server/flow-surfaces/errors.js +145 -0
  143. package/dist/server/flow-surfaces/executor.d.ts +23 -0
  144. package/dist/server/flow-surfaces/executor.js +132 -0
  145. package/dist/server/flow-surfaces/field-binding-registry.d.ts +24 -0
  146. package/dist/server/flow-surfaces/field-binding-registry.js +396 -0
  147. package/dist/server/flow-surfaces/field-semantics.d.ts +15 -0
  148. package/dist/server/flow-surfaces/field-semantics.js +84 -0
  149. package/dist/server/flow-surfaces/field-type-resolver.d.ts +46 -0
  150. package/dist/server/flow-surfaces/field-type-resolver.js +322 -0
  151. package/dist/server/flow-surfaces/filter-group.d.ts +15 -0
  152. package/dist/server/flow-surfaces/filter-group.js +94 -0
  153. package/dist/server/flow-surfaces/index.d.ts +11 -0
  154. package/dist/server/flow-surfaces/index.js +302 -0
  155. package/dist/server/flow-surfaces/locator.d.ts +28 -0
  156. package/dist/server/flow-surfaces/locator.js +240 -0
  157. package/dist/server/flow-surfaces/node-use-sets.d.ts +15 -0
  158. package/dist/server/flow-surfaces/node-use-sets.js +135 -0
  159. package/dist/server/flow-surfaces/payload-shape.d.ts +9 -0
  160. package/dist/server/flow-surfaces/payload-shape.js +61 -0
  161. package/dist/server/flow-surfaces/placement.d.ts +33 -0
  162. package/dist/server/flow-surfaces/placement.js +198 -0
  163. package/dist/server/flow-surfaces/planning/action-specs.d.ts +179 -0
  164. package/dist/server/flow-surfaces/planning/action-specs.js +190 -0
  165. package/dist/server/flow-surfaces/planning/compiler.d.ts +37 -0
  166. package/dist/server/flow-surfaces/planning/compiler.js +376 -0
  167. package/dist/server/flow-surfaces/planning/context.d.ts +30 -0
  168. package/dist/server/flow-surfaces/planning/context.js +139 -0
  169. package/dist/server/flow-surfaces/planning/created-keys.d.ts +34 -0
  170. package/dist/server/flow-surfaces/planning/created-keys.js +375 -0
  171. package/dist/server/flow-surfaces/planning/key-kind.d.ts +11 -0
  172. package/dist/server/flow-surfaces/planning/key-kind.js +88 -0
  173. package/dist/server/flow-surfaces/planning/key-persistence.d.ts +34 -0
  174. package/dist/server/flow-surfaces/planning/key-persistence.js +148 -0
  175. package/dist/server/flow-surfaces/planning/key-registry.d.ts +40 -0
  176. package/dist/server/flow-surfaces/planning/key-registry.js +206 -0
  177. package/dist/server/flow-surfaces/planning/runtime.d.ts +37 -0
  178. package/dist/server/flow-surfaces/planning/runtime.js +259 -0
  179. package/dist/server/flow-surfaces/planning/step-link.d.ts +14 -0
  180. package/dist/server/flow-surfaces/planning/step-link.js +104 -0
  181. package/dist/server/flow-surfaces/planning/types.d.ts +55 -0
  182. package/dist/server/flow-surfaces/planning/types.js +24 -0
  183. package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +24 -0
  184. package/dist/server/flow-surfaces/public-data-surface-default-filter.js +152 -0
  185. package/dist/server/flow-surfaces/reaction/errors.d.ts +20 -0
  186. package/dist/server/flow-surfaces/reaction/errors.js +69 -0
  187. package/dist/server/flow-surfaces/reaction/field-value.d.ts +34 -0
  188. package/dist/server/flow-surfaces/reaction/field-value.js +181 -0
  189. package/dist/server/flow-surfaces/reaction/fingerprint.d.ts +16 -0
  190. package/dist/server/flow-surfaces/reaction/fingerprint.js +71 -0
  191. package/dist/server/flow-surfaces/reaction/linkage.d.ts +136 -0
  192. package/dist/server/flow-surfaces/reaction/linkage.js +882 -0
  193. package/dist/server/flow-surfaces/reaction/meta.d.ts +11 -0
  194. package/dist/server/flow-surfaces/reaction/meta.js +451 -0
  195. package/dist/server/flow-surfaces/reaction/registry.d.ts +156 -0
  196. package/dist/server/flow-surfaces/reaction/registry.js +206 -0
  197. package/dist/server/flow-surfaces/reaction/resolver.d.ts +22 -0
  198. package/dist/server/flow-surfaces/reaction/resolver.js +202 -0
  199. package/dist/server/flow-surfaces/reaction/types.d.ts +241 -0
  200. package/dist/server/flow-surfaces/reaction/types.js +24 -0
  201. package/dist/server/flow-surfaces/reaction/utils.d.ts +17 -0
  202. package/dist/server/flow-surfaces/reaction/utils.js +67 -0
  203. package/dist/server/flow-surfaces/reaction/value-expr.d.ts +15 -0
  204. package/dist/server/flow-surfaces/reaction/value-expr.js +209 -0
  205. package/dist/server/flow-surfaces/reference-guards.d.ts +19 -0
  206. package/dist/server/flow-surfaces/reference-guards.js +103 -0
  207. package/dist/server/flow-surfaces/route-sync.d.ts +47 -0
  208. package/dist/server/flow-surfaces/route-sync.js +392 -0
  209. package/dist/server/flow-surfaces/service-helpers.d.ts +42 -0
  210. package/dist/server/flow-surfaces/service-helpers.js +310 -0
  211. package/dist/server/flow-surfaces/service-utils.d.ts +120 -0
  212. package/dist/server/flow-surfaces/service-utils.js +863 -0
  213. package/dist/server/flow-surfaces/service.d.ts +830 -0
  214. package/dist/server/flow-surfaces/service.js +15043 -0
  215. package/dist/server/flow-surfaces/support-matrix.d.ts +31 -0
  216. package/dist/server/flow-surfaces/support-matrix.js +282 -0
  217. package/dist/server/flow-surfaces/surface-context.d.ts +52 -0
  218. package/dist/server/flow-surfaces/surface-context.js +440 -0
  219. package/dist/server/flow-surfaces/template-compatibility.d.ts +42 -0
  220. package/dist/server/flow-surfaces/template-compatibility.js +189 -0
  221. package/dist/server/flow-surfaces/template-display.d.ts +20 -0
  222. package/dist/server/flow-surfaces/template-display.js +289 -0
  223. package/dist/server/flow-surfaces/template-service-utils.d.ts +62 -0
  224. package/dist/server/flow-surfaces/template-service-utils.js +281 -0
  225. package/dist/server/flow-surfaces/types.d.ts +288 -0
  226. package/dist/server/flow-surfaces/types.js +24 -0
  227. package/dist/server/index.d.ts +1 -0
  228. package/dist/server/index.js +7 -2
  229. package/dist/server/plugin.d.ts +0 -1
  230. package/dist/server/plugin.js +9 -34
  231. package/dist/server/repository.js +0 -5
  232. package/dist/server/variables/resolve.d.ts +21 -0
  233. package/dist/server/variables/resolve.js +79 -0
  234. package/dist/swagger/flow-surfaces.d.ts +6135 -0
  235. package/dist/swagger/flow-surfaces.examples.d.ts +1577 -0
  236. package/dist/swagger/flow-surfaces.examples.js +1816 -0
  237. package/dist/swagger/flow-surfaces.js +5384 -0
  238. package/dist/swagger/flow-surfaces.template-action-docs.d.ts +62 -0
  239. package/dist/swagger/flow-surfaces.template-action-docs.js +121 -0
  240. package/dist/swagger/flow-surfaces.template-schemas.d.ts +239 -0
  241. package/dist/swagger/flow-surfaces.template-schemas.js +255 -0
  242. package/dist/swagger/index.d.ts +6140 -0
  243. package/dist/swagger/index.js +50 -0
  244. package/package.json +3 -3
  245. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.d.ts +0 -0
  246. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.d.ts +0 -0
  247. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.d.ts +0 -0
  248. /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.d.ts +0 -0
@@ -0,0 +1,971 @@
1
+ /**
2
+ * This file is part of the NocoBase (R) project.
3
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
+ * Authors: NocoBase Team.
5
+ *
6
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
+ * For more information, please refer to: https://www.nocobase.com/agreement.
8
+ */
9
+
10
+ var __create = Object.create;
11
+ var __defProp = Object.defineProperty;
12
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
13
+ var __getOwnPropNames = Object.getOwnPropertyNames;
14
+ var __getProtoOf = Object.getPrototypeOf;
15
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
16
+ var __export = (target, all) => {
17
+ for (var name in all)
18
+ __defProp(target, name, { get: all[name], enumerable: true });
19
+ };
20
+ var __copyProps = (to, from, except, desc) => {
21
+ if (from && typeof from === "object" || typeof from === "function") {
22
+ for (let key of __getOwnPropNames(from))
23
+ if (!__hasOwnProp.call(to, key) && key !== except)
24
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
25
+ }
26
+ return to;
27
+ };
28
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
29
+ // If the importer is in node compatibility mode or this is not an ESM
30
+ // file that has been converted to a CommonJS file using a Babel-
31
+ // compatible transform (i.e. "__esModule" has not been set), then set
32
+ // "default" to the CommonJS "module.exports" for node compatibility.
33
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
34
+ mod
35
+ ));
36
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
37
+ var compiler_exports = {};
38
+ __export(compiler_exports, {
39
+ compileApplySpec: () => compileApplySpec
40
+ });
41
+ module.exports = __toCommonJS(compiler_exports);
42
+ var import_lodash = __toESM(require("lodash"));
43
+ var import_catalog = require("../catalog");
44
+ var import_placement = require("../placement");
45
+ var import_errors = require("../errors");
46
+ var import_node_use_sets = require("../node-use-sets");
47
+ var import_field_type_resolver = require("../field-type-resolver");
48
+ var import_layout = require("./layout");
49
+ var import_matching = require("./matching");
50
+ function makeOpRef(path) {
51
+ const normalized = String(path || "").trim();
52
+ const [step, ...rest] = normalized.split(".");
53
+ return {
54
+ step,
55
+ ...rest.length ? { path: rest.join(".") } : {}
56
+ };
57
+ }
58
+ const FORM_GRID_USES = /* @__PURE__ */ new Set(["FormGridModel", "AssignFormGridModel"]);
59
+ const ACTION_USES = new Set(Array.from(import_catalog.ACTION_KEY_BY_USE.keys()));
60
+ const BLOCK_USES = new Set(Array.from(import_catalog.BLOCK_KEY_BY_USE.keys()));
61
+ const STANDALONE_FIELD_USES = import_node_use_sets.CREATABLE_STANDALONE_FIELD_USES;
62
+ const FORM_BLOCK_USES = import_placement.FLOW_SURFACE_FORM_BLOCK_USES;
63
+ const DETAILS_BLOCK_USES = import_placement.FLOW_SURFACE_DETAILS_BLOCK_USES;
64
+ const FILTER_FORM_BLOCK_USES = import_placement.FLOW_SURFACE_FILTER_FORM_BLOCK_USES;
65
+ const RECORD_ACTION_INTERNAL_CONTAINER_USES = /* @__PURE__ */ new Set([
66
+ "TableActionsColumnModel",
67
+ "ListItemModel",
68
+ "GridCardItemModel"
69
+ ]);
70
+ const APPLY_POPUP_ALLOWED_KEYS = /* @__PURE__ */ new Set(["template", "tryTemplate", "defaultType"]);
71
+ function compileApplySpec(target, currentTree, spec) {
72
+ if (!(currentTree == null ? void 0 : currentTree.uid) || !(currentTree == null ? void 0 : currentTree.use)) {
73
+ throw new import_errors.FlowSurfaceBadRequestError("flowSurfaces apply requires an existing target subtree");
74
+ }
75
+ const ops = [];
76
+ const state = {
77
+ seq: 0,
78
+ clientKeyToUid: {}
79
+ };
80
+ if (currentTree.use === "RootPageModel") {
81
+ syncRoutePageNode(ops, state, target, currentTree, spec);
82
+ return {
83
+ ops,
84
+ clientKeyToUid: state.clientKeyToUid
85
+ };
86
+ }
87
+ if (currentTree.use === "ChildPageModel") {
88
+ syncExistingNode(
89
+ ops,
90
+ state,
91
+ {
92
+ uidRef: currentTree.uid,
93
+ use: currentTree.use
94
+ },
95
+ currentTree,
96
+ {
97
+ uid: currentTree.uid,
98
+ use: currentTree.use,
99
+ props: spec.props,
100
+ decoratorProps: spec.decoratorProps,
101
+ stepParams: spec.stepParams,
102
+ flowRegistry: spec.flowRegistry,
103
+ subModels: spec.subModels
104
+ },
105
+ { uid: currentTree.uid }
106
+ );
107
+ return {
108
+ ops,
109
+ clientKeyToUid: state.clientKeyToUid
110
+ };
111
+ }
112
+ if (currentTree.use === "RootPageTabModel") {
113
+ syncRouteTabNode(ops, state, target, currentTree, spec);
114
+ return {
115
+ ops,
116
+ clientKeyToUid: state.clientKeyToUid
117
+ };
118
+ }
119
+ if (currentTree.use === "ChildPageTabModel") {
120
+ syncTabNode(ops, state, { uid: currentTree.uid }, currentTree, spec);
121
+ return {
122
+ ops,
123
+ clientKeyToUid: state.clientKeyToUid
124
+ };
125
+ }
126
+ const rootSpec = {
127
+ uid: currentTree.uid,
128
+ use: currentTree.use,
129
+ popup: spec.popup,
130
+ props: spec.props,
131
+ decoratorProps: spec.decoratorProps,
132
+ stepParams: spec.stepParams,
133
+ flowRegistry: spec.flowRegistry,
134
+ subModels: spec.subModels
135
+ };
136
+ syncExistingNode(
137
+ ops,
138
+ state,
139
+ {
140
+ uidRef: currentTree.uid,
141
+ use: currentTree.use
142
+ },
143
+ currentTree,
144
+ rootSpec,
145
+ target
146
+ );
147
+ return {
148
+ ops,
149
+ clientKeyToUid: state.clientKeyToUid
150
+ };
151
+ }
152
+ function syncExistingNode(ops, state, nodeRef, currentNode, desiredNode, explicitTarget) {
153
+ const popupAwareDesiredNode = withApplyPopupOpenViewForExistingNode(
154
+ desiredNode,
155
+ `flowSurfaces apply node '${desiredNode.use}'`
156
+ );
157
+ emitDomainSettingOps(ops, nodeRef, currentNode, popupAwareDesiredNode, explicitTarget);
158
+ const childSync = syncChildren(ops, state, nodeRef, currentNode, popupAwareDesiredNode);
159
+ (0, import_layout.emitLayoutOp)(ops, explicitTarget || { uid: nodeRef.uidRef }, currentNode, popupAwareDesiredNode, childSync);
160
+ }
161
+ function syncCreatedNode(ops, state, nodeRef, desiredNode) {
162
+ emitDomainSettingOps(ops, nodeRef, null, desiredNode);
163
+ const childSync = syncChildren(ops, state, nodeRef, null, desiredNode);
164
+ (0, import_layout.emitLayoutOp)(ops, { uid: nodeRef.uidRef }, null, desiredNode, childSync);
165
+ }
166
+ function syncRoutePageNode(ops, state, target, currentNode, desiredNode) {
167
+ const pageTarget = { uid: String(target.uid || currentNode.uid || "").trim() };
168
+ syncPageNode(ops, state, pageTarget, currentNode, desiredNode);
169
+ }
170
+ function syncPageNode(ops, state, pageTarget, currentNode, desiredNode) {
171
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o;
172
+ emitDomainSettingOps(
173
+ ops,
174
+ {
175
+ uidRef: currentNode.uid,
176
+ use: currentNode.use
177
+ },
178
+ currentNode,
179
+ {
180
+ uid: currentNode.uid,
181
+ use: currentNode.use,
182
+ props: desiredNode.props,
183
+ decoratorProps: desiredNode.decoratorProps,
184
+ stepParams: desiredNode.stepParams,
185
+ flowRegistry: desiredNode.flowRegistry
186
+ },
187
+ pageTarget
188
+ );
189
+ if (!(0, import_matching.hasExplicitSubModelKey)(desiredNode, "tabs")) {
190
+ return;
191
+ }
192
+ const hasTabsSpec = Object.prototype.hasOwnProperty.call(desiredNode.subModels || {}, "tabs");
193
+ if (!hasTabsSpec) {
194
+ return;
195
+ }
196
+ const desiredTabs = (0, import_matching.normalizeChildren)((_a = desiredNode.subModels) == null ? void 0 : _a.tabs);
197
+ const currentTabs = (0, import_matching.normalizeChildren)((_b = currentNode.subModels) == null ? void 0 : _b.tabs);
198
+ const tabMatchPlan = (0, import_matching.planArrayChildMatches)(currentTabs, desiredTabs, currentNode.use, "tabs");
199
+ const desiredRefs = [];
200
+ for (const [desiredIndex, desiredTab] of desiredTabs.entries()) {
201
+ const currentMatch = tabMatchPlan.matchesByDesiredIndex.get(desiredIndex);
202
+ if (currentMatch) {
203
+ bindClientKey(state, desiredTab.clientKey, currentMatch.uid);
204
+ desiredRefs.push({
205
+ uidRef: currentMatch.uid,
206
+ use: currentMatch.use
207
+ });
208
+ syncRouteTabNode(ops, state, { uid: currentMatch.uid }, currentMatch, desiredTab);
209
+ continue;
210
+ }
211
+ const opId = nextOpId(state, "addTab");
212
+ ops.push({
213
+ opId,
214
+ type: "addTab",
215
+ values: {
216
+ target: pageTarget,
217
+ ...desiredTab.clientKey ? { clientKey: desiredTab.clientKey } : {},
218
+ title: ((_e = (_d = (_c = desiredTab == null ? void 0 : desiredTab.stepParams) == null ? void 0 : _c.pageTabSettings) == null ? void 0 : _d.tab) == null ? void 0 : _e.title) || ((_f = desiredTab == null ? void 0 : desiredTab.props) == null ? void 0 : _f.title) || ((_h = (_g = desiredTab == null ? void 0 : desiredTab.props) == null ? void 0 : _g.route) == null ? void 0 : _h.title) || "Untitled",
219
+ icon: ((_k = (_j = (_i = desiredTab == null ? void 0 : desiredTab.stepParams) == null ? void 0 : _i.pageTabSettings) == null ? void 0 : _j.tab) == null ? void 0 : _k.icon) || ((_l = desiredTab == null ? void 0 : desiredTab.props) == null ? void 0 : _l.icon),
220
+ documentTitle: (_o = (_n = (_m = desiredTab == null ? void 0 : desiredTab.stepParams) == null ? void 0 : _m.pageTabSettings) == null ? void 0 : _n.tab) == null ? void 0 : _o.documentTitle,
221
+ flowRegistry: desiredTab == null ? void 0 : desiredTab.flowRegistry
222
+ }
223
+ });
224
+ const createdRef = {
225
+ uidRef: makeOpRef(`${opId}.tabSchemaUid`),
226
+ use: "RootPageTabModel",
227
+ sourceOpId: opId
228
+ };
229
+ desiredRefs.push(createdRef);
230
+ syncCreatedNode(ops, state, createdRef, desiredTab);
231
+ }
232
+ for (const currentTab of currentTabs) {
233
+ if (!tabMatchPlan.matchedCurrentUids.has(currentTab.uid)) {
234
+ ops.push({
235
+ type: "removeTab",
236
+ values: {
237
+ uid: currentTab.uid
238
+ }
239
+ });
240
+ }
241
+ }
242
+ (0, import_layout.emitMoveTabOps)(ops, desiredRefs);
243
+ }
244
+ function syncRouteTabNode(ops, state, target, currentNode, desiredNode) {
245
+ const tabTarget = { uid: String(target.uid || currentNode.uid || "").trim() };
246
+ syncTabNode(ops, state, tabTarget, currentNode, desiredNode);
247
+ }
248
+ function syncTabNode(ops, state, tabTarget, currentNode, desiredNode) {
249
+ var _a, _b;
250
+ emitDomainSettingOps(
251
+ ops,
252
+ {
253
+ uidRef: currentNode.uid,
254
+ use: currentNode.use
255
+ },
256
+ currentNode,
257
+ {
258
+ uid: currentNode.uid,
259
+ use: currentNode.use,
260
+ props: desiredNode.props,
261
+ decoratorProps: desiredNode.decoratorProps,
262
+ stepParams: desiredNode.stepParams,
263
+ flowRegistry: desiredNode.flowRegistry
264
+ },
265
+ tabTarget
266
+ );
267
+ if (!(0, import_matching.hasExplicitSubModelKey)(desiredNode, "grid")) {
268
+ return;
269
+ }
270
+ const hasGridSpec = Object.prototype.hasOwnProperty.call(desiredNode.subModels || {}, "grid");
271
+ if (!hasGridSpec) {
272
+ return;
273
+ }
274
+ const desiredGrid = (0, import_matching.normalizeChildren)((_a = desiredNode.subModels) == null ? void 0 : _a.grid)[0];
275
+ const currentGrid = (0, import_matching.normalizeChildren)((_b = currentNode.subModels) == null ? void 0 : _b.grid)[0];
276
+ if (!desiredGrid || !currentGrid) {
277
+ return;
278
+ }
279
+ syncExistingNode(
280
+ ops,
281
+ state,
282
+ {
283
+ uidRef: currentGrid.uid,
284
+ use: currentGrid.use
285
+ },
286
+ currentGrid,
287
+ desiredGrid,
288
+ { uid: currentGrid.uid }
289
+ );
290
+ }
291
+ function syncChildren(ops, state, parentRef, currentParent, desiredParent) {
292
+ const result = {
293
+ childClientKeyRefs: {},
294
+ finalItemRefs: [],
295
+ itemsChanged: false,
296
+ itemsSpecified: false
297
+ };
298
+ const desiredSubModels = desiredParent.subModels;
299
+ if (!desiredSubModels) {
300
+ return result;
301
+ }
302
+ const currentSubModels = (currentParent == null ? void 0 : currentParent.subModels) || {};
303
+ const subKeys = Object.keys(desiredSubModels);
304
+ for (const subKey of subKeys) {
305
+ const desiredRaw = desiredSubModels[subKey];
306
+ const currentRaw = currentSubModels[subKey];
307
+ const desiredChildren = (0, import_matching.normalizeChildren)(desiredRaw);
308
+ const currentChildren = (0, import_matching.normalizeChildren)(currentRaw);
309
+ const isArraySubModel = Array.isArray(desiredRaw) || Array.isArray(currentRaw);
310
+ if (parentRef.use === "ChildPageModel" && subKey === "tabs") {
311
+ const tabSync = syncPopupTabs(ops, state, parentRef, currentChildren, desiredChildren);
312
+ if (tabSync.itemsSpecified) {
313
+ result.finalItemRefs = tabSync.finalItemRefs;
314
+ result.itemsChanged = tabSync.itemsChanged;
315
+ result.itemsSpecified = true;
316
+ }
317
+ Object.assign(result.childClientKeyRefs, tabSync.childClientKeyRefs);
318
+ continue;
319
+ }
320
+ if (!isArraySubModel) {
321
+ const desiredChild = desiredChildren[0];
322
+ const currentChild = currentChildren[0];
323
+ if (!desiredChild && currentChild) {
324
+ ops.push({
325
+ type: "removeNode",
326
+ target: { uid: currentChild.uid }
327
+ });
328
+ continue;
329
+ }
330
+ if (!desiredChild) {
331
+ continue;
332
+ }
333
+ if (currentChild && (0, import_matching.matchesObjectChild)(currentChild, desiredChild)) {
334
+ bindClientKey(state, desiredChild.clientKey, currentChild.uid);
335
+ if (desiredChild.clientKey) {
336
+ result.childClientKeyRefs[desiredChild.clientKey] = currentChild.uid;
337
+ }
338
+ syncExistingNode(
339
+ ops,
340
+ state,
341
+ {
342
+ uidRef: currentChild.uid,
343
+ use: currentChild.use
344
+ },
345
+ currentChild,
346
+ desiredChild
347
+ );
348
+ continue;
349
+ }
350
+ if (currentChild) {
351
+ ops.push({
352
+ type: "removeNode",
353
+ target: { uid: currentChild.uid }
354
+ });
355
+ }
356
+ const defaultRef = getDefaultChildRef(parentRef, subKey, desiredChild.use);
357
+ if (defaultRef) {
358
+ if (desiredChild.clientKey) {
359
+ result.childClientKeyRefs[desiredChild.clientKey] = defaultRef.uidRef;
360
+ }
361
+ syncCreatedNode(ops, state, defaultRef, desiredChild);
362
+ } else {
363
+ const createdRef = createDesiredChild(ops, state, parentRef, subKey, desiredChild, currentParent);
364
+ if (desiredChild.clientKey) {
365
+ result.childClientKeyRefs[desiredChild.clientKey] = createdRef.uidRef;
366
+ }
367
+ }
368
+ continue;
369
+ }
370
+ const childMatchPlan = (0, import_matching.planArrayChildMatches)(currentChildren, desiredChildren, parentRef.use, subKey);
371
+ const desiredRefs = [];
372
+ for (const [desiredIndex, desiredChild] of desiredChildren.entries()) {
373
+ const currentMatch = childMatchPlan.matchesByDesiredIndex.get(desiredIndex);
374
+ if (currentMatch) {
375
+ const currentRef = {
376
+ uidRef: currentMatch.uid,
377
+ use: currentMatch.use
378
+ };
379
+ bindClientKey(state, desiredChild.clientKey, currentMatch.uid);
380
+ if (desiredChild.clientKey) {
381
+ result.childClientKeyRefs[desiredChild.clientKey] = currentRef.uidRef;
382
+ }
383
+ desiredRefs.push(currentRef);
384
+ syncExistingNode(ops, state, currentRef, currentMatch, desiredChild);
385
+ continue;
386
+ }
387
+ const defaultRef = getDefaultChildRef(parentRef, subKey, desiredChild.use);
388
+ if (defaultRef) {
389
+ if (desiredChild.clientKey) {
390
+ result.childClientKeyRefs[desiredChild.clientKey] = defaultRef.uidRef;
391
+ }
392
+ desiredRefs.push(defaultRef);
393
+ syncCreatedNode(ops, state, defaultRef, desiredChild);
394
+ continue;
395
+ }
396
+ const createdRef = createDesiredChild(ops, state, parentRef, subKey, desiredChild, currentParent);
397
+ if (desiredChild.clientKey) {
398
+ result.childClientKeyRefs[desiredChild.clientKey] = createdRef.uidRef;
399
+ }
400
+ desiredRefs.push(createdRef);
401
+ }
402
+ for (const currentChild of currentChildren) {
403
+ if (!childMatchPlan.matchedCurrentUids.has(currentChild.uid)) {
404
+ ops.push({
405
+ type: "removeNode",
406
+ target: { uid: currentChild.uid }
407
+ });
408
+ }
409
+ }
410
+ (0, import_layout.emitMoveOps)(ops, desiredRefs);
411
+ if (subKey === "items") {
412
+ result.finalItemRefs = desiredRefs;
413
+ result.itemsChanged = (0, import_layout.didItemRefsChange)(currentChildren, desiredRefs);
414
+ result.itemsSpecified = true;
415
+ }
416
+ }
417
+ return result;
418
+ }
419
+ function createDesiredChild(ops, state, parentRef, subKey, desiredChild, currentParent) {
420
+ if (desiredChild.use === "ChildPageModel" && (0, import_placement.isPopupHostUse)(parentRef.use)) {
421
+ compilePopupPageSpec(ops, state, parentRef, desiredChild);
422
+ return {
423
+ uidRef: parentRef.uidRef,
424
+ use: desiredChild.use,
425
+ sourceOpId: parentRef.sourceOpId
426
+ };
427
+ }
428
+ if ((isFieldWrapperNode(desiredChild.use) || STANDALONE_FIELD_USES.has(desiredChild.use)) && isFieldContainer(parentRef.use, subKey)) {
429
+ return createFieldNode(ops, state, parentRef, desiredChild);
430
+ }
431
+ if (subKey === "actions" && isActionContainer(parentRef.use)) {
432
+ if (!ACTION_USES.has(desiredChild.use)) {
433
+ throw new import_errors.FlowSurfaceBadRequestError(
434
+ `flowSurfaces apply action '${desiredChild.use}' is not a public capability`
435
+ );
436
+ }
437
+ return createActionNode(ops, state, parentRef, desiredChild, currentParent);
438
+ }
439
+ if (isBlockContainer(parentRef.use, subKey)) {
440
+ if (!BLOCK_USES.has(desiredChild.use)) {
441
+ throw new import_errors.FlowSurfaceBadRequestError(`flowSurfaces apply block '${desiredChild.use}' is not a public capability`);
442
+ }
443
+ return createBlockNode(ops, state, parentRef, desiredChild);
444
+ }
445
+ if (isFieldContainer(parentRef.use, subKey) && !import_node_use_sets.FIELD_WRAPPER_USES.has(desiredChild.use) && !STANDALONE_FIELD_USES.has(desiredChild.use)) {
446
+ throw new import_errors.FlowSurfaceBadRequestError(
447
+ `flowSurfaces apply field wrapper '${desiredChild.use}' is not a public capability`
448
+ );
449
+ }
450
+ throw new import_errors.FlowSurfaceBadRequestError(
451
+ `flowSurfaces apply cannot create '${desiredChild.use}' under '${parentRef.use}.${subKey}'`
452
+ );
453
+ }
454
+ function createBlockNode(ops, state, parentRef, desiredNode) {
455
+ const blockCatalogItem = (0, import_catalog.resolveSupportedBlockCatalogItem)(
456
+ {
457
+ use: desiredNode.use
458
+ },
459
+ {
460
+ requireCreateSupported: true
461
+ }
462
+ );
463
+ const opId = nextOpId(state, "addBlock");
464
+ ops.push({
465
+ opId,
466
+ type: "addBlock",
467
+ values: {
468
+ target: {
469
+ uid: parentRef.uidRef
470
+ },
471
+ ...desiredNode.clientKey ? { clientKey: desiredNode.clientKey } : {},
472
+ type: blockCatalogItem.key,
473
+ resourceInit: extractResourceInit(desiredNode)
474
+ }
475
+ });
476
+ const ref = {
477
+ uidRef: makeOpRef(`${opId}.uid`),
478
+ use: desiredNode.use,
479
+ sourceOpId: opId
480
+ };
481
+ syncCreatedNode(ops, state, ref, desiredNode);
482
+ return ref;
483
+ }
484
+ function normalizeApplyPopup(desiredNode, context) {
485
+ var _a;
486
+ if (import_lodash.default.isUndefined(desiredNode.popup)) {
487
+ return void 0;
488
+ }
489
+ if (!import_lodash.default.isPlainObject(desiredNode.popup)) {
490
+ throw new import_errors.FlowSurfaceBadRequestError(`${context} popup must be an object`);
491
+ }
492
+ const invalidKeys = Object.keys(desiredNode.popup).filter((key) => !APPLY_POPUP_ALLOWED_KEYS.has(key));
493
+ if (invalidKeys.length) {
494
+ throw new import_errors.FlowSurfaceBadRequestError(
495
+ `${context} popup only supports ${Array.from(APPLY_POPUP_ALLOWED_KEYS).join(", ")} in flowSurfaces apply`
496
+ );
497
+ }
498
+ const hasPopupPageSpec = !!(0, import_matching.normalizeChildren)((_a = desiredNode.subModels) == null ? void 0 : _a.page)[0];
499
+ if (hasPopupPageSpec) {
500
+ throw new import_errors.FlowSurfaceBadRequestError(
501
+ `${context} cannot mix popup template semantics with explicit popup subtree content in flowSurfaces apply`
502
+ );
503
+ }
504
+ const nextPopup = import_lodash.default.cloneDeep(desiredNode.popup);
505
+ if (!import_lodash.default.isUndefined(nextPopup.tryTemplate) && typeof nextPopup.tryTemplate !== "boolean") {
506
+ throw new import_errors.FlowSurfaceBadRequestError(`${context} popup.tryTemplate must be a boolean`);
507
+ }
508
+ if (!import_lodash.default.isUndefined(nextPopup.defaultType) && nextPopup.defaultType !== "view" && nextPopup.defaultType !== "edit") {
509
+ throw new import_errors.FlowSurfaceBadRequestError(`${context} popup.defaultType must be 'view' or 'edit'`);
510
+ }
511
+ if (import_lodash.default.isUndefined(nextPopup.template) && nextPopup.tryTemplate !== true && import_lodash.default.isUndefined(nextPopup.defaultType)) {
512
+ return void 0;
513
+ }
514
+ if (!(0, import_placement.isPopupHostUse)(desiredNode.use)) {
515
+ throw new import_errors.FlowSurfaceBadRequestError(
516
+ `${context} popup is only supported on popup-capable action or field nodes in flowSurfaces apply`
517
+ );
518
+ }
519
+ return nextPopup;
520
+ }
521
+ function buildApplyPopupStepParams(use, popup) {
522
+ if (!popup) {
523
+ return void 0;
524
+ }
525
+ if (use === "UploadActionModel") {
526
+ return {
527
+ selectExitRecordSettings: {
528
+ openView: popup
529
+ }
530
+ };
531
+ }
532
+ return {
533
+ popupSettings: {
534
+ openView: popup
535
+ }
536
+ };
537
+ }
538
+ function withApplyPopupOpenViewForExistingNode(desiredNode, context) {
539
+ const popup = normalizeApplyPopup(desiredNode, context);
540
+ if (!popup) {
541
+ return desiredNode;
542
+ }
543
+ return {
544
+ ...desiredNode,
545
+ stepParams: import_lodash.default.merge({}, desiredNode.stepParams || {}, buildApplyPopupStepParams(desiredNode.use, popup))
546
+ };
547
+ }
548
+ function createActionNode(ops, state, parentRef, desiredNode, currentParent) {
549
+ const popup = normalizeApplyPopup(desiredNode, `flowSurfaces apply action '${desiredNode.use}'`);
550
+ const actionCatalogItem = (0, import_catalog.resolveSupportedActionCatalogItem)(
551
+ {
552
+ use: desiredNode.use,
553
+ containerUse: parentRef.use
554
+ },
555
+ {
556
+ requireCreateSupported: true
557
+ }
558
+ );
559
+ const opType = actionCatalogItem.scope === "record" ? "addRecordAction" : "addAction";
560
+ const targetUidRef = actionCatalogItem.scope === "record" ? resolveRecordActionCreateTargetUidRef(parentRef, currentParent) : parentRef.uidRef;
561
+ const opId = nextOpId(state, opType);
562
+ ops.push({
563
+ opId,
564
+ type: opType,
565
+ values: {
566
+ target: {
567
+ uid: targetUidRef
568
+ },
569
+ ...desiredNode.clientKey ? { clientKey: desiredNode.clientKey } : {},
570
+ type: actionCatalogItem.key,
571
+ resourceInit: extractResourceInit(desiredNode),
572
+ ...popup ? { popup } : {}
573
+ }
574
+ });
575
+ const ref = {
576
+ uidRef: makeOpRef(`${opId}.uid`),
577
+ use: desiredNode.use,
578
+ sourceOpId: opId
579
+ };
580
+ syncCreatedNode(ops, state, ref, desiredNode);
581
+ return ref;
582
+ }
583
+ function createFieldNode(ops, state, parentRef, desiredNode) {
584
+ var _a, _b, _c;
585
+ const popup = normalizeApplyPopup(desiredNode, `flowSurfaces apply field '${desiredNode.use}'`);
586
+ const standaloneType = desiredNode.use === "JSColumnModel" ? "jsColumn" : desiredNode.use === "JSItemModel" ? "jsItem" : desiredNode.use === "DividerItemModel" ? "divider" : void 0;
587
+ if (standaloneType) {
588
+ if (popup) {
589
+ throw new import_errors.FlowSurfaceBadRequestError(
590
+ `flowSurfaces apply field '${desiredNode.use}' popup is not supported for standalone field types`
591
+ );
592
+ }
593
+ const opId2 = nextOpId(state, "addField");
594
+ ops.push({
595
+ opId: opId2,
596
+ type: "addField",
597
+ values: {
598
+ target: {
599
+ uid: parentRef.uidRef
600
+ },
601
+ ...desiredNode.clientKey ? { clientKey: desiredNode.clientKey } : {},
602
+ type: standaloneType
603
+ }
604
+ });
605
+ const ref2 = {
606
+ uidRef: makeOpRef(`${opId2}.uid`),
607
+ use: desiredNode.use,
608
+ sourceOpId: opId2
609
+ };
610
+ syncCreatedNode(ops, state, ref2, desiredNode);
611
+ return ref2;
612
+ }
613
+ const innerField = (0, import_matching.normalizeChildren)((_a = desiredNode.subModels) == null ? void 0 : _a.field)[0];
614
+ const requestedRenderer = (innerField == null ? void 0 : innerField.use) === "JSFieldModel" || (innerField == null ? void 0 : innerField.use) === "JSEditableFieldModel" ? "js" : void 0;
615
+ const fieldCapability = (0, import_catalog.resolveSupportedFieldCapability)({
616
+ containerUse: parentRef.use,
617
+ requestedWrapperUse: desiredNode.use,
618
+ requestedFieldUse: innerField == null ? void 0 : innerField.use,
619
+ requestedRenderer,
620
+ allowUnresolvedFieldUse: true
621
+ });
622
+ const fieldInit = import_lodash.default.get(innerField, ["stepParams", "fieldSettings", "init"]) || import_lodash.default.get(desiredNode, ["stepParams", "fieldSettings", "init"]);
623
+ const defaultTargetUid = import_lodash.default.get(desiredNode, ["stepParams", "filterFormItemSettings", "init", "defaultTargetUid"]);
624
+ const fieldType = (0, import_field_type_resolver.getPublicFieldTypeForUse)(((_c = (_b = innerField == null ? void 0 : innerField.stepParams) == null ? void 0 : _b.fieldBinding) == null ? void 0 : _c.use) || (innerField == null ? void 0 : innerField.use));
625
+ if (!(fieldInit == null ? void 0 : fieldInit.fieldPath)) {
626
+ throw new import_errors.FlowSurfaceBadRequestError(
627
+ `flowSurfaces apply field '${desiredNode.use}' requires stepParams.fieldSettings.init.fieldPath`
628
+ );
629
+ }
630
+ const opId = nextOpId(state, "addField");
631
+ ops.push({
632
+ opId,
633
+ type: "addField",
634
+ values: {
635
+ target: {
636
+ uid: parentRef.uidRef
637
+ },
638
+ ...desiredNode.clientKey ? { clientKey: desiredNode.clientKey } : {},
639
+ fieldPath: fieldInit.fieldPath,
640
+ associationPathName: fieldInit.associationPathName,
641
+ dataSourceKey: fieldInit.dataSourceKey,
642
+ collectionName: fieldInit.collectionName,
643
+ ...requestedRenderer ? { renderer: requestedRenderer } : {},
644
+ ...fieldType ? { fieldType } : {},
645
+ ...defaultTargetUid ? { defaultTargetUid } : {},
646
+ ...popup ? { popup } : {}
647
+ }
648
+ });
649
+ const ref = {
650
+ uidRef: makeOpRef(`${opId}.wrapperUid`),
651
+ use: desiredNode.use,
652
+ sourceOpId: opId
653
+ };
654
+ syncCreatedNode(ops, state, ref, desiredNode);
655
+ return ref;
656
+ }
657
+ function compilePopupPageSpec(ops, state, hostRef, pageSpec) {
658
+ var _a, _b, _c;
659
+ const tabSpec = (0, import_matching.normalizeChildren)((_a = pageSpec.subModels) == null ? void 0 : _a.tabs)[0];
660
+ const gridSpec = (0, import_matching.normalizeChildren)((_b = tabSpec == null ? void 0 : tabSpec.subModels) == null ? void 0 : _b.grid)[0];
661
+ const popupItems = (0, import_matching.normalizeChildren)((_c = gridSpec == null ? void 0 : gridSpec.subModels) == null ? void 0 : _c.items);
662
+ if (!tabSpec || !gridSpec) {
663
+ throw new import_errors.FlowSurfaceBadRequestError(
664
+ `flowSurfaces apply popup page creation under '${hostRef.use}' requires popup page -> tab -> grid`
665
+ );
666
+ }
667
+ const { childRefs, childClientKeyRefs, popupGridUidRef, popupPageRef, popupTabRef, placeholderRef } = bootstrapPopupShellCreation(ops, state, hostRef, pageSpec, tabSpec, popupItems);
668
+ if (popupPageRef) {
669
+ emitDomainSettingOps(ops, popupPageRef, null, pageSpec);
670
+ }
671
+ if (popupTabRef) {
672
+ emitDomainSettingOps(ops, popupTabRef, null, tabSpec);
673
+ }
674
+ if (popupGridUidRef) {
675
+ emitDomainSettingOps(
676
+ ops,
677
+ {
678
+ uidRef: popupGridUidRef,
679
+ use: gridSpec.use
680
+ },
681
+ null,
682
+ gridSpec
683
+ );
684
+ if (placeholderRef) {
685
+ ops.push({
686
+ type: "removeNode",
687
+ values: {
688
+ target: {
689
+ uid: placeholderRef.uidRef
690
+ }
691
+ }
692
+ });
693
+ }
694
+ (0, import_layout.emitLayoutOp)(ops, { uid: popupGridUidRef }, null, gridSpec, {
695
+ childClientKeyRefs,
696
+ finalItemRefs: childRefs,
697
+ itemsChanged: true,
698
+ itemsSpecified: true
699
+ });
700
+ (0, import_layout.emitMoveOps)(ops, childRefs);
701
+ }
702
+ }
703
+ function bootstrapPopupShellCreation(ops, state, hostRef, pageSpec, tabSpec, popupItems) {
704
+ const result = {
705
+ childRefs: [],
706
+ childClientKeyRefs: {},
707
+ popupGridUidRef: null,
708
+ popupPageRef: null,
709
+ popupTabRef: null,
710
+ placeholderRef: null
711
+ };
712
+ const bindPopupShellRefs = (created) => {
713
+ result.popupPageRef = {
714
+ uidRef: makeOpRef(`${created.sourceOpId}.popupPageUid`),
715
+ use: pageSpec.use
716
+ };
717
+ result.popupTabRef = {
718
+ uidRef: makeOpRef(`${created.sourceOpId}.popupTabUid`),
719
+ use: tabSpec.use,
720
+ sourceOpId: created.sourceOpId
721
+ };
722
+ result.popupGridUidRef = makeOpRef(`${created.sourceOpId}.popupGridUid`);
723
+ };
724
+ if (!popupItems.length) {
725
+ result.placeholderRef = createBlockNode(ops, state, hostRef, {
726
+ use: "MarkdownBlockModel"
727
+ });
728
+ bindPopupShellRefs(result.placeholderRef);
729
+ return result;
730
+ }
731
+ popupItems.forEach((itemSpec, index) => {
732
+ if (index === 0) {
733
+ const created2 = createBlockNode(ops, state, hostRef, itemSpec);
734
+ result.childRefs.push(created2);
735
+ if (itemSpec.clientKey) {
736
+ result.childClientKeyRefs[itemSpec.clientKey] = created2.uidRef;
737
+ }
738
+ bindPopupShellRefs(created2);
739
+ return;
740
+ }
741
+ const popupGridRef = {
742
+ uidRef: result.popupGridUidRef,
743
+ use: "BlockGridModel"
744
+ };
745
+ const created = createBlockNode(ops, state, popupGridRef, itemSpec);
746
+ if (itemSpec.clientKey) {
747
+ result.childClientKeyRefs[itemSpec.clientKey] = created.uidRef;
748
+ }
749
+ result.childRefs.push(created);
750
+ });
751
+ return result;
752
+ }
753
+ function emitDomainSettingOps(ops, nodeRef, currentNode, desiredNode, explicitTarget) {
754
+ const props = (0, import_layout.omitLayoutProps)(desiredNode.props);
755
+ const currentProps = (0, import_layout.omitLayoutProps)(currentNode == null ? void 0 : currentNode.props);
756
+ const values = {};
757
+ if (!import_lodash.default.isNil(props) && !import_lodash.default.isEqual(props, currentProps)) {
758
+ values.props = props;
759
+ }
760
+ if (!import_lodash.default.isNil(desiredNode.decoratorProps) && !import_lodash.default.isEqual(desiredNode.decoratorProps, currentNode == null ? void 0 : currentNode.decoratorProps)) {
761
+ values.decoratorProps = desiredNode.decoratorProps;
762
+ }
763
+ if (!import_lodash.default.isNil(desiredNode.stepParams) && !import_lodash.default.isEqual(desiredNode.stepParams, currentNode == null ? void 0 : currentNode.stepParams)) {
764
+ values.stepParams = desiredNode.stepParams;
765
+ }
766
+ if (Object.keys(values).length) {
767
+ ops.push({
768
+ type: "updateSettings",
769
+ target: explicitTarget || { uid: nodeRef.uidRef },
770
+ values
771
+ });
772
+ }
773
+ if (!import_lodash.default.isNil(desiredNode.flowRegistry) && !import_lodash.default.isEqual(desiredNode.flowRegistry, currentNode == null ? void 0 : currentNode.flowRegistry)) {
774
+ ops.push({
775
+ type: "setEventFlows",
776
+ target: explicitTarget || { uid: nodeRef.uidRef },
777
+ values: {
778
+ flowRegistry: desiredNode.flowRegistry
779
+ }
780
+ });
781
+ }
782
+ }
783
+ function getDefaultChildRef(parentRef, subKey, childUse) {
784
+ if (!parentRef.sourceOpId || !childUse) {
785
+ return null;
786
+ }
787
+ if (FORM_BLOCK_USES.has(parentRef.use) && subKey === "grid" && FORM_GRID_USES.has(childUse)) {
788
+ return {
789
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.gridUid`),
790
+ use: childUse
791
+ };
792
+ }
793
+ if (DETAILS_BLOCK_USES.has(parentRef.use) && subKey === "grid" && childUse === "DetailsGridModel") {
794
+ return {
795
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.gridUid`),
796
+ use: childUse
797
+ };
798
+ }
799
+ if (FILTER_FORM_BLOCK_USES.has(parentRef.use) && subKey === "grid" && childUse === "FilterFormGridModel") {
800
+ return {
801
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.gridUid`),
802
+ use: childUse
803
+ };
804
+ }
805
+ if (parentRef.use === "ChildPageTabModel" && subKey === "grid" && childUse === "BlockGridModel") {
806
+ return {
807
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.popupGridUid`),
808
+ use: childUse
809
+ };
810
+ }
811
+ if (parentRef.use === "TableBlockModel" && subKey === "columns" && childUse === "TableActionsColumnModel") {
812
+ return {
813
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.actionsColumnUid`),
814
+ use: childUse,
815
+ sourceOpId: parentRef.sourceOpId,
816
+ ownerUidRef: parentRef.uidRef
817
+ };
818
+ }
819
+ if (parentRef.use === "ListBlockModel" && subKey === "item" && childUse === "ListItemModel") {
820
+ return {
821
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.itemUid`),
822
+ use: childUse,
823
+ sourceOpId: parentRef.sourceOpId,
824
+ ownerUidRef: parentRef.uidRef
825
+ };
826
+ }
827
+ if (parentRef.use === "GridCardBlockModel" && subKey === "item" && childUse === "GridCardItemModel") {
828
+ return {
829
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.itemUid`),
830
+ use: childUse,
831
+ sourceOpId: parentRef.sourceOpId,
832
+ ownerUidRef: parentRef.uidRef
833
+ };
834
+ }
835
+ if (parentRef.use === "ListItemModel" && subKey === "grid" && childUse === "DetailsGridModel") {
836
+ return {
837
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.gridUid`),
838
+ use: childUse
839
+ };
840
+ }
841
+ if (parentRef.use === "GridCardItemModel" && subKey === "grid" && childUse === "DetailsGridModel") {
842
+ return {
843
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.gridUid`),
844
+ use: childUse
845
+ };
846
+ }
847
+ if (import_node_use_sets.FIELD_WRAPPER_USES.has(parentRef.use) && subKey === "field") {
848
+ return {
849
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.fieldUid`),
850
+ use: childUse
851
+ };
852
+ }
853
+ if (parentRef.use === "RootPageTabModel" && subKey === "grid" && childUse === "BlockGridModel") {
854
+ return {
855
+ uidRef: makeOpRef(`${parentRef.sourceOpId}.gridUid`),
856
+ use: childUse
857
+ };
858
+ }
859
+ return null;
860
+ }
861
+ function resolveRecordActionCreateTargetUidRef(parentRef, currentParent) {
862
+ if (!RECORD_ACTION_INTERNAL_CONTAINER_USES.has(parentRef.use)) {
863
+ return parentRef.uidRef;
864
+ }
865
+ const ownerUidRef = parentRef.ownerUidRef ?? (currentParent == null ? void 0 : currentParent.parentId);
866
+ if (ownerUidRef) {
867
+ return ownerUidRef;
868
+ }
869
+ throw new import_errors.FlowSurfaceBadRequestError(
870
+ `flowSurfaces apply cannot resolve owning surface for record action container '${parentRef.use}'`
871
+ );
872
+ }
873
+ function isFieldWrapperNode(use) {
874
+ return (0, import_placement.isFieldWrapperUse)(use);
875
+ }
876
+ function isFieldContainer(parentUse, subKey) {
877
+ return (0, import_placement.isFieldContainerUse)(parentUse, subKey);
878
+ }
879
+ function isBlockContainer(parentUse, subKey) {
880
+ return (0, import_placement.isBlockContainerUse)(parentUse, subKey);
881
+ }
882
+ function isActionContainer(parentUse) {
883
+ return (0, import_placement.isActionContainerUse)(parentUse);
884
+ }
885
+ function extractResourceInit(node) {
886
+ return import_lodash.default.get(node, ["stepParams", "resourceSettings", "init"]);
887
+ }
888
+ function nextOpId(state, prefix) {
889
+ state.seq += 1;
890
+ return `${prefix}_${state.seq}`;
891
+ }
892
+ function bindClientKey(state, clientKey, uid) {
893
+ if (!clientKey || typeof uid !== "string") {
894
+ return;
895
+ }
896
+ state.clientKeyToUid[clientKey] = uid;
897
+ }
898
+ function syncPopupTabs(ops, state, popupPageRef, currentTabs, desiredTabs) {
899
+ const result = {
900
+ childClientKeyRefs: {},
901
+ finalItemRefs: [],
902
+ itemsChanged: false,
903
+ itemsSpecified: false
904
+ };
905
+ const tabMatchPlan = (0, import_matching.planArrayChildMatches)(currentTabs, desiredTabs, popupPageRef.use, "tabs");
906
+ const desiredRefs = [];
907
+ for (const [desiredIndex, desiredTab] of desiredTabs.entries()) {
908
+ const currentMatch = tabMatchPlan.matchesByDesiredIndex.get(desiredIndex);
909
+ if (currentMatch) {
910
+ const currentRef = {
911
+ uidRef: currentMatch.uid,
912
+ use: currentMatch.use
913
+ };
914
+ bindClientKey(state, desiredTab.clientKey, currentMatch.uid);
915
+ if (desiredTab.clientKey) {
916
+ result.childClientKeyRefs[desiredTab.clientKey] = currentRef.uidRef;
917
+ }
918
+ desiredRefs.push(currentRef);
919
+ syncTabNode(ops, state, { uid: currentMatch.uid }, currentMatch, desiredTab);
920
+ continue;
921
+ }
922
+ const createdRef = createPopupTabNode(ops, state, popupPageRef, desiredTab);
923
+ if (desiredTab.clientKey) {
924
+ result.childClientKeyRefs[desiredTab.clientKey] = createdRef.uidRef;
925
+ }
926
+ desiredRefs.push(createdRef);
927
+ }
928
+ for (const currentTab of currentTabs) {
929
+ if (!tabMatchPlan.matchedCurrentUids.has(currentTab.uid)) {
930
+ ops.push({
931
+ type: "removePopupTab",
932
+ values: {
933
+ target: {
934
+ uid: currentTab.uid
935
+ }
936
+ }
937
+ });
938
+ }
939
+ }
940
+ (0, import_layout.emitMovePopupTabOps)(ops, desiredRefs);
941
+ return result;
942
+ }
943
+ function createPopupTabNode(ops, state, popupPageRef, desiredNode) {
944
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m;
945
+ const opId = nextOpId(state, "addPopupTab");
946
+ ops.push({
947
+ opId,
948
+ type: "addPopupTab",
949
+ values: {
950
+ target: {
951
+ uid: popupPageRef.uidRef
952
+ },
953
+ ...desiredNode.clientKey ? { clientKey: desiredNode.clientKey } : {},
954
+ title: ((_c = (_b = (_a = desiredNode == null ? void 0 : desiredNode.stepParams) == null ? void 0 : _a.pageTabSettings) == null ? void 0 : _b.tab) == null ? void 0 : _c.title) || ((_d = desiredNode == null ? void 0 : desiredNode.props) == null ? void 0 : _d.title) || ((_f = (_e = desiredNode == null ? void 0 : desiredNode.props) == null ? void 0 : _e.route) == null ? void 0 : _f.title) || "Untitled",
955
+ icon: ((_i = (_h = (_g = desiredNode == null ? void 0 : desiredNode.stepParams) == null ? void 0 : _g.pageTabSettings) == null ? void 0 : _h.tab) == null ? void 0 : _i.icon) || ((_j = desiredNode == null ? void 0 : desiredNode.props) == null ? void 0 : _j.icon),
956
+ documentTitle: (_m = (_l = (_k = desiredNode == null ? void 0 : desiredNode.stepParams) == null ? void 0 : _k.pageTabSettings) == null ? void 0 : _l.tab) == null ? void 0 : _m.documentTitle,
957
+ flowRegistry: desiredNode == null ? void 0 : desiredNode.flowRegistry
958
+ }
959
+ });
960
+ const ref = {
961
+ uidRef: makeOpRef(`${opId}.popupTabUid`),
962
+ use: "ChildPageTabModel",
963
+ sourceOpId: opId
964
+ };
965
+ syncCreatedNode(ops, state, ref, desiredNode);
966
+ return ref;
967
+ }
968
+ // Annotate the CommonJS export names for ESM import in node:
969
+ 0 && (module.exports = {
970
+ compileApplySpec
971
+ });