@bonsae/nrg 0.20.1 → 0.21.1

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/types/server.d.ts CHANGED
@@ -491,18 +491,26 @@ type InferOutputs<T> = T extends readonly TSchema[] ? {
491
491
  } : any;
492
492
  declare function NodeRef<T extends new (...args: any[]) => any>(nodeClass: T, options?: NrgSchemaOptions): TNodeRef<InstanceType<T>>;
493
493
  declare function TypedInput$1<T = unknown>(options?: NrgSchemaOptions): TTypedInput<T>;
494
- declare function ReturnProperty(options?: NrgSchemaOptions & {
495
- default?: string;
496
- }): import("@sinclair/typebox").TString;
494
+ declare function OutputReturnProperties(options?: NrgSchemaOptions & {
495
+ default?: Record<number, string>;
496
+ }): import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TString>;
497
+ declare function OutputContextModes(options?: NrgSchemaOptions & {
498
+ default?: Record<number, "carry" | "trace" | "reset">;
499
+ }): import("@sinclair/typebox").TRecord<import("@sinclair/typebox").TNumber, import("@sinclair/typebox").TUnion<[
500
+ import("@sinclair/typebox").TLiteral<"carry">,
501
+ import("@sinclair/typebox").TLiteral<"trace">,
502
+ import("@sinclair/typebox").TLiteral<"reset">
503
+ ]>>;
497
504
  /**
498
505
  * Extended TypeBox type builder with NRG-specific schema types.
499
- * Includes all standard TypeBox types plus {@link NodeRef}, {@link TypedInput}
500
- * and {@link ReturnProperty}.
506
+ * Includes all standard TypeBox types plus {@link NodeRef}, {@link TypedInput},
507
+ * {@link OutputReturnProperties} and {@link OutputContextModes}.
501
508
  */
502
509
  export declare const SchemaType: import("@sinclair/typebox").JavaScriptTypeBuilder & {
503
510
  NodeRef: typeof NodeRef;
504
511
  TypedInput: typeof TypedInput$1;
505
- ReturnProperty: typeof ReturnProperty;
512
+ OutputReturnProperties: typeof OutputReturnProperties;
513
+ OutputContextModes: typeof OutputContextModes;
506
514
  };
507
515
  /**
508
516
  * Creates a validated object schema from a set of properties. Automatically
@@ -616,27 +624,32 @@ declare abstract class Node$1<TConfig = any, TCredentials = any, TSettings = any
616
624
  }
617
625
  /**
618
626
  * Controls how an outgoing message carries the incoming message's context:
619
- * - `"nest"` (default): keep all incoming keys and push the full input under
620
- * `input`, so the prior message including any value the result overwrites
621
- * is always recoverable (`msg.input.output`). The `input` chain
622
- * accumulates one frame per node, forming a provenance trail visible in the
623
- * debug panel.
624
- * - `"carry"`: keep all incoming keys (including any upstream `input`) but do
625
- * not record this node context flows through without growing.
627
+ * - `"carry"` (default): keep all incoming keys including any upstream
628
+ * `input` but do not record this node, so context flows through without the
629
+ * provenance chain growing. The safe default for loops and long chains.
630
+ * - `"trace"`: keep all incoming keys and also push the full input under
631
+ * `input`, so the prior message — including any value the result overwrites —
632
+ * stays recoverable (`msg.input.output`). The chain accumulates one frame per
633
+ * node, a provenance trail visible in the debug panel; opt in for linear
634
+ * flows that want full lineage.
626
635
  * - `"reset"`: drop all inherited context; the outgoing message is only the
627
636
  * result at the return key.
628
637
  */
629
- export type ContextMode = "nest" | "carry" | "reset";
638
+ export type ContextMode = "carry" | "trace" | "reset";
630
639
  /**
631
640
  * Base class for nodes that process messages. Provides input/output handling,
632
641
  * schema validation, status updates, and emit port management.
633
642
  *
634
643
  * Every node has a return key (`"output"` by default): the value passed to
635
- * `send()` is merged into the incoming message at that key and the full prior
636
- * message is kept under `input` (`{ ...msg, [returnKey]: result, input: msg }`),
637
- * so upstream properties propagate and the provenance chain is recoverable.
638
- * Declaring `returnProperty` in the `configSchema` only lets the flow author
639
- * override the key in the editor it does not change that a return key always
644
+ * `send()` is merged into the incoming message at that key
645
+ * (`{ ...msg, [returnKey]: result }`), so upstream properties propagate. By
646
+ * default the context is carried without growing; declaring
647
+ * `outputContextModes` in the `configSchema` lets the flow author pick `trace`
648
+ * (keep the full prior message under `input` as a recoverable provenance chain)
649
+ * or `reset` per port. The return key, output validation, and context mode all
650
+ * resolve per output port; declaring `outputReturnProperties` in the
651
+ * `configSchema` sets per-port default keys and lets the flow author pick a key
652
+ * other than `output` per port — it does not change that a return key always
640
653
  * exists. `this.send(x)` always means "x is the result", never "x is the whole
641
654
  * message".
642
655
  *
@@ -648,7 +661,7 @@ export type ContextMode = "nest" | "carry" | "reset";
648
661
  * static readonly color = "#ffffff" as const;
649
662
  *
650
663
  * async input(msg: Input) {
651
- * // sends { ...msg, output: <result>, input: msg }
664
+ * // sends { ...msg, output: <result> }
652
665
  * this.send(msg.output.toUpperCase());
653
666
  * }
654
667
  * }
@@ -669,7 +682,7 @@ export declare abstract class IONode<TConfig = any, TCredentials = any, TInput =
669
682
  constructor(RED: RED, node: NodeRedNode, config: IONodeConfig<TConfig>, credentials: IONodeCredentials<TCredentials>);
670
683
  [WIRE_HANDLERS](nodeRedNode: NodeRedNode, createdPromise: Promise<void>): void;
671
684
  input(msg: TInput): void | Promise<void>;
672
- send(msg: TOutput, contextMode?: ContextMode): void;
685
+ send(msg: TOutput): void;
673
686
  get baseOutputs(): number;
674
687
  get totalOutputs(): number;
675
688
  /**
@@ -682,7 +695,7 @@ export declare abstract class IONode<TConfig = any, TCredentials = any, TInput =
682
695
  * throw an error or call `this.error()` for the error port, and the complete
683
696
  * port is sent automatically on successful input processing.
684
697
  */
