@uipath/apollo-react 7.2.1 → 7.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/dist/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.d.ts +3 -0
  2. package/dist/canvas/components/Guardrails/__fixtures__/classifier-questions.fixtures.d.ts.map +1 -0
  3. package/dist/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.d.ts +2 -0
  4. package/dist/canvas/components/Guardrails/__fixtures__/definitions-wire.fixtures.d.ts.map +1 -1
  5. package/dist/canvas/components/Guardrails/__fixtures__/host-copy-baselines.d.ts.map +1 -1
  6. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.cjs +220 -0
  7. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.d.ts +13 -0
  8. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.d.ts.map +1 -0
  9. package/dist/canvas/components/Guardrails/classifier-custom-questions-editor.js +186 -0
  10. package/dist/canvas/components/Guardrails/classifier-question-picker.cjs +316 -0
  11. package/dist/canvas/components/Guardrails/classifier-question-picker.d.ts +15 -0
  12. package/dist/canvas/components/Guardrails/classifier-question-picker.d.ts.map +1 -0
  13. package/dist/canvas/components/Guardrails/classifier-question-picker.js +282 -0
  14. package/dist/canvas/components/Guardrails/classifier-utils.cjs +139 -0
  15. package/dist/canvas/components/Guardrails/classifier-utils.d.ts +25 -0
  16. package/dist/canvas/components/Guardrails/classifier-utils.d.ts.map +1 -0
  17. package/dist/canvas/components/Guardrails/classifier-utils.js +87 -0
  18. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.cjs +98 -0
  19. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.d.ts +9 -0
  20. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.d.ts.map +1 -0
  21. package/dist/canvas/components/Guardrails/components/classifier-threshold-slider.js +64 -0
  22. package/dist/canvas/components/Guardrails/components/parameter-label.d.ts +1 -1
  23. package/dist/canvas/components/Guardrails/components/parameter-label.d.ts.map +1 -1
  24. package/dist/canvas/components/Guardrails/definitions-copy.cjs +66 -1
  25. package/dist/canvas/components/Guardrails/definitions-copy.d.ts +1 -0
  26. package/dist/canvas/components/Guardrails/definitions-copy.d.ts.map +1 -1
  27. package/dist/canvas/components/Guardrails/definitions-copy.js +66 -1
  28. package/dist/canvas/components/Guardrails/definitions-parse.cjs +66 -1
  29. package/dist/canvas/components/Guardrails/definitions-parse.d.ts +11 -1
  30. package/dist/canvas/components/Guardrails/definitions-parse.d.ts.map +1 -1
  31. package/dist/canvas/components/Guardrails/definitions-parse.js +63 -1
  32. package/dist/canvas/components/Guardrails/definitions-wire.d.ts +11 -0
  33. package/dist/canvas/components/Guardrails/definitions-wire.d.ts.map +1 -1
  34. package/dist/canvas/components/Guardrails/guardrail-builder.cjs +12 -4
  35. package/dist/canvas/components/Guardrails/guardrail-builder.d.ts.map +1 -1
  36. package/dist/canvas/components/Guardrails/guardrail-builder.js +12 -4
  37. package/dist/canvas/components/Guardrails/guardrail-validator-form.cjs +4 -1
  38. package/dist/canvas/components/Guardrails/guardrail-validator-form.d.ts.map +1 -1
  39. package/dist/canvas/components/Guardrails/guardrail-validator-form.js +4 -1
  40. package/dist/canvas/components/Guardrails/i18n.cjs +181 -3
  41. package/dist/canvas/components/Guardrails/i18n.d.ts +39 -0
  42. package/dist/canvas/components/Guardrails/i18n.d.ts.map +1 -1
  43. package/dist/canvas/components/Guardrails/i18n.js +168 -2
  44. package/dist/canvas/components/Guardrails/index.cjs +54 -4
  45. package/dist/canvas/components/Guardrails/index.d.ts +14 -3
  46. package/dist/canvas/components/Guardrails/index.d.ts.map +1 -1
  47. package/dist/canvas/components/Guardrails/index.js +7 -2
  48. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.cjs +136 -0
  49. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.d.ts +18 -0
  50. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.d.ts.map +1 -0
  51. package/dist/canvas/components/Guardrails/use-classifier-guardrail-parameters.js +102 -0
  52. package/dist/canvas/components/Guardrails/use-classifier-questions.cjs +97 -0
  53. package/dist/canvas/components/Guardrails/use-classifier-questions.d.ts +34 -0
  54. package/dist/canvas/components/Guardrails/use-classifier-questions.d.ts.map +1 -0
  55. package/dist/canvas/components/Guardrails/use-classifier-questions.js +60 -0
  56. package/dist/canvas/components/Guardrails/use-guardrail-definitions.cjs +8 -81
  57. package/dist/canvas/components/Guardrails/use-guardrail-definitions.d.ts +2 -8
  58. package/dist/canvas/components/Guardrails/use-guardrail-definitions.d.ts.map +1 -1
  59. package/dist/canvas/components/Guardrails/use-guardrail-definitions.js +9 -82
  60. package/dist/canvas/components/Guardrails/use-guardrails-request.cjs +133 -0
  61. package/dist/canvas/components/Guardrails/use-guardrails-request.d.ts +23 -0
  62. package/dist/canvas/components/Guardrails/use-guardrails-request.d.ts.map +1 -0
  63. package/dist/canvas/components/Guardrails/use-guardrails-request.js +99 -0
  64. package/dist/canvas/components/Guardrails/utils.cjs +4 -2
  65. package/dist/canvas/components/Guardrails/utils.d.ts +4 -1
  66. package/dist/canvas/components/Guardrails/utils.d.ts.map +1 -1
  67. package/dist/canvas/components/Guardrails/utils.js +4 -2
  68. package/dist/canvas/locales/en.cjs +1 -1
  69. package/dist/canvas/locales/en.d.ts.map +1 -1
  70. package/dist/canvas/locales/en.js +1 -1
  71. package/dist/canvas/styles/tailwind.canvas.css +1 -1
  72. package/dist/chat/styles/tailwind.chat.css +1 -1
  73. package/package.json +2 -2
