@rytass/bpm-core-client 0.1.3 → 0.1.5

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 (62) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/LICENSE +21 -0
  3. package/README.md +69 -3
  4. package/package.json +5 -4
  5. package/src/index.js +7 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/api-auth-client.d.ts +73 -0
  8. package/src/lib/api-auth-client.js +121 -0
  9. package/src/lib/api-auth-client.js.map +1 -0
  10. package/src/lib/form/form-api.d.ts +48 -0
  11. package/src/lib/form/form-api.js +228 -0
  12. package/src/lib/form/form-api.js.map +1 -0
  13. package/src/lib/form/form-rendering.d.ts +52 -0
  14. package/src/lib/form/form-rendering.js +341 -0
  15. package/src/lib/form/form-rendering.js.map +1 -0
  16. package/src/lib/form/index.js +6 -0
  17. package/src/lib/form/index.js.map +1 -0
  18. package/src/lib/graphql-client.d.ts +45 -0
  19. package/src/lib/graphql-client.js +92 -0
  20. package/src/lib/graphql-client.js.map +1 -0
  21. package/src/lib/member-api.d.ts +49 -0
  22. package/src/lib/member-api.js +72 -0
  23. package/src/lib/member-api.js.map +1 -0
  24. package/src/lib/organization/index.js +5 -0
  25. package/src/lib/organization/index.js.map +1 -0
  26. package/src/lib/organization/organization-api.d.ts +168 -0
  27. package/src/lib/organization/organization-api.js +394 -0
  28. package/src/lib/organization/organization-api.js.map +1 -0
  29. package/src/lib/template/index.js +5 -0
  30. package/src/lib/template/index.js.map +1 -0
  31. package/src/lib/template/template-api.d.ts +150 -0
  32. package/src/lib/template/template-api.js +407 -0
  33. package/src/lib/template/template-api.js.map +1 -0
  34. package/src/lib/workflow/index.js +5 -0
  35. package/src/lib/workflow/index.js.map +1 -0
  36. package/src/lib/workflow/workflow-api.d.ts +376 -0
  37. package/src/lib/workflow/workflow-api.js +867 -0
  38. package/src/lib/workflow/workflow-api.js.map +1 -0
  39. package/eslint.config.mjs +0 -19
  40. package/jest.config.cts +0 -10
  41. package/project.json +0 -66
  42. package/src/lib/api-auth-client.ts +0 -169
  43. package/src/lib/form/form-api.spec.ts +0 -81
  44. package/src/lib/form/form-api.ts +0 -388
  45. package/src/lib/form/form-rendering.ts +0 -580
  46. package/src/lib/graphql-client.spec.ts +0 -65
  47. package/src/lib/graphql-client.ts +0 -114
  48. package/src/lib/member-api.ts +0 -129
  49. package/src/lib/organization/organization-api.spec.ts +0 -90
  50. package/src/lib/organization/organization-api.ts +0 -710
  51. package/src/lib/template/template-api.spec.ts +0 -88
  52. package/src/lib/template/template-api.ts +0 -772
  53. package/src/lib/workflow/workflow-api.spec.ts +0 -132
  54. package/src/lib/workflow/workflow-api.ts +0 -1749
  55. package/tsconfig.json +0 -27
  56. package/tsconfig.lib.json +0 -16
  57. package/tsconfig.spec.json +0 -16
  58. /package/src/{index.ts → index.d.ts} +0 -0
  59. /package/src/lib/form/{index.ts → index.d.ts} +0 -0
  60. /package/src/lib/organization/{index.ts → index.d.ts} +0 -0
  61. /package/src/lib/template/{index.ts → index.d.ts} +0 -0
  62. /package/src/lib/workflow/{index.ts → index.d.ts} +0 -0