685
- sendToPort<P extends (TOutput extends Record<string, Record<string, any>> ? keyof TOutput & string : never) | number>(port: P, msg: P extends keyof TOutput ? TOutput[P] : unknown, contextMode?: ContextMode): void;
698
+ sendToPort<P extends (TOutput extends Record<string, Record<string, any>> ? keyof TOutput & string : never) | number>(port: P, msg: P extends keyof TOutput ? TOutput[P] : unknown): void;
686
699
  status(status: IONodeStatus): void;
687
700
  error(message: string, msg?: any): void;
688
701
  updateWires(wires: string[][]): void;
@@ -696,8 +709,12 @@ export declare abstract class IONode<TConfig = any, TCredentials = any, TInput =
696
709
  type IONodeContextScope = NodeContextScope;
697
710
  type IONodeConfig<TConfig = any> = NodeConfig<TConfig> & Static<typeof IONodeConfigSchema> & {
698
711
  validateInput?: boolean;
699
- validateOutput?: boolean;
700
- returnProperty?: string;
712
+ /** Per-port output-validation flags, keyed by base-output port index. */
713
+ validateOutputs?: Record<number, boolean>;
714
+ /** Per-port return properties, keyed by base-output port index. */
715
+ outputReturnProperties?: Record<number, string>;
716
+ /** Per-port context modes, keyed by base-output port index. */
717
+ outputContextModes?: Record<number, "carry" | "trace" | "reset">;
701
718
  };
702
719
  type IONodeCredentials<TCredentials = any> = NodeCredentials<TCredentials>;
