@nocobase/plugin-flow-engine 2.1.0-beta.15 → 2.1.0-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ai/ai-employees/nathan/index.d.ts +10 -0
- package/dist/ai/ai-employees/nathan/index.js +41 -0
- package/dist/ai/ai-employees/nathan/prompt.md +132 -0
- package/dist/ai/ai-employees/nathan/skills/frontend-developer/SKILLS.md +69 -0
- package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.js +2 -2
- package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.js +2 -2
- package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.js +2 -2
- package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.js +2 -2
- package/dist/ai/docs/runjs/context/block-model.md +35 -35
- package/dist/ai/docs/runjs/context/collection-field.md +53 -51
- package/dist/ai/docs/runjs/context/collection.md +39 -39
- package/dist/ai/docs/runjs/context/data-source-manager.md +40 -30
- package/dist/ai/docs/runjs/context/data-source.md +52 -44
- package/dist/ai/docs/runjs/context/element.md +44 -38
- package/dist/ai/docs/runjs/context/exit-all.md +37 -35
- package/dist/ai/docs/runjs/context/exit.md +38 -35
- package/dist/ai/docs/runjs/context/filter-manager.md +36 -30
- package/dist/ai/docs/runjs/context/form.md +57 -57
- package/dist/ai/docs/runjs/context/get-model.md +22 -21
- package/dist/ai/docs/runjs/context/get-value.md +20 -19
- package/dist/ai/docs/runjs/context/get-var.md +61 -55
- package/dist/ai/docs/runjs/context/i18n.md +17 -14
- package/dist/ai/docs/runjs/context/import-async.md +333 -45
- package/dist/ai/docs/runjs/context/init-resource.md +20 -20
- package/dist/ai/docs/runjs/context/libs.md +31 -31
- package/dist/ai/docs/runjs/context/location.md +34 -31
- package/dist/ai/docs/runjs/context/logger.md +41 -40
- package/dist/ai/docs/runjs/context/make-resource.md +27 -26
- package/dist/ai/docs/runjs/context/message.md +42 -41
- package/dist/ai/docs/runjs/context/modal.md +44 -44
- package/dist/ai/docs/runjs/context/model.md +36 -33
- package/dist/ai/docs/runjs/context/notification.md +41 -40
- package/dist/ai/docs/runjs/context/off.md +14 -14
- package/dist/ai/docs/runjs/context/on.md +30 -29
- package/dist/ai/docs/runjs/context/open-view.md +40 -40
- package/dist/ai/docs/runjs/context/render.md +37 -32
- package/dist/ai/docs/runjs/context/request.md +46 -45
- package/dist/ai/docs/runjs/context/require-async.md +28 -25
- package/dist/ai/docs/runjs/context/resource.md +34 -34
- package/dist/ai/docs/runjs/context/route.md +36 -34
- package/dist/ai/docs/runjs/context/router.md +43 -31
- package/dist/ai/docs/runjs/context/set-value.md +18 -17
- package/dist/ai/docs/runjs/context/t.md +20 -17
- package/dist/ai/docs/runjs/context/view.md +49 -46
- package/dist/ai/docs/runjs/document.md +1 -0
- package/dist/ai/docs/runjs/import-modules.md +32 -32
- package/dist/ai/docs/runjs/index.md +13 -13
- package/dist/ai/docs/runjs/jsx.md +19 -19
- package/dist/ai/docs/runjs/model/form-block-model.md +1 -3
- package/dist/ai/docs/runjs/render.md +15 -15
- package/dist/ai/docs/runjs/resource/api-resource.md +53 -53
- package/dist/ai/docs/runjs/resource/multi-record-resource.md +64 -64
- package/dist/ai/docs/runjs/resource/single-record-resource.md +55 -55
- package/dist/ai/docs/runjs/resource/sql-resource.md +57 -57
- package/dist/ai/docs/runjs/window.md +5 -5
- package/dist/client/index.js +1 -1
- package/dist/externalVersion.js +11 -10
- package/dist/node_modules/ses/dist/ses.cjs +1 -1
- package/dist/node_modules/ses/package.json +1 -1
- package/dist/node_modules/zod/index.cjs +1 -1
- package/dist/node_modules/zod/package.json +1 -1
- package/dist/server/flow-surfaces/action-scope.d.ts +38 -0
- package/dist/server/flow-surfaces/action-scope.js +152 -0
- package/dist/server/flow-surfaces/apply/compiler.d.ts +13 -0
- package/dist/server/flow-surfaces/apply/compiler.js +969 -0
- package/dist/server/flow-surfaces/apply/layout.d.ts +34 -0
- package/dist/server/flow-surfaces/apply/layout.js +175 -0
- package/dist/server/flow-surfaces/apply/matching.d.ts +16 -0
- package/dist/server/flow-surfaces/apply/matching.js +181 -0
- package/dist/server/flow-surfaces/approval/blueprint-service.d.ts +84 -0
- package/dist/server/flow-surfaces/approval/blueprint-service.js +589 -0
- package/dist/server/flow-surfaces/approval/blueprint.d.ts +21 -0
- package/dist/server/flow-surfaces/approval/blueprint.js +187 -0
- package/dist/server/flow-surfaces/approval/builder.d.ts +225 -0
- package/dist/server/flow-surfaces/approval/builder.js +384 -0
- package/dist/server/flow-surfaces/approval/catalog-specs.d.ts +33 -0
- package/dist/server/flow-surfaces/approval/catalog-specs.js +156 -0
- package/dist/server/flow-surfaces/approval/index.d.ts +14 -0
- package/dist/server/flow-surfaces/approval/index.js +40 -0
- package/dist/server/flow-surfaces/approval/runtime-config.d.ts +44 -0
- package/dist/server/flow-surfaces/approval/runtime-config.js +299 -0
- package/dist/server/flow-surfaces/approval/semantic-use.d.ts +23 -0
- package/dist/server/flow-surfaces/approval/semantic-use.js +155 -0
- package/dist/server/flow-surfaces/association-title-field.d.ts +20 -0
- package/dist/server/flow-surfaces/association-title-field.js +158 -0
- package/dist/server/flow-surfaces/blueprint/compile-blocks.d.ts +14 -0
- package/dist/server/flow-surfaces/blueprint/compile-blocks.js +1007 -0
- package/dist/server/flow-surfaces/blueprint/compile-plan.d.ts +13 -0
- package/dist/server/flow-surfaces/blueprint/compile-plan.js +308 -0
- package/dist/server/flow-surfaces/blueprint/compile-reaction.d.ts +11 -0
- package/dist/server/flow-surfaces/blueprint/compile-reaction.js +72 -0
- package/dist/server/flow-surfaces/blueprint/defaults.d.ts +26 -0
- package/dist/server/flow-surfaces/blueprint/defaults.js +133 -0
- package/dist/server/flow-surfaces/blueprint/index.d.ts +12 -0
- package/dist/server/flow-surfaces/blueprint/index.js +44 -0
- package/dist/server/flow-surfaces/blueprint/normalize-document.d.ts +10 -0
- package/dist/server/flow-surfaces/blueprint/normalize-document.js +416 -0
- package/dist/server/flow-surfaces/blueprint/private-utils.d.ts +26 -0
- package/dist/server/flow-surfaces/blueprint/private-utils.js +182 -0
- package/dist/server/flow-surfaces/blueprint/public-types.d.ts +193 -0
- package/dist/server/flow-surfaces/blueprint/public-types.js +24 -0
- package/dist/server/flow-surfaces/builder.d.ts +211 -0
- package/dist/server/flow-surfaces/builder.js +1029 -0
- package/dist/server/flow-surfaces/catalog-smart.d.ts +18 -0
- package/dist/server/flow-surfaces/catalog-smart.js +239 -0
- package/dist/server/flow-surfaces/catalog-smart.projector.d.ts +15 -0
- package/dist/server/flow-surfaces/catalog-smart.projector.js +157 -0
- package/dist/server/flow-surfaces/catalog-smart.types.d.ts +99 -0
- package/dist/server/flow-surfaces/catalog-smart.types.js +24 -0
- package/dist/server/flow-surfaces/catalog.d.ts +78 -0
- package/dist/server/flow-surfaces/catalog.js +3496 -0
- package/dist/server/flow-surfaces/chart-config.d.ts +121 -0
- package/dist/server/flow-surfaces/chart-config.js +1394 -0
- package/dist/server/flow-surfaces/compose-compiler.d.ts +108 -0
- package/dist/server/flow-surfaces/compose-compiler.js +167 -0
- package/dist/server/flow-surfaces/compose-runtime.d.ts +93 -0
- package/dist/server/flow-surfaces/compose-runtime.js +375 -0
- package/dist/server/flow-surfaces/configure-options.d.ts +23 -0
- package/dist/server/flow-surfaces/configure-options.js +827 -0
- package/dist/server/flow-surfaces/constants.d.ts +351 -0
- package/dist/server/flow-surfaces/constants.js +104 -0
- package/dist/server/flow-surfaces/context.d.ts +72 -0
- package/dist/server/flow-surfaces/context.js +556 -0
- package/dist/server/flow-surfaces/contract-guard.d.ts +19 -0
- package/dist/server/flow-surfaces/contract-guard.js +402 -0
- package/dist/server/flow-surfaces/default-action-popup.d.ts +63 -0
- package/dist/server/flow-surfaces/default-action-popup.js +322 -0
- package/dist/server/flow-surfaces/default-block-actions.d.ts +32 -0
- package/dist/server/flow-surfaces/default-block-actions.js +185 -0
- package/dist/server/flow-surfaces/errors.d.ts +47 -0
- package/dist/server/flow-surfaces/errors.js +145 -0
- package/dist/server/flow-surfaces/executor.d.ts +23 -0
- package/dist/server/flow-surfaces/executor.js +132 -0
- package/dist/server/flow-surfaces/field-binding-registry.d.ts +23 -0
- package/dist/server/flow-surfaces/field-binding-registry.js +391 -0
- package/dist/server/flow-surfaces/field-semantics.d.ts +15 -0
- package/dist/server/flow-surfaces/field-semantics.js +81 -0
- package/dist/server/flow-surfaces/filter-group.d.ts +15 -0
- package/dist/server/flow-surfaces/filter-group.js +94 -0
- package/dist/server/flow-surfaces/index.d.ts +11 -0
- package/dist/server/flow-surfaces/index.js +243 -0
- package/dist/server/flow-surfaces/locator.d.ts +28 -0
- package/dist/server/flow-surfaces/locator.js +240 -0
- package/dist/server/flow-surfaces/node-use-sets.d.ts +15 -0
- package/dist/server/flow-surfaces/node-use-sets.js +131 -0
- package/dist/server/flow-surfaces/payload-shape.d.ts +9 -0
- package/dist/server/flow-surfaces/payload-shape.js +61 -0
- package/dist/server/flow-surfaces/placement.d.ts +33 -0
- package/dist/server/flow-surfaces/placement.js +195 -0
- package/dist/server/flow-surfaces/planning/action-specs.d.ts +179 -0
- package/dist/server/flow-surfaces/planning/action-specs.js +190 -0
- package/dist/server/flow-surfaces/planning/compiler.d.ts +37 -0
- package/dist/server/flow-surfaces/planning/compiler.js +376 -0
- package/dist/server/flow-surfaces/planning/context.d.ts +30 -0
- package/dist/server/flow-surfaces/planning/context.js +139 -0
- package/dist/server/flow-surfaces/planning/created-keys.d.ts +34 -0
- package/dist/server/flow-surfaces/planning/created-keys.js +375 -0
- package/dist/server/flow-surfaces/planning/key-kind.d.ts +11 -0
- package/dist/server/flow-surfaces/planning/key-kind.js +88 -0
- package/dist/server/flow-surfaces/planning/key-persistence.d.ts +34 -0
- package/dist/server/flow-surfaces/planning/key-persistence.js +148 -0
- package/dist/server/flow-surfaces/planning/key-registry.d.ts +40 -0
- package/dist/server/flow-surfaces/planning/key-registry.js +206 -0
- package/dist/server/flow-surfaces/planning/runtime.d.ts +37 -0
- package/dist/server/flow-surfaces/planning/runtime.js +259 -0
- package/dist/server/flow-surfaces/planning/step-link.d.ts +14 -0
- package/dist/server/flow-surfaces/planning/step-link.js +104 -0
- package/dist/server/flow-surfaces/planning/types.d.ts +55 -0
- package/dist/server/flow-surfaces/planning/types.js +24 -0
- package/dist/server/flow-surfaces/public-data-surface-default-filter.d.ts +20 -0
- package/dist/server/flow-surfaces/public-data-surface-default-filter.js +111 -0
- package/dist/server/flow-surfaces/reaction/errors.d.ts +20 -0
- package/dist/server/flow-surfaces/reaction/errors.js +69 -0
- package/dist/server/flow-surfaces/reaction/field-value.d.ts +34 -0
- package/dist/server/flow-surfaces/reaction/field-value.js +181 -0
- package/dist/server/flow-surfaces/reaction/fingerprint.d.ts +16 -0
- package/dist/server/flow-surfaces/reaction/fingerprint.js +71 -0
- package/dist/server/flow-surfaces/reaction/linkage.d.ts +136 -0
- package/dist/server/flow-surfaces/reaction/linkage.js +882 -0
- package/dist/server/flow-surfaces/reaction/meta.d.ts +11 -0
- package/dist/server/flow-surfaces/reaction/meta.js +451 -0
- package/dist/server/flow-surfaces/reaction/registry.d.ts +156 -0
- package/dist/server/flow-surfaces/reaction/registry.js +206 -0
- package/dist/server/flow-surfaces/reaction/resolver.d.ts +22 -0
- package/dist/server/flow-surfaces/reaction/resolver.js +202 -0
- package/dist/server/flow-surfaces/reaction/types.d.ts +241 -0
- package/dist/server/flow-surfaces/reaction/types.js +24 -0
- package/dist/server/flow-surfaces/reaction/utils.d.ts +17 -0
- package/dist/server/flow-surfaces/reaction/utils.js +67 -0
- package/dist/server/flow-surfaces/reaction/value-expr.d.ts +15 -0
- package/dist/server/flow-surfaces/reaction/value-expr.js +209 -0
- package/dist/server/flow-surfaces/reference-guards.d.ts +19 -0
- package/dist/server/flow-surfaces/reference-guards.js +103 -0
- package/dist/server/flow-surfaces/route-sync.d.ts +47 -0
- package/dist/server/flow-surfaces/route-sync.js +392 -0
- package/dist/server/flow-surfaces/service-helpers.d.ts +42 -0
- package/dist/server/flow-surfaces/service-helpers.js +377 -0
- package/dist/server/flow-surfaces/service-utils.d.ts +108 -0
- package/dist/server/flow-surfaces/service-utils.js +811 -0
- package/dist/server/flow-surfaces/service.d.ts +773 -0
- package/dist/server/flow-surfaces/service.js +13008 -0
- package/dist/server/flow-surfaces/support-matrix.d.ts +31 -0
- package/dist/server/flow-surfaces/support-matrix.js +259 -0
- package/dist/server/flow-surfaces/surface-context.d.ts +52 -0
- package/dist/server/flow-surfaces/surface-context.js +437 -0
- package/dist/server/flow-surfaces/template-compatibility.d.ts +42 -0
- package/dist/server/flow-surfaces/template-compatibility.js +189 -0
- package/dist/server/flow-surfaces/template-display.d.ts +20 -0
- package/dist/server/flow-surfaces/template-display.js +289 -0
- package/dist/server/flow-surfaces/template-service-utils.d.ts +62 -0
- package/dist/server/flow-surfaces/template-service-utils.js +281 -0
- package/dist/server/flow-surfaces/types.d.ts +288 -0
- package/dist/server/flow-surfaces/types.js +24 -0
- package/dist/server/plugin.js +2 -0
- package/dist/swagger/flow-surfaces.d.ts +5964 -0
- package/dist/swagger/flow-surfaces.examples.d.ts +1533 -0
- package/dist/swagger/flow-surfaces.examples.js +1758 -0
- package/dist/swagger/flow-surfaces.js +5315 -0
- package/dist/swagger/flow-surfaces.template-action-docs.d.ts +62 -0
- package/dist/swagger/flow-surfaces.template-action-docs.js +121 -0
- package/dist/swagger/flow-surfaces.template-schemas.d.ts +239 -0
- package/dist/swagger/flow-surfaces.template-schemas.js +255 -0
- package/dist/swagger/index.d.ts +5969 -0
- package/dist/swagger/index.js +50 -0
- package/package.json +2 -2
- /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextApis.d.ts +0 -0
- /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextEnvs.d.ts +0 -0
- /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/getContextVars.d.ts +0 -0
- /package/dist/ai/{tools → ai-employees/nathan/skills/frontend-developer/tools}/lintAndTestJS.d.ts +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
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
|
+
import _ from 'lodash';
|
|
10
|
+
import type { FlowSurfacePlanSelector, FlowSurfacePlanRequestValues, FlowSurfacePlanStep, FlowSurfaceReadLocator, FlowSurfaceResolvedTarget } from '../types';
|
|
11
|
+
import type { FlowSurfaceCompiledPlanStep, FlowSurfacePlanSurfaceContext } from './types';
|
|
12
|
+
type NormalizePlanSelectorDeps = {
|
|
13
|
+
normalizeGetTarget: (value: any) => FlowSurfaceReadLocator;
|
|
14
|
+
};
|
|
15
|
+
type NormalizePlanSelectorOptions = {
|
|
16
|
+
allowKey?: boolean;
|
|
17
|
+
};
|
|
18
|
+
type NormalizePlanStepsDeps = NormalizePlanSelectorDeps & {
|
|
19
|
+
validatePayloadShape: (actionName: string, value: any, path: string) => void;
|
|
20
|
+
};
|
|
21
|
+
type CompilePlanStepDeps = NormalizePlanSelectorDeps & {
|
|
22
|
+
resolveLocator: (target: FlowSurfaceReadLocator, options?: {
|
|
23
|
+
transaction?: any;
|
|
24
|
+
}) => Promise<FlowSurfaceResolvedTarget>;
|
|
25
|
+
buildPlanKeyKind: (node: any, resolvedKind?: string) => string;
|
|
26
|
+
};
|
|
27
|
+
export declare function normalizePlanSelector(actionName: string, selector: any, deps: NormalizePlanSelectorDeps, fieldName?: string, options?: NormalizePlanSelectorOptions): FlowSurfacePlanSelector;
|
|
28
|
+
export declare function normalizePlanSteps(actionName: string, values: FlowSurfacePlanRequestValues, deps: NormalizePlanStepsDeps): {
|
|
29
|
+
id: string;
|
|
30
|
+
action: "createMenu" | "setFieldValueRules" | "setBlockLinkageRules" | "setFieldLinkageRules" | "setActionLinkageRules" | "convertTemplateToCopy" | "compose" | "configure" | "createPage" | "destroyPage" | "addTab" | "updateTab" | "moveTab" | "removeTab" | "addPopupTab" | "updatePopupTab" | "movePopupTab" | "removePopupTab" | "addBlock" | "addField" | "addAction" | "addRecordAction" | "updateSettings" | "setEventFlows" | "setLayout" | "moveNode" | "removeNode";
|
|
31
|
+
selectors: _.Dictionary<any>;
|
|
32
|
+
values: Record<string, any>;
|
|
33
|
+
}[];
|
|
34
|
+
export declare function compilePlanStep(actionName: string, step: FlowSurfacePlanStep, index: number, context: FlowSurfacePlanSurfaceContext, deps: CompilePlanStepDeps, priorStepIds: Set<string>, priorCreatedKeys: Set<string>, options?: {
|
|
35
|
+
transaction?: any;
|
|
36
|
+
}): Promise<FlowSurfaceCompiledPlanStep>;
|
|
37
|
+
export {};
|
|
@@ -0,0 +1,376 @@
|
|
|
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
|
+
compilePlanStep: () => compilePlanStep,
|
|
40
|
+
normalizePlanSelector: () => normalizePlanSelector,
|
|
41
|
+
normalizePlanSteps: () => normalizePlanSteps
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(compiler_exports);
|
|
44
|
+
var import_lodash = __toESM(require("lodash"));
|
|
45
|
+
var import_errors = require("../errors");
|
|
46
|
+
var import_service_utils = require("../service-utils");
|
|
47
|
+
var import_action_specs = require("./action-specs");
|
|
48
|
+
var import_step_link = require("./step-link");
|
|
49
|
+
var import_created_keys = require("./created-keys");
|
|
50
|
+
function isFlowSurfaceResolvedStepLink(selector) {
|
|
51
|
+
return "step" in selector && selector.summary.source === "step";
|
|
52
|
+
}
|
|
53
|
+
function normalizePlanSelector(actionName, selector, deps, fieldName = "selector", options = {}) {
|
|
54
|
+
const allowKey = options.allowKey !== false;
|
|
55
|
+
if (!import_lodash.default.isPlainObject(selector)) {
|
|
56
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} ${fieldName} must be an object`);
|
|
57
|
+
}
|
|
58
|
+
if (allowKey && Object.keys(selector).length === 1 && typeof selector.key === "string" && selector.key.trim()) {
|
|
59
|
+
return {
|
|
60
|
+
key: selector.key.trim()
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
if (Object.keys(selector).length === 1 && import_lodash.default.isPlainObject(selector.locator)) {
|
|
64
|
+
return {
|
|
65
|
+
locator: deps.normalizeGetTarget(selector.locator)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (Object.keys(selector).every((key) => ["step", "path"].includes(key)) && typeof selector.step === "string") {
|
|
69
|
+
return (0, import_step_link.normalizeFlowSurfacePlanStepLink)(actionName, selector, fieldName);
|
|
70
|
+
}
|
|
71
|
+
(0, import_errors.throwBadRequest)(
|
|
72
|
+
`flowSurfaces ${actionName} ${fieldName} must be ${allowKey ? "either { key }, { locator } or { step }" : "either { locator } or { step }"}`
|
|
73
|
+
);
|
|
74
|
+
}
|
|
75
|
+
function normalizePlanSteps(actionName, values, deps) {
|
|
76
|
+
if (!import_lodash.default.isPlainObject(values == null ? void 0 : values.plan) || !Array.isArray(values.plan.steps)) {
|
|
77
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} requires plan.steps[]`);
|
|
78
|
+
}
|
|
79
|
+
const seenIds = /* @__PURE__ */ new Set();
|
|
80
|
+
return values.plan.steps.map((rawStep, index) => {
|
|
81
|
+
if (!import_lodash.default.isPlainObject(rawStep)) {
|
|
82
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] must be an object`);
|
|
83
|
+
}
|
|
84
|
+
if (Object.prototype.hasOwnProperty.call(rawStep, "target") || Object.prototype.hasOwnProperty.call(rawStep, "source")) {
|
|
85
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] must use selectors.target / selectors.source`);
|
|
86
|
+
}
|
|
87
|
+
const action = String(rawStep.action || "").trim();
|
|
88
|
+
if (!action || !(0, import_action_specs.getFlowSurfacePlanActionSpec)(action)) {
|
|
89
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].action is not supported`);
|
|
90
|
+
}
|
|
91
|
+
const selectorsInput = import_lodash.default.isUndefined(rawStep.selectors) ? {} : rawStep.selectors;
|
|
92
|
+
if (!import_lodash.default.isPlainObject(selectorsInput)) {
|
|
93
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].selectors must be an object`);
|
|
94
|
+
}
|
|
95
|
+
const selectorKeys = Object.keys(selectorsInput || {});
|
|
96
|
+
if (selectorKeys.some((key) => !["target", "source"].includes(key))) {
|
|
97
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].selectors only supports target/source`);
|
|
98
|
+
}
|
|
99
|
+
const stepValues = import_lodash.default.isUndefined(rawStep.values) ? {} : rawStep.values;
|
|
100
|
+
if (!import_lodash.default.isPlainObject(stepValues)) {
|
|
101
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].values must be an object`);
|
|
102
|
+
}
|
|
103
|
+
const forbiddenKeys = ["target", "uid", "sourceUid", "targetUid"].filter(
|
|
104
|
+
(key) => Object.prototype.hasOwnProperty.call(stepValues, key)
|
|
105
|
+
);
|
|
106
|
+
if (forbiddenKeys.length) {
|
|
107
|
+
(0, import_errors.throwBadRequest)(
|
|
108
|
+
`flowSurfaces ${actionName} plan.steps[${index}].values must not include ${forbiddenKeys.join(
|
|
109
|
+
", "
|
|
110
|
+
)}; use selectors`
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
deps.validatePayloadShape(actionName, stepValues, `plan.steps[${index}].values`);
|
|
114
|
+
const id = typeof rawStep.id === "string" && rawStep.id.trim() ? rawStep.id.trim() : void 0;
|
|
115
|
+
if (id) {
|
|
116
|
+
if (seenIds.has(id)) {
|
|
117
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].id '${id}' is duplicated`);
|
|
118
|
+
}
|
|
119
|
+
seenIds.add(id);
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
id,
|
|
123
|
+
action,
|
|
124
|
+
selectors: (0, import_service_utils.buildDefinedPayload)({
|
|
125
|
+
target: import_lodash.default.isUndefined(selectorsInput.target) ? void 0 : normalizePlanSelector(actionName, selectorsInput.target, deps, `plan.steps[${index}].selectors.target`),
|
|
126
|
+
source: import_lodash.default.isUndefined(selectorsInput.source) ? void 0 : normalizePlanSelector(actionName, selectorsInput.source, deps, `plan.steps[${index}].selectors.source`)
|
|
127
|
+
}),
|
|
128
|
+
values: import_lodash.default.cloneDeep(stepValues)
|
|
129
|
+
};
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function buildPlanStepSelectorSummary(stepLink) {
|
|
133
|
+
return {
|
|
134
|
+
source: "step",
|
|
135
|
+
step: stepLink.step,
|
|
136
|
+
...stepLink.path ? { path: stepLink.path } : {}
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
async function resolvePlanSelectorInContext(actionName, selector, context, deps, fieldName, priorStepIds, priorCreatedKeys, options = {}) {
|
|
140
|
+
const normalizedSelector = normalizePlanSelector(actionName, selector, deps, fieldName);
|
|
141
|
+
if ("step" in normalizedSelector) {
|
|
142
|
+
if (!priorStepIds.has(normalizedSelector.step)) {
|
|
143
|
+
(0, import_errors.throwBadRequest)(
|
|
144
|
+
`flowSurfaces ${actionName} ${fieldName}.step '${normalizedSelector.step}' is not a previous step id`
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
...normalizedSelector,
|
|
149
|
+
summary: buildPlanStepSelectorSummary(normalizedSelector)
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
if ("key" in normalizedSelector) {
|
|
153
|
+
const keyInfo = context.keyMap.get(normalizedSelector.key);
|
|
154
|
+
if (keyInfo) {
|
|
155
|
+
return keyInfo;
|
|
156
|
+
}
|
|
157
|
+
if (priorCreatedKeys.has(normalizedSelector.key)) {
|
|
158
|
+
return {
|
|
159
|
+
key: normalizedSelector.key,
|
|
160
|
+
summary: {
|
|
161
|
+
source: "created",
|
|
162
|
+
key: normalizedSelector.key
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} ${fieldName}.key '${normalizedSelector.key}' is not defined`);
|
|
167
|
+
}
|
|
168
|
+
const resolved = await deps.resolveLocator(normalizedSelector.locator, options);
|
|
169
|
+
if (!context.surfaceResolved) {
|
|
170
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} ${fieldName} locator requires surface`);
|
|
171
|
+
}
|
|
172
|
+
if (!context.uidSet.has(resolved.uid)) {
|
|
173
|
+
(0, import_errors.throwBadRequest)(
|
|
174
|
+
`flowSurfaces ${actionName} ${fieldName} locator must resolve inside the current surface '${context.surfaceResolved.uid}'`
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
const node = context.publicNodeMap[resolved.uid] || (resolved.uid === context.surfaceResolved.uid ? context.publicTree : void 0);
|
|
178
|
+
return {
|
|
179
|
+
key: "",
|
|
180
|
+
uid: resolved.uid,
|
|
181
|
+
source: "system",
|
|
182
|
+
kind: deps.buildPlanKeyKind(node, resolved.kind),
|
|
183
|
+
locator: (0, import_service_utils.buildDefinedPayload)({
|
|
184
|
+
uid: normalizedSelector.locator.uid,
|
|
185
|
+
pageSchemaUid: normalizedSelector.locator.pageSchemaUid,
|
|
186
|
+
tabSchemaUid: normalizedSelector.locator.tabSchemaUid,
|
|
187
|
+
routeId: normalizedSelector.locator.routeId
|
|
188
|
+
})
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
function buildMutateOp(type, payload, opId) {
|
|
192
|
+
if (import_lodash.default.isPlainObject(payload.target)) {
|
|
193
|
+
return {
|
|
194
|
+
...opId ? { opId } : {},
|
|
195
|
+
type,
|
|
196
|
+
target: payload.target,
|
|
197
|
+
values: import_lodash.default.omit(payload, ["target"])
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
return {
|
|
201
|
+
...opId ? { opId } : {},
|
|
202
|
+
type,
|
|
203
|
+
values: payload
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
function buildSelectorRuntimeValue(selector) {
|
|
207
|
+
if ("summary" in selector) {
|
|
208
|
+
if ("step" in selector) {
|
|
209
|
+
return {
|
|
210
|
+
step: selector.step,
|
|
211
|
+
...selector.path ? { path: selector.path } : {}
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
return {
|
|
215
|
+
key: selector.key
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return selector.uid;
|
|
219
|
+
}
|
|
220
|
+
async function compilePlanStep(actionName, step, index, context, deps, priorStepIds, priorCreatedKeys, options = {}) {
|
|
221
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i;
|
|
222
|
+
const runtimeValues = step.action === "compose" ? (0, import_created_keys.normalizeComposeInlineKeysForPlan)(step.values || {}, `plan.steps[${index}].values`) : import_lodash.default.cloneDeep(step.values || {});
|
|
223
|
+
const payload = (0, import_step_link.replaceFlowSurfacePlanStepLinks)(
|
|
224
|
+
actionName,
|
|
225
|
+
runtimeValues,
|
|
226
|
+
`plan.steps[${index}].values`,
|
|
227
|
+
priorStepIds,
|
|
228
|
+
/* @__PURE__ */ new Set([...context.keyMap.keys(), ...priorCreatedKeys])
|
|
229
|
+
);
|
|
230
|
+
const targetSelectorKey = (0, import_created_keys.isFlowSurfacePureKeyObject)((_a = step.selectors) == null ? void 0 : _a.target) ? String(step.selectors.target.key || "").trim() : void 0;
|
|
231
|
+
const createdKeys = (0, import_created_keys.collectFlowSurfaceCreatedKeys)(step.action, step.values || {}, {
|
|
232
|
+
targetSelectorKey
|
|
233
|
+
});
|
|
234
|
+
(0, import_created_keys.assertNoDuplicateFlowSurfaceCreatedKeys)(createdKeys, `flowSurfaces ${actionName} plan.steps[${index}]`, {
|
|
235
|
+
existingKeys: [...context.keyMap.keys(), ...priorCreatedKeys],
|
|
236
|
+
reservedNames: [...priorStepIds, ...step.id ? [step.id] : []]
|
|
237
|
+
});
|
|
238
|
+
const compiled = {
|
|
239
|
+
index,
|
|
240
|
+
...step.id ? { id: step.id } : {},
|
|
241
|
+
action: step.action,
|
|
242
|
+
payload,
|
|
243
|
+
resolvedSelectors: {},
|
|
244
|
+
usedKeys: [],
|
|
245
|
+
usedStepLinks: [],
|
|
246
|
+
createdKeys
|
|
247
|
+
};
|
|
248
|
+
const addUsedKey = (selector) => {
|
|
249
|
+
if ("summary" in selector) {
|
|
250
|
+
if (isFlowSurfaceResolvedStepLink(selector)) {
|
|
251
|
+
compiled.usedStepLinks.push(selector);
|
|
252
|
+
}
|
|
253
|
+
return selector.summary;
|
|
254
|
+
}
|
|
255
|
+
if (selector.source === "request" || selector.source === "declared") {
|
|
256
|
+
compiled.usedKeys.push(selector);
|
|
257
|
+
}
|
|
258
|
+
return {
|
|
259
|
+
uid: selector.uid,
|
|
260
|
+
kind: selector.kind,
|
|
261
|
+
...selector.key ? { key: selector.key } : {},
|
|
262
|
+
source: selector.source
|
|
263
|
+
};
|
|
264
|
+
};
|
|
265
|
+
const spec = (0, import_action_specs.getFlowSurfacePlanActionSpec)(step.action);
|
|
266
|
+
if (!spec) {
|
|
267
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].action '${step.action}' is not supported`);
|
|
268
|
+
}
|
|
269
|
+
const selectorRequirements = (0, import_action_specs.getFlowSurfacePlanSelectorRequirements)(spec.selectorMode);
|
|
270
|
+
if (selectorRequirements.requiresTarget && !((_b = step.selectors) == null ? void 0 : _b.target)) {
|
|
271
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] requires selectors.target`);
|
|
272
|
+
}
|
|
273
|
+
if (!selectorRequirements.requiresTarget && ((_c = step.selectors) == null ? void 0 : _c.target)) {
|
|
274
|
+
(0, import_errors.throwBadRequest)(
|
|
275
|
+
`flowSurfaces ${actionName} plan.steps[${index}] action '${step.action}' does not support selectors.target`
|
|
276
|
+
);
|
|
277
|
+
}
|
|
278
|
+
if (selectorRequirements.requiresSource && !((_d = step.selectors) == null ? void 0 : _d.source)) {
|
|
279
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] requires selectors.source`);
|
|
280
|
+
}
|
|
281
|
+
if (!selectorRequirements.requiresSource && ((_e = step.selectors) == null ? void 0 : _e.source)) {
|
|
282
|
+
(0, import_errors.throwBadRequest)(
|
|
283
|
+
`flowSurfaces ${actionName} plan.steps[${index}] action '${step.action}' does not support selectors.source`
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
if (spec.selectorMode === "none") {
|
|
287
|
+
compiled.payload = payload;
|
|
288
|
+
} else if (spec.selectorMode === "target") {
|
|
289
|
+
const targetSelector = (_f = step.selectors) == null ? void 0 : _f.target;
|
|
290
|
+
if (!targetSelector) {
|
|
291
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] requires selectors.target`);
|
|
292
|
+
}
|
|
293
|
+
const target = await resolvePlanSelectorInContext(
|
|
294
|
+
actionName,
|
|
295
|
+
targetSelector,
|
|
296
|
+
context,
|
|
297
|
+
deps,
|
|
298
|
+
`plan.steps[${index}].selectors.target`,
|
|
299
|
+
priorStepIds,
|
|
300
|
+
priorCreatedKeys,
|
|
301
|
+
options
|
|
302
|
+
);
|
|
303
|
+
compiled.payload = {
|
|
304
|
+
...payload,
|
|
305
|
+
target: {
|
|
306
|
+
uid: buildSelectorRuntimeValue(target)
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
compiled.resolvedSelectors.target = addUsedKey(target);
|
|
310
|
+
} else if (spec.selectorMode === "rootUidTarget") {
|
|
311
|
+
const targetSelector = (_g = step.selectors) == null ? void 0 : _g.target;
|
|
312
|
+
if (!targetSelector) {
|
|
313
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] requires selectors.target`);
|
|
314
|
+
}
|
|
315
|
+
const target = await resolvePlanSelectorInContext(
|
|
316
|
+
actionName,
|
|
317
|
+
targetSelector,
|
|
318
|
+
context,
|
|
319
|
+
deps,
|
|
320
|
+
`plan.steps[${index}].selectors.target`,
|
|
321
|
+
priorStepIds,
|
|
322
|
+
priorCreatedKeys,
|
|
323
|
+
options
|
|
324
|
+
);
|
|
325
|
+
compiled.payload = {
|
|
326
|
+
...payload,
|
|
327
|
+
uid: buildSelectorRuntimeValue(target)
|
|
328
|
+
};
|
|
329
|
+
compiled.resolvedSelectors.target = addUsedKey(target);
|
|
330
|
+
} else if (spec.selectorMode === "sourceTarget") {
|
|
331
|
+
const sourceSelector = (_h = step.selectors) == null ? void 0 : _h.source;
|
|
332
|
+
const targetSelector = (_i = step.selectors) == null ? void 0 : _i.target;
|
|
333
|
+
if (!sourceSelector || !targetSelector) {
|
|
334
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}] requires selectors.source and selectors.target`);
|
|
335
|
+
}
|
|
336
|
+
const source = await resolvePlanSelectorInContext(
|
|
337
|
+
actionName,
|
|
338
|
+
sourceSelector,
|
|
339
|
+
context,
|
|
340
|
+
deps,
|
|
341
|
+
`plan.steps[${index}].selectors.source`,
|
|
342
|
+
priorStepIds,
|
|
343
|
+
priorCreatedKeys,
|
|
344
|
+
options
|
|
345
|
+
);
|
|
346
|
+
const target = await resolvePlanSelectorInContext(
|
|
347
|
+
actionName,
|
|
348
|
+
targetSelector,
|
|
349
|
+
context,
|
|
350
|
+
deps,
|
|
351
|
+
`plan.steps[${index}].selectors.target`,
|
|
352
|
+
priorStepIds,
|
|
353
|
+
priorCreatedKeys,
|
|
354
|
+
options
|
|
355
|
+
);
|
|
356
|
+
compiled.payload = {
|
|
357
|
+
...payload,
|
|
358
|
+
sourceUid: buildSelectorRuntimeValue(source),
|
|
359
|
+
targetUid: buildSelectorRuntimeValue(target)
|
|
360
|
+
};
|
|
361
|
+
compiled.resolvedSelectors.source = addUsedKey(source);
|
|
362
|
+
compiled.resolvedSelectors.target = addUsedKey(target);
|
|
363
|
+
} else {
|
|
364
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} plan.steps[${index}].action '${step.action}' is not supported`);
|
|
365
|
+
}
|
|
366
|
+
if (spec.executionKind === "mutate") {
|
|
367
|
+
compiled.mutateOp = buildMutateOp(step.action, compiled.payload, step.id);
|
|
368
|
+
}
|
|
369
|
+
return compiled;
|
|
370
|
+
}
|
|
371
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
372
|
+
0 && (module.exports = {
|
|
373
|
+
compilePlanStep,
|
|
374
|
+
normalizePlanSelector,
|
|
375
|
+
normalizePlanSteps
|
|
376
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
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
|
+
import type { FlowSurfaceBindKey, FlowSurfaceReadLocator, FlowSurfaceReadTarget, FlowSurfaceResolvedTarget, FlowSurfaceSurfaceSelector } from '../types';
|
|
10
|
+
import type { FlowSurfacePlanSurfaceContext, FlowSurfaceResolvedKey } from './types';
|
|
11
|
+
type BuildPlanSurfaceContextDeps = {
|
|
12
|
+
resolveLocator: (target: FlowSurfaceReadLocator, options?: {
|
|
13
|
+
transaction?: any;
|
|
14
|
+
}) => Promise<FlowSurfaceResolvedTarget>;
|
|
15
|
+
loadResolvedSurfaceTree: (resolved: FlowSurfaceResolvedTarget, transaction?: any) => Promise<any>;
|
|
16
|
+
stripInternalSurfaceMetaFromNodeTree: <T = any>(node: T) => T;
|
|
17
|
+
buildReadTargetSummary: (target: FlowSurfaceReadLocator, resolved: FlowSurfaceResolvedTarget) => FlowSurfaceReadTarget;
|
|
18
|
+
buildSurfaceContextFingerprint: (context: Pick<FlowSurfacePlanSurfaceContext, 'surfaceResolved' | 'publicTree' | 'keyMap'>) => string;
|
|
19
|
+
buildPlanKeyKind: (node: any, resolvedKind?: string) => string;
|
|
20
|
+
assertBindKeyKind: (actionName: string, bindKey: FlowSurfaceBindKey, node: any, resolvedKind?: string) => void;
|
|
21
|
+
collectDeclaredKeysFromTree: (node: any) => Map<string, FlowSurfaceResolvedKey>;
|
|
22
|
+
};
|
|
23
|
+
export declare function buildPlanSurfaceContext(input: {
|
|
24
|
+
actionName: string;
|
|
25
|
+
surfaceSelector?: FlowSurfaceSurfaceSelector;
|
|
26
|
+
bindKeys: FlowSurfaceBindKey[];
|
|
27
|
+
}, deps: BuildPlanSurfaceContextDeps, options?: {
|
|
28
|
+
transaction?: any;
|
|
29
|
+
}): Promise<FlowSurfacePlanSurfaceContext>;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,139 @@
|
|
|
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 context_exports = {};
|
|
38
|
+
__export(context_exports, {
|
|
39
|
+
buildPlanSurfaceContext: () => buildPlanSurfaceContext
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(context_exports);
|
|
42
|
+
var import_lodash = __toESM(require("lodash"));
|
|
43
|
+
var import_errors = require("../errors");
|
|
44
|
+
var import_service_utils = require("../service-utils");
|
|
45
|
+
var import_key_registry = require("./key-registry");
|
|
46
|
+
async function buildPlanSurfaceContext(input, deps, options = {}) {
|
|
47
|
+
const { actionName, surfaceSelector, bindKeys } = input;
|
|
48
|
+
if (!surfaceSelector) {
|
|
49
|
+
if (bindKeys.length) {
|
|
50
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} bindKeys require surface`);
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
publicNodeMap: {},
|
|
54
|
+
targetSummary: null,
|
|
55
|
+
fingerprint: null,
|
|
56
|
+
uidSet: /* @__PURE__ */ new Set(),
|
|
57
|
+
keyMap: /* @__PURE__ */ new Map(),
|
|
58
|
+
requestKeyMap: /* @__PURE__ */ new Map()
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
let surfaceTarget;
|
|
62
|
+
if ("key" in surfaceSelector) {
|
|
63
|
+
const matchedBindKey = bindKeys.find((item) => item.key === surfaceSelector.key);
|
|
64
|
+
if (!matchedBindKey) {
|
|
65
|
+
(0, import_errors.throwBadRequest)(`flowSurfaces ${actionName} surface.key '${surfaceSelector.key}' must also appear in bindKeys`);
|
|
66
|
+
}
|
|
67
|
+
surfaceTarget = matchedBindKey.locator;
|
|
68
|
+
} else {
|
|
69
|
+
surfaceTarget = surfaceSelector.locator;
|
|
70
|
+
}
|
|
71
|
+
const surfaceResolved = await deps.resolveLocator(surfaceTarget, options);
|
|
72
|
+
const rawTree = await deps.loadResolvedSurfaceTree(surfaceResolved, options.transaction);
|
|
73
|
+
const publicTree = deps.stripInternalSurfaceMetaFromNodeTree(import_lodash.default.cloneDeep(rawTree));
|
|
74
|
+
const publicNodeMap = (0, import_service_utils.flattenModel)(publicTree);
|
|
75
|
+
const uidSet = /* @__PURE__ */ new Set([surfaceResolved.uid, ...Object.keys(publicNodeMap)]);
|
|
76
|
+
const keyMap = deps.collectDeclaredKeysFromTree(rawTree);
|
|
77
|
+
const requestKeyMap = /* @__PURE__ */ new Map();
|
|
78
|
+
for (const bindKey of bindKeys) {
|
|
79
|
+
const resolved = await deps.resolveLocator(bindKey.locator, options);
|
|
80
|
+
if (!uidSet.has(resolved.uid)) {
|
|
81
|
+
(0, import_errors.throwBadRequest)(
|
|
82
|
+
`flowSurfaces ${actionName} bindKeys key '${bindKey.key}' must resolve inside the current surface '${surfaceResolved.uid}'`
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
const node = publicNodeMap[resolved.uid] || (resolved.uid === surfaceResolved.uid ? publicTree : void 0);
|
|
86
|
+
deps.assertBindKeyKind(actionName, bindKey, node, resolved.kind);
|
|
87
|
+
const existing = requestKeyMap.get(bindKey.key) || keyMap.get(bindKey.key);
|
|
88
|
+
if (existing && existing.uid !== resolved.uid && !bindKey.rebind) {
|
|
89
|
+
(0, import_errors.throwConflict)(
|
|
90
|
+
`flowSurfaces ${actionName} key '${bindKey.key}' is already bound to '${existing.uid}', set rebind=true to move it`,
|
|
91
|
+
"FLOW_SURFACE_DECLARED_KEY_CONFLICT"
|
|
92
|
+
);
|
|
93
|
+
}
|
|
94
|
+
requestKeyMap.set(bindKey.key, {
|
|
95
|
+
key: bindKey.key,
|
|
96
|
+
uid: resolved.uid,
|
|
97
|
+
source: "request",
|
|
98
|
+
kind: deps.buildPlanKeyKind(node, resolved.kind),
|
|
99
|
+
locator: {
|
|
100
|
+
uid: resolved.uid
|
|
101
|
+
},
|
|
102
|
+
rebind: bindKey.rebind === true,
|
|
103
|
+
reboundFromUid: existing && existing.uid !== resolved.uid ? existing.uid : void 0
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
requestKeyMap.forEach((value, key) => keyMap.set(key, value));
|
|
107
|
+
keyMap.set(import_key_registry.FLOW_SURFACE_SYSTEM_KEY, {
|
|
108
|
+
key: import_key_registry.FLOW_SURFACE_SYSTEM_KEY,
|
|
109
|
+
uid: surfaceResolved.uid,
|
|
110
|
+
source: "system",
|
|
111
|
+
kind: deps.buildPlanKeyKind(publicTree, surfaceResolved.kind),
|
|
112
|
+
locator: {
|
|
113
|
+
uid: surfaceResolved.uid
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
const targetSummary = deps.buildReadTargetSummary(surfaceTarget, surfaceResolved);
|
|
117
|
+
const fingerprint = deps.buildSurfaceContextFingerprint({
|
|
118
|
+
surfaceResolved,
|
|
119
|
+
publicTree,
|
|
120
|
+
keyMap
|
|
121
|
+
});
|
|
122
|
+
return {
|
|
123
|
+
surfaceSelector,
|
|
124
|
+
surfaceTarget,
|
|
125
|
+
surfaceResolved,
|
|
126
|
+
rawTree,
|
|
127
|
+
publicTree,
|
|
128
|
+
publicNodeMap,
|
|
129
|
+
targetSummary,
|
|
130
|
+
fingerprint,
|
|
131
|
+
uidSet,
|
|
132
|
+
keyMap,
|
|
133
|
+
requestKeyMap
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
137
|
+
0 && (module.exports = {
|
|
138
|
+
buildPlanSurfaceContext
|
|
139
|
+
});
|
|
@@ -0,0 +1,34 @@
|
|
|
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
|
+
export type FlowSurfaceCreatedKeySpec = {
|
|
10
|
+
key: string;
|
|
11
|
+
resultPath: string;
|
|
12
|
+
};
|
|
13
|
+
type CollectFlowSurfaceCreatedKeysOptions = {
|
|
14
|
+
targetSelectorKey?: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function normalizeFlowSurfaceCreatedKey(key: any, context: string): string;
|
|
17
|
+
export declare function collectFlowSurfaceCreatedKeys(action: string, values: any, options?: CollectFlowSurfaceCreatedKeysOptions): FlowSurfaceCreatedKeySpec[];
|
|
18
|
+
export declare function assertNoDuplicateFlowSurfaceCreatedKeys(specs: FlowSurfaceCreatedKeySpec[], context: string, options?: {
|
|
19
|
+
existingKeys?: Iterable<string>;
|
|
20
|
+
reservedNames?: Iterable<string>;
|
|
21
|
+
}): void;
|
|
22
|
+
export declare function registerFlowSurfaceCreatedKeys(result: any, specs: FlowSurfaceCreatedKeySpec[], keys: Map<string, any>): {
|
|
23
|
+
key: string;
|
|
24
|
+
uid: string;
|
|
25
|
+
}[];
|
|
26
|
+
export declare function collectPersistableFlowSurfaceCreatedKeys(result: any, specs: FlowSurfaceCreatedKeySpec[]): {
|
|
27
|
+
key: string;
|
|
28
|
+
uid: string;
|
|
29
|
+
}[];
|
|
30
|
+
export declare function isFlowSurfacePureKeyObject(input: any): input is {
|
|
31
|
+
key: string;
|
|
32
|
+
};
|
|
33
|
+
export declare function normalizeComposeInlineKeysForPlan(values: any, contextPath: string): any;
|
|
34
|
+
export {};
|