@notmrabhi/flowforge 0.1.53 → 0.1.54
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/{GatewayBranchEdge-CrgczPYJ.js → GatewayBranchEdge-BWz43Sat.js} +99 -102
- package/dist/GatewayBranchEdge-BWz43Sat.js.map +1 -0
- package/dist/GatewayBranchEdge-Ukfp7i1Q.js +2 -0
- package/dist/GatewayBranchEdge-Ukfp7i1Q.js.map +1 -0
- package/dist/{templateSkeletons-f-XQQvyE.js → WorkflowExecutionHistory-B0OiFCyi.js} +804 -858
- package/dist/WorkflowExecutionHistory-B0OiFCyi.js.map +1 -0
- package/dist/{templateSkeletons-gOva2Xus.js → WorkflowExecutionHistory-BHb6-2lt.js} +2 -2
- package/dist/WorkflowExecutionHistory-BHb6-2lt.js.map +1 -0
- package/dist/buildBackendPayload-4SwOp7St.js.map +1 -1
- package/dist/buildBackendPayload-BvrjW1uM.js.map +1 -1
- package/dist/canvas.cjs +1 -1
- package/dist/canvas.d.ts +0 -61
- package/dist/canvas.js +21 -25
- package/dist/core.d.ts +0 -24
- package/dist/defaultUi.cjs +1 -1
- package/dist/defaultUi.js +1 -1
- package/dist/form.d.ts +0 -35
- package/dist/index-B-D9UuLO.js.map +1 -1
- package/dist/index-DUbQPmIx.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +0 -43
- package/dist/index.js +65 -69
- package/dist/nodeRegistry.d.ts +0 -24
- package/package.json +1 -1
- package/dist/GatewayBranchEdge-CMY30xhz.js +0 -2
- package/dist/GatewayBranchEdge-CMY30xhz.js.map +0 -1
- package/dist/GatewayBranchEdge-CrgczPYJ.js.map +0 -1
- package/dist/templateSkeletons-f-XQQvyE.js.map +0 -1
- package/dist/templateSkeletons-gOva2Xus.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildBackendPayload-4SwOp7St.js","sources":["../src/payload/buildBackendPayload.ts"],"sourcesContent":["/**\n * buildBackendPayload — generic BPMN/DMN/canvasState emitter driven by each\n * task's `ui.bpmnEmit` block. Consumer ships per-task bpmnEmit specs from\n * the backend; the package handles the walk.\n *\n * Originally lived in IAM as `flowforgeStateToBackendJson`. Moved into the\n * package so every consumer gets the same emitter — and so DMN/filter/\n * approval fixes ship once, to everyone.\n *\n * Consumer injects:\n * - canvasState — `{ slots, branches }` from the canvas\n * - tasksByKey — `{ [descriptorType]: ApplicationTask }` lookup\n * - context — host-specific scalars (customerKey, workflowName)\n * - config — IAM-shaped defaults (path prefix, end-event ids,\n * trigger→category map, scheduler events)\n *\n * Returns a JSON object ready to POST to the backend.\n */\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type CanvasSlot = {\n id: string;\n kind?: string;\n descriptorType?: string;\n nodeData?: Record<string, unknown>;\n formData?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type CanvasState = {\n slots?: CanvasSlot[];\n branches?: Record<string, unknown>;\n};\n\nexport interface FieldRef {\n from: 'literal' | 'task' | 'ctx' | 'slot' | 'formData';\n key?: string;\n value?: unknown;\n}\n\nexport interface ExtensionFieldSpec {\n name: string;\n source?: {\n type: 'literal' | 'json' | 'taskConfig' | 'formData';\n value?: unknown;\n shape?: Record<string, FieldRef>;\n passthrough?: boolean;\n exclude?: string[];\n key?: string;\n };\n}\n\nexport interface ServiceTaskSpec {\n idTemplate: string;\n name?: string;\n flowableClass?: string;\n extensionFields?: ExtensionFieldSpec[];\n}\n\nexport interface GatewaySpec {\n idTemplate: string;\n name?: string;\n}\n\nexport interface TemplateFlowSpec {\n from: string;\n to: string;\n idTemplate?: string;\n condition?: string | null;\n}\n\nexport interface DmnOutputSpec {\n id: string;\n label?: string;\n name: string;\n typeRef?: string;\n}\n\nexport interface DmnEmitSpec {\n tableName: string;\n inputExpr: string;\n hitPolicy?: string;\n outputs?: DmnOutputSpec[];\n operatorMap?: Record<string, string>;\n valuesField?: string;\n}\n\nexport interface BpmnEmitSpec {\n kind: 'linear' | 'gated' | 'filter' | 'approval';\n serviceTasks?: ServiceTaskSpec[];\n gateway?: GatewaySpec;\n templateFlows?: TemplateFlowSpec[];\n outgoingConditions?: Record<string, string>;\n dmnEmit?: DmnEmitSpec;\n callActivity?: Record<string, unknown>;\n}\n\nexport interface ApplicationTaskLike {\n name?: string;\n taskKey?: string;\n applicationUuid?: string;\n configuration?: unknown[];\n ui?: { bpmnEmit?: BpmnEmitSpec; [key: string]: unknown };\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadContext {\n customerKey: string;\n workflowName: string;\n /** Anything else the host wants exposed via `from: 'ctx', key: '...'`. */\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadConfig {\n /**\n * Map of trigger eventType → workflowCategory string. Defaults to a small\n * IAM-shaped fallback; consumers should pass the full map they use.\n */\n triggerToCategory?: Record<string, string>;\n /** eventType values that should set `sources: ['SCHEDULER']` and skip the message block. */\n schedulerEventTypes?: string[];\n /** DMN LHS prefix for condition expressions (default IAM-style). */\n conditionPathPrefix?: string;\n /** Fallback workflowCategory when eventType isn't mapped. */\n defaultWorkflowCategory?: string;\n /** End-event ids — override per backend convention. */\n endEventIds?: { success: string; failure: string; rejected: string };\n /** Names rendered on end events. */\n endEventNames?: { success: string; failure: string; rejected: string };\n /** Start event id used in the outer chain. */\n startEventId?: string;\n}\n\nexport interface BuildPayloadOptions {\n state: CanvasState;\n tasksByKey: Record<string, ApplicationTaskLike>;\n context: BuildPayloadContext;\n config?: BuildPayloadConfig;\n}\n\n// ─── Defaults ──────────────────────────────────────────────────────────────\n\n// Package defaults are deliberately neutral — anything tenant- or\n// product-specific (trigger event types, default category, the DMN LHS\n// prefix) MUST come from the consumer's `config`. We only ship defaults\n// for engine-neutral BPMN scalars (start/end ids and end-event names).\nconst DEFAULTS: Required<BuildPayloadConfig> = {\n triggerToCategory: {},\n schedulerEventTypes: [],\n conditionPathPrefix: '',\n defaultWorkflowCategory: '',\n endEventIds: {\n success: 'endEventSuccess',\n failure: 'endEventFailure',\n rejected: 'endEventRejected',\n },\n endEventNames: {\n success: 'Success',\n failure: 'Failure',\n rejected: 'Rejected',\n },\n startEventId: 'startEvent',\n};\n\nconst NON_TASK_KINDS = new Set([\n 'start',\n 'end',\n 'triggerFixed',\n 'addTrigger',\n 'addStep',\n]);\nconst isTaskSlot = (slot: CanvasSlot): boolean =>\n !!slot && !NON_TASK_KINDS.has(String(slot.kind ?? ''));\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction interpolate(tpl: string | null | undefined, ctx: Record<string, unknown>): string {\n if (tpl == null) return '';\n return String(tpl).replace(/\\$\\{(\\w+)\\}/g, (m, k) =>\n Object.prototype.hasOwnProperty.call(ctx, k) ? String(ctx[k]) : m\n );\n}\n\ninterface ResolveCtx {\n task: ApplicationTaskLike;\n slot: CanvasSlot;\n ctx: BuildPayloadContext;\n}\n\nfunction resolveFieldRef(ref: FieldRef | undefined, ctx: ResolveCtx): string {\n if (!ref || typeof ref !== 'object') return '';\n const { from, key, value } = ref;\n if (from === 'literal') return value === undefined ? '' : String(value);\n if (from === 'task') return String((ctx.task as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'ctx') return String((ctx.ctx as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'slot') return String((ctx.slot as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'formData') return String(ctx.slot?.formData?.[key ?? ''] ?? '');\n return '';\n}\n\nfunction buildExtensionStringValue(field: ExtensionFieldSpec, ctx: ResolveCtx): string {\n const source = field?.source;\n if (!source) return '';\n if (source.type === 'literal') {\n return typeof source.value === 'string'\n ? source.value\n : JSON.stringify(source.value ?? '');\n }\n if (source.type === 'json' || source.type === 'taskConfig') {\n const shape = source.shape || {};\n const out: Record<string, string> = {};\n Object.keys(shape).forEach((k) => {\n out[k] = resolveFieldRef(shape[k], ctx);\n });\n return JSON.stringify(out);\n }\n if (source.type === 'formData') {\n if (source.passthrough) {\n const exclude = new Set(source.exclude || []);\n const out: Record<string, unknown> = {};\n const fd = ctx.slot?.formData ?? {};\n Object.keys(fd).forEach((k) => {\n if (!exclude.has(k)) out[k] = fd[k];\n });\n return JSON.stringify(out);\n }\n return String(ctx.slot?.formData?.[source.key ?? ''] ?? '');\n }\n return '';\n}\n\n/** Walk a dotted path against a plain object. Returns undefined on miss. */\nfunction getValueByPath(obj: unknown, path: string): unknown {\n if (!obj || typeof obj !== 'object' || !path) return undefined;\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc == null || typeof acc !== 'object') return undefined;\n return (acc as Record<string, unknown>)[key];\n }, obj);\n}\n\n// ─── DMN rule builder ──────────────────────────────────────────────────────\n\ninterface ConditionEntry {\n field?: string;\n fieldLabel?: string;\n key?: string;\n operator?: string;\n value?: string | number | boolean | null;\n connector?: 'and' | 'or';\n logicalOperator?: 'AND' | 'OR';\n}\n\nfunction buildDmnRules(\n dmnSpec: DmnEmitSpec,\n slot: CanvasSlot,\n pathPrefix: string\n): Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n}> {\n const opMap = dmnSpec.operatorMap || {};\n const valuesField = dmnSpec.valuesField || 'groups';\n\n const toJuel = (cond: ConditionEntry): string => {\n const op = opMap[String(cond?.operator ?? '')] ?? '==';\n const lhs = `${pathPrefix}.${cond?.key ?? cond?.field ?? ''}`;\n const rhs = `'${String(cond?.value ?? '')}'`;\n if (op.startsWith('.')) return `${lhs}${op}(${rhs})`;\n if (op.startsWith('!.')) return `!${lhs}${op.slice(1)}(${rhs})`;\n return `${lhs} ${op} ${rhs}`;\n };\n\n const entriesToExpression = (entries: ConditionEntry[] | undefined): string | null => {\n const list = Array.isArray(entries) ? entries : [];\n if (list.length === 0) return null;\n const parts = list.map(toJuel);\n const isOr = list[0]?.connector === 'or' || list[0]?.logicalOperator === 'OR';\n const logical = isOr ? '||' : '&&';\n return parts.join(` ${logical} `);\n };\n\n const rules: Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n }> = [];\n let ruleNum = 1;\n const pushRule = (expression: string | null, outputValue: unknown) => {\n rules.push({\n id: `rule${ruleNum}`,\n inputEntries: [\n {\n id: `rule${ruleNum}InputEntry1`,\n text: expression ? `\\${(${expression})}` : '',\n },\n ],\n outputEntries: [\n {\n id: `rule${ruleNum}OutputEntry1`,\n text: `\"${outputValue}\"`,\n },\n ],\n });\n ruleNum += 1;\n };\n\n // Shape A — IAM-legacy groupBlocks[].\n const blocks = Array.isArray(slot?.formData?.groupBlocks)\n ? (slot.formData!.groupBlocks as Array<{\n conditions?: ConditionEntry[];\n [k: string]: unknown;\n }>)\n : [];\n if (blocks.length > 0) {\n blocks.forEach((block) => {\n const values = Array.isArray(block?.[valuesField])\n ? (block[valuesField] as unknown[])\n : [];\n const expression = entriesToExpression(block?.conditions);\n values.forEach((v) => pushRule(expression, v));\n });\n return rules;\n }\n\n // Shape B — FlowForm When-builder.\n const fd = (slot?.formData ?? {}) as Record<string, unknown>;\n // eslint-disable-next-line no-underscore-dangle\n const condCfg = (fd._conditionConfig ?? fd.conditionConfig) as\n | Record<string, ConditionEntry[]>\n | undefined;\n if (condCfg && typeof condCfg === 'object') {\n Object.keys(condCfg).forEach((fieldKey) => {\n const conditions = condCfg[fieldKey];\n const expression = entriesToExpression(conditions);\n // The conditionConfig key can be either a plain field name OR a dotted\n // formik path (e.g. `attributeMapping.rules.0.targetField`). Resolve\n // both shapes — first try direct, then walk the path.\n const fieldValue =\n Object.prototype.hasOwnProperty.call(fd, fieldKey)\n ? fd[fieldKey]\n : getValueByPath(fd, fieldKey);\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((v) => {\n const out =\n typeof v === 'object' && v !== null\n ? (v as { value?: unknown; label?: unknown }).value ??\n (v as { label?: unknown }).label ??\n v\n : v;\n pushRule(expression, out);\n });\n } else if (\n fieldValue !== undefined &&\n fieldValue !== null &&\n fieldValue !== ''\n ) {\n pushRule(expression, fieldValue);\n } else if (expression) {\n // Conditions present but no output value — still emit the rule with\n // an empty output so the table doesn't silently drop it. Backend\n // can treat an empty output as a no-op or surface it as a config gap.\n pushRule(expression, '');\n }\n });\n }\n return rules;\n}\n\nfunction buildDmn(dmnSpec: DmnEmitSpec, slot: CanvasSlot, pathPrefix: string) {\n return {\n mappings: [],\n name: dmnSpec.tableName,\n decision: {\n id: dmnSpec.tableName,\n name: dmnSpec.tableName,\n decisionTable: {\n id: `decisionTable_${dmnSpec.tableName}`,\n hitPolicy: dmnSpec.hitPolicy || 'FIRST',\n inputs: [\n {\n id: `input_${dmnSpec.tableName}`,\n inputExpression: {\n id: `inputExpr_${dmnSpec.tableName}`,\n typeRef: 'string',\n text: dmnSpec.inputExpr,\n },\n },\n ],\n outputs: (dmnSpec.outputs || []).map((o) => ({\n id: o.id,\n label: o.label,\n typeRef: o.typeRef || 'string',\n name: o.name,\n })),\n rules: buildDmnRules(dmnSpec, slot, pathPrefix),\n },\n },\n };\n}\n\n// ─── Task emitter ──────────────────────────────────────────────────────────\n\ninterface Emission {\n serviceTasks: unknown[];\n gateways: Array<{ id: string; name?: string }>;\n callActivities: unknown[];\n templateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }>;\n dmn: ReturnType<typeof buildDmn> | null;\n bpmnEntry: string;\n bpmnExit: string;\n outgoingConditions: Record<string, string>;\n endsNeeded: Set<string>;\n}\n\nfunction emitTask(\n slot: CanvasSlot,\n task: ApplicationTaskLike,\n saveCtx: BuildPayloadContext,\n cfg: Required<BuildPayloadConfig>\n): Emission {\n const spec = task?.ui?.bpmnEmit;\n if (!spec) {\n return {\n serviceTasks: [\n {\n id: slot.id,\n name: task?.name || slot.descriptorType,\n configuration: Array.isArray(task?.configuration) ? task.configuration : [],\n input: slot.formData || {},\n },\n ],\n gateways: [],\n callActivities: [],\n templateFlows: [],\n dmn: null,\n bpmnEntry: slot.id,\n bpmnExit: slot.id,\n outgoingConditions: {},\n endsNeeded: new Set(),\n };\n }\n\n const interpCtx: Record<string, unknown> = {\n id: slot.id,\n endFailure: cfg.endEventIds.failure,\n endRejected: cfg.endEventIds.rejected,\n endSuccess: cfg.endEventIds.success,\n };\n\n const ctx: ResolveCtx = { task, slot, ctx: saveCtx };\n\n const serviceTasks = (spec.serviceTasks || []).map((st) => ({\n id: interpolate(st.idTemplate, interpCtx),\n name: st.name,\n flowableClass: st.flowableClass,\n extensionElements: {\n fields: (st.extensionFields || []).map((f) => ({\n name: f.name,\n stringValue: buildExtensionStringValue(f, ctx),\n })),\n },\n }));\n\n let gatewayId: string | null = null;\n const gateways: Array<{ id: string; name?: string }> = [];\n if (spec.gateway) {\n gatewayId = interpolate(spec.gateway.idTemplate, interpCtx);\n interpCtx.gateway = gatewayId;\n gateways.push({ id: gatewayId, name: spec.gateway.name });\n }\n\n const endsNeeded = new Set<string>();\n const templateFlows = (spec.templateFlows || []).map((f) => {\n const source = interpolate(f.from, interpCtx);\n const target = interpolate(f.to, interpCtx);\n if (target === cfg.endEventIds.failure) endsNeeded.add(cfg.endEventIds.failure);\n if (target === cfg.endEventIds.rejected) endsNeeded.add(cfg.endEventIds.rejected);\n const id = f.idTemplate\n ? interpolate(f.idTemplate, interpCtx)\n : `${source}-to-${target}`;\n return {\n id,\n sourceRef: source,\n targetRef: target,\n conditionExpression: f.condition ? interpolate(f.condition, interpCtx) : null,\n };\n });\n\n const callActivities: unknown[] = [];\n const dmn = spec.dmnEmit ? buildDmn(spec.dmnEmit, slot, cfg.conditionPathPrefix) : null;\n\n const bpmnEntry = (serviceTasks[0] as { id?: string })?.id ?? slot.id;\n const bpmnExit =\n gatewayId ??\n (serviceTasks[serviceTasks.length - 1] as { id?: string })?.id ??\n slot.id;\n\n const outgoingConditions: Record<string, string> = {};\n Object.keys(spec.outgoingConditions || {}).forEach((branch) => {\n outgoingConditions[branch] = interpolate(\n spec.outgoingConditions![branch],\n interpCtx\n );\n });\n\n return {\n serviceTasks,\n gateways,\n callActivities,\n templateFlows,\n dmn,\n bpmnEntry,\n bpmnExit,\n outgoingConditions,\n endsNeeded,\n };\n}\n\n// ─── Main entry point ──────────────────────────────────────────────────────\n\n/**\n * Generate a backend-ready payload from canvas state + task definitions.\n *\n * @example\n * const payload = buildBackendPayload({\n * state: { slots, branches },\n * tasksByKey: { USER_CREATION: {...}, USER_GROUP_ASSIGNMENT: {...} },\n * context: { customerKey: '51995', workflowName: 'My WF' },\n * config: { triggerToCategory: { CUSTOM_TRIGGER: 'CUSTOM_CATEGORY' } },\n * });\n * await api.post('/process', payload);\n */\nexport function buildBackendPayload(opts: BuildPayloadOptions): Record<string, unknown> {\n const { state, tasksByKey, context, config } = opts;\n const cfg: Required<BuildPayloadConfig> = {\n ...DEFAULTS,\n ...(config ?? {}),\n triggerToCategory: { ...DEFAULTS.triggerToCategory, ...(config?.triggerToCategory ?? {}) },\n schedulerEventTypes: config?.schedulerEventTypes ?? DEFAULTS.schedulerEventTypes,\n endEventIds: { ...DEFAULTS.endEventIds, ...(config?.endEventIds ?? {}) },\n endEventNames: { ...DEFAULTS.endEventNames, ...(config?.endEventNames ?? {}) },\n };\n\n const slots = Array.isArray(state?.slots) ? state.slots! : [];\n\n // 1. Trigger metadata\n const triggerSlot = slots.find((s) => s.kind === 'triggerFixed');\n const eventType = (triggerSlot?.nodeData as { eventType?: string } | undefined)?.eventType;\n const triggerType =\n (triggerSlot?.nodeData as { type?: string } | undefined)?.type || 'event';\n const sourcesData = (triggerSlot?.nodeData as { sources?: unknown[] } | undefined)?.sources;\n const pickedSources = Array.isArray(sourcesData)\n ? sourcesData\n .map((s) =>\n typeof s === 'string'\n ? s\n : (s as { value?: string; key?: string })?.value ??\n (s as { value?: string; key?: string })?.key ??\n ''\n )\n .filter(Boolean)\n : [];\n const workflowCategory =\n cfg.triggerToCategory[eventType ?? ''] ?? cfg.defaultWorkflowCategory;\n const isSchedulerEvent =\n !!eventType && cfg.schedulerEventTypes.includes(eventType);\n const sources = isSchedulerEvent ? ['SCHEDULER'] : pickedSources;\n\n // 2. Walk each task slot through the emitter\n const taskSlots = slots.filter(isTaskSlot);\n const emissions = taskSlots.map((slot) => ({\n slot,\n emit: emitTask(slot, tasksByKey[slot.descriptorType ?? ''] ?? {}, context, cfg),\n }));\n\n // 3. Collect emitted parts\n const allServiceTasks: unknown[] = [];\n const allGateways: Array<{ id: string; name?: string }> = [];\n const allCallActivities: unknown[] = [];\n const allTemplateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n const allDmns: unknown[] = [];\n const endsNeeded = new Set<string>();\n\n emissions.forEach(({ emit }) => {\n allServiceTasks.push(...emit.serviceTasks);\n allGateways.push(...emit.gateways);\n allCallActivities.push(...emit.callActivities);\n allTemplateFlows.push(...emit.templateFlows);\n if (emit.dmn) allDmns.push(emit.dmn);\n emit.endsNeeded.forEach((e) => endsNeeded.add(e));\n });\n\n // 4. Outer chain — link each task's exit to the next task's entry\n const outerFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n\n if (emissions.length > 0) {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${emissions[0].emit.bpmnEntry}`,\n sourceRef: cfg.startEventId,\n targetRef: emissions[0].emit.bpmnEntry,\n conditionExpression: null,\n });\n\n for (let i = 0; i < emissions.length - 1; i += 1) {\n const cur = emissions[i].emit;\n const next = emissions[i + 1].emit;\n const condition =\n cur.outgoingConditions.success ??\n cur.outgoingConditions.pass ??\n cur.outgoingConditions.approved ??\n null;\n outerFlows.push({\n id: `${cur.bpmnExit}-to-${next.bpmnEntry}`,\n sourceRef: cur.bpmnExit,\n targetRef: next.bpmnEntry,\n conditionExpression: condition,\n });\n }\n\n const last = emissions[emissions.length - 1].emit;\n outerFlows.push({\n id: `${last.bpmnExit}-to-${cfg.endEventIds.success}`,\n sourceRef: last.bpmnExit,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n } else {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${cfg.endEventIds.success}`,\n sourceRef: cfg.startEventId,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n }\n\n // 5. End events\n const endEvent: Array<{ id: string; name: string; executionListener?: null }> = [\n {\n id: cfg.endEventIds.success,\n name: cfg.endEventNames.success,\n executionListener: null,\n },\n ...(endsNeeded.has(cfg.endEventIds.failure)\n ? [{ id: cfg.endEventIds.failure, name: cfg.endEventNames.failure }]\n : []),\n ...(endsNeeded.has(cfg.endEventIds.rejected)\n ? [{ id: cfg.endEventIds.rejected, name: cfg.endEventNames.rejected }]\n : []),\n ];\n\n // 6. Start event\n const startEvent: Record<string, unknown> = {\n id: cfg.startEventId,\n name: 'Start',\n ...(triggerType === 'event'\n ? {\n messageEventDefinition: {\n messageRef: `msg_${(eventType || 'EVENT').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n }\n : {}),\n };\n\n // 7. Final payload\n const json: Record<string, unknown> = {\n canvasState: {\n slots,\n branches: state?.branches ?? {},\n },\n bpmn: {\n customerId: `${context.customerKey}`,\n workflowCategory,\n sources,\n process: {\n name: context.workflowName,\n isExecutable: 'true',\n },\n startEvent,\n endEvent,\n sequenceFlows: [...outerFlows, ...allTemplateFlows],\n exclusiveGateways: allGateways,\n serviceTasks: allServiceTasks,\n callActivities: allCallActivities,\n },\n ...(triggerType === 'event'\n ? {\n message: {\n id: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n name: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n dmns: allDmns,\n }\n : {\n eventConfig: [\n {\n eventType,\n config: {\n type: eventType,\n ...((triggerSlot?.nodeData as { scheduler?: Record<string, unknown> })?.scheduler ?? {}),\n },\n },\n ],\n }),\n };\n\n return json;\n}\n"],"names":["DEFAULTS","NON_TASK_KINDS","isTaskSlot","slot","interpolate","tpl","ctx","m","k","resolveFieldRef","ref","_a","_b","_c","_d","_e","from","key","value","buildExtensionStringValue","field","source","shape","out","exclude","fd","getValueByPath","obj","path","acc","buildDmnRules","dmnSpec","pathPrefix","opMap","valuesField","toJuel","cond","op","lhs","rhs","entriesToExpression","entries","list","parts","logical","rules","ruleNum","pushRule","expression","outputValue","blocks","block","values","v","condCfg","fieldKey","conditions","fieldValue","buildDmn","o","emitTask","task","saveCtx","cfg","spec","interpCtx","serviceTasks","st","f","gatewayId","gateways","endsNeeded","templateFlows","target","callActivities","dmn","bpmnEntry","bpmnExit","outgoingConditions","branch","buildBackendPayload","opts","state","tasksByKey","context","config","slots","triggerSlot","s","eventType","triggerType","sourcesData","pickedSources","workflowCategory","sources","emissions","allServiceTasks","allGateways","allCallActivities","allTemplateFlows","allDmns","emit","e","outerFlows","i","cur","next","condition","last","endEvent","startEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buildBackendPayload-4SwOp7St.js","sources":["../src/payload/buildBackendPayload.ts"],"sourcesContent":["/**\n * buildBackendPayload — generic BPMN/DMN/canvasState emitter driven by each\n * task's `ui.bpmnEmit` block. Consumer ships per-task bpmnEmit specs from\n * the backend; the package handles the walk.\n *\n * Originally lived in IAM as `flowforgeStateToBackendJson`. Moved into the\n * package so every consumer gets the same emitter — and so DMN/filter/\n * approval fixes ship once, to everyone.\n *\n * Consumer injects:\n * - canvasState — `{ slots, branches }` from the canvas\n * - tasksByKey — `{ [descriptorType]: ApplicationTask }` lookup\n * - context — host-specific scalars (customerKey, workflowName)\n * - config — IAM-shaped defaults (path prefix, end-event ids,\n * trigger→category map, scheduler events)\n *\n * Returns a JSON object ready to POST to the backend.\n */\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type CanvasSlot = {\n id: string;\n kind?: string;\n descriptorType?: string;\n nodeData?: Record<string, unknown>;\n formData?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type CanvasState = {\n slots?: CanvasSlot[];\n branches?: Record<string, unknown>;\n};\n\nexport interface FieldRef {\n from: 'literal' | 'task' | 'ctx' | 'slot' | 'formData';\n key?: string;\n value?: unknown;\n}\n\nexport interface ExtensionFieldSpec {\n name: string;\n source?: {\n type: 'literal' | 'json' | 'taskConfig' | 'formData';\n value?: unknown;\n shape?: Record<string, FieldRef>;\n passthrough?: boolean;\n exclude?: string[];\n key?: string;\n };\n}\n\nexport interface ServiceTaskSpec {\n idTemplate: string;\n name?: string;\n flowableClass?: string;\n extensionFields?: ExtensionFieldSpec[];\n}\n\nexport interface GatewaySpec {\n idTemplate: string;\n name?: string;\n}\n\nexport interface TemplateFlowSpec {\n from: string;\n to: string;\n idTemplate?: string;\n condition?: string | null;\n}\n\nexport interface DmnOutputSpec {\n id: string;\n label?: string;\n name: string;\n typeRef?: string;\n}\n\nexport interface DmnEmitSpec {\n tableName: string;\n inputExpr: string;\n hitPolicy?: string;\n outputs?: DmnOutputSpec[];\n operatorMap?: Record<string, string>;\n valuesField?: string;\n}\n\nexport interface BpmnEmitSpec {\n kind: 'linear' | 'gated' | 'filter' | 'approval';\n serviceTasks?: ServiceTaskSpec[];\n gateway?: GatewaySpec;\n templateFlows?: TemplateFlowSpec[];\n outgoingConditions?: Record<string, string>;\n dmnEmit?: DmnEmitSpec;\n callActivity?: Record<string, unknown>;\n}\n\nexport interface ApplicationTaskLike {\n name?: string;\n taskKey?: string;\n applicationUuid?: string;\n configuration?: unknown[];\n ui?: { bpmnEmit?: BpmnEmitSpec; [key: string]: unknown };\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadContext {\n customerKey: string;\n workflowName: string;\n /** Anything else the host wants exposed via `from: 'ctx', key: '...'`. */\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadConfig {\n /**\n * Map of trigger eventType → workflowCategory string. Defaults to a small\n * IAM-shaped fallback; consumers should pass the full map they use.\n */\n triggerToCategory?: Record<string, string>;\n /** eventType values that should set `sources: ['SCHEDULER']` and skip the message block. */\n schedulerEventTypes?: string[];\n /** DMN LHS prefix for condition expressions (default IAM-style). */\n conditionPathPrefix?: string;\n /** Fallback workflowCategory when eventType isn't mapped. */\n defaultWorkflowCategory?: string;\n /** End-event ids — override per backend convention. */\n endEventIds?: { success: string; failure: string; rejected: string };\n /** Names rendered on end events. */\n endEventNames?: { success: string; failure: string; rejected: string };\n /** Start event id used in the outer chain. */\n startEventId?: string;\n}\n\nexport interface BuildPayloadOptions {\n state: CanvasState;\n tasksByKey: Record<string, ApplicationTaskLike>;\n context: BuildPayloadContext;\n config?: BuildPayloadConfig;\n}\n\n// ─── Defaults ──────────────────────────────────────────────────────────────\n\n// Package defaults are deliberately neutral — anything tenant- or\n// product-specific (trigger event types, default category, the DMN LHS\n// prefix) MUST come from the consumer's `config`. We only ship defaults\n// for engine-neutral BPMN scalars (start/end ids and end-event names).\nconst DEFAULTS: Required<BuildPayloadConfig> = {\n triggerToCategory: {},\n schedulerEventTypes: [],\n conditionPathPrefix: '',\n defaultWorkflowCategory: '',\n endEventIds: {\n success: 'endEventSuccess',\n failure: 'endEventFailure',\n rejected: 'endEventRejected',\n },\n endEventNames: {\n success: 'Success',\n failure: 'Failure',\n rejected: 'Rejected',\n },\n startEventId: 'startEvent',\n};\n\nconst NON_TASK_KINDS = new Set([\n 'start',\n 'end',\n 'triggerFixed',\n 'addTrigger',\n 'addStep',\n]);\nconst isTaskSlot = (slot: CanvasSlot): boolean =>\n !!slot && !NON_TASK_KINDS.has(String(slot.kind ?? ''));\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction interpolate(tpl: string | null | undefined, ctx: Record<string, unknown>): string {\n if (tpl == null) return '';\n return String(tpl).replace(/\\$\\{(\\w+)\\}/g, (m, k) =>\n Object.prototype.hasOwnProperty.call(ctx, k) ? String(ctx[k]) : m\n );\n}\n\ninterface ResolveCtx {\n task: ApplicationTaskLike;\n slot: CanvasSlot;\n ctx: BuildPayloadContext;\n}\n\nfunction resolveFieldRef(ref: FieldRef | undefined, ctx: ResolveCtx): string {\n if (!ref || typeof ref !== 'object') return '';\n const { from, key, value } = ref;\n if (from === 'literal') return value === undefined ? '' : String(value);\n if (from === 'task') return String((ctx.task as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'ctx') return String((ctx.ctx as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'slot') return String((ctx.slot as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'formData') return String(ctx.slot?.formData?.[key ?? ''] ?? '');\n return '';\n}\n\nfunction buildExtensionStringValue(field: ExtensionFieldSpec, ctx: ResolveCtx): string {\n const source = field?.source;\n if (!source) return '';\n if (source.type === 'literal') {\n return typeof source.value === 'string'\n ? source.value\n : JSON.stringify(source.value ?? '');\n }\n if (source.type === 'json' || source.type === 'taskConfig') {\n const shape = source.shape || {};\n const out: Record<string, string> = {};\n Object.keys(shape).forEach((k) => {\n out[k] = resolveFieldRef(shape[k], ctx);\n });\n return JSON.stringify(out);\n }\n if (source.type === 'formData') {\n if (source.passthrough) {\n const exclude = new Set(source.exclude || []);\n const out: Record<string, unknown> = {};\n const fd = ctx.slot?.formData ?? {};\n Object.keys(fd).forEach((k) => {\n if (!exclude.has(k)) out[k] = fd[k];\n });\n return JSON.stringify(out);\n }\n return String(ctx.slot?.formData?.[source.key ?? ''] ?? '');\n }\n return '';\n}\n\n/** Walk a dotted path against a plain object. Returns undefined on miss. */\nfunction getValueByPath(obj: unknown, path: string): unknown {\n if (!obj || typeof obj !== 'object' || !path) return undefined;\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc == null || typeof acc !== 'object') return undefined;\n return (acc as Record<string, unknown>)[key];\n }, obj);\n}\n\n// ─── DMN rule builder ──────────────────────────────────────────────────────\n\ninterface ConditionEntry {\n field?: string;\n fieldLabel?: string;\n key?: string;\n operator?: string;\n value?: string | number | boolean | null;\n connector?: 'and' | 'or';\n logicalOperator?: 'AND' | 'OR';\n}\n\nfunction buildDmnRules(\n dmnSpec: DmnEmitSpec,\n slot: CanvasSlot,\n pathPrefix: string\n): Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n}> {\n const opMap = dmnSpec.operatorMap || {};\n const valuesField = dmnSpec.valuesField || 'groups';\n\n const toJuel = (cond: ConditionEntry): string => {\n const op = opMap[String(cond?.operator ?? '')] ?? '==';\n const lhs = `${pathPrefix}.${cond?.key ?? cond?.field ?? ''}`;\n const rhs = `'${String(cond?.value ?? '')}'`;\n if (op.startsWith('.')) return `${lhs}${op}(${rhs})`;\n if (op.startsWith('!.')) return `!${lhs}${op.slice(1)}(${rhs})`;\n return `${lhs} ${op} ${rhs}`;\n };\n\n const entriesToExpression = (entries: ConditionEntry[] | undefined): string | null => {\n const list = Array.isArray(entries) ? entries : [];\n if (list.length === 0) return null;\n const parts = list.map(toJuel);\n const isOr = list[0]?.connector === 'or' || list[0]?.logicalOperator === 'OR';\n const logical = isOr ? '||' : '&&';\n return parts.join(` ${logical} `);\n };\n\n const rules: Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n }> = [];\n let ruleNum = 1;\n const pushRule = (expression: string | null, outputValue: unknown) => {\n rules.push({\n id: `rule${ruleNum}`,\n inputEntries: [\n {\n id: `rule${ruleNum}InputEntry1`,\n text: expression ? `\\${(${expression})}` : '',\n },\n ],\n outputEntries: [\n {\n id: `rule${ruleNum}OutputEntry1`,\n text: `\"${outputValue}\"`,\n },\n ],\n });\n ruleNum += 1;\n };\n\n // Shape A — IAM-legacy groupBlocks[].\n const blocks = Array.isArray(slot?.formData?.groupBlocks)\n ? (slot.formData!.groupBlocks as Array<{\n conditions?: ConditionEntry[];\n [k: string]: unknown;\n }>)\n : [];\n if (blocks.length > 0) {\n blocks.forEach((block) => {\n const values = Array.isArray(block?.[valuesField])\n ? (block[valuesField] as unknown[])\n : [];\n const expression = entriesToExpression(block?.conditions);\n values.forEach((v) => pushRule(expression, v));\n });\n return rules;\n }\n\n // Shape B — FlowForm When-builder.\n const fd = (slot?.formData ?? {}) as Record<string, unknown>;\n // eslint-disable-next-line no-underscore-dangle\n const condCfg = (fd._conditionConfig ?? fd.conditionConfig) as\n | Record<string, ConditionEntry[]>\n | undefined;\n if (condCfg && typeof condCfg === 'object') {\n Object.keys(condCfg).forEach((fieldKey) => {\n const conditions = condCfg[fieldKey];\n const expression = entriesToExpression(conditions);\n // The conditionConfig key can be either a plain field name OR a dotted\n // formik path (e.g. `attributeMapping.rules.0.targetField`). Resolve\n // both shapes — first try direct, then walk the path.\n const fieldValue =\n Object.prototype.hasOwnProperty.call(fd, fieldKey)\n ? fd[fieldKey]\n : getValueByPath(fd, fieldKey);\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((v) => {\n const out =\n typeof v === 'object' && v !== null\n ? (v as { value?: unknown; label?: unknown }).value ??\n (v as { label?: unknown }).label ??\n v\n : v;\n pushRule(expression, out);\n });\n } else if (\n fieldValue !== undefined &&\n fieldValue !== null &&\n fieldValue !== ''\n ) {\n pushRule(expression, fieldValue);\n } else if (expression) {\n pushRule(expression, '');\n }\n });\n }\n return rules;\n}\n\nfunction buildDmn(dmnSpec: DmnEmitSpec, slot: CanvasSlot, pathPrefix: string) {\n return {\n mappings: [],\n name: dmnSpec.tableName,\n decision: {\n id: dmnSpec.tableName,\n name: dmnSpec.tableName,\n decisionTable: {\n id: `decisionTable_${dmnSpec.tableName}`,\n hitPolicy: dmnSpec.hitPolicy || 'FIRST',\n inputs: [\n {\n id: `input_${dmnSpec.tableName}`,\n inputExpression: {\n id: `inputExpr_${dmnSpec.tableName}`,\n typeRef: 'string',\n text: dmnSpec.inputExpr,\n },\n },\n ],\n outputs: (dmnSpec.outputs || []).map((o) => ({\n id: o.id,\n label: o.label,\n typeRef: o.typeRef || 'string',\n name: o.name,\n })),\n rules: buildDmnRules(dmnSpec, slot, pathPrefix),\n },\n },\n };\n}\n\n// ─── Task emitter ──────────────────────────────────────────────────────────\n\ninterface Emission {\n serviceTasks: unknown[];\n gateways: Array<{ id: string; name?: string }>;\n callActivities: unknown[];\n templateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }>;\n dmn: ReturnType<typeof buildDmn> | null;\n bpmnEntry: string;\n bpmnExit: string;\n outgoingConditions: Record<string, string>;\n endsNeeded: Set<string>;\n}\n\nfunction emitTask(\n slot: CanvasSlot,\n task: ApplicationTaskLike,\n saveCtx: BuildPayloadContext,\n cfg: Required<BuildPayloadConfig>\n): Emission {\n const spec = task?.ui?.bpmnEmit;\n if (!spec) {\n return {\n serviceTasks: [\n {\n id: slot.id,\n name: task?.name || slot.descriptorType,\n configuration: Array.isArray(task?.configuration) ? task.configuration : [],\n input: slot.formData || {},\n },\n ],\n gateways: [],\n callActivities: [],\n templateFlows: [],\n dmn: null,\n bpmnEntry: slot.id,\n bpmnExit: slot.id,\n outgoingConditions: {},\n endsNeeded: new Set(),\n };\n }\n\n const interpCtx: Record<string, unknown> = {\n id: slot.id,\n endFailure: cfg.endEventIds.failure,\n endRejected: cfg.endEventIds.rejected,\n endSuccess: cfg.endEventIds.success,\n };\n\n const ctx: ResolveCtx = { task, slot, ctx: saveCtx };\n\n const serviceTasks = (spec.serviceTasks || []).map((st) => ({\n id: interpolate(st.idTemplate, interpCtx),\n name: st.name,\n flowableClass: st.flowableClass,\n extensionElements: {\n fields: (st.extensionFields || []).map((f) => ({\n name: f.name,\n stringValue: buildExtensionStringValue(f, ctx),\n })),\n },\n }));\n\n let gatewayId: string | null = null;\n const gateways: Array<{ id: string; name?: string }> = [];\n if (spec.gateway) {\n gatewayId = interpolate(spec.gateway.idTemplate, interpCtx);\n interpCtx.gateway = gatewayId;\n gateways.push({ id: gatewayId, name: spec.gateway.name });\n }\n\n const endsNeeded = new Set<string>();\n const templateFlows = (spec.templateFlows || []).map((f) => {\n const source = interpolate(f.from, interpCtx);\n const target = interpolate(f.to, interpCtx);\n if (target === cfg.endEventIds.failure) endsNeeded.add(cfg.endEventIds.failure);\n if (target === cfg.endEventIds.rejected) endsNeeded.add(cfg.endEventIds.rejected);\n const id = f.idTemplate\n ? interpolate(f.idTemplate, interpCtx)\n : `${source}-to-${target}`;\n return {\n id,\n sourceRef: source,\n targetRef: target,\n conditionExpression: f.condition ? interpolate(f.condition, interpCtx) : null,\n };\n });\n\n const callActivities: unknown[] = [];\n const dmn = spec.dmnEmit ? buildDmn(spec.dmnEmit, slot, cfg.conditionPathPrefix) : null;\n\n const bpmnEntry = (serviceTasks[0] as { id?: string })?.id ?? slot.id;\n const bpmnExit =\n gatewayId ??\n (serviceTasks[serviceTasks.length - 1] as { id?: string })?.id ??\n slot.id;\n\n const outgoingConditions: Record<string, string> = {};\n Object.keys(spec.outgoingConditions || {}).forEach((branch) => {\n outgoingConditions[branch] = interpolate(\n spec.outgoingConditions![branch],\n interpCtx\n );\n });\n\n return {\n serviceTasks,\n gateways,\n callActivities,\n templateFlows,\n dmn,\n bpmnEntry,\n bpmnExit,\n outgoingConditions,\n endsNeeded,\n };\n}\n\n// ─── Main entry point ──────────────────────────────────────────────────────\n\n/**\n * Generate a backend-ready payload from canvas state + task definitions.\n *\n * @example\n * const payload = buildBackendPayload({\n * state: { slots, branches },\n * tasksByKey: { USER_CREATION: {...}, USER_GROUP_ASSIGNMENT: {...} },\n * context: { customerKey: '51995', workflowName: 'My WF' },\n * config: { triggerToCategory: { CUSTOM_TRIGGER: 'CUSTOM_CATEGORY' } },\n * });\n * await api.post('/process', payload);\n */\nexport function buildBackendPayload(opts: BuildPayloadOptions): Record<string, unknown> {\n const { state, tasksByKey, context, config } = opts;\n const cfg: Required<BuildPayloadConfig> = {\n ...DEFAULTS,\n ...(config ?? {}),\n triggerToCategory: { ...DEFAULTS.triggerToCategory, ...(config?.triggerToCategory ?? {}) },\n schedulerEventTypes: config?.schedulerEventTypes ?? DEFAULTS.schedulerEventTypes,\n endEventIds: { ...DEFAULTS.endEventIds, ...(config?.endEventIds ?? {}) },\n endEventNames: { ...DEFAULTS.endEventNames, ...(config?.endEventNames ?? {}) },\n };\n\n const slots = Array.isArray(state?.slots) ? state.slots! : [];\n\n // 1. Trigger metadata\n const triggerSlot = slots.find((s) => s.kind === 'triggerFixed');\n const eventType = (triggerSlot?.nodeData as { eventType?: string } | undefined)?.eventType;\n const triggerType =\n (triggerSlot?.nodeData as { type?: string } | undefined)?.type || 'event';\n const sourcesData = (triggerSlot?.nodeData as { sources?: unknown[] } | undefined)?.sources;\n const pickedSources = Array.isArray(sourcesData)\n ? sourcesData\n .map((s) =>\n typeof s === 'string'\n ? s\n : (s as { value?: string; key?: string })?.value ??\n (s as { value?: string; key?: string })?.key ??\n ''\n )\n .filter(Boolean)\n : [];\n const workflowCategory =\n cfg.triggerToCategory[eventType ?? ''] ?? cfg.defaultWorkflowCategory;\n const isSchedulerEvent =\n !!eventType && cfg.schedulerEventTypes.includes(eventType);\n const sources = isSchedulerEvent ? ['SCHEDULER'] : pickedSources;\n\n // 2. Walk each task slot through the emitter\n const taskSlots = slots.filter(isTaskSlot);\n const emissions = taskSlots.map((slot) => ({\n slot,\n emit: emitTask(slot, tasksByKey[slot.descriptorType ?? ''] ?? {}, context, cfg),\n }));\n\n // 3. Collect emitted parts\n const allServiceTasks: unknown[] = [];\n const allGateways: Array<{ id: string; name?: string }> = [];\n const allCallActivities: unknown[] = [];\n const allTemplateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n const allDmns: unknown[] = [];\n const endsNeeded = new Set<string>();\n\n emissions.forEach(({ emit }) => {\n allServiceTasks.push(...emit.serviceTasks);\n allGateways.push(...emit.gateways);\n allCallActivities.push(...emit.callActivities);\n allTemplateFlows.push(...emit.templateFlows);\n if (emit.dmn) allDmns.push(emit.dmn);\n emit.endsNeeded.forEach((e) => endsNeeded.add(e));\n });\n\n // 4. Outer chain — link each task's exit to the next task's entry\n const outerFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n\n if (emissions.length > 0) {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${emissions[0].emit.bpmnEntry}`,\n sourceRef: cfg.startEventId,\n targetRef: emissions[0].emit.bpmnEntry,\n conditionExpression: null,\n });\n\n for (let i = 0; i < emissions.length - 1; i += 1) {\n const cur = emissions[i].emit;\n const next = emissions[i + 1].emit;\n const condition =\n cur.outgoingConditions.success ??\n cur.outgoingConditions.pass ??\n cur.outgoingConditions.approved ??\n null;\n outerFlows.push({\n id: `${cur.bpmnExit}-to-${next.bpmnEntry}`,\n sourceRef: cur.bpmnExit,\n targetRef: next.bpmnEntry,\n conditionExpression: condition,\n });\n }\n\n const last = emissions[emissions.length - 1].emit;\n outerFlows.push({\n id: `${last.bpmnExit}-to-${cfg.endEventIds.success}`,\n sourceRef: last.bpmnExit,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n } else {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${cfg.endEventIds.success}`,\n sourceRef: cfg.startEventId,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n }\n\n // 5. End events\n const endEvent: Array<{ id: string; name: string; executionListener?: null }> = [\n {\n id: cfg.endEventIds.success,\n name: cfg.endEventNames.success,\n executionListener: null,\n },\n ...(endsNeeded.has(cfg.endEventIds.failure)\n ? [{ id: cfg.endEventIds.failure, name: cfg.endEventNames.failure }]\n : []),\n ...(endsNeeded.has(cfg.endEventIds.rejected)\n ? [{ id: cfg.endEventIds.rejected, name: cfg.endEventNames.rejected }]\n : []),\n ];\n\n // 6. Start event\n const startEvent: Record<string, unknown> = {\n id: cfg.startEventId,\n name: 'Start',\n ...(triggerType === 'event'\n ? {\n messageEventDefinition: {\n messageRef: `msg_${(eventType || 'EVENT').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n }\n : {}),\n };\n\n // 7. Final payload\n const json: Record<string, unknown> = {\n canvasState: {\n slots,\n branches: state?.branches ?? {},\n },\n bpmn: {\n customerId: `${context.customerKey}`,\n workflowCategory,\n sources,\n process: {\n name: context.workflowName,\n isExecutable: 'true',\n },\n startEvent,\n endEvent,\n sequenceFlows: [...outerFlows, ...allTemplateFlows],\n exclusiveGateways: allGateways,\n serviceTasks: allServiceTasks,\n callActivities: allCallActivities,\n },\n ...(triggerType === 'event'\n ? {\n message: {\n id: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n name: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n dmns: allDmns,\n }\n : {\n eventConfig: [\n {\n eventType,\n config: {\n type: eventType,\n ...((triggerSlot?.nodeData as { scheduler?: Record<string, unknown> })?.scheduler ?? {}),\n },\n },\n ],\n }),\n };\n\n return json;\n}\n"],"names":["DEFAULTS","NON_TASK_KINDS","isTaskSlot","slot","interpolate","tpl","ctx","m","k","resolveFieldRef","ref","_a","_b","_c","_d","_e","from","key","value","buildExtensionStringValue","field","source","shape","out","exclude","fd","getValueByPath","obj","path","acc","buildDmnRules","dmnSpec","pathPrefix","opMap","valuesField","toJuel","cond","op","lhs","rhs","entriesToExpression","entries","list","parts","logical","rules","ruleNum","pushRule","expression","outputValue","blocks","block","values","v","condCfg","fieldKey","conditions","fieldValue","buildDmn","o","emitTask","task","saveCtx","cfg","spec","interpCtx","serviceTasks","st","f","gatewayId","gateways","endsNeeded","templateFlows","target","callActivities","dmn","bpmnEntry","bpmnExit","outgoingConditions","branch","buildBackendPayload","opts","state","tasksByKey","context","config","slots","triggerSlot","s","eventType","triggerType","sourcesData","pickedSources","workflowCategory","sources","emissions","allServiceTasks","allGateways","allCallActivities","allTemplateFlows","allDmns","emit","e","outerFlows","i","cur","next","condition","last","endEvent","startEvent"],"mappings":"AAmJA,MAAMA,IAAyC;AAAA,EAC7C,mBAAmB,CAAA;AAAA,EACnB,qBAAqB,CAAA;AAAA,EACrB,qBAAqB;AAAA,EACrB,yBAAyB;AAAA,EACzB,aAAa;AAAA,IACX,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,EAAA;AAAA,EAEZ,eAAe;AAAA,IACb,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,EAAA;AAAA,EAEZ,cAAc;AAChB,GAEMC,wBAAqB,IAAI;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC,GACKC,IAAa,CAACC,MAClB,CAAC,CAACA,KAAQ,CAACF,EAAe,IAAI,OAAOE,EAAK,QAAQ,EAAE,CAAC;AAIvD,SAASC,EAAYC,GAAgCC,GAAsC;AACzF,SAAID,KAAO,OAAa,KACjB,OAAOA,CAAG,EAAE;AAAA,IAAQ;AAAA,IAAgB,CAACE,GAAGC,MAC7C,OAAO,UAAU,eAAe,KAAKF,GAAKE,CAAC,IAAI,OAAOF,EAAIE,CAAC,CAAC,IAAID;AAAA,EAAA;AAEpE;AAQA,SAASE,EAAgBC,GAA2BJ,GAAyB;AA3C7E,MAAAK,GAAAC,GAAAC,GAAAC,GAAAC;AA4CE,MAAI,CAACL,KAAO,OAAOA,KAAQ,SAAU,QAAO;AAC5C,QAAM,EAAE,MAAAM,GAAM,KAAAC,GAAK,OAAAC,EAAA,IAAUR;AAC7B,SAAIM,MAAS,YAAkBE,MAAU,SAAY,KAAK,OAAOA,CAAK,IAClEF,MAAS,SAAe,SAAQL,IAAAL,EAAI,SAAJ,gBAAAK,EAAuCM,KAAO,QAAO,EAAE,IACvFD,MAAS,QAAc,SAAQJ,IAAAN,EAAI,QAAJ,gBAAAM,EAAsCK,KAAO,QAAO,EAAE,IACrFD,MAAS,SAAe,SAAQH,IAAAP,EAAI,SAAJ,gBAAAO,EAAuCI,KAAO,QAAO,EAAE,IACvFD,MAAS,aAAmB,SAAOD,KAAAD,IAAAR,EAAI,SAAJ,gBAAAQ,EAAU,aAAV,gBAAAC,EAAqBE,KAAO,QAAO,EAAE,IACrE;AACT;AAEA,SAASE,EAA0BC,GAA2Bd,GAAyB;AAtDvF,MAAAK,GAAAC,GAAAC;AAuDE,QAAMQ,IAASD,KAAA,gBAAAA,EAAO;AACtB,MAAI,CAACC,EAAQ,QAAO;AACpB,MAAIA,EAAO,SAAS;AAClB,WAAO,OAAOA,EAAO,SAAU,WAC3BA,EAAO,QACP,KAAK,UAAUA,EAAO,SAAS,EAAE;AAEvC,MAAIA,EAAO,SAAS,UAAUA,EAAO,SAAS,cAAc;AAC1D,UAAMC,IAAQD,EAAO,SAAS,CAAA,GACxBE,IAA8B,CAAA;AACpC,kBAAO,KAAKD,CAAK,EAAE,QAAQ,CAACd,MAAM;AAChC,MAAAe,EAAIf,CAAC,IAAIC,EAAgBa,EAAMd,CAAC,GAAGF,CAAG;AAAA,IACxC,CAAC,GACM,KAAK,UAAUiB,CAAG;AAAA,EAC3B;AACA,MAAIF,EAAO,SAAS,YAAY;AAC9B,QAAIA,EAAO,aAAa;AACtB,YAAMG,IAAU,IAAI,IAAIH,EAAO,WAAW,CAAA,CAAE,GACtCE,IAA+B,CAAA,GAC/BE,MAAKd,IAAAL,EAAI,SAAJ,gBAAAK,EAAU,aAAY,CAAA;AACjC,oBAAO,KAAKc,CAAE,EAAE,QAAQ,CAACjB,MAAM;AAC7B,QAAKgB,EAAQ,IAAIhB,CAAC,MAAGe,EAAIf,CAAC,IAAIiB,EAAGjB,CAAC;AAAA,MACpC,CAAC,GACM,KAAK,UAAUe,CAAG;AAAA,IAC3B;AACA,WAAO,SAAOV,KAAAD,IAAAN,EAAI,SAAJ,gBAAAM,EAAU,aAAV,gBAAAC,EAAqBQ,EAAO,OAAO,QAAO,EAAE;AAAA,EAC5D;AACA,SAAO;AACT;AAGA,SAASK,EAAeC,GAAcC,GAAuB;AAC3D,MAAI,GAACD,KAAO,OAAOA,KAAQ,YAAY,CAACC;AACxC,WAAOA,EAAK,MAAM,GAAG,EAAE,OAAgB,CAACC,GAAKZ,MAAQ;AACnD,UAAI,EAAAY,KAAO,QAAQ,OAAOA,KAAQ;AAClC,eAAQA,EAAgCZ,CAAG;AAAA,IAC7C,GAAGU,CAAG;AACR;AAcA,SAASG,EACPC,GACA5B,GACA6B,GAKC;AAlHH,MAAArB;AAmHE,QAAMsB,IAAQF,EAAQ,eAAe,CAAA,GAC/BG,IAAcH,EAAQ,eAAe,UAErCI,IAAS,CAACC,MAAiC;AAC/C,UAAMC,IAAKJ,EAAM,QAAOG,KAAA,gBAAAA,EAAM,aAAY,EAAE,CAAC,KAAK,MAC5CE,IAAM,GAAGN,CAAU,KAAII,KAAA,gBAAAA,EAAM,SAAOA,KAAA,gBAAAA,EAAM,UAAS,EAAE,IACrDG,IAAM,IAAI,QAAOH,KAAA,gBAAAA,EAAM,UAAS,EAAE,CAAC;AACzC,WAAIC,EAAG,WAAW,GAAG,IAAU,GAAGC,CAAG,GAAGD,CAAE,IAAIE,CAAG,MAC7CF,EAAG,WAAW,IAAI,IAAU,IAAIC,CAAG,GAAGD,EAAG,MAAM,CAAC,CAAC,IAAIE,CAAG,MACrD,GAAGD,CAAG,IAAID,CAAE,IAAIE,CAAG;AAAA,EAC5B,GAEMC,IAAsB,CAACC,MAAyD;AA/HxF,QAAA9B,GAAAC;AAgII,UAAM8B,IAAO,MAAM,QAAQD,CAAO,IAAIA,IAAU,CAAA;AAChD,QAAIC,EAAK,WAAW,EAAG,QAAO;AAC9B,UAAMC,IAAQD,EAAK,IAAIP,CAAM,GAEvBS,MADOjC,IAAA+B,EAAK,CAAC,MAAN,gBAAA/B,EAAS,eAAc,UAAQC,IAAA8B,EAAK,CAAC,MAAN,gBAAA9B,EAAS,qBAAoB,OAClD,OAAO;AAC9B,WAAO+B,EAAM,KAAK,IAAIC,CAAO,GAAG;AAAA,EAClC,GAEMC,IAID,CAAA;AACL,MAAIC,IAAU;AACd,QAAMC,IAAW,CAACC,GAA2BC,MAAyB;AACpE,IAAAJ,EAAM,KAAK;AAAA,MACT,IAAI,OAAOC,CAAO;AAAA,MAClB,cAAc;AAAA,QACZ;AAAA,UACE,IAAI,OAAOA,CAAO;AAAA,UAClB,MAAME,IAAa,OAAOA,CAAU,OAAO;AAAA,QAAA;AAAA,MAC7C;AAAA,MAEF,eAAe;AAAA,QACb;AAAA,UACE,IAAI,OAAOF,CAAO;AAAA,UAClB,MAAM,IAAIG,CAAW;AAAA,QAAA;AAAA,MACvB;AAAA,IACF,CACD,GACDH,KAAW;AAAA,EACb,GAGMI,IAAS,MAAM,SAAQvC,IAAAR,KAAA,gBAAAA,EAAM,aAAN,gBAAAQ,EAAgB,WAAW,IACnDR,EAAK,SAAU,cAIhB,CAAA;AACJ,MAAI+C,EAAO,SAAS;AAClB,WAAAA,EAAO,QAAQ,CAACC,MAAU;AACxB,YAAMC,IAAS,MAAM,QAAQD,KAAA,gBAAAA,EAAQjB,EAAY,IAC5CiB,EAAMjB,CAAW,IAClB,CAAA,GACEc,IAAaR,EAAoBW,KAAA,gBAAAA,EAAO,UAAU;AACxD,MAAAC,EAAO,QAAQ,CAACC,MAAMN,EAASC,GAAYK,CAAC,CAAC;AAAA,IAC/C,CAAC,GACMR;AAIT,QAAMpB,KAAMtB,KAAA,gBAAAA,EAAM,aAAY,CAAA,GAExBmD,IAAW7B,EAAG,oBAAoBA,EAAG;AAG3C,SAAI6B,KAAW,OAAOA,KAAY,YAChC,OAAO,KAAKA,CAAO,EAAE,QAAQ,CAACC,MAAa;AACzC,UAAMC,IAAaF,EAAQC,CAAQ,GAC7BP,IAAaR,EAAoBgB,CAAU,GAI3CC,IACJ,OAAO,UAAU,eAAe,KAAKhC,GAAI8B,CAAQ,IAC7C9B,EAAG8B,CAAQ,IACX7B,EAAeD,GAAI8B,CAAQ;AACjC,IAAI,MAAM,QAAQE,CAAU,IAC1BA,EAAW,QAAQ,CAACJ,MAAM;AACxB,YAAM9B,IACJ,OAAO8B,KAAM,YAAYA,MAAM,OAC1BA,EAA2C,SAC3CA,EAA0B,SAC3BA,IACAA;AACN,MAAAN,EAASC,GAAYzB,CAAG;AAAA,IAC1B,CAAC,IAGDkC,KAAe,QACfA,MAAe,KAEfV,EAASC,GAAYS,CAAU,IACtBT,KACTD,EAASC,GAAY,EAAE;AAAA,EAE3B,CAAC,GAEIH;AACT;AAEA,SAASa,EAAS3B,GAAsB5B,GAAkB6B,GAAoB;AAC5E,SAAO;AAAA,IACL,UAAU,CAAA;AAAA,IACV,MAAMD,EAAQ;AAAA,IACd,UAAU;AAAA,MACR,IAAIA,EAAQ;AAAA,MACZ,MAAMA,EAAQ;AAAA,MACd,eAAe;AAAA,QACb,IAAI,iBAAiBA,EAAQ,SAAS;AAAA,QACtC,WAAWA,EAAQ,aAAa;AAAA,QAChC,QAAQ;AAAA,UACN;AAAA,YACE,IAAI,SAASA,EAAQ,SAAS;AAAA,YAC9B,iBAAiB;AAAA,cACf,IAAI,aAAaA,EAAQ,SAAS;AAAA,cAClC,SAAS;AAAA,cACT,MAAMA,EAAQ;AAAA,YAAA;AAAA,UAChB;AAAA,QACF;AAAA,QAEF,UAAUA,EAAQ,WAAW,CAAA,GAAI,IAAI,CAAC4B,OAAO;AAAA,UAC3C,IAAIA,EAAE;AAAA,UACN,OAAOA,EAAE;AAAA,UACT,SAASA,EAAE,WAAW;AAAA,UACtB,MAAMA,EAAE;AAAA,QAAA,EACR;AAAA,QACF,OAAO7B,EAAcC,GAAS5B,GAAM6B,CAAU;AAAA,MAAA;AAAA,IAChD;AAAA,EACF;AAEJ;AAqBA,SAAS4B,EACPzD,GACA0D,GACAC,GACAC,GACU;AApRZ,MAAApD,GAAAC,GAAAC;AAqRE,QAAMmD,KAAOrD,IAAAkD,KAAA,gBAAAA,EAAM,OAAN,gBAAAlD,EAAU;AACvB,MAAI,CAACqD;AACH,WAAO;AAAA,MACL,cAAc;AAAA,QACZ;AAAA,UACE,IAAI7D,EAAK;AAAA,UACT,OAAM0D,KAAA,gBAAAA,EAAM,SAAQ1D,EAAK;AAAA,UACzB,eAAe,MAAM,QAAQ0D,KAAA,gBAAAA,EAAM,aAAa,IAAIA,EAAK,gBAAgB,CAAA;AAAA,UACzE,OAAO1D,EAAK,YAAY,CAAA;AAAA,QAAC;AAAA,MAC3B;AAAA,MAEF,UAAU,CAAA;AAAA,MACV,gBAAgB,CAAA;AAAA,MAChB,eAAe,CAAA;AAAA,MACf,KAAK;AAAA,MACL,WAAWA,EAAK;AAAA,MAChB,UAAUA,EAAK;AAAA,MACf,oBAAoB,CAAA;AAAA,MACpB,gCAAgB,IAAA;AAAA,IAAI;AAIxB,QAAM8D,IAAqC;AAAA,IACzC,IAAI9D,EAAK;AAAA,IACT,YAAY4D,EAAI,YAAY;AAAA,IAC5B,aAAaA,EAAI,YAAY;AAAA,IAC7B,YAAYA,EAAI,YAAY;AAAA,EAAA,GAGxBzD,IAAkB,EAAE,MAAAuD,GAAM,MAAA1D,GAAM,KAAK2D,EAAA,GAErCI,KAAgBF,EAAK,gBAAgB,CAAA,GAAI,IAAI,CAACG,OAAQ;AAAA,IAC1D,IAAI/D,EAAY+D,EAAG,YAAYF,CAAS;AAAA,IACxC,MAAME,EAAG;AAAA,IACT,eAAeA,EAAG;AAAA,IAClB,mBAAmB;AAAA,MACjB,SAASA,EAAG,mBAAmB,CAAA,GAAI,IAAI,CAACC,OAAO;AAAA,QAC7C,MAAMA,EAAE;AAAA,QACR,aAAajD,EAA0BiD,GAAG9D,CAAG;AAAA,MAAA,EAC7C;AAAA,IAAA;AAAA,EACJ,EACA;AAEF,MAAI+D,IAA2B;AAC/B,QAAMC,IAAiD,CAAA;AACvD,EAAIN,EAAK,YACPK,IAAYjE,EAAY4D,EAAK,QAAQ,YAAYC,CAAS,GAC1DA,EAAU,UAAUI,GACpBC,EAAS,KAAK,EAAE,IAAID,GAAW,MAAML,EAAK,QAAQ,MAAM;AAG1D,QAAMO,wBAAiB,IAAA,GACjBC,KAAiBR,EAAK,iBAAiB,CAAA,GAAI,IAAI,CAACI,MAAM;AAC1D,UAAM/C,IAASjB,EAAYgE,EAAE,MAAMH,CAAS,GACtCQ,IAASrE,EAAYgE,EAAE,IAAIH,CAAS;AAC1C,WAAIQ,MAAWV,EAAI,YAAY,aAAoB,IAAIA,EAAI,YAAY,OAAO,GAC1EU,MAAWV,EAAI,YAAY,cAAqB,IAAIA,EAAI,YAAY,QAAQ,GAIzE;AAAA,MACL,IAJSK,EAAE,aACThE,EAAYgE,EAAE,YAAYH,CAAS,IACnC,GAAG5C,CAAM,OAAOoD,CAAM;AAAA,MAGxB,WAAWpD;AAAA,MACX,WAAWoD;AAAA,MACX,qBAAqBL,EAAE,YAAYhE,EAAYgE,EAAE,WAAWH,CAAS,IAAI;AAAA,IAAA;AAAA,EAE7E,CAAC,GAEKS,IAA4B,CAAA,GAC5BC,IAAMX,EAAK,UAAUN,EAASM,EAAK,SAAS7D,GAAM4D,EAAI,mBAAmB,IAAI,MAE7Ea,MAAahE,IAAAsD,EAAa,CAAC,MAAd,gBAAAtD,EAAqC,OAAMT,EAAK,IAC7D0E,IACJR,OACCxD,IAAAqD,EAAaA,EAAa,SAAS,CAAC,MAApC,gBAAArD,EAA2D,OAC5DV,EAAK,IAED2E,IAA6C,CAAA;AACnD,gBAAO,KAAKd,EAAK,sBAAsB,CAAA,CAAE,EAAE,QAAQ,CAACe,MAAW;AAC7D,IAAAD,EAAmBC,CAAM,IAAI3E;AAAA,MAC3B4D,EAAK,mBAAoBe,CAAM;AAAA,MAC/Bd;AAAA,IAAA;AAAA,EAEJ,CAAC,GAEM;AAAA,IACL,cAAAC;AAAA,IACA,UAAAI;AAAA,IACA,gBAAAI;AAAA,IACA,eAAAF;AAAA,IACA,KAAAG;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,YAAAP;AAAA,EAAA;AAEJ;AAgBO,SAASS,EAAoBC,GAAoD;AArYxF,MAAAtE,GAAAC,GAAAC,GAAAC;AAsYE,QAAM,EAAE,OAAAoE,GAAO,YAAAC,GAAY,SAAAC,GAAS,QAAAC,MAAWJ,GACzClB,IAAoC;AAAA,IACxC,GAAG/D;AAAA,IACH,GAAIqF,KAAU,CAAA;AAAA,IACd,mBAAmB,EAAE,GAAGrF,EAAS,mBAAmB,IAAIqF,KAAA,gBAAAA,EAAQ,sBAAqB,GAAC;AAAA,IACtF,sBAAqBA,KAAA,gBAAAA,EAAQ,wBAAuBrF,EAAS;AAAA,IAC7D,aAAa,EAAE,GAAGA,EAAS,aAAa,IAAIqF,KAAA,gBAAAA,EAAQ,gBAAe,GAAC;AAAA,IACpE,eAAe,EAAE,GAAGrF,EAAS,eAAe,IAAIqF,KAAA,gBAAAA,EAAQ,kBAAiB,CAAA,EAAC;AAAA,EAAG,GAGzEC,IAAQ,MAAM,QAAQJ,KAAA,gBAAAA,EAAO,KAAK,IAAIA,EAAM,QAAS,CAAA,GAGrDK,IAAcD,EAAM,KAAK,CAACE,MAAMA,EAAE,SAAS,cAAc,GACzDC,KAAa9E,IAAA4E,KAAA,gBAAAA,EAAa,aAAb,gBAAA5E,EAA8D,WAC3E+E,MACH9E,IAAA2E,KAAA,gBAAAA,EAAa,aAAb,gBAAA3E,EAAyD,SAAQ,SAC9D+E,KAAe9E,IAAA0E,KAAA,gBAAAA,EAAa,aAAb,gBAAA1E,EAA+D,SAC9E+E,IAAgB,MAAM,QAAQD,CAAW,IAC3CA,EACG;AAAA,IAAI,CAACH,MACJ,OAAOA,KAAM,WACTA,KACCA,KAAA,gBAAAA,EAAwC,WACxCA,KAAA,gBAAAA,EAAwC,QACzC;AAAA,EAAA,EAEL,OAAO,OAAO,IACjB,CAAA,GACEK,IACJ9B,EAAI,kBAAkB0B,KAAa,EAAE,KAAK1B,EAAI,yBAG1C+B,IADJ,CAAC,CAACL,KAAa1B,EAAI,oBAAoB,SAAS0B,CAAS,IACxB,CAAC,WAAW,IAAIG,GAI7CG,IADYT,EAAM,OAAOpF,CAAU,EACb,IAAI,CAACC,OAAU;AAAA,IACzC,MAAAA;AAAA,IACA,MAAMyD,EAASzD,GAAMgF,EAAWhF,EAAK,kBAAkB,EAAE,KAAK,IAAIiF,GAASrB,CAAG;AAAA,EAAA,EAC9E,GAGIiC,IAA6B,CAAA,GAC7BC,IAAoD,CAAA,GACpDC,IAA+B,CAAA,GAC/BC,IAKD,CAAA,GACCC,IAAqB,CAAA,GACrB7B,wBAAiB,IAAA;AAEvB,EAAAwB,EAAU,QAAQ,CAAC,EAAE,MAAAM,QAAW;AAC9B,IAAAL,EAAgB,KAAK,GAAGK,EAAK,YAAY,GACzCJ,EAAY,KAAK,GAAGI,EAAK,QAAQ,GACjCH,EAAkB,KAAK,GAAGG,EAAK,cAAc,GAC7CF,EAAiB,KAAK,GAAGE,EAAK,aAAa,GACvCA,EAAK,OAAKD,EAAQ,KAAKC,EAAK,GAAG,GACnCA,EAAK,WAAW,QAAQ,CAACC,MAAM/B,EAAW,IAAI+B,CAAC,CAAC;AAAA,EAClD,CAAC;AAGD,QAAMC,IAKD,CAAA;AAEL,MAAIR,EAAU,SAAS,GAAG;AACxB,IAAAQ,EAAW,KAAK;AAAA,MACd,IAAI,GAAGxC,EAAI,YAAY,OAAOgC,EAAU,CAAC,EAAE,KAAK,SAAS;AAAA,MACzD,WAAWhC,EAAI;AAAA,MACf,WAAWgC,EAAU,CAAC,EAAE,KAAK;AAAA,MAC7B,qBAAqB;AAAA,IAAA,CACtB;AAED,aAASS,IAAI,GAAGA,IAAIT,EAAU,SAAS,GAAGS,KAAK,GAAG;AAChD,YAAMC,IAAMV,EAAUS,CAAC,EAAE,MACnBE,IAAOX,EAAUS,IAAI,CAAC,EAAE,MACxBG,IACJF,EAAI,mBAAmB,WACvBA,EAAI,mBAAmB,QACvBA,EAAI,mBAAmB,YACvB;AACF,MAAAF,EAAW,KAAK;AAAA,QACd,IAAI,GAAGE,EAAI,QAAQ,OAAOC,EAAK,SAAS;AAAA,QACxC,WAAWD,EAAI;AAAA,QACf,WAAWC,EAAK;AAAA,QAChB,qBAAqBC;AAAA,MAAA,CACtB;AAAA,IACH;AAEA,UAAMC,IAAOb,EAAUA,EAAU,SAAS,CAAC,EAAE;AAC7C,IAAAQ,EAAW,KAAK;AAAA,MACd,IAAI,GAAGK,EAAK,QAAQ,OAAO7C,EAAI,YAAY,OAAO;AAAA,MAClD,WAAW6C,EAAK;AAAA,MAChB,WAAW7C,EAAI,YAAY;AAAA,MAC3B,qBAAqB;AAAA,IAAA,CACtB;AAAA,EACH;AACE,IAAAwC,EAAW,KAAK;AAAA,MACd,IAAI,GAAGxC,EAAI,YAAY,OAAOA,EAAI,YAAY,OAAO;AAAA,MACrD,WAAWA,EAAI;AAAA,MACf,WAAWA,EAAI,YAAY;AAAA,MAC3B,qBAAqB;AAAA,IAAA,CACtB;AAIH,QAAM8C,IAA0E;AAAA,IAC9E;AAAA,MACE,IAAI9C,EAAI,YAAY;AAAA,MACpB,MAAMA,EAAI,cAAc;AAAA,MACxB,mBAAmB;AAAA,IAAA;AAAA,IAErB,GAAIQ,EAAW,IAAIR,EAAI,YAAY,OAAO,IACtC,CAAC,EAAE,IAAIA,EAAI,YAAY,SAAS,MAAMA,EAAI,cAAc,QAAA,CAAS,IACjE,CAAA;AAAA,IACJ,GAAIQ,EAAW,IAAIR,EAAI,YAAY,QAAQ,IACvC,CAAC,EAAE,IAAIA,EAAI,YAAY,UAAU,MAAMA,EAAI,cAAc,SAAA,CAAU,IACnE,CAAA;AAAA,EAAC,GAID+C,IAAsC;AAAA,IAC1C,IAAI/C,EAAI;AAAA,IACR,MAAM;AAAA,IACN,GAAI2B,MAAgB,UAChB;AAAA,MACE,wBAAwB;AAAA,QACtB,YAAY,QAAQD,KAAa,SAAS,YAAA,CAAa,IACrDK,EAAQ,SAAS,IAAIA,EAAQ,KAAK,GAAG,EAAE,YAAA,IAAgB,SACzD,IAAIV,EAAQ,WAAW;AAAA,MAAA;AAAA,IACzB,IAEF,CAAA;AAAA,EAAC;AAiDP,SA7CsC;AAAA,IACpC,aAAa;AAAA,MACX,OAAAE;AAAA,MACA,WAAUJ,KAAA,gBAAAA,EAAO,aAAY,CAAA;AAAA,IAAC;AAAA,IAEhC,MAAM;AAAA,MACJ,YAAY,GAAGE,EAAQ,WAAW;AAAA,MAClC,kBAAAS;AAAA,MACA,SAAAC;AAAA,MACA,SAAS;AAAA,QACP,MAAMV,EAAQ;AAAA,QACd,cAAc;AAAA,MAAA;AAAA,MAEhB,YAAA0B;AAAA,MACA,UAAAD;AAAA,MACA,eAAe,CAAC,GAAGN,GAAY,GAAGJ,CAAgB;AAAA,MAClD,mBAAmBF;AAAA,MACnB,cAAcD;AAAA,MACd,gBAAgBE;AAAA,IAAA;AAAA,IAElB,GAAIR,MAAgB,UAChB;AAAA,MACE,SAAS;AAAA,QACP,IAAI,QAAQD,KAAa,SAAS,YAAA,CAAa,IAC7CK,EAAQ,SAAS,IAAIA,EAAQ,KAAK,GAAG,EAAE,YAAA,IAAgB,SACzD,IAAIV,EAAQ,WAAW;AAAA,QACvB,MAAM,QAAQK,KAAa,SAAS,YAAA,CAAa,IAC/CK,EAAQ,SAAS,IAAIA,EAAQ,KAAK,GAAG,EAAE,YAAA,IAAgB,SACzD,IAAIV,EAAQ,WAAW;AAAA,MAAA;AAAA,MAEzB,MAAMgB;AAAA,IAAA,IAER;AAAA,MACE,aAAa;AAAA,QACX;AAAA,UACE,WAAAX;AAAA,UACA,QAAQ;AAAA,YACN,MAAMA;AAAA,YACN,KAAK3E,IAAAyE,KAAA,gBAAAA,EAAa,aAAb,gBAAAzE,EAAmE,cAAa,CAAA;AAAA,UAAC;AAAA,QACxF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAIR;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"buildBackendPayload-BvrjW1uM.js","sources":["../src/payload/buildBackendPayload.ts"],"sourcesContent":["/**\n * buildBackendPayload — generic BPMN/DMN/canvasState emitter driven by each\n * task's `ui.bpmnEmit` block. Consumer ships per-task bpmnEmit specs from\n * the backend; the package handles the walk.\n *\n * Originally lived in IAM as `flowforgeStateToBackendJson`. Moved into the\n * package so every consumer gets the same emitter — and so DMN/filter/\n * approval fixes ship once, to everyone.\n *\n * Consumer injects:\n * - canvasState — `{ slots, branches }` from the canvas\n * - tasksByKey — `{ [descriptorType]: ApplicationTask }` lookup\n * - context — host-specific scalars (customerKey, workflowName)\n * - config — IAM-shaped defaults (path prefix, end-event ids,\n * trigger→category map, scheduler events)\n *\n * Returns a JSON object ready to POST to the backend.\n */\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type CanvasSlot = {\n id: string;\n kind?: string;\n descriptorType?: string;\n nodeData?: Record<string, unknown>;\n formData?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type CanvasState = {\n slots?: CanvasSlot[];\n branches?: Record<string, unknown>;\n};\n\nexport interface FieldRef {\n from: 'literal' | 'task' | 'ctx' | 'slot' | 'formData';\n key?: string;\n value?: unknown;\n}\n\nexport interface ExtensionFieldSpec {\n name: string;\n source?: {\n type: 'literal' | 'json' | 'taskConfig' | 'formData';\n value?: unknown;\n shape?: Record<string, FieldRef>;\n passthrough?: boolean;\n exclude?: string[];\n key?: string;\n };\n}\n\nexport interface ServiceTaskSpec {\n idTemplate: string;\n name?: string;\n flowableClass?: string;\n extensionFields?: ExtensionFieldSpec[];\n}\n\nexport interface GatewaySpec {\n idTemplate: string;\n name?: string;\n}\n\nexport interface TemplateFlowSpec {\n from: string;\n to: string;\n idTemplate?: string;\n condition?: string | null;\n}\n\nexport interface DmnOutputSpec {\n id: string;\n label?: string;\n name: string;\n typeRef?: string;\n}\n\nexport interface DmnEmitSpec {\n tableName: string;\n inputExpr: string;\n hitPolicy?: string;\n outputs?: DmnOutputSpec[];\n operatorMap?: Record<string, string>;\n valuesField?: string;\n}\n\nexport interface BpmnEmitSpec {\n kind: 'linear' | 'gated' | 'filter' | 'approval';\n serviceTasks?: ServiceTaskSpec[];\n gateway?: GatewaySpec;\n templateFlows?: TemplateFlowSpec[];\n outgoingConditions?: Record<string, string>;\n dmnEmit?: DmnEmitSpec;\n callActivity?: Record<string, unknown>;\n}\n\nexport interface ApplicationTaskLike {\n name?: string;\n taskKey?: string;\n applicationUuid?: string;\n configuration?: unknown[];\n ui?: { bpmnEmit?: BpmnEmitSpec; [key: string]: unknown };\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadContext {\n customerKey: string;\n workflowName: string;\n /** Anything else the host wants exposed via `from: 'ctx', key: '...'`. */\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadConfig {\n /**\n * Map of trigger eventType → workflowCategory string. Defaults to a small\n * IAM-shaped fallback; consumers should pass the full map they use.\n */\n triggerToCategory?: Record<string, string>;\n /** eventType values that should set `sources: ['SCHEDULER']` and skip the message block. */\n schedulerEventTypes?: string[];\n /** DMN LHS prefix for condition expressions (default IAM-style). */\n conditionPathPrefix?: string;\n /** Fallback workflowCategory when eventType isn't mapped. */\n defaultWorkflowCategory?: string;\n /** End-event ids — override per backend convention. */\n endEventIds?: { success: string; failure: string; rejected: string };\n /** Names rendered on end events. */\n endEventNames?: { success: string; failure: string; rejected: string };\n /** Start event id used in the outer chain. */\n startEventId?: string;\n}\n\nexport interface BuildPayloadOptions {\n state: CanvasState;\n tasksByKey: Record<string, ApplicationTaskLike>;\n context: BuildPayloadContext;\n config?: BuildPayloadConfig;\n}\n\n// ─── Defaults ──────────────────────────────────────────────────────────────\n\n// Package defaults are deliberately neutral — anything tenant- or\n// product-specific (trigger event types, default category, the DMN LHS\n// prefix) MUST come from the consumer's `config`. We only ship defaults\n// for engine-neutral BPMN scalars (start/end ids and end-event names).\nconst DEFAULTS: Required<BuildPayloadConfig> = {\n triggerToCategory: {},\n schedulerEventTypes: [],\n conditionPathPrefix: '',\n defaultWorkflowCategory: '',\n endEventIds: {\n success: 'endEventSuccess',\n failure: 'endEventFailure',\n rejected: 'endEventRejected',\n },\n endEventNames: {\n success: 'Success',\n failure: 'Failure',\n rejected: 'Rejected',\n },\n startEventId: 'startEvent',\n};\n\nconst NON_TASK_KINDS = new Set([\n 'start',\n 'end',\n 'triggerFixed',\n 'addTrigger',\n 'addStep',\n]);\nconst isTaskSlot = (slot: CanvasSlot): boolean =>\n !!slot && !NON_TASK_KINDS.has(String(slot.kind ?? ''));\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction interpolate(tpl: string | null | undefined, ctx: Record<string, unknown>): string {\n if (tpl == null) return '';\n return String(tpl).replace(/\\$\\{(\\w+)\\}/g, (m, k) =>\n Object.prototype.hasOwnProperty.call(ctx, k) ? String(ctx[k]) : m\n );\n}\n\ninterface ResolveCtx {\n task: ApplicationTaskLike;\n slot: CanvasSlot;\n ctx: BuildPayloadContext;\n}\n\nfunction resolveFieldRef(ref: FieldRef | undefined, ctx: ResolveCtx): string {\n if (!ref || typeof ref !== 'object') return '';\n const { from, key, value } = ref;\n if (from === 'literal') return value === undefined ? '' : String(value);\n if (from === 'task') return String((ctx.task as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'ctx') return String((ctx.ctx as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'slot') return String((ctx.slot as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'formData') return String(ctx.slot?.formData?.[key ?? ''] ?? '');\n return '';\n}\n\nfunction buildExtensionStringValue(field: ExtensionFieldSpec, ctx: ResolveCtx): string {\n const source = field?.source;\n if (!source) return '';\n if (source.type === 'literal') {\n return typeof source.value === 'string'\n ? source.value\n : JSON.stringify(source.value ?? '');\n }\n if (source.type === 'json' || source.type === 'taskConfig') {\n const shape = source.shape || {};\n const out: Record<string, string> = {};\n Object.keys(shape).forEach((k) => {\n out[k] = resolveFieldRef(shape[k], ctx);\n });\n return JSON.stringify(out);\n }\n if (source.type === 'formData') {\n if (source.passthrough) {\n const exclude = new Set(source.exclude || []);\n const out: Record<string, unknown> = {};\n const fd = ctx.slot?.formData ?? {};\n Object.keys(fd).forEach((k) => {\n if (!exclude.has(k)) out[k] = fd[k];\n });\n return JSON.stringify(out);\n }\n return String(ctx.slot?.formData?.[source.key ?? ''] ?? '');\n }\n return '';\n}\n\n/** Walk a dotted path against a plain object. Returns undefined on miss. */\nfunction getValueByPath(obj: unknown, path: string): unknown {\n if (!obj || typeof obj !== 'object' || !path) return undefined;\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc == null || typeof acc !== 'object') return undefined;\n return (acc as Record<string, unknown>)[key];\n }, obj);\n}\n\n// ─── DMN rule builder ──────────────────────────────────────────────────────\n\ninterface ConditionEntry {\n field?: string;\n fieldLabel?: string;\n key?: string;\n operator?: string;\n value?: string | number | boolean | null;\n connector?: 'and' | 'or';\n logicalOperator?: 'AND' | 'OR';\n}\n\nfunction buildDmnRules(\n dmnSpec: DmnEmitSpec,\n slot: CanvasSlot,\n pathPrefix: string\n): Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n}> {\n const opMap = dmnSpec.operatorMap || {};\n const valuesField = dmnSpec.valuesField || 'groups';\n\n const toJuel = (cond: ConditionEntry): string => {\n const op = opMap[String(cond?.operator ?? '')] ?? '==';\n const lhs = `${pathPrefix}.${cond?.key ?? cond?.field ?? ''}`;\n const rhs = `'${String(cond?.value ?? '')}'`;\n if (op.startsWith('.')) return `${lhs}${op}(${rhs})`;\n if (op.startsWith('!.')) return `!${lhs}${op.slice(1)}(${rhs})`;\n return `${lhs} ${op} ${rhs}`;\n };\n\n const entriesToExpression = (entries: ConditionEntry[] | undefined): string | null => {\n const list = Array.isArray(entries) ? entries : [];\n if (list.length === 0) return null;\n const parts = list.map(toJuel);\n const isOr = list[0]?.connector === 'or' || list[0]?.logicalOperator === 'OR';\n const logical = isOr ? '||' : '&&';\n return parts.join(` ${logical} `);\n };\n\n const rules: Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n }> = [];\n let ruleNum = 1;\n const pushRule = (expression: string | null, outputValue: unknown) => {\n rules.push({\n id: `rule${ruleNum}`,\n inputEntries: [\n {\n id: `rule${ruleNum}InputEntry1`,\n text: expression ? `\\${(${expression})}` : '',\n },\n ],\n outputEntries: [\n {\n id: `rule${ruleNum}OutputEntry1`,\n text: `\"${outputValue}\"`,\n },\n ],\n });\n ruleNum += 1;\n };\n\n // Shape A — IAM-legacy groupBlocks[].\n const blocks = Array.isArray(slot?.formData?.groupBlocks)\n ? (slot.formData!.groupBlocks as Array<{\n conditions?: ConditionEntry[];\n [k: string]: unknown;\n }>)\n : [];\n if (blocks.length > 0) {\n blocks.forEach((block) => {\n const values = Array.isArray(block?.[valuesField])\n ? (block[valuesField] as unknown[])\n : [];\n const expression = entriesToExpression(block?.conditions);\n values.forEach((v) => pushRule(expression, v));\n });\n return rules;\n }\n\n // Shape B — FlowForm When-builder.\n const fd = (slot?.formData ?? {}) as Record<string, unknown>;\n // eslint-disable-next-line no-underscore-dangle\n const condCfg = (fd._conditionConfig ?? fd.conditionConfig) as\n | Record<string, ConditionEntry[]>\n | undefined;\n if (condCfg && typeof condCfg === 'object') {\n Object.keys(condCfg).forEach((fieldKey) => {\n const conditions = condCfg[fieldKey];\n const expression = entriesToExpression(conditions);\n // The conditionConfig key can be either a plain field name OR a dotted\n // formik path (e.g. `attributeMapping.rules.0.targetField`). Resolve\n // both shapes — first try direct, then walk the path.\n const fieldValue =\n Object.prototype.hasOwnProperty.call(fd, fieldKey)\n ? fd[fieldKey]\n : getValueByPath(fd, fieldKey);\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((v) => {\n const out =\n typeof v === 'object' && v !== null\n ? (v as { value?: unknown; label?: unknown }).value ??\n (v as { label?: unknown }).label ??\n v\n : v;\n pushRule(expression, out);\n });\n } else if (\n fieldValue !== undefined &&\n fieldValue !== null &&\n fieldValue !== ''\n ) {\n pushRule(expression, fieldValue);\n } else if (expression) {\n // Conditions present but no output value — still emit the rule with\n // an empty output so the table doesn't silently drop it. Backend\n // can treat an empty output as a no-op or surface it as a config gap.\n pushRule(expression, '');\n }\n });\n }\n return rules;\n}\n\nfunction buildDmn(dmnSpec: DmnEmitSpec, slot: CanvasSlot, pathPrefix: string) {\n return {\n mappings: [],\n name: dmnSpec.tableName,\n decision: {\n id: dmnSpec.tableName,\n name: dmnSpec.tableName,\n decisionTable: {\n id: `decisionTable_${dmnSpec.tableName}`,\n hitPolicy: dmnSpec.hitPolicy || 'FIRST',\n inputs: [\n {\n id: `input_${dmnSpec.tableName}`,\n inputExpression: {\n id: `inputExpr_${dmnSpec.tableName}`,\n typeRef: 'string',\n text: dmnSpec.inputExpr,\n },\n },\n ],\n outputs: (dmnSpec.outputs || []).map((o) => ({\n id: o.id,\n label: o.label,\n typeRef: o.typeRef || 'string',\n name: o.name,\n })),\n rules: buildDmnRules(dmnSpec, slot, pathPrefix),\n },\n },\n };\n}\n\n// ─── Task emitter ──────────────────────────────────────────────────────────\n\ninterface Emission {\n serviceTasks: unknown[];\n gateways: Array<{ id: string; name?: string }>;\n callActivities: unknown[];\n templateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }>;\n dmn: ReturnType<typeof buildDmn> | null;\n bpmnEntry: string;\n bpmnExit: string;\n outgoingConditions: Record<string, string>;\n endsNeeded: Set<string>;\n}\n\nfunction emitTask(\n slot: CanvasSlot,\n task: ApplicationTaskLike,\n saveCtx: BuildPayloadContext,\n cfg: Required<BuildPayloadConfig>\n): Emission {\n const spec = task?.ui?.bpmnEmit;\n if (!spec) {\n return {\n serviceTasks: [\n {\n id: slot.id,\n name: task?.name || slot.descriptorType,\n configuration: Array.isArray(task?.configuration) ? task.configuration : [],\n input: slot.formData || {},\n },\n ],\n gateways: [],\n callActivities: [],\n templateFlows: [],\n dmn: null,\n bpmnEntry: slot.id,\n bpmnExit: slot.id,\n outgoingConditions: {},\n endsNeeded: new Set(),\n };\n }\n\n const interpCtx: Record<string, unknown> = {\n id: slot.id,\n endFailure: cfg.endEventIds.failure,\n endRejected: cfg.endEventIds.rejected,\n endSuccess: cfg.endEventIds.success,\n };\n\n const ctx: ResolveCtx = { task, slot, ctx: saveCtx };\n\n const serviceTasks = (spec.serviceTasks || []).map((st) => ({\n id: interpolate(st.idTemplate, interpCtx),\n name: st.name,\n flowableClass: st.flowableClass,\n extensionElements: {\n fields: (st.extensionFields || []).map((f) => ({\n name: f.name,\n stringValue: buildExtensionStringValue(f, ctx),\n })),\n },\n }));\n\n let gatewayId: string | null = null;\n const gateways: Array<{ id: string; name?: string }> = [];\n if (spec.gateway) {\n gatewayId = interpolate(spec.gateway.idTemplate, interpCtx);\n interpCtx.gateway = gatewayId;\n gateways.push({ id: gatewayId, name: spec.gateway.name });\n }\n\n const endsNeeded = new Set<string>();\n const templateFlows = (spec.templateFlows || []).map((f) => {\n const source = interpolate(f.from, interpCtx);\n const target = interpolate(f.to, interpCtx);\n if (target === cfg.endEventIds.failure) endsNeeded.add(cfg.endEventIds.failure);\n if (target === cfg.endEventIds.rejected) endsNeeded.add(cfg.endEventIds.rejected);\n const id = f.idTemplate\n ? interpolate(f.idTemplate, interpCtx)\n : `${source}-to-${target}`;\n return {\n id,\n sourceRef: source,\n targetRef: target,\n conditionExpression: f.condition ? interpolate(f.condition, interpCtx) : null,\n };\n });\n\n const callActivities: unknown[] = [];\n const dmn = spec.dmnEmit ? buildDmn(spec.dmnEmit, slot, cfg.conditionPathPrefix) : null;\n\n const bpmnEntry = (serviceTasks[0] as { id?: string })?.id ?? slot.id;\n const bpmnExit =\n gatewayId ??\n (serviceTasks[serviceTasks.length - 1] as { id?: string })?.id ??\n slot.id;\n\n const outgoingConditions: Record<string, string> = {};\n Object.keys(spec.outgoingConditions || {}).forEach((branch) => {\n outgoingConditions[branch] = interpolate(\n spec.outgoingConditions![branch],\n interpCtx\n );\n });\n\n return {\n serviceTasks,\n gateways,\n callActivities,\n templateFlows,\n dmn,\n bpmnEntry,\n bpmnExit,\n outgoingConditions,\n endsNeeded,\n };\n}\n\n// ─── Main entry point ──────────────────────────────────────────────────────\n\n/**\n * Generate a backend-ready payload from canvas state + task definitions.\n *\n * @example\n * const payload = buildBackendPayload({\n * state: { slots, branches },\n * tasksByKey: { USER_CREATION: {...}, USER_GROUP_ASSIGNMENT: {...} },\n * context: { customerKey: '51995', workflowName: 'My WF' },\n * config: { triggerToCategory: { CUSTOM_TRIGGER: 'CUSTOM_CATEGORY' } },\n * });\n * await api.post('/process', payload);\n */\nexport function buildBackendPayload(opts: BuildPayloadOptions): Record<string, unknown> {\n const { state, tasksByKey, context, config } = opts;\n const cfg: Required<BuildPayloadConfig> = {\n ...DEFAULTS,\n ...(config ?? {}),\n triggerToCategory: { ...DEFAULTS.triggerToCategory, ...(config?.triggerToCategory ?? {}) },\n schedulerEventTypes: config?.schedulerEventTypes ?? DEFAULTS.schedulerEventTypes,\n endEventIds: { ...DEFAULTS.endEventIds, ...(config?.endEventIds ?? {}) },\n endEventNames: { ...DEFAULTS.endEventNames, ...(config?.endEventNames ?? {}) },\n };\n\n const slots = Array.isArray(state?.slots) ? state.slots! : [];\n\n // 1. Trigger metadata\n const triggerSlot = slots.find((s) => s.kind === 'triggerFixed');\n const eventType = (triggerSlot?.nodeData as { eventType?: string } | undefined)?.eventType;\n const triggerType =\n (triggerSlot?.nodeData as { type?: string } | undefined)?.type || 'event';\n const sourcesData = (triggerSlot?.nodeData as { sources?: unknown[] } | undefined)?.sources;\n const pickedSources = Array.isArray(sourcesData)\n ? sourcesData\n .map((s) =>\n typeof s === 'string'\n ? s\n : (s as { value?: string; key?: string })?.value ??\n (s as { value?: string; key?: string })?.key ??\n ''\n )\n .filter(Boolean)\n : [];\n const workflowCategory =\n cfg.triggerToCategory[eventType ?? ''] ?? cfg.defaultWorkflowCategory;\n const isSchedulerEvent =\n !!eventType && cfg.schedulerEventTypes.includes(eventType);\n const sources = isSchedulerEvent ? ['SCHEDULER'] : pickedSources;\n\n // 2. Walk each task slot through the emitter\n const taskSlots = slots.filter(isTaskSlot);\n const emissions = taskSlots.map((slot) => ({\n slot,\n emit: emitTask(slot, tasksByKey[slot.descriptorType ?? ''] ?? {}, context, cfg),\n }));\n\n // 3. Collect emitted parts\n const allServiceTasks: unknown[] = [];\n const allGateways: Array<{ id: string; name?: string }> = [];\n const allCallActivities: unknown[] = [];\n const allTemplateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n const allDmns: unknown[] = [];\n const endsNeeded = new Set<string>();\n\n emissions.forEach(({ emit }) => {\n allServiceTasks.push(...emit.serviceTasks);\n allGateways.push(...emit.gateways);\n allCallActivities.push(...emit.callActivities);\n allTemplateFlows.push(...emit.templateFlows);\n if (emit.dmn) allDmns.push(emit.dmn);\n emit.endsNeeded.forEach((e) => endsNeeded.add(e));\n });\n\n // 4. Outer chain — link each task's exit to the next task's entry\n const outerFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n\n if (emissions.length > 0) {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${emissions[0].emit.bpmnEntry}`,\n sourceRef: cfg.startEventId,\n targetRef: emissions[0].emit.bpmnEntry,\n conditionExpression: null,\n });\n\n for (let i = 0; i < emissions.length - 1; i += 1) {\n const cur = emissions[i].emit;\n const next = emissions[i + 1].emit;\n const condition =\n cur.outgoingConditions.success ??\n cur.outgoingConditions.pass ??\n cur.outgoingConditions.approved ??\n null;\n outerFlows.push({\n id: `${cur.bpmnExit}-to-${next.bpmnEntry}`,\n sourceRef: cur.bpmnExit,\n targetRef: next.bpmnEntry,\n conditionExpression: condition,\n });\n }\n\n const last = emissions[emissions.length - 1].emit;\n outerFlows.push({\n id: `${last.bpmnExit}-to-${cfg.endEventIds.success}`,\n sourceRef: last.bpmnExit,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n } else {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${cfg.endEventIds.success}`,\n sourceRef: cfg.startEventId,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n }\n\n // 5. End events\n const endEvent: Array<{ id: string; name: string; executionListener?: null }> = [\n {\n id: cfg.endEventIds.success,\n name: cfg.endEventNames.success,\n executionListener: null,\n },\n ...(endsNeeded.has(cfg.endEventIds.failure)\n ? [{ id: cfg.endEventIds.failure, name: cfg.endEventNames.failure }]\n : []),\n ...(endsNeeded.has(cfg.endEventIds.rejected)\n ? [{ id: cfg.endEventIds.rejected, name: cfg.endEventNames.rejected }]\n : []),\n ];\n\n // 6. Start event\n const startEvent: Record<string, unknown> = {\n id: cfg.startEventId,\n name: 'Start',\n ...(triggerType === 'event'\n ? {\n messageEventDefinition: {\n messageRef: `msg_${(eventType || 'EVENT').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n }\n : {}),\n };\n\n // 7. Final payload\n const json: Record<string, unknown> = {\n canvasState: {\n slots,\n branches: state?.branches ?? {},\n },\n bpmn: {\n customerId: `${context.customerKey}`,\n workflowCategory,\n sources,\n process: {\n name: context.workflowName,\n isExecutable: 'true',\n },\n startEvent,\n endEvent,\n sequenceFlows: [...outerFlows, ...allTemplateFlows],\n exclusiveGateways: allGateways,\n serviceTasks: allServiceTasks,\n callActivities: allCallActivities,\n },\n ...(triggerType === 'event'\n ? {\n message: {\n id: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n name: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n dmns: allDmns,\n }\n : {\n eventConfig: [\n {\n eventType,\n config: {\n type: eventType,\n ...((triggerSlot?.nodeData as { scheduler?: Record<string, unknown> })?.scheduler ?? {}),\n },\n },\n ],\n }),\n };\n\n return json;\n}\n"],"names":["DEFAULTS","NON_TASK_KINDS","isTaskSlot","slot","interpolate","tpl","ctx","m","k","resolveFieldRef","ref","from","key","value","_a","_b","_c","_e","_d","buildExtensionStringValue","field","source","shape","out","exclude","fd","getValueByPath","obj","path","acc","buildDmnRules","dmnSpec","pathPrefix","opMap","valuesField","toJuel","cond","op","lhs","rhs","entriesToExpression","entries","list","parts","logical","rules","ruleNum","pushRule","expression","outputValue","blocks","block","values","v","condCfg","fieldKey","conditions","fieldValue","buildDmn","o","emitTask","task","saveCtx","cfg","spec","interpCtx","serviceTasks","st","f","gatewayId","gateways","endsNeeded","templateFlows","target","callActivities","dmn","bpmnEntry","bpmnExit","outgoingConditions","branch","buildBackendPayload","opts","state","tasksByKey","context","config","slots","triggerSlot","s","eventType","triggerType","sourcesData","pickedSources","workflowCategory","sources","emissions","allServiceTasks","allGateways","allCallActivities","allTemplateFlows","allDmns","emit","e","outerFlows","i","cur","next","condition","last","endEvent","startEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"buildBackendPayload-BvrjW1uM.js","sources":["../src/payload/buildBackendPayload.ts"],"sourcesContent":["/**\n * buildBackendPayload — generic BPMN/DMN/canvasState emitter driven by each\n * task's `ui.bpmnEmit` block. Consumer ships per-task bpmnEmit specs from\n * the backend; the package handles the walk.\n *\n * Originally lived in IAM as `flowforgeStateToBackendJson`. Moved into the\n * package so every consumer gets the same emitter — and so DMN/filter/\n * approval fixes ship once, to everyone.\n *\n * Consumer injects:\n * - canvasState — `{ slots, branches }` from the canvas\n * - tasksByKey — `{ [descriptorType]: ApplicationTask }` lookup\n * - context — host-specific scalars (customerKey, workflowName)\n * - config — IAM-shaped defaults (path prefix, end-event ids,\n * trigger→category map, scheduler events)\n *\n * Returns a JSON object ready to POST to the backend.\n */\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\nexport type CanvasSlot = {\n id: string;\n kind?: string;\n descriptorType?: string;\n nodeData?: Record<string, unknown>;\n formData?: Record<string, unknown>;\n [key: string]: unknown;\n};\n\nexport type CanvasState = {\n slots?: CanvasSlot[];\n branches?: Record<string, unknown>;\n};\n\nexport interface FieldRef {\n from: 'literal' | 'task' | 'ctx' | 'slot' | 'formData';\n key?: string;\n value?: unknown;\n}\n\nexport interface ExtensionFieldSpec {\n name: string;\n source?: {\n type: 'literal' | 'json' | 'taskConfig' | 'formData';\n value?: unknown;\n shape?: Record<string, FieldRef>;\n passthrough?: boolean;\n exclude?: string[];\n key?: string;\n };\n}\n\nexport interface ServiceTaskSpec {\n idTemplate: string;\n name?: string;\n flowableClass?: string;\n extensionFields?: ExtensionFieldSpec[];\n}\n\nexport interface GatewaySpec {\n idTemplate: string;\n name?: string;\n}\n\nexport interface TemplateFlowSpec {\n from: string;\n to: string;\n idTemplate?: string;\n condition?: string | null;\n}\n\nexport interface DmnOutputSpec {\n id: string;\n label?: string;\n name: string;\n typeRef?: string;\n}\n\nexport interface DmnEmitSpec {\n tableName: string;\n inputExpr: string;\n hitPolicy?: string;\n outputs?: DmnOutputSpec[];\n operatorMap?: Record<string, string>;\n valuesField?: string;\n}\n\nexport interface BpmnEmitSpec {\n kind: 'linear' | 'gated' | 'filter' | 'approval';\n serviceTasks?: ServiceTaskSpec[];\n gateway?: GatewaySpec;\n templateFlows?: TemplateFlowSpec[];\n outgoingConditions?: Record<string, string>;\n dmnEmit?: DmnEmitSpec;\n callActivity?: Record<string, unknown>;\n}\n\nexport interface ApplicationTaskLike {\n name?: string;\n taskKey?: string;\n applicationUuid?: string;\n configuration?: unknown[];\n ui?: { bpmnEmit?: BpmnEmitSpec; [key: string]: unknown };\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadContext {\n customerKey: string;\n workflowName: string;\n /** Anything else the host wants exposed via `from: 'ctx', key: '...'`. */\n [key: string]: unknown;\n}\n\nexport interface BuildPayloadConfig {\n /**\n * Map of trigger eventType → workflowCategory string. Defaults to a small\n * IAM-shaped fallback; consumers should pass the full map they use.\n */\n triggerToCategory?: Record<string, string>;\n /** eventType values that should set `sources: ['SCHEDULER']` and skip the message block. */\n schedulerEventTypes?: string[];\n /** DMN LHS prefix for condition expressions (default IAM-style). */\n conditionPathPrefix?: string;\n /** Fallback workflowCategory when eventType isn't mapped. */\n defaultWorkflowCategory?: string;\n /** End-event ids — override per backend convention. */\n endEventIds?: { success: string; failure: string; rejected: string };\n /** Names rendered on end events. */\n endEventNames?: { success: string; failure: string; rejected: string };\n /** Start event id used in the outer chain. */\n startEventId?: string;\n}\n\nexport interface BuildPayloadOptions {\n state: CanvasState;\n tasksByKey: Record<string, ApplicationTaskLike>;\n context: BuildPayloadContext;\n config?: BuildPayloadConfig;\n}\n\n// ─── Defaults ──────────────────────────────────────────────────────────────\n\n// Package defaults are deliberately neutral — anything tenant- or\n// product-specific (trigger event types, default category, the DMN LHS\n// prefix) MUST come from the consumer's `config`. We only ship defaults\n// for engine-neutral BPMN scalars (start/end ids and end-event names).\nconst DEFAULTS: Required<BuildPayloadConfig> = {\n triggerToCategory: {},\n schedulerEventTypes: [],\n conditionPathPrefix: '',\n defaultWorkflowCategory: '',\n endEventIds: {\n success: 'endEventSuccess',\n failure: 'endEventFailure',\n rejected: 'endEventRejected',\n },\n endEventNames: {\n success: 'Success',\n failure: 'Failure',\n rejected: 'Rejected',\n },\n startEventId: 'startEvent',\n};\n\nconst NON_TASK_KINDS = new Set([\n 'start',\n 'end',\n 'triggerFixed',\n 'addTrigger',\n 'addStep',\n]);\nconst isTaskSlot = (slot: CanvasSlot): boolean =>\n !!slot && !NON_TASK_KINDS.has(String(slot.kind ?? ''));\n\n// ─── Helpers ───────────────────────────────────────────────────────────────\n\nfunction interpolate(tpl: string | null | undefined, ctx: Record<string, unknown>): string {\n if (tpl == null) return '';\n return String(tpl).replace(/\\$\\{(\\w+)\\}/g, (m, k) =>\n Object.prototype.hasOwnProperty.call(ctx, k) ? String(ctx[k]) : m\n );\n}\n\ninterface ResolveCtx {\n task: ApplicationTaskLike;\n slot: CanvasSlot;\n ctx: BuildPayloadContext;\n}\n\nfunction resolveFieldRef(ref: FieldRef | undefined, ctx: ResolveCtx): string {\n if (!ref || typeof ref !== 'object') return '';\n const { from, key, value } = ref;\n if (from === 'literal') return value === undefined ? '' : String(value);\n if (from === 'task') return String((ctx.task as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'ctx') return String((ctx.ctx as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'slot') return String((ctx.slot as Record<string, unknown>)?.[key ?? ''] ?? '');\n if (from === 'formData') return String(ctx.slot?.formData?.[key ?? ''] ?? '');\n return '';\n}\n\nfunction buildExtensionStringValue(field: ExtensionFieldSpec, ctx: ResolveCtx): string {\n const source = field?.source;\n if (!source) return '';\n if (source.type === 'literal') {\n return typeof source.value === 'string'\n ? source.value\n : JSON.stringify(source.value ?? '');\n }\n if (source.type === 'json' || source.type === 'taskConfig') {\n const shape = source.shape || {};\n const out: Record<string, string> = {};\n Object.keys(shape).forEach((k) => {\n out[k] = resolveFieldRef(shape[k], ctx);\n });\n return JSON.stringify(out);\n }\n if (source.type === 'formData') {\n if (source.passthrough) {\n const exclude = new Set(source.exclude || []);\n const out: Record<string, unknown> = {};\n const fd = ctx.slot?.formData ?? {};\n Object.keys(fd).forEach((k) => {\n if (!exclude.has(k)) out[k] = fd[k];\n });\n return JSON.stringify(out);\n }\n return String(ctx.slot?.formData?.[source.key ?? ''] ?? '');\n }\n return '';\n}\n\n/** Walk a dotted path against a plain object. Returns undefined on miss. */\nfunction getValueByPath(obj: unknown, path: string): unknown {\n if (!obj || typeof obj !== 'object' || !path) return undefined;\n return path.split('.').reduce<unknown>((acc, key) => {\n if (acc == null || typeof acc !== 'object') return undefined;\n return (acc as Record<string, unknown>)[key];\n }, obj);\n}\n\n// ─── DMN rule builder ──────────────────────────────────────────────────────\n\ninterface ConditionEntry {\n field?: string;\n fieldLabel?: string;\n key?: string;\n operator?: string;\n value?: string | number | boolean | null;\n connector?: 'and' | 'or';\n logicalOperator?: 'AND' | 'OR';\n}\n\nfunction buildDmnRules(\n dmnSpec: DmnEmitSpec,\n slot: CanvasSlot,\n pathPrefix: string\n): Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n}> {\n const opMap = dmnSpec.operatorMap || {};\n const valuesField = dmnSpec.valuesField || 'groups';\n\n const toJuel = (cond: ConditionEntry): string => {\n const op = opMap[String(cond?.operator ?? '')] ?? '==';\n const lhs = `${pathPrefix}.${cond?.key ?? cond?.field ?? ''}`;\n const rhs = `'${String(cond?.value ?? '')}'`;\n if (op.startsWith('.')) return `${lhs}${op}(${rhs})`;\n if (op.startsWith('!.')) return `!${lhs}${op.slice(1)}(${rhs})`;\n return `${lhs} ${op} ${rhs}`;\n };\n\n const entriesToExpression = (entries: ConditionEntry[] | undefined): string | null => {\n const list = Array.isArray(entries) ? entries : [];\n if (list.length === 0) return null;\n const parts = list.map(toJuel);\n const isOr = list[0]?.connector === 'or' || list[0]?.logicalOperator === 'OR';\n const logical = isOr ? '||' : '&&';\n return parts.join(` ${logical} `);\n };\n\n const rules: Array<{\n id: string;\n inputEntries: Array<{ id: string; text: string }>;\n outputEntries: Array<{ id: string; text: string }>;\n }> = [];\n let ruleNum = 1;\n const pushRule = (expression: string | null, outputValue: unknown) => {\n rules.push({\n id: `rule${ruleNum}`,\n inputEntries: [\n {\n id: `rule${ruleNum}InputEntry1`,\n text: expression ? `\\${(${expression})}` : '',\n },\n ],\n outputEntries: [\n {\n id: `rule${ruleNum}OutputEntry1`,\n text: `\"${outputValue}\"`,\n },\n ],\n });\n ruleNum += 1;\n };\n\n // Shape A — IAM-legacy groupBlocks[].\n const blocks = Array.isArray(slot?.formData?.groupBlocks)\n ? (slot.formData!.groupBlocks as Array<{\n conditions?: ConditionEntry[];\n [k: string]: unknown;\n }>)\n : [];\n if (blocks.length > 0) {\n blocks.forEach((block) => {\n const values = Array.isArray(block?.[valuesField])\n ? (block[valuesField] as unknown[])\n : [];\n const expression = entriesToExpression(block?.conditions);\n values.forEach((v) => pushRule(expression, v));\n });\n return rules;\n }\n\n // Shape B — FlowForm When-builder.\n const fd = (slot?.formData ?? {}) as Record<string, unknown>;\n // eslint-disable-next-line no-underscore-dangle\n const condCfg = (fd._conditionConfig ?? fd.conditionConfig) as\n | Record<string, ConditionEntry[]>\n | undefined;\n if (condCfg && typeof condCfg === 'object') {\n Object.keys(condCfg).forEach((fieldKey) => {\n const conditions = condCfg[fieldKey];\n const expression = entriesToExpression(conditions);\n // The conditionConfig key can be either a plain field name OR a dotted\n // formik path (e.g. `attributeMapping.rules.0.targetField`). Resolve\n // both shapes — first try direct, then walk the path.\n const fieldValue =\n Object.prototype.hasOwnProperty.call(fd, fieldKey)\n ? fd[fieldKey]\n : getValueByPath(fd, fieldKey);\n if (Array.isArray(fieldValue)) {\n fieldValue.forEach((v) => {\n const out =\n typeof v === 'object' && v !== null\n ? (v as { value?: unknown; label?: unknown }).value ??\n (v as { label?: unknown }).label ??\n v\n : v;\n pushRule(expression, out);\n });\n } else if (\n fieldValue !== undefined &&\n fieldValue !== null &&\n fieldValue !== ''\n ) {\n pushRule(expression, fieldValue);\n } else if (expression) {\n pushRule(expression, '');\n }\n });\n }\n return rules;\n}\n\nfunction buildDmn(dmnSpec: DmnEmitSpec, slot: CanvasSlot, pathPrefix: string) {\n return {\n mappings: [],\n name: dmnSpec.tableName,\n decision: {\n id: dmnSpec.tableName,\n name: dmnSpec.tableName,\n decisionTable: {\n id: `decisionTable_${dmnSpec.tableName}`,\n hitPolicy: dmnSpec.hitPolicy || 'FIRST',\n inputs: [\n {\n id: `input_${dmnSpec.tableName}`,\n inputExpression: {\n id: `inputExpr_${dmnSpec.tableName}`,\n typeRef: 'string',\n text: dmnSpec.inputExpr,\n },\n },\n ],\n outputs: (dmnSpec.outputs || []).map((o) => ({\n id: o.id,\n label: o.label,\n typeRef: o.typeRef || 'string',\n name: o.name,\n })),\n rules: buildDmnRules(dmnSpec, slot, pathPrefix),\n },\n },\n };\n}\n\n// ─── Task emitter ──────────────────────────────────────────────────────────\n\ninterface Emission {\n serviceTasks: unknown[];\n gateways: Array<{ id: string; name?: string }>;\n callActivities: unknown[];\n templateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }>;\n dmn: ReturnType<typeof buildDmn> | null;\n bpmnEntry: string;\n bpmnExit: string;\n outgoingConditions: Record<string, string>;\n endsNeeded: Set<string>;\n}\n\nfunction emitTask(\n slot: CanvasSlot,\n task: ApplicationTaskLike,\n saveCtx: BuildPayloadContext,\n cfg: Required<BuildPayloadConfig>\n): Emission {\n const spec = task?.ui?.bpmnEmit;\n if (!spec) {\n return {\n serviceTasks: [\n {\n id: slot.id,\n name: task?.name || slot.descriptorType,\n configuration: Array.isArray(task?.configuration) ? task.configuration : [],\n input: slot.formData || {},\n },\n ],\n gateways: [],\n callActivities: [],\n templateFlows: [],\n dmn: null,\n bpmnEntry: slot.id,\n bpmnExit: slot.id,\n outgoingConditions: {},\n endsNeeded: new Set(),\n };\n }\n\n const interpCtx: Record<string, unknown> = {\n id: slot.id,\n endFailure: cfg.endEventIds.failure,\n endRejected: cfg.endEventIds.rejected,\n endSuccess: cfg.endEventIds.success,\n };\n\n const ctx: ResolveCtx = { task, slot, ctx: saveCtx };\n\n const serviceTasks = (spec.serviceTasks || []).map((st) => ({\n id: interpolate(st.idTemplate, interpCtx),\n name: st.name,\n flowableClass: st.flowableClass,\n extensionElements: {\n fields: (st.extensionFields || []).map((f) => ({\n name: f.name,\n stringValue: buildExtensionStringValue(f, ctx),\n })),\n },\n }));\n\n let gatewayId: string | null = null;\n const gateways: Array<{ id: string; name?: string }> = [];\n if (spec.gateway) {\n gatewayId = interpolate(spec.gateway.idTemplate, interpCtx);\n interpCtx.gateway = gatewayId;\n gateways.push({ id: gatewayId, name: spec.gateway.name });\n }\n\n const endsNeeded = new Set<string>();\n const templateFlows = (spec.templateFlows || []).map((f) => {\n const source = interpolate(f.from, interpCtx);\n const target = interpolate(f.to, interpCtx);\n if (target === cfg.endEventIds.failure) endsNeeded.add(cfg.endEventIds.failure);\n if (target === cfg.endEventIds.rejected) endsNeeded.add(cfg.endEventIds.rejected);\n const id = f.idTemplate\n ? interpolate(f.idTemplate, interpCtx)\n : `${source}-to-${target}`;\n return {\n id,\n sourceRef: source,\n targetRef: target,\n conditionExpression: f.condition ? interpolate(f.condition, interpCtx) : null,\n };\n });\n\n const callActivities: unknown[] = [];\n const dmn = spec.dmnEmit ? buildDmn(spec.dmnEmit, slot, cfg.conditionPathPrefix) : null;\n\n const bpmnEntry = (serviceTasks[0] as { id?: string })?.id ?? slot.id;\n const bpmnExit =\n gatewayId ??\n (serviceTasks[serviceTasks.length - 1] as { id?: string })?.id ??\n slot.id;\n\n const outgoingConditions: Record<string, string> = {};\n Object.keys(spec.outgoingConditions || {}).forEach((branch) => {\n outgoingConditions[branch] = interpolate(\n spec.outgoingConditions![branch],\n interpCtx\n );\n });\n\n return {\n serviceTasks,\n gateways,\n callActivities,\n templateFlows,\n dmn,\n bpmnEntry,\n bpmnExit,\n outgoingConditions,\n endsNeeded,\n };\n}\n\n// ─── Main entry point ──────────────────────────────────────────────────────\n\n/**\n * Generate a backend-ready payload from canvas state + task definitions.\n *\n * @example\n * const payload = buildBackendPayload({\n * state: { slots, branches },\n * tasksByKey: { USER_CREATION: {...}, USER_GROUP_ASSIGNMENT: {...} },\n * context: { customerKey: '51995', workflowName: 'My WF' },\n * config: { triggerToCategory: { CUSTOM_TRIGGER: 'CUSTOM_CATEGORY' } },\n * });\n * await api.post('/process', payload);\n */\nexport function buildBackendPayload(opts: BuildPayloadOptions): Record<string, unknown> {\n const { state, tasksByKey, context, config } = opts;\n const cfg: Required<BuildPayloadConfig> = {\n ...DEFAULTS,\n ...(config ?? {}),\n triggerToCategory: { ...DEFAULTS.triggerToCategory, ...(config?.triggerToCategory ?? {}) },\n schedulerEventTypes: config?.schedulerEventTypes ?? DEFAULTS.schedulerEventTypes,\n endEventIds: { ...DEFAULTS.endEventIds, ...(config?.endEventIds ?? {}) },\n endEventNames: { ...DEFAULTS.endEventNames, ...(config?.endEventNames ?? {}) },\n };\n\n const slots = Array.isArray(state?.slots) ? state.slots! : [];\n\n // 1. Trigger metadata\n const triggerSlot = slots.find((s) => s.kind === 'triggerFixed');\n const eventType = (triggerSlot?.nodeData as { eventType?: string } | undefined)?.eventType;\n const triggerType =\n (triggerSlot?.nodeData as { type?: string } | undefined)?.type || 'event';\n const sourcesData = (triggerSlot?.nodeData as { sources?: unknown[] } | undefined)?.sources;\n const pickedSources = Array.isArray(sourcesData)\n ? sourcesData\n .map((s) =>\n typeof s === 'string'\n ? s\n : (s as { value?: string; key?: string })?.value ??\n (s as { value?: string; key?: string })?.key ??\n ''\n )\n .filter(Boolean)\n : [];\n const workflowCategory =\n cfg.triggerToCategory[eventType ?? ''] ?? cfg.defaultWorkflowCategory;\n const isSchedulerEvent =\n !!eventType && cfg.schedulerEventTypes.includes(eventType);\n const sources = isSchedulerEvent ? ['SCHEDULER'] : pickedSources;\n\n // 2. Walk each task slot through the emitter\n const taskSlots = slots.filter(isTaskSlot);\n const emissions = taskSlots.map((slot) => ({\n slot,\n emit: emitTask(slot, tasksByKey[slot.descriptorType ?? ''] ?? {}, context, cfg),\n }));\n\n // 3. Collect emitted parts\n const allServiceTasks: unknown[] = [];\n const allGateways: Array<{ id: string; name?: string }> = [];\n const allCallActivities: unknown[] = [];\n const allTemplateFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n const allDmns: unknown[] = [];\n const endsNeeded = new Set<string>();\n\n emissions.forEach(({ emit }) => {\n allServiceTasks.push(...emit.serviceTasks);\n allGateways.push(...emit.gateways);\n allCallActivities.push(...emit.callActivities);\n allTemplateFlows.push(...emit.templateFlows);\n if (emit.dmn) allDmns.push(emit.dmn);\n emit.endsNeeded.forEach((e) => endsNeeded.add(e));\n });\n\n // 4. Outer chain — link each task's exit to the next task's entry\n const outerFlows: Array<{\n id: string;\n sourceRef: string;\n targetRef: string;\n conditionExpression: string | null;\n }> = [];\n\n if (emissions.length > 0) {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${emissions[0].emit.bpmnEntry}`,\n sourceRef: cfg.startEventId,\n targetRef: emissions[0].emit.bpmnEntry,\n conditionExpression: null,\n });\n\n for (let i = 0; i < emissions.length - 1; i += 1) {\n const cur = emissions[i].emit;\n const next = emissions[i + 1].emit;\n const condition =\n cur.outgoingConditions.success ??\n cur.outgoingConditions.pass ??\n cur.outgoingConditions.approved ??\n null;\n outerFlows.push({\n id: `${cur.bpmnExit}-to-${next.bpmnEntry}`,\n sourceRef: cur.bpmnExit,\n targetRef: next.bpmnEntry,\n conditionExpression: condition,\n });\n }\n\n const last = emissions[emissions.length - 1].emit;\n outerFlows.push({\n id: `${last.bpmnExit}-to-${cfg.endEventIds.success}`,\n sourceRef: last.bpmnExit,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n } else {\n outerFlows.push({\n id: `${cfg.startEventId}-to-${cfg.endEventIds.success}`,\n sourceRef: cfg.startEventId,\n targetRef: cfg.endEventIds.success,\n conditionExpression: null,\n });\n }\n\n // 5. End events\n const endEvent: Array<{ id: string; name: string; executionListener?: null }> = [\n {\n id: cfg.endEventIds.success,\n name: cfg.endEventNames.success,\n executionListener: null,\n },\n ...(endsNeeded.has(cfg.endEventIds.failure)\n ? [{ id: cfg.endEventIds.failure, name: cfg.endEventNames.failure }]\n : []),\n ...(endsNeeded.has(cfg.endEventIds.rejected)\n ? [{ id: cfg.endEventIds.rejected, name: cfg.endEventNames.rejected }]\n : []),\n ];\n\n // 6. Start event\n const startEvent: Record<string, unknown> = {\n id: cfg.startEventId,\n name: 'Start',\n ...(triggerType === 'event'\n ? {\n messageEventDefinition: {\n messageRef: `msg_${(eventType || 'EVENT').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n }\n : {}),\n };\n\n // 7. Final payload\n const json: Record<string, unknown> = {\n canvasState: {\n slots,\n branches: state?.branches ?? {},\n },\n bpmn: {\n customerId: `${context.customerKey}`,\n workflowCategory,\n sources,\n process: {\n name: context.workflowName,\n isExecutable: 'true',\n },\n startEvent,\n endEvent,\n sequenceFlows: [...outerFlows, ...allTemplateFlows],\n exclusiveGateways: allGateways,\n serviceTasks: allServiceTasks,\n callActivities: allCallActivities,\n },\n ...(triggerType === 'event'\n ? {\n message: {\n id: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n name: `msg_${(eventType || 'event').toLowerCase()}_${\n sources.length > 0 ? sources.join('_').toLowerCase() : 'default'\n }_${context.customerKey}`,\n },\n dmns: allDmns,\n }\n : {\n eventConfig: [\n {\n eventType,\n config: {\n type: eventType,\n ...((triggerSlot?.nodeData as { scheduler?: Record<string, unknown> })?.scheduler ?? {}),\n },\n },\n ],\n }),\n };\n\n return json;\n}\n"],"names":["DEFAULTS","NON_TASK_KINDS","isTaskSlot","slot","interpolate","tpl","ctx","m","k","resolveFieldRef","ref","from","key","value","_a","_b","_c","_e","_d","buildExtensionStringValue","field","source","shape","out","exclude","fd","getValueByPath","obj","path","acc","buildDmnRules","dmnSpec","pathPrefix","opMap","valuesField","toJuel","cond","op","lhs","rhs","entriesToExpression","entries","list","parts","logical","rules","ruleNum","pushRule","expression","outputValue","blocks","block","values","v","condCfg","fieldKey","conditions","fieldValue","buildDmn","o","emitTask","task","saveCtx","cfg","spec","interpCtx","serviceTasks","st","f","gatewayId","gateways","endsNeeded","templateFlows","target","callActivities","dmn","bpmnEntry","bpmnExit","outgoingConditions","branch","buildBackendPayload","opts","state","tasksByKey","context","config","slots","triggerSlot","s","eventType","triggerType","sourcesData","pickedSources","workflowCategory","sources","emissions","allServiceTasks","allGateways","allCallActivities","allTemplateFlows","allDmns","emit","e","outerFlows","i","cur","next","condition","last","endEvent","startEvent"],"mappings":"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"}
|
package/dist/canvas.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("./WorkflowExecutionHistory-BHb6-2lt.js"),l=require("./messages-O9Tw_XXR.js"),r=require("./bpmn-CcuE2X_Q.js"),e=require("./GatewayBranchEdge-Ukfp7i1Q.js");exports.FlowForgeCanvas=o.FlowForgeCanvas;exports.FlowForgeHeader=o.FlowForgeHeader;exports.SubWorkflowPreviewDrawer=o.SubWorkflowPreviewDrawer;exports.WorkflowCanvas=o.FlowForgeCanvas;exports.WorkflowExecutionHistory=o.WorkflowExecutionHistory;exports.WorkflowTemplateLibrary=o.WorkflowTemplateLibrary;exports.defaultFlowForgeMessages=l.defaultFlowForgeMessages;exports.loadWorkflowFromBpmn=r.loadWorkflowFromBpmn;exports.saveWorkflowToBpmn=r.saveWorkflowToBpmn;exports.ActionNode=e.ActionNode;exports.ApprovalNode=e.ApprovalNode;exports.EdgeWithPlusLabel=e.EdgeWithPlusLabel;exports.EndNode=e.EndNode;exports.FilterNode=e.FilterNode;exports.RestApiNode=e.RestApiNode;exports.StartNode=e.StartNode;exports.TriggerNode=e.TriggerNode;exports.WebhookTriggerNode=e.WebhookTriggerNode;exports.builtInNodeTypes=e.builtInNodeTypes;
|
|
2
2
|
//# sourceMappingURL=canvas.cjs.map
|
package/dist/canvas.d.ts
CHANGED
|
@@ -7,8 +7,6 @@ import { NodeProps } from 'reactflow';
|
|
|
7
7
|
import { NodeTypes } from 'reactflow';
|
|
8
8
|
import { ReactNode } from 'react';
|
|
9
9
|
|
|
10
|
-
export declare const accessRequestSkeleton: WorkflowState;
|
|
11
|
-
|
|
12
10
|
export declare const ActionNode: ({ id, data }: NodeProps) => JSX_2.Element;
|
|
13
11
|
|
|
14
12
|
export declare interface AddStepContext {
|
|
@@ -159,12 +157,6 @@ declare interface ConditionFieldDef {
|
|
|
159
157
|
value: string;
|
|
160
158
|
label: string;
|
|
161
159
|
}>;
|
|
162
|
-
/**
|
|
163
|
-
* Declarative dynamic options — same shape as `FieldDescriptor.optionsSource`.
|
|
164
|
-
* `dependsOn` resolves against the OUTER form values (not the condition entry),
|
|
165
|
-
* so a condition column can depend on another top-level field (e.g. attributes
|
|
166
|
-
* scoped by `applicationUuid`).
|
|
167
|
-
*/
|
|
168
160
|
optionsSource?: OptionsSource;
|
|
169
161
|
/** When true, renders a FormulaInput chip editor instead of a plain <input> */
|
|
170
162
|
formula?: boolean;
|
|
@@ -189,12 +181,6 @@ declare interface ConditionFieldDef_2 {
|
|
|
189
181
|
value: string;
|
|
190
182
|
label: string;
|
|
191
183
|
}>;
|
|
192
|
-
/**
|
|
193
|
-
* Declarative dynamic options — same shape as `FieldDescriptor.optionsSource`.
|
|
194
|
-
* `dependsOn` resolves against the OUTER form values (not the condition entry),
|
|
195
|
-
* so a condition column can depend on another top-level field (e.g. attributes
|
|
196
|
-
* scoped by `applicationUuid`).
|
|
197
|
-
*/
|
|
198
184
|
optionsSource?: OptionsSource_2;
|
|
199
185
|
/** When true, renders a FormulaInput chip editor instead of a plain <input> */
|
|
200
186
|
formula?: boolean;
|
|
@@ -822,12 +808,9 @@ declare class NodeTypeRegistry {
|
|
|
822
808
|
list(): NodeDescriptor_2[];
|
|
823
809
|
}
|
|
824
810
|
|
|
825
|
-
export declare const offboardingSkeleton: WorkflowState;
|
|
826
|
-
|
|
827
811
|
/** A resolver function — transport-agnostic. */
|
|
828
812
|
declare type OptionsResolver = (deps: Record<string, unknown>, ctx: OptionsResolverContext) => Promise<OptionsResolverResult>;
|
|
829
813
|
|
|
830
|
-
/** Args passed to a resolver per call — cursor for pagination, input for typeahead. */
|
|
831
814
|
declare interface OptionsResolverContext {
|
|
832
815
|
cursor?: unknown;
|
|
833
816
|
input?: string;
|
|
@@ -849,61 +832,21 @@ declare interface OptionsResolverResult {
|
|
|
849
832
|
nextCursor?: unknown;
|
|
850
833
|
}
|
|
851
834
|
|
|
852
|
-
/**
|
|
853
|
-
* Map of named resolvers — the host registers these once on the canvas / form.
|
|
854
|
-
* Keys are the `optionsSource.id` strings referenced by field descriptors.
|
|
855
|
-
*/
|
|
856
835
|
declare type OptionsResolvers = Record<string, OptionsResolver>;
|
|
857
836
|
|
|
858
837
|
declare interface OptionsSource {
|
|
859
838
|
/** Resolver id — must match a key in the host's `optionsResolvers` map. */
|
|
860
839
|
id: string;
|
|
861
|
-
/**
|
|
862
|
-
* Other field values this resolver depends on. Two shapes accepted:
|
|
863
|
-
* - `string[]` — pass through verbatim ({ fieldA: values.fieldA, ... })
|
|
864
|
-
* - `Record<arg, fieldName>` — rename parent values for the resolver
|
|
865
|
-
*
|
|
866
|
-
* When any dep value changes, the cache key for this field invalidates
|
|
867
|
-
* and the resolver re-fires.
|
|
868
|
-
*/
|
|
869
840
|
dependsOn?: string[] | Record<string, string>;
|
|
870
|
-
/**
|
|
871
|
-
* Static params merged into the deps object for every call. Use for
|
|
872
|
-
* "URL template via the generic resolver" style:
|
|
873
|
-
* { id: 'default', params: { url: '/groups', valueKey: 'uuid' } }
|
|
874
|
-
*/
|
|
875
841
|
params?: Record<string, unknown>;
|
|
876
|
-
/**
|
|
877
|
-
* Lookup individual options by value (edit-mode hydration). When set,
|
|
878
|
-
* the field calls this resolver with `{ ids: [...] }` to render labels
|
|
879
|
-
* for already-selected values that aren't in the current page.
|
|
880
|
-
*/
|
|
881
842
|
resolveValueId?: string;
|
|
882
843
|
}
|
|
883
844
|
|
|
884
845
|
declare interface OptionsSource_2 {
|
|
885
846
|
/** Resolver id — must match a key in the host's `optionsResolvers` map. */
|
|
886
847
|
id: string;
|
|
887
|
-
/**
|
|
888
|
-
* Other field values this resolver depends on. Two shapes accepted:
|
|
889
|
-
* - `string[]` — pass through verbatim ({ fieldA: values.fieldA, ... })
|
|
890
|
-
* - `Record<arg, fieldName>` — rename parent values for the resolver
|
|
891
|
-
*
|
|
892
|
-
* When any dep value changes, the cache key for this field invalidates
|
|
893
|
-
* and the resolver re-fires.
|
|
894
|
-
*/
|
|
895
848
|
dependsOn?: string[] | Record<string, string>;
|
|
896
|
-
/**
|
|
897
|
-
* Static params merged into the deps object for every call. Use for
|
|
898
|
-
* "URL template via the generic resolver" style:
|
|
899
|
-
* { id: 'default', params: { url: '/groups', valueKey: 'uuid' } }
|
|
900
|
-
*/
|
|
901
849
|
params?: Record<string, unknown>;
|
|
902
|
-
/**
|
|
903
|
-
* Lookup individual options by value (edit-mode hydration). When set,
|
|
904
|
-
* the field calls this resolver with `{ ids: [...] }` to render labels
|
|
905
|
-
* for already-selected values that aren't in the current page.
|
|
906
|
-
*/
|
|
907
850
|
resolveValueId?: string;
|
|
908
851
|
}
|
|
909
852
|
|
|
@@ -972,10 +915,6 @@ declare class TemplateRegistry {
|
|
|
972
915
|
|
|
973
916
|
export declare const TriggerNode: ({ data }: NodeProps) => JSX_2.Element;
|
|
974
917
|
|
|
975
|
-
export declare const userOnboardingSkeleton: WorkflowState;
|
|
976
|
-
|
|
977
|
-
export declare const webhookIntegrationSkeleton: WorkflowState;
|
|
978
|
-
|
|
979
918
|
export declare const WebhookTriggerNode: ({ data }: NodeProps) => JSX_2.Element;
|
|
980
919
|
|
|
981
920
|
/** @deprecated Use FlowForgeCanvasProps */
|
package/dist/canvas.js
CHANGED
|
@@ -1,30 +1,26 @@
|
|
|
1
|
-
import { F as a, a as
|
|
2
|
-
import { d as
|
|
3
|
-
import { l as
|
|
4
|
-
import { A as
|
|
1
|
+
import { F as a, a as r, S as s, F as l, W as d, b as t } from "./WorkflowExecutionHistory-B0OiFCyi.js";
|
|
2
|
+
import { d as i } from "./messages-CO299wPN.js";
|
|
3
|
+
import { l as w, s as F } from "./bpmn-CtfWDaOY.js";
|
|
4
|
+
import { A as g, b as N, E as m, c as n, F as b, R as k, S as T, T as u, W as v, e as x } from "./GatewayBranchEdge-BWz43Sat.js";
|
|
5
5
|
export {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
6
|
+
g as ActionNode,
|
|
7
|
+
N as ApprovalNode,
|
|
8
|
+
m as EdgeWithPlusLabel,
|
|
9
|
+
n as EndNode,
|
|
10
|
+
b as FilterNode,
|
|
11
11
|
a as FlowForgeCanvas,
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
r as FlowForgeHeader,
|
|
13
|
+
k as RestApiNode,
|
|
14
|
+
T as StartNode,
|
|
15
|
+
s as SubWorkflowPreviewDrawer,
|
|
16
|
+
u as TriggerNode,
|
|
17
|
+
v as WebhookTriggerNode,
|
|
18
18
|
l as WorkflowCanvas,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
F as
|
|
25
|
-
i as offboardingSkeleton,
|
|
26
|
-
b as saveWorkflowToBpmn,
|
|
27
|
-
f as userOnboardingSkeleton,
|
|
28
|
-
w as webhookIntegrationSkeleton
|
|
19
|
+
d as WorkflowExecutionHistory,
|
|
20
|
+
t as WorkflowTemplateLibrary,
|
|
21
|
+
x as builtInNodeTypes,
|
|
22
|
+
i as defaultFlowForgeMessages,
|
|
23
|
+
w as loadWorkflowFromBpmn,
|
|
24
|
+
F as saveWorkflowToBpmn
|
|
29
25
|
};
|
|
30
26
|
//# sourceMappingURL=canvas.js.map
|
package/dist/core.d.ts
CHANGED
|
@@ -190,12 +190,6 @@ declare interface ConditionFieldDef {
|
|
|
190
190
|
value: string;
|
|
191
191
|
label: string;
|
|
192
192
|
}>;
|
|
193
|
-
/**
|
|
194
|
-
* Declarative dynamic options — same shape as `FieldDescriptor.optionsSource`.
|
|
195
|
-
* `dependsOn` resolves against the OUTER form values (not the condition entry),
|
|
196
|
-
* so a condition column can depend on another top-level field (e.g. attributes
|
|
197
|
-
* scoped by `applicationUuid`).
|
|
198
|
-
*/
|
|
199
193
|
optionsSource?: OptionsSource;
|
|
200
194
|
/** When true, renders a FormulaInput chip editor instead of a plain <input> */
|
|
201
195
|
formula?: boolean;
|
|
@@ -488,26 +482,8 @@ export declare const notificationDescriptor: NodeDescriptor;
|
|
|
488
482
|
declare interface OptionsSource {
|
|
489
483
|
/** Resolver id — must match a key in the host's `optionsResolvers` map. */
|
|
490
484
|
id: string;
|
|
491
|
-
/**
|
|
492
|
-
* Other field values this resolver depends on. Two shapes accepted:
|
|
493
|
-
* - `string[]` — pass through verbatim ({ fieldA: values.fieldA, ... })
|
|
494
|
-
* - `Record<arg, fieldName>` — rename parent values for the resolver
|
|
495
|
-
*
|
|
496
|
-
* When any dep value changes, the cache key for this field invalidates
|
|
497
|
-
* and the resolver re-fires.
|
|
498
|
-
*/
|
|
499
485
|
dependsOn?: string[] | Record<string, string>;
|
|
500
|
-
/**
|
|
501
|
-
* Static params merged into the deps object for every call. Use for
|
|
502
|
-
* "URL template via the generic resolver" style:
|
|
503
|
-
* { id: 'default', params: { url: '/groups', valueKey: 'uuid' } }
|
|
504
|
-
*/
|
|
505
486
|
params?: Record<string, unknown>;
|
|
506
|
-
/**
|
|
507
|
-
* Lookup individual options by value (edit-mode hydration). When set,
|
|
508
|
-
* the field calls this resolver with `{ ids: [...] }` to render labels
|
|
509
|
-
* for already-selected values that aren't in the current page.
|
|
510
|
-
*/
|
|
511
487
|
resolveValueId?: string;
|
|
512
488
|
}
|
|
513
489
|
|
package/dist/defaultUi.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./GatewayBranchEdge-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./GatewayBranchEdge-Ukfp7i1Q.js");exports.ActionNode=e.ActionNode;exports.AddTriggerNode=e.AddTriggerNode;exports.ApprovalNode=e.ApprovalNode;exports.DelayNode=e.DelayNode;exports.EdgeWithPlusLabel=e.EdgeWithPlusLabel;exports.EndNode=e.EndNode;exports.FilterNode=e.FilterNode;exports.GatewayBranchEdge=e.GatewayBranchEdge;exports.LabelPlusEdge=e.LabelPlusEdge;exports.NotificationNode=e.NotificationNode;exports.PlainEdge=e.PlainEdge;exports.PlusEdge=e.PlusEdge;exports.StartNode=e.StartNode;exports.TriggerNode=e.TriggerNode;exports.builtInNodeTypes=e.builtInNodeTypes;
|
|
2
2
|
//# sourceMappingURL=defaultUi.cjs.map
|
package/dist/defaultUi.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as d, a as s, b as o, D as N, E as i, c as l, F as r, G as t, L as g, N as E, P as n, d as P, S as b, T as c, e as p } from "./GatewayBranchEdge-
|
|
1
|
+
import { A as d, a as s, b as o, D as N, E as i, c as l, F as r, G as t, L as g, N as E, P as n, d as P, S as b, T as c, e as p } from "./GatewayBranchEdge-BWz43Sat.js";
|
|
2
2
|
export {
|
|
3
3
|
d as ActionNode,
|
|
4
4
|
s as AddTriggerNode,
|