703
720
  type IONodeStatus = {
@@ -68,14 +68,20 @@ export interface NodeRedNode {
68
68
  outputs?: number;
69
69
  /** injected when the node has an inputSchema */
70
70
  validateInput?: boolean;
71
- /** injected when the node has an outputsSchema */
72
- validateOutput?: boolean;
73
- /** present when the node's configSchema declares SchemaType.ReturnProperty() */
74
- returnProperty?: string;
75
71
  /** built-in port toggles, present when declared in the configSchema */
76
72
  errorPort?: boolean;
77
73
  completePort?: boolean;
78
74
  statusPort?: boolean;
75
+ /**
76
+ * Per-port output settings, indexed by base-output port. `validateOutputs` is
77
+ * injected (empty) when the node has an outputsSchema; `outputReturnProperties`
78
+ * and `outputContextModes` are author-declared (SchemaType.*) — present only
79
+ * when the node opts into per-port return keys / context modes. Read at
80
+ * runtime by IONode.
81
+ */
82
+ validateOutputs?: Record<number, boolean>;
83
+ outputContextModes?: Record<number, "carry" | "trace" | "reset">;
84
+ outputReturnProperties?: Record<number, string>;
79
85
  [key: string]: any;
80
86
  }
81
87
  export interface NodeDefinition {
@@ -170,6 +176,14 @@ export interface NodeCredentials {
170
176
  export interface NodeFeatures {
171
177
  hasInputSchema: boolean;
172
178
  hasOutputSchema: boolean;
179
+ /**
180
+ * Base output ports (excludes built-in error/complete/status), in port-index
181
+ * order. Drives the per-port context-mode rows in the Outputs subsection.
182
+ */
183
+ outputPorts: {
184
+ index: number;
185
+ label: string;
186
+ }[];
173
187
  }
174
188
  /** Client-side representation of a TypedInput field: the raw value string and its type selector. */
175
189
  export interface TypedInputValue {
@@ -80,14 +80,20 @@ interface NodeRedNode {
80
80
  outputs?: number;
81
81
  /** injected when the node has an inputSchema */
82
82
  validateInput?: boolean;
83
- /** injected when the node has an outputsSchema */
84
- validateOutput?: boolean;
85
- /** present when the node's configSchema declares SchemaType.ReturnProperty() */
86
- returnProperty?: string;
87
83
  /** built-in port toggles, present when declared in the configSchema */
88
84
  errorPort?: boolean;
89
85
  completePort?: boolean;
90
86
  statusPort?: boolean;
87
+ /**
88
+ * Per-port output settings, indexed by base-output port. `validateOutputs` is
89
+ * injected (empty) when the node has an outputsSchema; `outputReturnProperties`
90
+ * and `outputContextModes` are author-declared (SchemaType.*) — present only
91
+ * when the node opts into per-port return keys / context modes. Read at
92
+ * runtime by IONode.
93
+ */
94
+ validateOutputs?: Record<number, boolean>;
95
+ outputContextModes?: Record<number, "carry" | "trace" | "reset">;
96
+ outputReturnProperties?: Record<number, string>;
91
97
  [key: string]: any;
92
98
  }
93
99
  interface JsonPropertySchema extends JsonSchemaObjectExtensions {
@@ -155,14 +155,20 @@ interface NodeRedNode {
155
155
  outputs?: number;
156
156
  /** injected when the node has an inputSchema */
157
157
  validateInput?: boolean;
158
- /** injected when the node has an outputsSchema */
159
- validateOutput?: boolean;
160
- /** present when the node's configSchema declares SchemaType.ReturnProperty() */
161
- returnProperty?: string;
162
158
  /** built-in port toggles, present when declared in the configSchema */
163
159
  errorPort?: boolean;
164
160
  completePort?: boolean;
165
161
  statusPort?: boolean;
162
+ /**
163
+ * Per-port output settings, indexed by base-output port. `validateOutputs` is
164
+ * injected (empty) when the node has an outputsSchema; `outputReturnProperties`
165
+ * and `outputContextModes` are author-declared (SchemaType.*) — present only
166
+ * when the node opts into per-port return keys / context modes. Read at
167
+ * runtime by IONode.
168
+ */
169
+ validateOutputs?: Record<number, boolean>;
170
+ outputContextModes?: Record<number, "carry" | "trace" | "reset">;
171
+ outputReturnProperties?: Record<number, string>;
166
172
  [key: string]: any;
167
173
  }
168
174
  interface TypedInputValue {
package/vite/index.js CHANGED
@@ -2038,113 +2038,353 @@ function localesGenerator(options) {
2038
2038
  ];
2039
2039
  const frameworkLabels = {
2040
2040
  "en-US": {
2041
- configs: { name: "Name", returnProperty: "Return key" },
2041
+ configs: { name: "Name" },
2042
2042
  toggles: {
2043
- validateInput: "Validate Input",
2044
- validateOutput: "Validate Output",
2043
+ validateInput: "Validate",
2045
2044
  errorPort: "Error Port",
2046
2045
  completePort: "Complete Port",
2047
- statusPort: "Status Port",
2048
- returnPropertyOverride: "Override return prop key"
2046
+ statusPort: "Status Port"
2047
+ },
2048
+ sections: {
2049
+ portsSettings: "Ports Settings",
2050
+ input: "Input",
2051
+ outputs: "Outputs",
2052
+ lifecyclePorts: "Lifecycle Ports"
2053
+ },
2054
+ outputs: {
2055
+ port: "Port",
2056
+ label: "Label",
2057
+ validate: "Validate",
2058
+ returnProperty: "Return Property",
2059
+ contextMode: "Context Mode"
2060
+ },
2061
+ contextModes: {
2062
+ modes: {
2063
+ carry: "carry",
2064
+ trace: "trace",
2065
+ reset: "reset"
2066
+ }
2067
+ },
2068
+ help: {
2069
+ validateInput: "Validate incoming messages against the input schema before input() runs.",
2070
+ outputs: "Per-port output settings. Validate checks the sent value against the port's schema; Context Mode controls how the incoming message is carried.",
2071
+ lifecyclePorts: "Optional extra output ports that fire on error, on completion, and on every status change.",
2072
+ learnMore: "Learn more"
2049
2073
  }
2050
2074
  },
2051
2075
  de: {
2052
- configs: { name: "Name", returnProperty: "R\xFCckgabe-Schl\xFCssel" },
2076
+ configs: { name: "Name" },
2053
2077
  toggles: {
2054
- validateInput: "Eingabe validieren",
2055
- validateOutput: "Ausgabe validieren",
2078
+ validateInput: "Validieren",
2056
2079
  errorPort: "Fehler-Port",
2057
2080
  completePort: "Abschluss-Port",
2058
- statusPort: "Status-Port",
2059
- returnPropertyOverride: "R\xFCckgabe-Schl\xFCssel \xFCberschreiben"
2081
+ statusPort: "Status-Port"
2082
+ },
2083
+ sections: {
2084
+ portsSettings: "Port-Einstellungen",
2085
+ input: "Eingang",
2086
+ outputs: "Ausg\xE4nge",
2087
+ lifecyclePorts: "Lebenszyklus-Ports"
2088
+ },
2089
+ outputs: {
2090
+ port: "Port",
2091
+ label: "Bezeichnung",
2092
+ validate: "Validieren",
2093
+ returnProperty: "R\xFCckgabe-Eigenschaft",
2094
+ contextMode: "Kontextmodus"
2095
+ },
2096
+ contextModes: {
2097
+ modes: {
2098
+ carry: "carry",
2099
+ trace: "trace",
2100
+ reset: "reset"
2101
+ }
2102
+ },
2103
+ help: {
2104
+ validateInput: "Eingehende Nachrichten vor dem Ausf\xFChren von input() gegen das Eingabe-Schema validieren.",
2105
+ outputs: "Ausgabe-Einstellungen pro Port. Validieren pr\xFCft den gesendeten Wert gegen das Schema des Ports; Kontextmodus steuert, wie die eingehende Nachricht \xFCbertragen wird.",
2106
+ lifecyclePorts: "Optionale zus\xE4tzliche Ausg\xE4nge, die bei Fehler, Abschluss und jeder Status\xE4nderung ausl\xF6sen.",
2107
+ learnMore: "Mehr erfahren"
2060
2108
  }
2061
2109
  },
2062
2110
  "es-ES": {
2063
- configs: { name: "Nombre", returnProperty: "Clave de retorno" },
2111
+ configs: { name: "Nombre" },
2064
2112
  toggles: {
2065
- validateInput: "Validar entrada",
2066
- validateOutput: "Validar salida",
2113
+ validateInput: "Validar",
2067
2114
  errorPort: "Puerto de error",
2068
2115
  completePort: "Puerto de completado",
2069
- statusPort: "Puerto de estado",
2070
- returnPropertyOverride: "Sobrescribir clave de retorno"
2116
+ statusPort: "Puerto de estado"
2117
+ },
2118
+ sections: {
2119
+ portsSettings: "Configuraci\xF3n de puertos",
2120
+ input: "Entrada",
2121
+ outputs: "Salidas",
2122
+ lifecyclePorts: "Puertos de ciclo de vida"
2123
+ },
2124
+ outputs: {
2125
+ port: "Puerto",
2126
+ label: "Etiqueta",
2127
+ validate: "Validar",
2128
+ returnProperty: "Propiedad de retorno",
2129
+ contextMode: "Modo de contexto"
2130
+ },
2131
+ contextModes: {
2132
+ modes: {
2133
+ carry: "carry",
2134
+ trace: "trace",
2135
+ reset: "reset"
2136
+ }
2137
+ },
2138
+ help: {
2139
+ validateInput: "Valida los mensajes entrantes con el esquema de entrada antes de ejecutar input().",
2140
+ outputs: "Ajustes de salida por puerto. Validar comprueba el valor enviado con el esquema del puerto; Modo de contexto controla c\xF3mo se transporta el mensaje entrante.",
2141
+ lifecyclePorts: "Puertos de salida adicionales opcionales que se activan en error, al completar y en cada cambio de estado.",
2142
+ learnMore: "M\xE1s informaci\xF3n"
2071
2143
  }
2072
2144
  },
2073
2145
  fr: {
2074
- configs: { name: "Nom", returnProperty: "Cl\xE9 de retour" },
2146
+ configs: { name: "Nom" },
2075
2147
  toggles: {
2076
- validateInput: "Valider l'entr\xE9e",
2077
- validateOutput: "Valider la sortie",
2148
+ validateInput: "Valider",
2078
2149
  errorPort: "Port d'erreur",
2079
2150
  completePort: "Port de compl\xE9tion",
2080
- statusPort: "Port de statut",
2081
- returnPropertyOverride: "Remplacer la cl\xE9 de retour"
2151
+ statusPort: "Port de statut"
2152
+ },
2153
+ sections: {
2154
+ portsSettings: "Param\xE8tres des ports",
2155
+ input: "Entr\xE9e",
2156
+ outputs: "Sorties",
2157
+ lifecyclePorts: "Ports de cycle de vie"
2158
+ },
2159
+ outputs: {
2160
+ port: "Port",
2161
+ label: "Libell\xE9",
2162
+ validate: "Valider",
2163
+ returnProperty: "Propri\xE9t\xE9 de retour",
2164
+ contextMode: "Mode de contexte"
2165
+ },
2166
+ contextModes: {
2167
+ modes: {
2168
+ carry: "carry",
2169
+ trace: "trace",
2170
+ reset: "reset"
2171
+ }
2172
+ },
2173
+ help: {
2174
+ validateInput: "Valide les messages entrants avec le sch\xE9ma d'entr\xE9e avant l'ex\xE9cution de input().",
2175
+ outputs: "R\xE9glages de sortie par port. Valider v\xE9rifie la valeur envoy\xE9e avec le sch\xE9ma du port ; Mode de contexte contr\xF4le la fa\xE7on dont le message entrant est transmis.",
2176
+ lifecyclePorts: "Ports de sortie suppl\xE9mentaires optionnels d\xE9clench\xE9s en cas d'erreur, \xE0 la fin et \xE0 chaque changement de statut.",
2177
+ learnMore: "En savoir plus"
2082
2178
  }
2083
2179
  },
2084
2180
  ko: {
2085
- configs: { name: "\uC774\uB984", returnProperty: "\uBC18\uD658 \uD0A4" },
2181
+ configs: { name: "\uC774\uB984" },
2086
2182
  toggles: {
2087
- validateInput: "\uC785\uB825 \uAC80\uC99D",
2088
- validateOutput: "\uCD9C\uB825 \uAC80\uC99D",
2183
+ validateInput: "\uAC80\uC99D",
2089
2184
  errorPort: "\uC624\uB958 \uD3EC\uD2B8",
2090
2185
  completePort: "\uC644\uB8CC \uD3EC\uD2B8",
2091
- statusPort: "\uC0C1\uD0DC \uD3EC\uD2B8",
2092
- returnPropertyOverride: "\uBC18\uD658 \uD0A4 \uC7AC\uC815\uC758"
2186
+ statusPort: "\uC0C1\uD0DC \uD3EC\uD2B8"
2187
+ },
2188
+ sections: {
2189
+ portsSettings: "\uD3EC\uD2B8 \uC124\uC815",
2190
+ input: "\uC785\uB825",
2191
+ outputs: "\uCD9C\uB825",
2192
+ lifecyclePorts: "\uC218\uBA85 \uC8FC\uAE30 \uD3EC\uD2B8"
2193
+ },
2194
+ outputs: {
2195
+ port: "\uD3EC\uD2B8",
2196
+ label: "\uB808\uC774\uBE14",
2197
+ validate: "\uAC80\uC99D",
2198
+ returnProperty: "\uBC18\uD658 \uC18D\uC131",
2199
+ contextMode: "\uCEE8\uD14D\uC2A4\uD2B8 \uBAA8\uB4DC"
2200
+ },
2201
+ contextModes: {
2202
+ modes: {
2203
+ carry: "carry",
2204
+ trace: "trace",
2205
+ reset: "reset"
2206
+ }
2207
+ },
2208
+ help: {
2209
+ validateInput: "input() \uC2E4\uD589 \uC804\uC5D0 \uB4E4\uC5B4\uC624\uB294 \uBA54\uC2DC\uC9C0\uB97C \uC785\uB825 \uC2A4\uD0A4\uB9C8\uB85C \uAC80\uC99D\uD569\uB2C8\uB2E4.",
2210
+ outputs: "\uD3EC\uD2B8\uBCC4 \uCD9C\uB825 \uC124\uC815. \uAC80\uC99D\uC740 \uC804\uC1A1 \uAC12\uC744 \uD3EC\uD2B8 \uC2A4\uD0A4\uB9C8\uB85C \uD655\uC778\uD558\uACE0, \uCEE8\uD14D\uC2A4\uD2B8 \uBAA8\uB4DC\uB294 \uB4E4\uC5B4\uC628 \uBA54\uC2DC\uC9C0\uB97C \uC804\uB2EC\uD558\uB294 \uBC29\uC2DD\uC744 \uC81C\uC5B4\uD569\uB2C8\uB2E4.",
2211
+ lifecyclePorts: "\uC624\uB958, \uC644\uB8CC, \uBAA8\uB4E0 \uC0C1\uD0DC \uBCC0\uACBD \uC2DC \uBC1C\uC0DD\uD558\uB294 \uC120\uD0DD\uC801 \uCD94\uAC00 \uCD9C\uB825 \uD3EC\uD2B8\uC785\uB2C8\uB2E4.",
2212
+ learnMore: "\uC790\uC138\uD788 \uBCF4\uAE30"
2093
2213
  }
2094
2214
  },
2095
2215
  "pt-BR": {
2096
- configs: { name: "Nome", returnProperty: "Chave de retorno" },
2216
+ configs: { name: "Nome" },
2097
2217
  toggles: {
2098
- validateInput: "Validar Entrada",
2099
- validateOutput: "Validar Sa\xEDda",
2218
+ validateInput: "Validar",
2100
2219
  errorPort: "Porta de Erro",
2101
2220
  completePort: "Porta de Conclus\xE3o",
2102
- statusPort: "Porta de Status",
2103
- returnPropertyOverride: "Sobrescrever chave de retorno"
2221
+ statusPort: "Porta de Status"
2222
+ },
2223
+ sections: {
2224
+ portsSettings: "Configura\xE7\xF5es de portas",
2225
+ input: "Entrada",
2226
+ outputs: "Sa\xEDdas",
2227
+ lifecyclePorts: "Portas de ciclo de vida"
2228
+ },
2229
+ outputs: {
2230
+ port: "Porta",
2231
+ label: "R\xF3tulo",
2232
+ validate: "Validar",
2233
+ returnProperty: "Propriedade de retorno",
2234
+ contextMode: "Modo de contexto"
2235
+ },
2236
+ contextModes: {
2237
+ modes: {
2238
+ carry: "carry",
2239
+ trace: "trace",
2240
+ reset: "reset"
2241
+ }
2242
+ },
2243
+ help: {
2244
+ validateInput: "Valida as mensagens recebidas com o esquema de entrada antes de input() executar.",
2245
+ outputs: "Configura\xE7\xF5es de sa\xEDda por porta. Validar verifica o valor enviado com o esquema da porta; Modo de contexto controla como a mensagem recebida \xE9 transportada.",
2246
+ lifecyclePorts: "Portas de sa\xEDda extras opcionais que disparam em erro, na conclus\xE3o e a cada mudan\xE7a de status.",
2247
+ learnMore: "Saiba mais"
2104
2248
  }
2105
2249
  },
2106
2250
  ru: {
2107
- configs: { name: "\u0418\u043C\u044F", returnProperty: "\u041A\u043B\u044E\u0447 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430" },
2251
+ configs: { name: "\u0418\u043C\u044F" },
2108
2252
  toggles: {
2109
- validateInput: "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0432\u0445\u043E\u0434",
2110
- validateOutput: "\u041F\u0440\u043E\u0432\u0435\u0440\u0438\u0442\u044C \u0432\u044B\u0445\u043E\u0434",
2253
+ validateInput: "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C",
2111
2254
  errorPort: "\u041F\u043E\u0440\u0442 \u043E\u0448\u0438\u0431\u043A\u0438",
2112
2255
  completePort: "\u041F\u043E\u0440\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u044F",
2113
- statusPort: "\u041F\u043E\u0440\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430",
2114
- returnPropertyOverride: "\u041F\u0435\u0440\u0435\u043E\u043F\u0440\u0435\u0434\u0435\u043B\u0438\u0442\u044C \u043A\u043B\u044E\u0447 \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430"
2256
+ statusPort: "\u041F\u043E\u0440\u0442 \u0441\u0442\u0430\u0442\u0443\u0441\u0430"
2257
+ },
2258
+ sections: {
2259
+ portsSettings: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043F\u043E\u0440\u0442\u043E\u0432",
2260
+ input: "\u0412\u0445\u043E\u0434",
2261
+ outputs: "\u0412\u044B\u0445\u043E\u0434\u044B",
2262
+ lifecyclePorts: "\u041F\u043E\u0440\u0442\u044B \u0436\u0438\u0437\u043D\u0435\u043D\u043D\u043E\u0433\u043E \u0446\u0438\u043A\u043B\u0430"
2263
+ },
2264
+ outputs: {
2265
+ port: "\u041F\u043E\u0440\u0442",
2266
+ label: "\u041C\u0435\u0442\u043A\u0430",
2267
+ validate: "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C",
2268
+ returnProperty: "\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u043E \u0432\u043E\u0437\u0432\u0440\u0430\u0442\u0430",
2269
+ contextMode: "\u0420\u0435\u0436\u0438\u043C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430"
2270
+ },
2271
+ contextModes: {
2272
+ modes: {
2273
+ carry: "carry",
2274
+ trace: "trace",
2275
+ reset: "reset"
2276
+ }
2277
+ },
2278
+ help: {
2279
+ validateInput: "\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C \u0432\u0445\u043E\u0434\u044F\u0449\u0438\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u044F \u043F\u043E \u0441\u0445\u0435\u043C\u0435 \u0432\u0432\u043E\u0434\u0430 \u043F\u0435\u0440\u0435\u0434 \u0432\u044B\u0437\u043E\u0432\u043E\u043C input().",
2280
+ outputs: "\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0432\u044B\u0432\u043E\u0434\u0430 \u0434\u043B\u044F \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u043F\u043E\u0440\u0442\u0430. \xAB\u041F\u0440\u043E\u0432\u0435\u0440\u044F\u0442\u044C\xBB \u0441\u0432\u0435\u0440\u044F\u0435\u0442 \u043E\u0442\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043D\u043E\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u0435 \u0441\u043E \u0441\u0445\u0435\u043C\u043E\u0439 \u043F\u043E\u0440\u0442\u0430; \xAB\u0420\u0435\u0436\u0438\u043C \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442\u0430\xBB \u0443\u043F\u0440\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u0435\u043C, \u043A\u0430\u043A \u043F\u0435\u0440\u0435\u043D\u043E\u0441\u0438\u0442\u0441\u044F \u0432\u0445\u043E\u0434\u044F\u0449\u0435\u0435 \u0441\u043E\u043E\u0431\u0449\u0435\u043D\u0438\u0435.",
2281
+ lifecyclePorts: "\u0414\u043E\u043F\u043E\u043B\u043D\u0438\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u043D\u0435\u043E\u0431\u044F\u0437\u0430\u0442\u0435\u043B\u044C\u043D\u044B\u0435 \u0432\u044B\u0445\u043E\u0434\u043D\u044B\u0435 \u043F\u043E\u0440\u0442\u044B, \u0441\u0440\u0430\u0431\u0430\u0442\u044B\u0432\u0430\u044E\u0449\u0438\u0435 \u043F\u0440\u0438 \u043E\u0448\u0438\u0431\u043A\u0435, \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u0438\u0438 \u0438 \u043A\u0430\u0436\u0434\u043E\u043C \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0438 \u0441\u0442\u0430\u0442\u0443\u0441\u0430.",
2282
+ learnMore: "\u041F\u043E\u0434\u0440\u043E\u0431\u043D\u0435\u0435"
2115
2283
  }
2116
2284
  },
2117
2285
  ja: {
2118
- configs: { name: "\u540D\u524D", returnProperty: "\u623B\u308A\u30AD\u30FC" },
2286
+ configs: { name: "\u540D\u524D" },
2119
2287
  toggles: {
2120
- validateInput: "\u5165\u529B\u691C\u8A3C",
2121
- validateOutput: "\u51FA\u529B\u691C\u8A3C",
2288
+ validateInput: "\u691C\u8A3C",
2122
2289
  errorPort: "\u30A8\u30E9\u30FC\u30DD\u30FC\u30C8",
2123
2290
  completePort: "\u5B8C\u4E86\u30DD\u30FC\u30C8",
2124
- statusPort: "\u30B9\u30C6\u30FC\u30BF\u30B9\u30DD\u30FC\u30C8",
2125
- returnPropertyOverride: "\u623B\u308A\u30AD\u30FC\u3092\u4E0A\u66F8\u304D"
2291
+ statusPort: "\u30B9\u30C6\u30FC\u30BF\u30B9\u30DD\u30FC\u30C8"
2292
+ },
2293
+ sections: {
2294
+ portsSettings: "\u30DD\u30FC\u30C8\u8A2D\u5B9A",
2295
+ input: "\u5165\u529B",
2296
+ outputs: "\u51FA\u529B",
2297
+ lifecyclePorts: "\u30E9\u30A4\u30D5\u30B5\u30A4\u30AF\u30EB\u30DD\u30FC\u30C8"
2298
+ },
2299
+ outputs: {
2300
+ port: "\u30DD\u30FC\u30C8",
2301
+ label: "\u30E9\u30D9\u30EB",
2302
+ validate: "\u691C\u8A3C",
2303
+ returnProperty: "\u623B\u308A\u30D7\u30ED\u30D1\u30C6\u30A3",
2304
+ contextMode: "\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30E2\u30FC\u30C9"
2305
+ },
2306
+ contextModes: {
2307
+ modes: {
2308
+ carry: "carry",
2309
+ trace: "trace",
2310
+ reset: "reset"
2311
+ }
2312
+ },
2313
+ help: {
2314
+ validateInput: "input() \u306E\u5B9F\u884C\u524D\u306B\u3001\u53D7\u4FE1\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u30B9\u30AD\u30FC\u30DE\u3067\u691C\u8A3C\u3057\u307E\u3059\u3002",
2315
+ outputs: "\u30DD\u30FC\u30C8\u3054\u3068\u306E\u51FA\u529B\u8A2D\u5B9A\u3002\u691C\u8A3C\u306F\u9001\u4FE1\u5024\u3092\u30DD\u30FC\u30C8\u306E\u30B9\u30AD\u30FC\u30DE\u3067\u78BA\u8A8D\u3057\u3001\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30E2\u30FC\u30C9\u306F\u53D7\u4FE1\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u5F15\u304D\u7D99\u304E\u65B9\u3092\u5236\u5FA1\u3057\u307E\u3059\u3002",
2316
+ lifecyclePorts: "\u30A8\u30E9\u30FC\u6642\u30FB\u5B8C\u4E86\u6642\u30FB\u30B9\u30C6\u30FC\u30BF\u30B9\u5909\u66F4\u3054\u3068\u306B\u767A\u706B\u3059\u308B\u4EFB\u610F\u306E\u8FFD\u52A0\u51FA\u529B\u30DD\u30FC\u30C8\u3002",
2317
+ learnMore: "\u8A73\u7D30"
2126
2318
  }
2127
2319
  },
2128
2320
  "zh-CN": {
2129
- configs: { name: "\u540D\u79F0", returnProperty: "\u8FD4\u56DE\u952E" },
2321
+ configs: { name: "\u540D\u79F0" },
2130
2322
  toggles: {
2131
- validateInput: "\u9A8C\u8BC1\u8F93\u5165",
2132
- validateOutput: "\u9A8C\u8BC1\u8F93\u51FA",
2323
+ validateInput: "\u9A8C\u8BC1",
2133
2324
  errorPort: "\u9519\u8BEF\u7AEF\u53E3",
2134
2325
  completePort: "\u5B8C\u6210\u7AEF\u53E3",
2135
- statusPort: "\u72B6\u6001\u7AEF\u53E3",
2136
- returnPropertyOverride: "\u8986\u76D6\u8FD4\u56DE\u952E"
2326
+ statusPort: "\u72B6\u6001\u7AEF\u53E3"
2327
+ },
2328
+ sections: {
2329
+ portsSettings: "\u7AEF\u53E3\u8BBE\u7F6E",
2330
+ input: "\u8F93\u5165",
2331
+ outputs: "\u8F93\u51FA",
2332
+ lifecyclePorts: "\u751F\u547D\u5468\u671F\u7AEF\u53E3"
2333
+ },
2334
+ outputs: {
2335
+ port: "\u7AEF\u53E3",
2336
+ label: "\u6807\u7B7E",
2337
+ validate: "\u9A8C\u8BC1",
2338
+ returnProperty: "\u8FD4\u56DE\u5C5E\u6027",
2339
+ contextMode: "\u4E0A\u4E0B\u6587\u6A21\u5F0F"
2340
+ },
2341
+ contextModes: {
2342
+ modes: {
2343
+ carry: "carry",
2344
+ trace: "trace",
2345
+ reset: "reset"
2346
+ }
2347
+ },
2348
+ help: {
2349
+ validateInput: "\u5728 input() \u8FD0\u884C\u524D\uFF0C\u6839\u636E\u8F93\u5165\u6A21\u5F0F\u6821\u9A8C\u4F20\u5165\u6D88\u606F\u3002",
2350
+ outputs: "\u6309\u7AEF\u53E3\u7684\u8F93\u51FA\u8BBE\u7F6E\u3002\u9A8C\u8BC1\u6839\u636E\u7AEF\u53E3\u6A21\u5F0F\u6821\u9A8C\u53D1\u9001\u7684\u503C\uFF1B\u4E0A\u4E0B\u6587\u6A21\u5F0F\u63A7\u5236\u5982\u4F55\u643A\u5E26\u4F20\u5165\u6D88\u606F\u3002",
2351
+ lifecyclePorts: "\u53EF\u9009\u7684\u989D\u5916\u8F93\u51FA\u7AEF\u53E3\uFF0C\u5728\u51FA\u9519\u3001\u5B8C\u6210\u4EE5\u53CA\u6BCF\u6B21\u72B6\u6001\u53D8\u5316\u65F6\u89E6\u53D1\u3002",
2352
+ learnMore: "\u4E86\u89E3\u66F4\u591A"
2137
2353
  }
2138
2354
  },
2139
2355
  "zh-TW": {
2140
- configs: { name: "\u540D\u7A31", returnProperty: "\u8FD4\u56DE\u9375" },
2356
+ configs: { name: "\u540D\u7A31" },
2141
2357
  toggles: {
2142
- validateInput: "\u9A57\u8B49\u8F38\u5165",
2143
- validateOutput: "\u9A57\u8B49\u8F38\u51FA",
2358
+ validateInput: "\u9A57\u8B49",
2144
2359
  errorPort: "\u932F\u8AA4\u7AEF\u53E3",
2145
2360
  completePort: "\u5B8C\u6210\u7AEF\u53E3",
2146
- statusPort: "\u72C0\u614B\u7AEF\u53E3",
2147
- returnPropertyOverride: "\u8986\u84CB\u8FD4\u56DE\u9375"
2361
+ statusPort: "\u72C0\u614B\u7AEF\u53E3"
2362
+ },
2363
+ sections: {
2364
+ portsSettings: "\u7AEF\u53E3\u8A2D\u5B9A",
2365
+ input: "\u8F38\u5165",
2366
+ outputs: "\u8F38\u51FA",
2367
+ lifecyclePorts: "\u751F\u547D\u9031\u671F\u7AEF\u53E3"
2368
+ },
2369
+ outputs: {
2370
+ port: "\u7AEF\u53E3",
2371
+ label: "\u6A19\u7C64",
2372
+ validate: "\u9A57\u8B49",
2373
+ returnProperty: "\u8FD4\u56DE\u5C6C\u6027",
2374
+ contextMode: "\u5167\u5BB9\u6A21\u5F0F"
2375
+ },
2376
+ contextModes: {
2377
+ modes: {
2378
+ carry: "carry",
2379
+ trace: "trace",
2380
+ reset: "reset"
2381
+ }
2382
+ },
2383
+ help: {
2384
+ validateInput: "\u5728 input() \u57F7\u884C\u524D\uFF0C\u4F9D\u8F38\u5165\u7D50\u69CB\u63CF\u8FF0\u9A57\u8B49\u50B3\u5165\u8A0A\u606F\u3002",
2385
+ outputs: "\u4F9D\u9023\u63A5\u57E0\u7684\u8F38\u51FA\u8A2D\u5B9A\u3002\u9A57\u8B49\u4F9D\u9023\u63A5\u57E0\u7D50\u69CB\u63CF\u8FF0\u6AA2\u67E5\u9001\u51FA\u7684\u503C\uFF1B\u5167\u5BB9\u6A21\u5F0F\u63A7\u5236\u5982\u4F55\u651C\u5E36\u50B3\u5165\u8A0A\u606F\u3002",
2386
+ lifecyclePorts: "\u53EF\u9078\u7684\u984D\u5916\u8F38\u51FA\u9023\u63A5\u57E0\uFF0C\u5728\u767C\u751F\u932F\u8AA4\u3001\u5B8C\u6210\u4EE5\u53CA\u6BCF\u6B21\u72C0\u614B\u8B8A\u66F4\u6642\u89F8\u767C\u3002",
2387
+ learnMore: "\u77AD\u89E3\u66F4\u591A"
2148
2388
  }
2149
2389
  }
2150
2390
  };
@@ -2351,7 +2591,7 @@ function nodeDefinitionsInliner(serverOutDir, entryPath, iconsDir, componentsDir
2351
2591
  defaults.validateInput = { required: false, value: false };
2352
2592
  }
2353
2593
  if (defaults && outputsSchema) {
2354
- defaults.validateOutput = { required: false, value: false };
2594
+ defaults.validateOutputs = { required: false, value: {} };
2355
2595
  }
2356
2596
  const credentials = getCredentialsFromSchema(credentialsSchema);
2357
2597
  _definitions[type] = {