@@ -1,97 +1,24 @@
1
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
1
+ import { useMemo } from "react";
2
2
  import { useGuardrailDefinitionCopy } from "./definitions-copy.js";
3
3
  import { enrichGuardrailDefinitions } from "./definitions-enrich.js";
4
4
  import { parseGuardrailDefinitions } from "./definitions-parse.js";
5
+ import { useGuardrailsRequest } from "./use-guardrails-request.js";
5
6
  const GUARDRAIL_DEFINITIONS_PATH = '/api/execution/guardrails/definitions';
6
7
  const EMPTY_RESULT = {
7
8
  definitions: [],
8
9
  invalid: []
9
10
  };
10
- const NOTHING_SETTLED = {
11
- key: 'none',
12
- result: EMPTY_RESULT,
13
- error: null
14
- };
15
11
  function useGuardrailDefinitions(ctx, options = {}) {
16
12
  const { definitions: provided, hiddenValidators, copy: copyOverride, enabled: enabledOption = true } = options;
17
13
  const linguiCopy = useGuardrailDefinitionCopy();
18
14
  const copy = copyOverride ?? linguiCopy;
19
- const requestKey = null === ctx ? '' : JSON.stringify({
20
- baseUrl: ctx.baseUrl,
21
- token: ctx.token,
22
- tenantId: ctx.tenantId,
23
- accountId: ctx.accountId,
24
- headers: ctx.headers
15
+ const { data: fetched, loading, error, refetch } = useGuardrailsRequest(ctx, {
16
+ path: GUARDRAIL_DEFINITIONS_PATH,
17
+ endpointName: 'Guardrail definitions',
18
+ parse: parseGuardrailDefinitions,
19
+ empty: EMPTY_RESULT,
20
+ enabled: enabledOption && void 0 === provided
25
21
  });
26
- const request = useMemo(()=>'' === requestKey ? null : JSON.parse(requestKey), [
27
- requestKey
28
- ]);
29
- const fetchRef = useRef(ctx?.fetch);
30
- fetchRef.current = ctx?.fetch;
31
- const enabled = enabledOption && void 0 === provided && null !== request;
32
- const [settled, setSettled] = useState(NOTHING_SETTLED);
33
- const [inFlight, setInFlight] = useState(false);
34
- const abortRef = useRef(null);
35
- const isCurrent = enabled && settled.key === requestKey;
36
- const fetched = isCurrent ? settled.result : EMPTY_RESULT;
37
- const error = isCurrent ? settled.error : null;
38
- const loading = enabled && (inFlight || !isCurrent);
39
- const load = useCallback(async ()=>{
40
- if (!enabled || null === request) return;
41
- abortRef.current?.abort();
42
- const controller = new AbortController();
43
- abortRef.current = controller;
44
- const key = requestKey;
45
- setInFlight(true);
46
- const base = (request.baseUrl ?? '').replace(/\/$/, '');
47
- const headers = {
48
- Accept: 'application/json',
49
- 'X-UiPath-Internal-TenantId': request.tenantId
50
- };
51
- if (request.token) headers.Authorization = `Bearer ${request.token}`;
52
- if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
53
- Object.assign(headers, request.headers);
54
- const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
55
- try {
56
- const response = await doFetch(`${base}${GUARDRAIL_DEFINITIONS_PATH}`, {
57
- headers,
58
- signal: controller.signal
59
- });
60
- if (!response.ok) throw new Error(`Guardrail definitions API ${response.status} ${response.statusText}`);
61
- const payload = await response.json();
62
- if (!controller.signal.aborted) setSettled({
63
- key,
64
- result: parseGuardrailDefinitions(payload),
65
- error: null
66
- });
67
- } catch (err) {
68
- if (err?.name === 'AbortError') return;
69
- if (!controller.signal.aborted) setSettled((prev)=>({
70
- key,
71
- result: prev.key === key ? prev.result : EMPTY_RESULT,
72
- error: err instanceof Error ? err : new Error(String(err))
73
- }));
74
- } finally{
75
- if (!controller.signal.aborted) setInFlight(false);
76
- }
77
- }, [
78
- enabled,
79
- request,
80
- requestKey
81
- ]);
82
- useEffect(()=>{
83
- if (!enabled) {
84
- abortRef.current?.abort();
85
- setInFlight(false);
86
- setSettled((prev)=>prev === NOTHING_SETTLED ? prev : NOTHING_SETTLED);
87
- return;
88
- }
89
- load();
90
- return ()=>abortRef.current?.abort();
91
- }, [
92
- enabled,
93
- load
94
- ]);
95
22
  const parsed = useMemo(()=>void 0 === provided ? fetched : parseGuardrailDefinitions(provided), [
96
23
  provided,
97
24
  fetched
@@ -115,7 +42,7 @@ function useGuardrailDefinitions(ctx, options = {}) {
115
42
  inputError: parsed.inputError,
116
43
  loading,
117
44
  error,
118
- refetch: load
45
+ refetch
119
46
  };
120
47
  }
121
48
  export { GUARDRAIL_DEFINITIONS_PATH, useGuardrailDefinitions };
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, definition)=>{
5
+ for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
6
+ enumerable: true,
7
+ get: definition[key]
8
+ });
9
+ };
10
+ })();
11
+ (()=>{
12
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
13
+ })();
14
+ (()=>{
15
+ __webpack_require__.r = (exports1)=>{
16
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
17
+ value: 'Module'
18
+ });
19
+ Object.defineProperty(exports1, '__esModule', {
20
+ value: true
21
+ });
22
+ };
23
+ })();
24
+ var __webpack_exports__ = {};
25
+ __webpack_require__.r(__webpack_exports__);
26
+ __webpack_require__.d(__webpack_exports__, {
27
+ useGuardrailsRequest: ()=>useGuardrailsRequest
28
+ });
29
+ const external_react_namespaceObject = require("react");
30
+ const NOTHING_SETTLED_KEY = 'none';
31
+ function useGuardrailsRequest(ctx, { path, endpointName, parse, empty, enabled: enabledOption }) {
32
+ const requestKey = null === ctx ? '' : JSON.stringify({
33
+ baseUrl: ctx.baseUrl,
34
+ token: ctx.token,
35
+ tenantId: ctx.tenantId,
36
+ accountId: ctx.accountId,
37
+ headers: ctx.headers
38
+ });
39
+ const request = (0, external_react_namespaceObject.useMemo)(()=>'' === requestKey ? null : JSON.parse(requestKey), [
40
+ requestKey
41
+ ]);
42
+ const fetchRef = (0, external_react_namespaceObject.useRef)(ctx?.fetch);
43
+ fetchRef.current = ctx?.fetch;
44
+ const enabled = enabledOption && null !== request;
45
+ const nothingSettled = (0, external_react_namespaceObject.useMemo)(()=>({
46
+ key: NOTHING_SETTLED_KEY,
47
+ data: empty,
48
+ error: null
49
+ }), [
50
+ empty
51
+ ]);
52
+ const [settled, setSettled] = (0, external_react_namespaceObject.useState)(nothingSettled);
53
+ const [inFlight, setInFlight] = (0, external_react_namespaceObject.useState)(false);
54
+ const abortRef = (0, external_react_namespaceObject.useRef)(null);
55
+ const isCurrent = enabled && settled.key === requestKey;
56
+ const data = isCurrent ? settled.data : empty;
57
+ const error = isCurrent ? settled.error : null;
58
+ const loading = enabled && (inFlight || !isCurrent);
59
+ const load = (0, external_react_namespaceObject.useCallback)(async ()=>{
60
+ if (!enabled || null === request) return;
61
+ abortRef.current?.abort();
62
+ const controller = new AbortController();
63
+ abortRef.current = controller;
64
+ const key = requestKey;
65
+ setInFlight(true);
66
+ const base = (request.baseUrl ?? '').replace(/\/$/, '');
67
+ const headers = {
68
+ Accept: 'application/json',
69
+ 'X-UiPath-Internal-TenantId': request.tenantId
70
+ };
71
+ if (request.token) headers.Authorization = `Bearer ${request.token}`;
72
+ if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
73
+ Object.assign(headers, request.headers);
74
+ const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
75
+ try {
76
+ const response = await doFetch(`${base}${path}`, {
77
+ headers,
78
+ signal: controller.signal
79
+ });
80
+ if (!response.ok) throw new Error(`${endpointName} API ${response.status} ${response.statusText}`);
81
+ const payload = await response.json();
82
+ if (!controller.signal.aborted) setSettled({
83
+ key,
84
+ data: parse(payload),
85
+ error: null
86
+ });
87
+ } catch (err) {
88
+ if (err?.name === 'AbortError') return;
89
+ if (!controller.signal.aborted) setSettled((prev)=>({
90
+ key,
91
+ data: prev.key === key ? prev.data : empty,
92
+ error: err instanceof Error ? err : new Error(String(err))
93
+ }));
94
+ } finally{
95
+ if (!controller.signal.aborted) setInFlight(false);
96
+ }
97
+ }, [
98
+ enabled,
99
+ request,
100
+ requestKey,
101
+ path,
102
+ endpointName,
103
+ parse,
104
+ empty
105
+ ]);
106
+ (0, external_react_namespaceObject.useEffect)(()=>{
107
+ if (!enabled) {
108
+ abortRef.current?.abort();
109
+ setInFlight(false);
110
+ setSettled((prev)=>prev === nothingSettled ? prev : nothingSettled);
111
+ return;
112
+ }
113
+ load();
114
+ return ()=>abortRef.current?.abort();
115
+ }, [
116
+ enabled,
117
+ load,
118
+ nothingSettled
119
+ ]);
120
+ return {
121
+ data,
122
+ loading,
123
+ error,
124
+ refetch: load
125
+ };
126
+ }
127
+ exports.useGuardrailsRequest = __webpack_exports__.useGuardrailsRequest;
128
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
129
+ "useGuardrailsRequest"
130
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
131
+ Object.defineProperty(exports, '__esModule', {
132
+ value: true
133
+ });
@@ -0,0 +1,23 @@
1
+ export interface GuardrailDefinitionsRequestContext {
2
+ baseUrl?: string;
3
+ token?: string;
4
+ tenantId: string;
5
+ accountId?: string;
6
+ headers?: Record<string, string>;
7
+ fetch?: typeof fetch;
8
+ }
9
+ interface GuardrailsRequestOptions<T> {
10
+ path: string;
11
+ endpointName: string;
12
+ parse: (payload: unknown) => T;
13
+ empty: T;
14
+ enabled: boolean;
15
+ }
16
+ export declare function useGuardrailsRequest<T>(ctx: GuardrailDefinitionsRequestContext | null, { path, endpointName, parse, empty, enabled: enabledOption }: GuardrailsRequestOptions<T>): {
17
+ data: T;
18
+ loading: boolean;
19
+ error: Error | null;
20
+ refetch: () => void;
21
+ };
22
+ export {};
23
+ //# sourceMappingURL=use-guardrails-request.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-guardrails-request.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/use-guardrails-request.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,kCAAkC;IAEjD,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,QAAQ,EAAE,MAAM,CAAC;IAEjB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,UAAU,wBAAwB,CAAC,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC;IAEb,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC,CAAC;IAC/B,KAAK,EAAE,CAAC,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;CAClB;AAoBD,wBAAgB,oBAAoB,CAAC,CAAC,EACpC,GAAG,EAAE,kCAAkC,GAAG,IAAI,EAC9C,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,EAAE,wBAAwB,CAAC,CAAC,CAAC,GACxF;IAAE,IAAI,EAAE,CAAC,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA0HzE"}
@@ -0,0 +1,99 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
2
+ const NOTHING_SETTLED_KEY = 'none';
3
+ function useGuardrailsRequest(ctx, { path, endpointName, parse, empty, enabled: enabledOption }) {
4
+ const requestKey = null === ctx ? '' : JSON.stringify({
5
+ baseUrl: ctx.baseUrl,
6
+ token: ctx.token,
7
+ tenantId: ctx.tenantId,
8
+ accountId: ctx.accountId,
9
+ headers: ctx.headers
10
+ });
11
+ const request = useMemo(()=>'' === requestKey ? null : JSON.parse(requestKey), [
12
+ requestKey
13
+ ]);
14
+ const fetchRef = useRef(ctx?.fetch);
15
+ fetchRef.current = ctx?.fetch;
16
+ const enabled = enabledOption && null !== request;
17
+ const nothingSettled = useMemo(()=>({
18
+ key: NOTHING_SETTLED_KEY,
19
+ data: empty,
20
+ error: null
21
+ }), [
22
+ empty
23
+ ]);
24
+ const [settled, setSettled] = useState(nothingSettled);
25
+ const [inFlight, setInFlight] = useState(false);
26
+ const abortRef = useRef(null);
27
+ const isCurrent = enabled && settled.key === requestKey;
28
+ const data = isCurrent ? settled.data : empty;
29
+ const error = isCurrent ? settled.error : null;
30
+ const loading = enabled && (inFlight || !isCurrent);
31
+ const load = useCallback(async ()=>{
32
+ if (!enabled || null === request) return;
33
+ abortRef.current?.abort();
34
+ const controller = new AbortController();
35
+ abortRef.current = controller;
36
+ const key = requestKey;
37
+ setInFlight(true);
38
+ const base = (request.baseUrl ?? '').replace(/\/$/, '');
39
+ const headers = {
40
+ Accept: 'application/json',
41
+ 'X-UiPath-Internal-TenantId': request.tenantId
42
+ };
43
+ if (request.token) headers.Authorization = `Bearer ${request.token}`;
44
+ if (request.accountId) headers['X-UiPath-Internal-AccountId'] = request.accountId;
45
+ Object.assign(headers, request.headers);
46
+ const doFetch = fetchRef.current ?? ((input, init)=>globalThis.fetch(input, init));
47
+ try {
48
+ const response = await doFetch(`${base}${path}`, {
49
+ headers,
50
+ signal: controller.signal
51
+ });
52
+ if (!response.ok) throw new Error(`${endpointName} API ${response.status} ${response.statusText}`);
53
+ const payload = await response.json();
54
+ if (!controller.signal.aborted) setSettled({
55
+ key,
56
+ data: parse(payload),
57
+ error: null
58
+ });
59
+ } catch (err) {
60
+ if (err?.name === 'AbortError') return;
61
+ if (!controller.signal.aborted) setSettled((prev)=>({
62
+ key,
63
+ data: prev.key === key ? prev.data : empty,
64
+ error: err instanceof Error ? err : new Error(String(err))
65
+ }));
66
+ } finally{
67
+ if (!controller.signal.aborted) setInFlight(false);
68
+ }
69
+ }, [
70
+ enabled,
71
+ request,
72
+ requestKey,
73
+ path,
74
+ endpointName,
75
+ parse,
76
+ empty
77
+ ]);
78
+ useEffect(()=>{
79
+ if (!enabled) {
80
+ abortRef.current?.abort();
81
+ setInFlight(false);
82
+ setSettled((prev)=>prev === nothingSettled ? prev : nothingSettled);
83
+ return;
84
+ }
85
+ load();
86
+ return ()=>abortRef.current?.abort();
87
+ }, [
88
+ enabled,
89
+ load,
90
+ nothingSettled
91
+ ]);
92
+ return {
93
+ data,
94
+ loading,
95
+ error,
96
+ refetch: load
97
+ };
98
+ }
99
+ export { useGuardrailsRequest };
@@ -81,7 +81,8 @@ function normalizeGuardrailParameters(parameters, definitions) {
81
81
  });