@@ -0,0 +1,52 @@
1
+ import { DateFieldDefinition, FormDefinitionSchema, FormFieldDefinition, FormFieldOption, FormFieldValue, FormUiSchema, NumberFieldDefinition, SelectFieldDefinition } from '@rytass/bpm-core-shared/form';
2
+ export type ConditionOperator = 'equals' | 'greaterThan' | 'greaterThanOrEqual' | 'lessThan' | 'lessThanOrEqual' | 'notEquals';
3
+ export type ParsedConditionRule = Readonly<{
4
+ fieldKey: string;
5
+ operator: ConditionOperator;
6
+ value: string;
7
+ }>;
8
+ export type FormRendererValues = Readonly<Record<string, FormFieldValue | undefined>>;
9
+ export interface FormRendererValidationResult {
10
+ readonly errors: Readonly<Record<string, string>>;
11
+ readonly firstInvalidFieldKey: string | null;
12
+ readonly valid: boolean;
13
+ }
14
+ export declare function buildFormRendererValues(fields: readonly FormFieldDefinition[], currentValues: FormRendererValues): FormRendererValues;
15
+ export declare function readVisibleFormRendererFields(schema: FormDefinitionSchema, uiSchema: FormUiSchema, values: FormRendererValues): readonly FormFieldDefinition[];
16
+ export declare function validateFormRendererValues({ schema, uiSchema, values, }: {
17
+ readonly schema: FormDefinitionSchema;
18
+ readonly uiSchema: FormUiSchema;
19
+ readonly values: FormRendererValues;
20
+ }): FormRendererValidationResult;
21
+ export declare function focusFormRendererField(fieldKey: string): void;
22
+ export declare function isFormRendererFieldVisible(field: FormFieldDefinition, fields: readonly FormFieldDefinition[], values: FormRendererValues): boolean;
23
+ export declare function isFormRendererFieldRequired(field: FormFieldDefinition, fields: readonly FormFieldDefinition[], values: FormRendererValues): boolean;
24
+ export declare function isFormRendererFieldReadonly(field: FormFieldDefinition, fields: readonly FormFieldDefinition[], values: FormRendererValues): boolean;
25
+ export declare function evaluateConditionExpression(expression: string, fields: readonly FormFieldDefinition[], values: FormRendererValues, fallback: boolean): boolean;
26
+ export declare function parseConditionRule(expression: string): ParsedConditionRule | null;
27
+ export declare function buildConditionExpression(field: FormFieldDefinition, operator: ConditionOperator, value: string): string;
28
+ export declare function readDefaultConditionOperator(field: FormFieldDefinition): ConditionOperator;
29
+ export declare function readDefaultConditionValue(field: FormFieldDefinition): string;
30
+ export declare function readConditionOperatorOptions(field: FormFieldDefinition): readonly {
31
+ readonly id: ConditionOperator;
32
+ readonly name: string;
33
+ }[];
34
+ export declare function readConditionOperatorOption(value: string | undefined): ConditionOperator | null;
35
+ export declare function readDatePickerValue(value: FormFieldValue | string | undefined): string | undefined;
36
+ export declare function formatDatePickerValue(value: string | undefined): string | undefined;
37
+ export declare function formatDateTimePickerValue(value: string | undefined): string | undefined;
38
+ export declare function isNumberFieldDefinition(field: FormFieldDefinition): field is NumberFieldDefinition;
39
+ export declare function isDateFieldDefinition(field: FormFieldDefinition): field is DateFieldDefinition;
40
+ export declare function isSelectFieldDefinition(field: FormFieldDefinition): field is SelectFieldDefinition;
41
+ export declare function readSelectOption<TOption extends {
42
+ readonly id: string;
43
+ }>(options: readonly TOption[], id: string): TOption | null;
44
+ export declare function readFieldOptionAsSelectOption(option: FormFieldOption): {
45
+ readonly id: string;
46
+ readonly name: string;
47
+ };
48
+ export declare function parseOptionalNumberInput(value: string): number | undefined;
49
+ export declare function clampOptionalNumber(value: number | undefined, range: {
50
+ readonly max?: number;
51
+ readonly min?: number;
52
+ }): number | undefined;
@@ -0,0 +1,341 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildFormRendererValues = buildFormRendererValues;
4
+ exports.readVisibleFormRendererFields = readVisibleFormRendererFields;
5
+ exports.validateFormRendererValues = validateFormRendererValues;
6
+ exports.focusFormRendererField = focusFormRendererField;
7
+ exports.isFormRendererFieldVisible = isFormRendererFieldVisible;
8
+ exports.isFormRendererFieldRequired = isFormRendererFieldRequired;
9
+ exports.isFormRendererFieldReadonly = isFormRendererFieldReadonly;
10
+ exports.evaluateConditionExpression = evaluateConditionExpression;
11
+ exports.parseConditionRule = parseConditionRule;
12
+ exports.buildConditionExpression = buildConditionExpression;
13
+ exports.readDefaultConditionOperator = readDefaultConditionOperator;
14
+ exports.readDefaultConditionValue = readDefaultConditionValue;
15
+ exports.readConditionOperatorOptions = readConditionOperatorOptions;
16
+ exports.readConditionOperatorOption = readConditionOperatorOption;
17
+ exports.readDatePickerValue = readDatePickerValue;
18
+ exports.formatDatePickerValue = formatDatePickerValue;
19
+ exports.formatDateTimePickerValue = formatDateTimePickerValue;
20
+ exports.isNumberFieldDefinition = isNumberFieldDefinition;
21
+ exports.isDateFieldDefinition = isDateFieldDefinition;
22
+ exports.isSelectFieldDefinition = isSelectFieldDefinition;
23
+ exports.readSelectOption = readSelectOption;
24
+ exports.readFieldOptionAsSelectOption = readFieldOptionAsSelectOption;
25
+ exports.parseOptionalNumberInput = parseOptionalNumberInput;
26
+ exports.clampOptionalNumber = clampOptionalNumber;
27
+ function buildFormRendererValues(fields, currentValues) {
28
+ return fields.reduce((values, field) => ({
29
+ ...values,
30
+ [field.fieldKey]: typeof currentValues[field.fieldKey] === 'undefined'
31
+ ? readInitialFormRendererValue(field)
32
+ : currentValues[field.fieldKey],
33
+ }), {});
34
+ }
35
+ function readVisibleFormRendererFields(schema, uiSchema, values) {
36
+ const fieldsByKey = new Map(schema.fields.map((field) => [field.fieldKey, field]));
37
+ const orderedFields = [
38
+ ...uiSchema.layout
39
+ .map((item) => fieldsByKey.get(item.fieldKey))
40
+ .filter((field) => Boolean(field)),
41
+ ...schema.fields.filter((field) => !uiSchema.layout.some((item) => item.fieldKey === field.fieldKey)),
42
+ ];
43
+ return orderedFields.filter((field) => isFormRendererFieldVisible(field, schema.fields, values));
44
+ }
45
+ function validateFormRendererValues({ schema, uiSchema, values, }) {
46
+ const visibleFields = readVisibleFormRendererFields(schema, uiSchema, values);
47
+ const errors = visibleFields.reduce((currentErrors, field) => isFormRendererFieldRequired(field, schema.fields, values) &&
48
+ !isFormRendererFieldValuePresent(values[field.fieldKey])
49
+ ? {
50
+ ...currentErrors,
51
+ [field.fieldKey]: `${field.label || field.fieldKey}為必填欄位。`,
52
+ }
53
+ : currentErrors, {});
54
+ const firstInvalidFieldKey = visibleFields.find((field) => errors[field.fieldKey])?.fieldKey;
55
+ return {
56
+ errors,
57
+ firstInvalidFieldKey: firstInvalidFieldKey ?? null,
58
+ valid: Object.keys(errors).length === 0,
59
+ };
60
+ }
61
+ function focusFormRendererField(fieldKey) {
62
+ const fieldElement = document.querySelector(`[data-form-field-key="${CSS.escape(fieldKey)}"]`);
63
+ const focusableElement = fieldElement?.querySelector('input, textarea, button, [tabindex]:not([tabindex="-1"])');
64
+ focusableElement?.focus();
65
+ fieldElement?.scrollIntoView({ behavior: 'smooth', block: 'center' });
66
+ }
67
+ function isFormRendererFieldVisible(field, fields, values) {
68
+ return field.visibleWhen
69
+ ? evaluateConditionExpression(field.visibleWhen, fields, values, true)
70
+ : true;
71
+ }
72
+ function isFormRendererFieldRequired(field, fields, values) {
73
+ return (field.required ||
74
+ Boolean(field.requiredWhen
75
+ ? evaluateConditionExpression(field.requiredWhen, fields, values, false)
76
+ : false));
77
+ }
78
+ function isFormRendererFieldReadonly(field, fields, values) {
79
+ return field.readonlyWhen
80
+ ? evaluateConditionExpression(field.readonlyWhen, fields, values, false)
81
+ : false;
82
+ }
83
+ function evaluateConditionExpression(expression, fields, values, fallback) {
84
+ const rule = parseConditionRule(expression);
85
+ if (!rule) {
86
+ return fallback;
87
+ }
88
+ const field = fields.find((candidate) => candidate.fieldKey === rule.fieldKey);
89
+ if (!field) {
90
+ return fallback;
91
+ }
92
+ return evaluateConditionRule(rule, field, values[field.fieldKey]);
93
+ }
94
+ function parseConditionRule(expression) {
95
+ const match = expression
96
+ .trim()
97
+ .match(/^form\.([A-Za-z][A-Za-z0-9_]*)\s*(==|!=|>=|<=|>|<)\s*(.+)$/u);
98
+ if (!match) {
99
+ return null;
100
+ }
101
+ const operator = readConditionOperatorFromSymbol(match[2]);
102
+ if (!operator) {
103
+ return null;
104
+ }
105
+ return {
106
+ fieldKey: match[1],
107
+ operator,
108
+ value: parseConditionLiteral(match[3]),
109
+ };
110
+ }
111
+ function buildConditionExpression(field, operator, value) {
112
+ return `form.${field.fieldKey} ${readConditionOperatorSymbol(operator)} ${formatConditionLiteral(field, value)}`;
113
+ }
114
+ function readDefaultConditionOperator(field) {
115
+ return isComparableConditionField(field) ? 'greaterThan' : 'equals';
116
+ }
117
+ function readDefaultConditionValue(field) {
118
+ if (field.type === 'boolean') {
119
+ return 'true';
120
+ }
121
+ if (isSelectFieldDefinition(field)) {
122
+ return field.options[0]?.value ?? '';
123
+ }
124
+ return '';
125
+ }
126
+ function readConditionOperatorOptions(field) {
127
+ const operatorIds = isComparableConditionField(field)
128
+ ? [
129
+ 'equals',
130
+ 'notEquals',
131
+ 'greaterThan',
132
+ 'greaterThanOrEqual',
133
+ 'lessThan',
134
+ 'lessThanOrEqual',
135
+ ]
136
+ : ['equals', 'notEquals'];
137
+ return CONDITION_OPERATOR_OPTIONS.filter((option) => operatorIds.includes(option.id));
138
+ }
139
+ function readConditionOperatorOption(value) {
140
+ return CONDITION_OPERATOR_OPTIONS.some((option) => option.id === value)
141
+ ? value
142
+ : null;
143
+ }
144
+ function readDatePickerValue(value) {
145
+ return typeof value === 'string' && value.trim() ? value : undefined;
146
+ }
147
+ function formatDatePickerValue(value) {
148
+ const date = value ? parseDatePickerValue(value) : null;
149
+ return date ? formatDateParts(date) : undefined;
150
+ }
151
+ function formatDateTimePickerValue(value) {
152
+ const date = value ? parseDatePickerValue(value) : null;
153
+ return date ? date.toISOString() : undefined;
154
+ }
155
+ function isNumberFieldDefinition(field) {
156
+ return field.type === 'number' || field.type === 'money';
157
+ }
158
+ function isDateFieldDefinition(field) {
159
+ return field.type === 'date' || field.type === 'datetime';
160
+ }
161
+ function isSelectFieldDefinition(field) {
162
+ return (field.type === 'select' ||
163
+ field.type === 'radio' ||
164
+ field.type === 'checkbox');
165
+ }
166
+ function readSelectOption(options, id) {
167
+ return options.find((option) => option.id === id) ?? null;
168
+ }
169
+ function readFieldOptionAsSelectOption(option) {
170
+ return {
171
+ id: option.value,
172
+ name: option.label,
173
+ };
174
+ }
175
+ function parseOptionalNumberInput(value) {
176
+ const trimmedValue = value.trim();
177
+ if (!trimmedValue) {
178
+ return undefined;
179
+ }
180
+ const nextValue = Number(trimmedValue);
181
+ return Number.isFinite(nextValue) ? nextValue : undefined;
182
+ }
183
+ function clampOptionalNumber(value, range) {
184
+ if (typeof value === 'undefined') {
185
+ return undefined;
186
+ }
187
+ if (typeof range.min === 'number' && value < range.min) {
188
+ return range.min;
189
+ }
190
+ if (typeof range.max === 'number' && value > range.max) {
191
+ return range.max;
192
+ }
193
+ return value;
194
+ }
195
+ const CONDITION_OPERATOR_OPTIONS = [
196
+ { id: 'equals', name: '等於' },
197
+ { id: 'notEquals', name: '不等於' },
198
+ { id: 'greaterThan', name: '大於' },
199
+ { id: 'greaterThanOrEqual', name: '大於等於' },
200
+ { id: 'lessThan', name: '小於' },
201
+ { id: 'lessThanOrEqual', name: '小於等於' },
202
+ ];
203
+ function readInitialFormRendererValue(field) {
204
+ if (typeof field.defaultValue !== 'undefined') {
205
+ return field.defaultValue;
206
+ }
207
+ if (field.type === 'boolean') {
208
+ return false;
209
+ }
210
+ if (field.type === 'checkbox' || field.type === 'file_upload') {
211
+ return [];
212
+ }
213
+ return undefined;
214
+ }
215
+ function isFormRendererFieldValuePresent(value) {
216
+ if (typeof value === 'undefined' || value === null) {
217
+ return false;
218
+ }
219
+ if (typeof value === 'string') {
220
+ return value.trim().length > 0;
221
+ }
222
+ if (Array.isArray(value)) {
223
+ return value.length > 0;
224
+ }
225
+ return true;
226
+ }
227
+ function evaluateConditionRule(rule, field, value) {
228
+ if (Array.isArray(value)) {
229
+ return evaluateArrayCondition(value, rule);
230
+ }
231
+ if (field.type === 'boolean') {
232
+ return compareConditionValues(value === true ? 'true' : 'false', rule.value, rule.operator);
233
+ }
234
+ if (isNumberFieldDefinition(field)) {
235
+ return compareNumericCondition(value, rule);
236
+ }
237
+ return compareConditionValues(typeof value === 'undefined' || value === null ? '' : String(value), rule.value, rule.operator);
238
+ }
239
+ function evaluateArrayCondition(value, rule) {
240
+ if (rule.operator === 'equals') {
241
+ return value.includes(rule.value);
242
+ }
243
+ if (rule.operator === 'notEquals') {
244
+ return !value.includes(rule.value);
245
+ }
246
+ return false;
247
+ }
248
+ function compareNumericCondition(value, rule) {
249
+ const actualValue = typeof value === 'number' ? value : Number(value);
250
+ const expectedValue = Number(rule.value);
251
+ if (!Number.isFinite(actualValue) || !Number.isFinite(expectedValue)) {
252
+ return false;
253
+ }
254
+ return compareConditionValues(actualValue, expectedValue, rule.operator);
255
+ }
256
+ function compareConditionValues(actualValue, expectedValue, operator) {
257
+ if (operator === 'equals') {
258
+ return actualValue === expectedValue;
259
+ }
260
+ if (operator === 'notEquals') {
261
+ return actualValue !== expectedValue;
262
+ }
263
+ if (operator === 'greaterThan') {
264
+ return actualValue > expectedValue;
265
+ }
266
+ if (operator === 'greaterThanOrEqual') {
267
+ return actualValue >= expectedValue;
268
+ }
269
+ if (operator === 'lessThan') {
270
+ return actualValue < expectedValue;
271
+ }
272
+ return actualValue <= expectedValue;
273
+ }
274
+ function readConditionOperatorFromSymbol(symbol) {
275
+ const operators = {
276
+ '!=': 'notEquals',
277
+ '<': 'lessThan',
278
+ '<=': 'lessThanOrEqual',
279
+ '==': 'equals',
280
+ '>': 'greaterThan',
281
+ '>=': 'greaterThanOrEqual',
282
+ };
283
+ return symbol ? (operators[symbol] ?? null) : null;
284
+ }
285
+ function readConditionOperatorSymbol(operator) {
286
+ const symbols = {
287
+ equals: '==',
288
+ greaterThan: '>',
289
+ greaterThanOrEqual: '>=',
290
+ lessThan: '<',
291
+ lessThanOrEqual: '<=',
292
+ notEquals: '!=',
293
+ };
294
+ return symbols[operator];
295
+ }
296
+ function parseConditionLiteral(value) {
297
+ const trimmedValue = value.trim();
298
+ if ((trimmedValue.startsWith('"') && trimmedValue.endsWith('"')) ||
299
+ (trimmedValue.startsWith("'") && trimmedValue.endsWith("'"))) {
300
+ return trimmedValue.slice(1, -1);
301
+ }
302
+ return trimmedValue;
303
+ }
304
+ function formatConditionLiteral(field, value) {
305
+ if (field.type === 'boolean') {
306
+ return value === 'false' ? 'false' : 'true';
307
+ }
308
+ if (isNumberFieldDefinition(field)) {
309
+ return String(parseOptionalNumberInput(value) ?? 0);
310
+ }
311
+ return JSON.stringify(value);
312
+ }
313
+ function isComparableConditionField(field) {
314
+ return (field.type === 'date' ||
315
+ field.type === 'datetime' ||
316
+ field.type === 'money' ||
317
+ field.type === 'number');
318
+ }
319
+ const DATE_VALUE_PATTERN = /^\d{4}-\d{2}-\d{2}$/u;
320
+ const DATE_TIME_VALUE_PATTERN = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}/u;
321
+ function parseDatePickerValue(value) {
322
+ if (DATE_TIME_VALUE_PATTERN.test(value)) {
323
+ const [datePart = '', timePart = '00:00'] = value.split('T');
324
+ const [year = 0, month = 1, day = 1] = datePart.split('-').map(Number);
325
+ const [hour = 0, minute = 0] = timePart.split(':').map(Number);
326
+ return new Date(year, month - 1, day, hour, minute);
327
+ }
328
+ if (DATE_VALUE_PATTERN.test(value)) {
329
+ const [year = 0, month = 1, day = 1] = value.split('-').map(Number);
330
+ return new Date(year, month - 1, day);
331
+ }
332
+ const date = new Date(value);
333
+ return Number.isNaN(date.getTime()) ? null : date;
334
+ }
335
+ function formatDateParts(date) {
336
+ return `${date.getFullYear()}-${padDatePart(date.getMonth() + 1)}-${padDatePart(date.getDate())}`;
337
+ }
338
+ function padDatePart(value) {
339
+ return String(value).padStart(2, '0');
340
+ }
341
+ //# sourceMappingURL=form-rendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-rendering.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core-client/src/lib/form/form-rendering.ts"],"names":[],"mappings":";;AAmCA,0DAcC;AAED,sEAqBC;AAED,gEA8BC;AAED,wDAUC;AAED,gEAQC;AAED,kEAaC;AAED,kEAQC;AAED,kEAqBC;AAED,gDAsBC;AAED,4DAMC;AAED,oEAIC;AAED,8DAUC;AAED,oEAmBC;AAED,kEAMC;AAED,kDAIC;AAED,sDAMC;AAED,8DAMC;AAED,0DAIC;AAED,sDAIC;AAED,0DAQC;AAED,4CAKC;AAED,sEAQC;AAED,4DAUC;AAED,kDAoBC;AAzTD,SAAgB,uBAAuB,CACrC,MAAsC,EACtC,aAAiC;IAEjC,OAAO,MAAM,CAAC,MAAM,CAClB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAClB,GAAG,MAAM;QACT,CAAC,KAAK,CAAC,QAAQ,CAAC,EACd,OAAO,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,WAAW;YAClD,CAAC,CAAC,4BAA4B,CAAC,KAAK,CAAC;YACrC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC;KACpC,CAAC,EACF,EAAE,CACH,CAAC;AACJ,CAAC;AAED,SAAgB,6BAA6B,CAC3C,MAA4B,EAC5B,QAAsB,EACtB,MAA0B;IAE1B,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CACtD,CAAC;IACF,MAAM,aAAa,GAAG;QACpB,GAAG,QAAQ,CAAC,MAAM;aACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC7C,MAAM,CAAC,CAAC,KAAK,EAAgC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClE,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CACrB,CAAC,KAAK,EAAE,EAAE,CACR,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CACpE;KACF,CAAC;IAEF,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CACpC,0BAA0B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CACzD,CAAC;AACJ,CAAC;AAED,SAAgB,0BAA0B,CAAC,EACzC,MAAM,EACN,QAAQ,EACR,MAAM,GAKP;IACC,MAAM,aAAa,GAAG,6BAA6B,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CACjC,CAAC,aAAa,EAAE,KAAK,EAAE,EAAE,CACvB,2BAA2B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;QACzD,CAAC,+BAA+B,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACtD,CAAC,CAAC;YACE,GAAG,aAAa;YAChB,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,QAAQ,QAAQ;SAC3D;QACH,CAAC,CAAC,aAAa,EACnB,EAAE,CACH,CAAC;IACF,MAAM,oBAAoB,GAAG,aAAa,CAAC,IAAI,CAC7C,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAClC,EAAE,QAAQ,CAAC;IAEZ,OAAO;QACL,MAAM;QACN,oBAAoB,EAAE,oBAAoB,IAAI,IAAI;QAClD,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC;KACxC,CAAC;AACJ,CAAC;AAED,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CACzC,yBAAyB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAClD,CAAC;IACF,MAAM,gBAAgB,GAAG,YAAY,EAAE,aAAa,CAClD,0DAA0D,CAC3D,CAAC;IAEF,gBAAgB,EAAE,KAAK,EAAE,CAAC;IAC1B,YAAY,EAAE,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,SAAgB,0BAA0B,CACxC,KAA0B,EAC1B,MAAsC,EACtC,MAA0B;IAE1B,OAAO,KAAK,CAAC,WAAW;QACtB,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC;QACtE,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAgB,2BAA2B,CACzC,KAA0B,EAC1B,MAAsC,EACtC,MAA0B;IAE1B,OAAO,CACL,KAAK,CAAC,QAAQ;QACd,OAAO,CACL,KAAK,CAAC,YAAY;YAChB,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;YACxE,CAAC,CAAC,KAAK,CACV,CACF,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,KAA0B,EAC1B,MAAsC,EACtC,MAA0B;IAE1B,OAAO,KAAK,CAAC,YAAY;QACvB,CAAC,CAAC,2BAA2B,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;QACxE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,SAAgB,2BAA2B,CACzC,UAAkB,EAClB,MAAsC,EACtC,MAA0B,EAC1B,QAAiB;IAEjB,MAAM,IAAI,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CACvB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CACpD,CAAC;IAEF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,qBAAqB,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAgB,kBAAkB,CAChC,UAAkB;IAElB,MAAM,KAAK,GAAG,UAAU;SACrB,IAAI,EAAE;SACN,KAAK,CAAC,6DAA6D,CAAC,CAAC;IAExE,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,+BAA+B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QAClB,QAAQ;QACR,KAAK,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CACtC,KAA0B,EAC1B,QAA2B,EAC3B,KAAa;IAEb,OAAO,QAAQ,KAAK,CAAC,QAAQ,IAAI,2BAA2B,CAAC,QAAQ,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;AACnH,CAAC;AAED,SAAgB,4BAA4B,CAC1C,KAA0B;IAE1B,OAAO,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC;AACtE,CAAC;AAED,SAAgB,yBAAyB,CAAC,KAA0B;IAClE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;IACvC,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAgB,4BAA4B,CAC1C,KAA0B;IAE1B,MAAM,WAAW,GAAiC,0BAA0B,CAC1E,KAAK,CACN;QACC,CAAC,CAAC;YACE,QAAQ;YACR,WAAW;YACX,aAAa;YACb,oBAAoB;YACpB,UAAU;YACV,iBAAiB;SAClB;QACH,CAAC,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE5B,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAClD,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAChC,CAAC;AACJ,CAAC;AAED,SAAgB,2BAA2B,CACzC,KAAyB;IAEzB,OAAO,0BAA0B,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC;QACrE,CAAC,CAAE,KAA2B;QAC9B,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAA0C;IAE1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAgB,qBAAqB,CACnC,KAAyB;IAEzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAClD,CAAC;AAED,SAAgB,yBAAyB,CACvC,KAAyB;IAEzB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAExD,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,SAAgB,uBAAuB,CACrC,KAA0B;IAE1B,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;AAC3D,CAAC;AAED,SAAgB,qBAAqB,CACnC,KAA0B;IAE1B,OAAO,KAAK,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC;AAC5D,CAAC;AAED,SAAgB,uBAAuB,CACrC,KAA0B;IAE1B,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,QAAQ;QACvB,KAAK,CAAC,IAAI,KAAK,OAAO;QACtB,KAAK,CAAC,IAAI,KAAK,UAAU,CAC1B,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAC9B,OAA2B,EAC3B,EAAU;IAEV,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC;AAC5D,CAAC;AAED,SAAgB,6BAA6B,CAAC,MAAuB;IAInE,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,KAAK;QAChB,IAAI,EAAE,MAAM,CAAC,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,SAAgB,wBAAwB,CAAC,KAAa;IACpD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAElC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAEvC,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAED,SAAgB,mBAAmB,CACjC,KAAyB,EACzB,KAGC;IAED,IAAI,OAAO,KAAK,KAAK,WAAW,EAAE,CAAC;QACjC,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QACvD,OAAO,KAAK,CAAC,GAAG,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,0BAA0B,GAG1B;IACJ,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE;IAC5B,EAAE,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE;IAChC,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE;IACjC,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE;IAC1C,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE;IAC9B,EAAE,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,EAAE;CACxC,CAAC;AAEF,SAAS,4BAA4B,CACnC,KAA0B;IAE1B,IAAI,OAAO,KAAK,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;QAC9C,OAAO,KAAK,CAAC,YAAY,CAAC;IAC5B,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAiC;IAEjC,IAAI,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,qBAAqB,CAC5B,IAAyB,EACzB,KAA0B,EAC1B,KAAiC;IAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,sBAAsB,CAC3B,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EACjC,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,CACd,CAAC;IACJ,CAAC;IAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,OAAO,sBAAsB,CAC3B,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACnE,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,QAAQ,CACd,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAwB,EACxB,IAAyB;IAEzB,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,uBAAuB,CAC9B,KAAiC,EACjC,IAAyB;IAEzB,MAAM,WAAW,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,sBAAsB,CAAC,WAAW,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,sBAAsB,CAC7B,WAA4B,EAC5B,aAA8B,EAC9B,QAA2B;IAE3B,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,WAAW,KAAK,aAAa,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,KAAK,WAAW,EAAE,CAAC;QAC7B,OAAO,WAAW,KAAK,aAAa,CAAC;IACvC,CAAC;IAED,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;QAC/B,OAAO,WAAW,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,IAAI,QAAQ,KAAK,oBAAoB,EAAE,CAAC;QACtC,OAAO,WAAW,IAAI,aAAa,CAAC;IACtC,CAAC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,OAAO,WAAW,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,OAAO,WAAW,IAAI,aAAa,CAAC;AACtC,CAAC;AAED,SAAS,+BAA+B,CACtC,MAA0B;IAE1B,MAAM,SAAS,GAAgD;QAC7D,IAAI,EAAE,WAAW;QACjB,GAAG,EAAE,UAAU;QACf,IAAI,EAAE,iBAAiB;QACvB,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,aAAa;QAClB,IAAI,EAAE,oBAAoB;KAC3B,CAAC;IAEF,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,2BAA2B,CAAC,QAA2B;IAC9D,MAAM,OAAO,GAAgD;QAC3D,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,GAAG;QAChB,kBAAkB,EAAE,IAAI;QACxB,QAAQ,EAAE,GAAG;QACb,eAAe,EAAE,IAAI;QACrB,SAAS,EAAE,IAAI;KAChB,CAAC;IAEF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAa;IAC1C,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IAElC,IACE,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5D,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC5D,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAA0B,EAC1B,KAAa;IAEb,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9C,CAAC;IAED,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,0BAA0B,CAAC,KAA0B;IAC5D,OAAO,CACL,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,KAAK,CAAC,IAAI,KAAK,UAAU;QACzB,KAAK,CAAC,IAAI,KAAK,OAAO;QACtB,KAAK,CAAC,IAAI,KAAK,QAAQ,CACxB,CAAC;AACJ,CAAC;AAED,MAAM,kBAAkB,GAAG,sBAAsB,CAAC;AAClD,MAAM,uBAAuB,GAAG,iCAAiC,CAAC;AAElE,SAAS,oBAAoB,CAAC,KAAa;IACzC,IAAI,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,CAAC,QAAQ,GAAG,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACvE,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAE/D,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEpE,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAE7B,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACpD,CAAC;AAED,SAAS,eAAe,CAAC,IAAU;IACjC,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,WAAW,CAC7E,IAAI,CAAC,OAAO,EAAE,CACf,EAAE,CAAC;AACN,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./form-api"), exports);
5
+ tslib_1.__exportStar(require("./form-rendering"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/bpm-core-client/src/lib/form/index.ts"],"names":[],"mappings":";;;AAAA,qDAA2B;AAC3B,2DAAiC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Sends a single GraphQL operation to the BPM host and returns the typed data.
3
+ *
4
+ * Uses the standard Fetch API with `credentials: 'include'`, so any
5
+ * HTTP-only session cookie issued by the host's `POST /auth/login` endpoint
6
+ * flows back automatically on subsequent calls.
7
+ *
8
+ * The endpoint URL is resolved by {@link readGraphQlEndpoint} — set
9
+ * `NEXT_PUBLIC_API_URL` to override the default localhost / same-origin
10
+ * resolution.
11
+ *
12
+ * Throws an `Error` when the HTTP response is non-2xx, when the GraphQL
13
+ * payload carries an `errors` array, or when the response has no `data`
14
+ * field.
15
+ *
16
+ * @typeParam TData - Shape of the `data` field for the operation.
17
+ * @param query - GraphQL operation document (query or mutation source).
18
+ * @param variables - Variables passed to the GraphQL operation.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * interface PingData { readonly memberCount: number; }
23
+ * const data = await requestGraphQl<PingData>('query Ping { memberCount }');
24
+ * console.log(data.memberCount);
25
+ * ```
26
+ */
27
+ export declare function requestGraphQl<TData>(query: string, variables?: Readonly<Record<string, unknown>>): Promise<TData>;
28
+ /**
29
+ * Resolves the GraphQL endpoint URL used by {@link requestGraphQl}.
30
+ *
31
+ * Resolution order:
32
+ * 1. `process.env.NEXT_PUBLIC_API_URL` if non-empty.
33
+ * 2. `http://localhost:17603/graphql` when the browser is on
34
+ * `localhost` / `127.0.0.1`.
35
+ * 3. Same-origin `/graphql` for any other hostname (and for non-browser
36
+ * runtimes such as Node SSR).
37
+ */
38
+ export declare function readGraphQlEndpoint(): string;
39
+ /**
40
+ * Pure helper used by {@link readGraphQlEndpoint}.
41
+ *
42
+ * Exposed mainly for tests and for hosts that want to derive their own
43
+ * endpoint URLs without coupling to environment variables.
44
+ */
45
+ export declare function resolveDefaultGraphQlEndpoint(hostname: string | null): string;
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requestGraphQl = requestGraphQl;
4
+ exports.readGraphQlEndpoint = readGraphQlEndpoint;
5
+ exports.resolveDefaultGraphQlEndpoint = resolveDefaultGraphQlEndpoint;
6
+ const LOCAL_GRAPHQL_ENDPOINT = 'http://localhost:17603/graphql';
7
+ const SAME_ORIGIN_GRAPHQL_ENDPOINT = '/graphql';
8
+ /**
9
+ * Sends a single GraphQL operation to the BPM host and returns the typed data.
10
+ *
11
+ * Uses the standard Fetch API with `credentials: 'include'`, so any
12
+ * HTTP-only session cookie issued by the host's `POST /auth/login` endpoint
13
+ * flows back automatically on subsequent calls.
14
+ *
15
+ * The endpoint URL is resolved by {@link readGraphQlEndpoint} — set
16
+ * `NEXT_PUBLIC_API_URL` to override the default localhost / same-origin
17
+ * resolution.
18
+ *
19
+ * Throws an `Error` when the HTTP response is non-2xx, when the GraphQL
20
+ * payload carries an `errors` array, or when the response has no `data`
21
+ * field.
22
+ *
23
+ * @typeParam TData - Shape of the `data` field for the operation.
24
+ * @param query - GraphQL operation document (query or mutation source).
25
+ * @param variables - Variables passed to the GraphQL operation.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * interface PingData { readonly memberCount: number; }
30
+ * const data = await requestGraphQl<PingData>('query Ping { memberCount }');
31
+ * console.log(data.memberCount);
32
+ * ```
33
+ */
34
+ async function requestGraphQl(query, variables) {
35
+ const response = await fetch(readGraphQlEndpoint(), {
36
+ body: JSON.stringify({ query, variables }),
37
+ credentials: 'include',
38
+ headers: buildGraphQlHeaders(),
39
+ method: 'POST',
40
+ });
41
+ if (!response.ok) {
42
+ throw new Error(`GraphQL request failed with HTTP ${response.status}`);
43
+ }
44
+ const payload = (await response.json());
45
+ if (payload.errors?.length) {
46
+ throw new Error(payload.errors.map((error) => error.message).join('; '));
47
+ }
48
+ if (!payload.data) {
49
+ throw new Error('GraphQL response did not include data');
50
+ }
51
+ return payload.data;
52
+ }
53
+ /**
54
+ * Resolves the GraphQL endpoint URL used by {@link requestGraphQl}.
55
+ *
56
+ * Resolution order:
57
+ * 1. `process.env.NEXT_PUBLIC_API_URL` if non-empty.
58
+ * 2. `http://localhost:17603/graphql` when the browser is on
59
+ * `localhost` / `127.0.0.1`.
60
+ * 3. Same-origin `/graphql` for any other hostname (and for non-browser
61
+ * runtimes such as Node SSR).
62
+ */
63
+ function readGraphQlEndpoint() {
64
+ return (readOptionalPublicEnvValue(process.env.NEXT_PUBLIC_API_URL) ??
65
+ resolveDefaultGraphQlEndpoint(readBrowserHostname()));
66
+ }
67
+ /**
68
+ * Pure helper used by {@link readGraphQlEndpoint}.
69
+ *
70
+ * Exposed mainly for tests and for hosts that want to derive their own
71
+ * endpoint URLs without coupling to environment variables.
72
+ */
73
+ function resolveDefaultGraphQlEndpoint(hostname) {
74
+ return isLocalHost(hostname)
75
+ ? LOCAL_GRAPHQL_ENDPOINT
76
+ : SAME_ORIGIN_GRAPHQL_ENDPOINT;
77
+ }
78
+ function buildGraphQlHeaders() {
79
+ return {
80
+ 'Content-Type': 'application/json',
81
+ };
82
+ }
83
+ function readOptionalPublicEnvValue(value) {
84
+ return value?.trim() || null;
85
+ }
86
+ function readBrowserHostname() {
87
+ return typeof window === 'undefined' ? null : window.location.hostname;
88
+ }
89
+ function isLocalHost(hostname) {
90
+ return hostname === 'localhost' || hostname === '127.0.0.1';
91
+ }
92
+ //# sourceMappingURL=graphql-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql-client.js","sourceRoot":"","sources":["../../../../../libs/bpm-core-client/src/lib/graphql-client.ts"],"names":[],"mappings":";;AAsCA,wCA0BC;AAYD,kDAKC;AAQD,sEAMC;AA/FD,MAAM,sBAAsB,GAAG,gCAAgC,CAAC;AAChE,MAAM,4BAA4B,GAAG,UAAU,CAAC;AAWhD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACI,KAAK,UAAU,cAAc,CAClC,KAAa,EACb,SAA6C;IAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,mBAAmB,EAAE,EAAE;QAClD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAC1C,WAAW,EAAE,SAAS;QACtB,OAAO,EAAE,mBAAmB,EAAE;QAC9B,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,oCAAoC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA2B,CAAC;IAElE,IAAI,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,CAAC;AACtB,CAAC;AAED;;;;;;;;;GASG;AACH,SAAgB,mBAAmB;IACjC,OAAO,CACL,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAC3D,6BAA6B,CAAC,mBAAmB,EAAE,CAAC,CACrD,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,SAAgB,6BAA6B,CAC3C,QAAuB;IAEvB,OAAO,WAAW,CAAC,QAAQ,CAAC;QAC1B,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,4BAA4B,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;QACL,cAAc,EAAE,kBAAkB;KACnC,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CAAC,KAAyB;IAC3D,OAAO,KAAK,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;AAC/B,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,QAAuB;IAC1C,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Member profile record exposed by the BPM identity GraphQL surface.
3
+ *
4
+ * `customFieldsJson` is a stringified JSON blob — BPM does not impose a
5
+ * schema on host-side member metadata. Consumers parse it according to
6
+ * their own host conventions.
7
+ */
8
+ export interface MemberProfileRecord {
9
+ readonly customFieldsJson: string;
10
+ readonly email: string;
11
+ readonly memberId: string;
12
+ readonly name: string;
13
+ }
14
+ /**
15
+ * A paginated slice of the host member directory, returned by
16
+ * {@link listMemberDirectoryPage}.
17
+ */
18
+ export interface MemberDirectoryPage {
19
+ readonly members: readonly MemberProfileRecord[];
20
+ readonly totalCount: number;
21
+ }
22
+ /**
23
+ * Resolves a set of `memberId`s into full member profile records by hitting
24
+ * BPM's `members(memberIds: [String!]!)` GraphQL query, which in turn calls
25
+ * the host-provided `BPMMemberResolver.resolveMany`.
26
+ *
27
+ * Returns an empty array when given an empty input — does not make a
28
+ * network call in that case.
29
+ */
30
+ export declare function resolveMembers(memberIds: readonly string[]): Promise<readonly MemberProfileRecord[]>;
31
+ /**
32
+ * Free-text search over the host's member directory through BPM's
33
+ * `searchMembers(searchText: String!)` query. The matching strategy is
34
+ * defined by the host's `BPMMemberResolver.search` implementation.
35
+ */
36
+ export declare function searchMembers(searchText: string): Promise<readonly MemberProfileRecord[]>;
37
+ /**
38
+ * Reads a single page of the member directory (search + total count in a
39
+ * single GraphQL roundtrip).
40
+ *
41
+ * @param page - 1-based page index.
42
+ * @param pageSize - Items per page.
43
+ * @param searchText - Optional free-text filter; empty string returns all.
44
+ */
45
+ export declare function listMemberDirectoryPage({ page, pageSize, searchText, }: {
46
+ readonly page: number;
47
+ readonly pageSize: number;
48
+ readonly searchText?: string;
49
+ }): Promise<MemberDirectoryPage>;