82
82
  return changed ? next : parameters;
83
83
  }
84
- function syncMapEnumParameters(parameters, definitions) {
84
+ function syncMapEnumParameters(parameters, definitions, options) {
85
+ const leaveUnset = new Set(options?.leaveUnsetIds);
85
86
  const selectionBySourceId = new Map();
86
87
  for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
87
88
  const defById = new Map(definitions.map((d)=>[
@@ -102,7 +103,8 @@ function syncMapEnumParameters(parameters, definitions) {
102
103
  const synced = {};
103
104
  for (const key of allowedKeys){
104
105
  const persisted = currentMap[key];
105
- synced[key] = 'number' == typeof persisted && Number.isFinite(persisted) ? persisted : defaults[key] ?? fallback;
106
+ if ('number' == typeof persisted && Number.isFinite(persisted)) synced[key] = persisted;
107
+ else if (!leaveUnset.has(param.id)) synced[key] = defaults[key] ?? fallback;
106
108
  }
107
109
  return {
108
110
  ...param,
@@ -2,7 +2,10 @@ import type { GuardrailDetectionScope, GuardrailParameterDefinition, GuardrailVa
2
2
  export declare function coerceParameterValueToType(value: unknown, paramDef: Pick<GuardrailParameterDefinition, 'type' | 'min'>): GuardrailValidatorParameter['value'];
3
3
  export declare function seedGuardrailParameters(definitions: GuardrailParameterDefinition[], existing?: GuardrailValidatorParameter[]): GuardrailValidatorParameter[];
4
4
  export declare function normalizeGuardrailParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
5
- export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
5
+ export declare function syncMapEnumParameters(parameters: GuardrailValidatorParameter[], definitions: GuardrailParameterDefinition[], options?: SyncMapEnumParametersOptions): GuardrailValidatorParameter[];
6
+ export interface SyncMapEnumParametersOptions {
7
+ leaveUnsetIds?: readonly string[];
8
+ }
6
9
  export declare function dropEmptyOptionalParameters(parameters: readonly GuardrailValidatorParameter[], definitions: readonly GuardrailParameterDefinition[]): GuardrailValidatorParameter[];
7
10
  export declare function getOutOfRangeParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
8
11
  export declare function getRequiredEmptyParameterIds(definitions: readonly GuardrailParameterDefinition[], parameters: readonly GuardrailValidatorParameter[]): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAcjB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,MAAM,GAAG,KAAK,CAAC,GAC3D,2BAA2B,CAAC,OAAO,CAAC,CAmBtC;AAQD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,GACvC,2BAA2B,EAAE,CAU/B;AAWD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAoB/B;AAcD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,2BAA2B,EAAE,EACzC,WAAW,EAAE,4BAA4B,EAAE,GAC1C,2BAA2B,EAAE,CA2C/B;AAQD,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAW/B;AAeD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA6BV;AAUD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA+BV;AAED,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AAQvE,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,uBAAuB,GAAG,SAAS,CAarC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/canvas/components/Guardrails/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC5B,MAAM,SAAS,CAAC;AAcjB,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,MAAM,GAAG,KAAK,CAAC,GAC3D,2BAA2B,CAAC,OAAO,CAAC,CAmBtC;AAQD,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,QAAQ,CAAC,EAAE,2BAA2B,EAAE,GACvC,2BAA2B,EAAE,CAU/B;AAWD,wBAAgB,4BAA4B,CAC1C,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAoB/B;AAeD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,2BAA2B,EAAE,EACzC,WAAW,EAAE,4BAA4B,EAAE,EAC3C,OAAO,CAAC,EAAE,4BAA4B,GACrC,2BAA2B,EAAE,CA6C/B;AAED,MAAM,WAAW,4BAA4B;IAK3C,aAAa,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAQD,wBAAgB,2BAA2B,CACzC,UAAU,EAAE,SAAS,2BAA2B,EAAE,EAClD,WAAW,EAAE,SAAS,4BAA4B,EAAE,GACnD,2BAA2B,EAAE,CAW/B;AAeD,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA6BV;AAUD,wBAAgB,4BAA4B,CAC1C,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,MAAM,EAAE,CA+BV;AAED,eAAO,MAAM,sCAAsC,mBAAmB,CAAC;AAQvE,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,SAAS,4BAA4B,EAAE,EACpD,UAAU,EAAE,SAAS,2BAA2B,EAAE,GACjD,uBAAuB,GAAG,SAAS,CAarC"}
@@ -45,7 +45,8 @@ function normalizeGuardrailParameters(parameters, definitions) {
45
45
  });
46
46
  return changed ? next : parameters;
47
47
  }
48
- function syncMapEnumParameters(parameters, definitions) {
48
+ function syncMapEnumParameters(parameters, definitions, options) {
49
+ const leaveUnset = new Set(options?.leaveUnsetIds);
49
50
  const selectionBySourceId = new Map();
50
51
  for (const param of parameters)if ('enum-list' === param.$parameterType && Array.isArray(param.value)) selectionBySourceId.set(param.id, param.value);
51
52
  const defById = new Map(definitions.map((d)=>[
@@ -66,7 +67,8 @@ function syncMapEnumParameters(parameters, definitions) {
66
67
  const synced = {};
67
68
  for (const key of allowedKeys){
68
69
  const persisted = currentMap[key];
69
- synced[key] = 'number' == typeof persisted && Number.isFinite(persisted) ? persisted : defaults[key] ?? fallback;
70
+ if ('number' == typeof persisted && Number.isFinite(persisted)) synced[key] = persisted;
71
+ else if (!leaveUnset.has(param.id)) synced[key] = defaults[key] ?? fallback;
70
72
  }
71
73
  return {
72
74
  ...param,