@uides/stepwise 2.2.1 → 2.2.3
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/CHANGELOG.md +11 -2
- package/generators/extractStepwisePossibleValues.d.mts +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/schemas/action.d.ts +48 -168
- package/schemas/action.js +34 -47
- package/schemas/field/afm/index.d.ts +158 -6
- package/schemas/field/afm/index.js +6 -9
- package/schemas/field/amka/index.d.ts +152 -8
- package/schemas/field/amka/index.js +3 -7
- package/schemas/field/attachment/index.d.ts +184 -16
- package/schemas/field/attachment/index.js +9 -22
- package/schemas/field/captcha/index.d.ts +156 -2
- package/schemas/field/captcha/index.js +6 -9
- package/schemas/field/choice/index.d.ts +188 -15
- package/schemas/field/choice/index.js +4 -9
- package/schemas/field/common.d.ts +92 -40
- package/schemas/field/common.js +78 -11
- package/schemas/field/date/index.d.ts +152 -38
- package/schemas/field/date/index.js +6 -33
- package/schemas/field/doc_subtitle/index.d.ts +158 -5
- package/schemas/field/doc_subtitle/index.js +5 -6
- package/schemas/field/doc_title/index.d.ts +154 -8
- package/schemas/field/doc_title/index.js +5 -12
- package/schemas/field/dynamically-filled-text/index.d.ts +170 -33
- package/schemas/field/dynamically-filled-text/index.js +6 -23
- package/schemas/field/email/index.d.ts +152 -8
- package/schemas/field/email/index.js +5 -9
- package/schemas/field/fillable-string/index.d.ts +156 -12
- package/schemas/field/fillable-string/index.js +4 -10
- package/schemas/field/five-block-date/index.d.ts +156 -2
- package/schemas/field/five-block-date/index.js +5 -4
- package/schemas/field/hidden/index.d.ts +161 -14
- package/schemas/field/hidden/index.js +7 -15
- package/schemas/field/hierarchical-selector/index.d.ts +176 -37
- package/schemas/field/hierarchical-selector/index.js +5 -21
- package/schemas/field/iban/index.d.ts +168 -6
- package/schemas/field/iban/index.js +3 -3
- package/schemas/field/image/index.d.ts +168 -16
- package/schemas/field/image/index.js +7 -23
- package/schemas/field/index.d.ts +2 -7
- package/schemas/field/index.js +8 -15
- package/schemas/field/int/index.d.ts +152 -8
- package/schemas/field/int/index.js +5 -9
- package/schemas/field/intl_mobile_phone/index.d.ts +156 -3
- package/schemas/field/intl_mobile_phone/index.js +5 -5
- package/schemas/field/lab-results/index.d.ts +156 -3
- package/schemas/field/lab-results/index.js +6 -6
- package/schemas/field/mobile_phone/index.d.ts +158 -5
- package/schemas/field/mobile_phone/index.js +5 -6
- package/schemas/field/multiple-choice/index.d.ts +180 -12
- package/schemas/field/multiple-choice/index.js +3 -8
- package/schemas/field/password/index.d.ts +156 -2
- package/schemas/field/password/index.js +5 -5
- package/schemas/field/pdf-image/index.d.ts +152 -14
- package/schemas/field/pdf-image/index.js +6 -18
- package/schemas/field/postal_code/index.d.ts +156 -4
- package/schemas/field/postal_code/index.js +6 -8
- package/schemas/field/preference-multiple-choice/index.d.ts +211 -17
- package/schemas/field/preference-multiple-choice/index.js +5 -9
- package/schemas/field/qrcode/index.d.ts +168 -19
- package/schemas/field/qrcode/index.js +6 -18
- package/schemas/field/quote/index.d.ts +170 -11
- package/schemas/field/quote/index.js +4 -12
- package/schemas/field/radio-choice/index.d.ts +172 -9
- package/schemas/field/radio-choice/index.js +4 -10
- package/schemas/field/rate/index.d.ts +150 -8
- package/schemas/field/rate/index.js +4 -7
- package/schemas/field/recipient/index.d.ts +158 -5
- package/schemas/field/recipient/index.js +5 -9
- package/schemas/field/redirect/index.d.ts +156 -6
- package/schemas/field/redirect/index.js +6 -9
- package/schemas/field/refcode/index.d.ts +168 -16
- package/schemas/field/refcode/index.js +6 -20
- package/schemas/field/string/index.d.ts +226 -65
- package/schemas/field/string/index.js +5 -54
- package/schemas/field/text/index.d.ts +170 -33
- package/schemas/field/text/index.js +5 -30
- package/schemas/field/three-block-date/index.d.ts +176 -12
- package/schemas/field/three-block-date/index.js +4 -10
- package/schemas/field/url/index.d.ts +204 -0
- package/schemas/field/url/index.js +16 -0
- package/schemas/fieldset/component-params.d.ts +9 -41
- package/schemas/fieldset/component-params.js +5 -29
- package/schemas/fieldset/display-components.d.ts +16 -244
- package/schemas/fieldset/display-components.js +6 -19
- package/schemas/fieldset/enums.d.ts +0 -22
- package/schemas/fieldset/enums.js +1 -15
- package/schemas/fieldset/index.d.ts +9 -93
- package/schemas/index.d.ts +1 -1
- package/schemas/index.js +1 -1
- package/schemas/step.d.ts +7 -0
- package/schemas/step.js +2 -1
- package/schemas/{template/template.d.ts → template.d.ts} +47 -23
- package/schemas/template.js +26 -0
- package/src/generators/actions-possible-values/document-anon-create.json +19 -0
- package/src/generators/actions-possible-values/document-backstep.json +19 -0
- package/src/generators/actions-possible-values/document-create-new.json +43 -0
- package/src/generators/actions-possible-values/document-create.json +20 -0
- package/src/generators/actions-possible-values/document-dismiss.json +36 -0
- package/src/generators/actions-possible-values/document-download-pdf.json +69 -0
- package/src/generators/actions-possible-values/document-email.json +42 -0
- package/src/generators/actions-possible-values/document-resend-otp.json +30 -0
- package/src/generators/actions-possible-values/document-revoke.json +46 -0
- package/src/generators/actions-possible-values/document-share.json +29 -0
- package/src/generators/actions-possible-values/document-sms.json +38 -0
- package/src/generators/actions-possible-values/document-temporary-save.json +28 -0
- package/src/generators/actions-possible-values/document-update.json +111 -0
- package/src/generators/actions-possible-values/entity-forward.json +31 -0
- package/src/generators/actions-possible-values/entity-reply.json +31 -0
- package/src/generators/actions-possible-values/entity-send-message.json +34 -0
- package/src/generators/actions-possible-values/hidden.json +22 -0
- package/src/generators/actions-possible-values/link.json +43 -0
- package/src/generators/extractStepwisePossibleValues.mjs +139 -0
- package/src/generators/fields-possible-values/afm.json +94 -0
- package/src/generators/fields-possible-values/amka.json +26 -0
- package/src/generators/fields-possible-values/attachment.json +89 -0
- package/src/generators/fields-possible-values/captcha.json +16 -0
- package/src/generators/fields-possible-values/choice.json +432 -0
- package/src/generators/fields-possible-values/date.json +57 -0
- package/src/generators/fields-possible-values/doc_subtitle.json +26 -0
- package/src/generators/fields-possible-values/doc_title.json +63 -0
- package/src/generators/fields-possible-values/dynamically-filled-text.json +47 -0
- package/src/generators/fields-possible-values/email.json +65 -0
- package/src/generators/fields-possible-values/fillable-string.json +47 -0
- package/src/generators/fields-possible-values/five-block-date.json +23 -0
- package/src/generators/fields-possible-values/hidden.json +140 -0
- package/src/generators/fields-possible-values/hierarchical-selector.json +84 -0
- package/src/generators/fields-possible-values/iban.json +35 -0
- package/src/generators/fields-possible-values/image.json +37 -0
- package/src/generators/fields-possible-values/int.json +52 -0
- package/src/generators/fields-possible-values/intl_mobile_phone.json +32 -0
- package/src/generators/fields-possible-values/lab-results.json +19 -0
- package/src/generators/fields-possible-values/mobile_phone.json +45 -0
- package/src/generators/fields-possible-values/multiple-choice.json +128 -0
- package/src/generators/fields-possible-values/password.json +20 -0
- package/src/generators/fields-possible-values/pdf-image.json +70 -0
- package/src/generators/fields-possible-values/postal_code.json +32 -0
- package/src/generators/fields-possible-values/preference-multiple-choice.json +53 -0
- package/src/generators/fields-possible-values/qrcode.json +75 -0
- package/src/generators/fields-possible-values/quote.json +71 -0
- package/src/generators/fields-possible-values/radio-choice.json +209 -0
- package/src/generators/fields-possible-values/rate.json +26 -0
- package/src/generators/fields-possible-values/recipient.json +46 -0
- package/src/generators/fields-possible-values/redirect.json +22 -0
- package/src/generators/fields-possible-values/refcode.json +89 -0
- package/src/generators/fields-possible-values/string.json +778 -0
- package/src/generators/fields-possible-values/text.json +105 -0
- package/src/generators/fields-possible-values/three-block-date.json +83 -0
- package/src/generators/fields-possible-values/url.json +23 -0
- package/src/generators/fieldsets-possible-values/form.json +311 -0
- package/src/generators/fieldsets-possible-values/hidden.json +107 -0
- package/src/generators/fieldsets-possible-values/unknown.json +69 -0
- package/src/generators/fieldsets-possible-values/values-list.json +364 -0
- package/src/schemas/action.ts +44 -58
- package/src/schemas/field/afm/index.ts +8 -6
- package/src/schemas/field/amka/index.ts +7 -9
- package/src/schemas/field/attachment/index.ts +9 -23
- package/src/schemas/field/captcha/index.ts +8 -3
- package/src/schemas/field/choice/index.ts +7 -5
- package/src/schemas/field/common.spec.ts +0 -3
- package/src/schemas/field/common.ts +115 -53
- package/src/schemas/field/date/index.ts +8 -24
- package/src/schemas/field/doc_subtitle/index.ts +7 -4
- package/src/schemas/field/doc_title/index.ts +7 -14
- package/src/schemas/field/dynamically-filled-text/index.ts +7 -15
- package/src/schemas/field/email/index.ts +7 -9
- package/src/schemas/field/fillable-string/index.ts +7 -11
- package/src/schemas/field/five-block-date/index.ts +7 -2
- package/src/schemas/field/hidden/index.ts +15 -40
- package/src/schemas/field/hierarchical-selector/index.ts +8 -18
- package/src/schemas/field/iban/index.ts +7 -3
- package/src/schemas/field/image/index.ts +8 -10
- package/src/schemas/field/index.ts +8 -33
- package/src/schemas/field/int/index.ts +7 -9
- package/src/schemas/field/intl_mobile_phone/index.ts +7 -3
- package/src/schemas/field/lab-results/index.ts +7 -3
- package/src/schemas/field/mobile_phone/index.ts +7 -4
- package/src/schemas/field/multiple-choice/index.ts +7 -5
- package/src/schemas/field/password/index.ts +8 -3
- package/src/schemas/field/pdf-image/index.ts +8 -12
- package/src/schemas/field/postal_code/index.ts +8 -5
- package/src/schemas/field/preference-multiple-choice/index.ts +8 -7
- package/src/schemas/field/qrcode/index.ts +7 -10
- package/src/schemas/field/quote/index.ts +8 -8
- package/src/schemas/field/radio-choice/index.ts +7 -5
- package/src/schemas/field/rate/index.ts +7 -8
- package/src/schemas/field/recipient/index.ts +7 -4
- package/src/schemas/field/redirect/index.ts +7 -6
- package/src/schemas/field/refcode/index.ts +7 -21
- package/src/schemas/field/string/index.ts +7 -42
- package/src/schemas/field/text/index.ts +8 -16
- package/src/schemas/field/three-block-date/index.ts +7 -6
- package/src/schemas/field/url/index.ts +24 -0
- package/src/schemas/fieldset/component-params.ts +4 -20
- package/src/schemas/fieldset/display-components.ts +5 -36
- package/src/schemas/fieldset/enums.ts +0 -38
- package/src/schemas/step.ts +1 -0
- package/src/schemas/{template/template-base.ts → template.ts} +30 -6
- package/src/utils/index.ts +69 -2
- package/utils/index.js +28 -2
- package/schemas/field/consent-content/index.d.ts +0 -68
- package/schemas/field/consent-content/index.js +0 -19
- package/schemas/field/image-crop/index.d.ts +0 -59
- package/schemas/field/image-crop/index.js +0 -19
- package/schemas/field/landline_phone/index.d.ts +0 -48
- package/schemas/field/landline_phone/index.js +0 -14
- package/schemas/field/link/index.d.ts +0 -50
- package/schemas/field/link/index.js +0 -16
- package/schemas/field/phone/index.d.ts +0 -48
- package/schemas/field/phone/index.js +0 -14
- package/schemas/field/url-param/index.d.ts +0 -57
- package/schemas/field/url-param/index.js +0 -14
- package/schemas/template/index.d.ts +0 -2
- package/schemas/template/index.js +0 -2
- package/schemas/template/template-base.d.ts +0 -53
- package/schemas/template/template-base.js +0 -15
- package/schemas/template/template-source.d.ts +0 -50
- package/schemas/template/template-source.js +0 -14
- package/schemas/template/template.js +0 -22
- package/src/schemas/field/consent-content/index.ts +0 -28
- package/src/schemas/field/image-crop/index.ts +0 -25
- package/src/schemas/field/landline_phone/index.ts +0 -18
- package/src/schemas/field/link/index.ts +0 -20
- package/src/schemas/field/phone/index.ts +0 -18
- package/src/schemas/field/url-param/index.ts +0 -23
- package/src/schemas/template/index.ts +0 -2
- package/src/schemas/template/template-source.ts +0 -88
- package/src/schemas/template/template.ts +0 -49
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const RadioChoiceDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
@@ -12,20 +16,18 @@ const RadioChoiceDisplaySchema = createFieldDisplay(
|
|
|
12
16
|
),
|
|
13
17
|
'choices-order': v.nullish(v.string()),
|
|
14
18
|
'component-params': v.nullish(
|
|
15
|
-
|
|
19
|
+
createComponentParams({
|
|
16
20
|
'legacy-mode': v.boolean(),
|
|
17
21
|
})
|
|
18
22
|
),
|
|
19
23
|
})
|
|
20
24
|
);
|
|
21
25
|
|
|
22
|
-
const RadioChoiceSchema =
|
|
26
|
+
const RadioChoiceSchema = createFieldSchema({
|
|
23
27
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
24
28
|
display: RadioChoiceDisplaySchema,
|
|
25
29
|
'default-value': v.nullish(v.string()),
|
|
26
30
|
'choices-source-fn': v.nullish(v.string()),
|
|
27
|
-
datatype: v.nullish(v.picklist(['document_id', 'radio-choice', 'string'])),
|
|
28
|
-
attribute: v.nullish(v.string()),
|
|
29
31
|
});
|
|
30
32
|
|
|
31
33
|
export type RadioChoiceType = v.InferOutput<typeof RadioChoiceSchema>;
|
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const RateDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('rate'),
|
|
7
|
-
'component-params': v.nullish(
|
|
8
|
-
v.strictObject({
|
|
9
|
-
dependencies: v.array(v.string()),
|
|
10
|
-
'dependencies-error-message': v.string(),
|
|
11
|
-
})
|
|
12
|
-
),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
13
12
|
})
|
|
14
13
|
);
|
|
15
14
|
|
|
16
|
-
const RateSchema =
|
|
15
|
+
const RateSchema = createFieldSchema({
|
|
17
16
|
'user-input-mode': v.picklist(['noinput', 'optional']),
|
|
18
17
|
display: RateDisplaySchema,
|
|
19
18
|
});
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const RecipientDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('recipient'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
7
12
|
})
|
|
8
13
|
);
|
|
9
14
|
|
|
10
|
-
const RecipientSchema =
|
|
15
|
+
const RecipientSchema = createFieldSchema({
|
|
11
16
|
display: RecipientDisplaySchema,
|
|
12
17
|
'user-input-mode': v.picklist(['noinput', 'required']),
|
|
13
|
-
datatype: v.nullish(v.picklist(['recipient', 'entity_recipient'])),
|
|
14
18
|
'default-value': v.nullish(v.string()),
|
|
15
|
-
attribute: v.nullish(v.string()),
|
|
16
19
|
});
|
|
17
20
|
|
|
18
21
|
export type RecipientType = v.InferOutput<typeof RecipientSchema>;
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const RedirectDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('redirect'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
7
12
|
})
|
|
8
13
|
);
|
|
9
14
|
|
|
10
|
-
const RedirectSchema =
|
|
15
|
+
const RedirectSchema = createFieldSchema({
|
|
11
16
|
'user-input-mode': v.literal('noinput'),
|
|
12
17
|
display: RedirectDisplaySchema,
|
|
13
|
-
sources: v.nullish(v.string()),
|
|
14
|
-
'value-constructor': v.nullish(v.string()),
|
|
15
|
-
attribute: v.nullish(v.string()),
|
|
16
|
-
datatype: v.nullish(v.literal('string')),
|
|
17
18
|
});
|
|
18
19
|
|
|
19
20
|
export type RedirectType = v.InferOutput<typeof RedirectSchema>;
|
|
@@ -1,39 +1,25 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const RefcodeDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('refcode'),
|
|
7
11
|
'component-params': v.nullish(
|
|
8
|
-
|
|
9
|
-
'later-pages': v.nullish(v.boolean()),
|
|
12
|
+
createComponentParams({
|
|
10
13
|
label: v.nullish(v.string()),
|
|
11
|
-
coordinates: v.nullish(v.array(v.nullable(v.number()))),
|
|
12
|
-
})
|
|
13
|
-
),
|
|
14
|
-
}),
|
|
15
|
-
v.strictObject({
|
|
16
|
-
component: v.literal('refcode'),
|
|
17
|
-
// TODO: Make pdf component-params also inherit default component-params
|
|
18
|
-
'component-params': v.nullish(
|
|
19
|
-
v.strictObject({
|
|
20
|
-
'later-pages': v.nullish(v.boolean()),
|
|
21
|
-
label: v.nullish(v.string()),
|
|
22
|
-
coordinates: v.nullish(v.array(v.nullable(v.number()))),
|
|
23
|
-
fontName: v.nullish(v.literal('Font-Mono')),
|
|
24
14
|
})
|
|
25
15
|
),
|
|
26
16
|
})
|
|
27
17
|
);
|
|
28
18
|
|
|
29
|
-
const RefcodeSchema =
|
|
19
|
+
const RefcodeSchema = createFieldSchema({
|
|
30
20
|
display: RefcodeDisplaySchema,
|
|
31
|
-
sources: v.nullish(v.string()),
|
|
32
|
-
'value-constructor': v.nullish(v.string()),
|
|
33
21
|
'user-input-mode': v.literal('noinput'),
|
|
34
|
-
'is-display-field': v.nullish(v.boolean()),
|
|
35
22
|
value: v.nullish(v.string()),
|
|
36
|
-
datatype: v.nullish(v.literal('string')),
|
|
37
23
|
});
|
|
38
24
|
|
|
39
25
|
export type RefcodeType = v.InferOutput<typeof RefcodeSchema>;
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const StringFieldDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.nullish(v.literal('string')),
|
|
7
11
|
'component-params': v.nullish(
|
|
8
|
-
|
|
9
|
-
position: v.nullish(v.picklist(['center', 'justify', 'left', 'right'])),
|
|
12
|
+
createComponentParams({
|
|
10
13
|
enforceUppercase: v.nullish(v.boolean()),
|
|
11
14
|
multiplicity: v.nullish(v.number()),
|
|
12
15
|
multiplicityLabels: v.nullish(
|
|
@@ -18,57 +21,19 @@ const StringFieldDisplaySchema = createFieldDisplay(
|
|
|
18
21
|
emptyValueDisplay: v.nullish(v.string()),
|
|
19
22
|
})
|
|
20
23
|
),
|
|
21
|
-
format: v.nullish(v.literal('plaintext')),
|
|
22
|
-
textColor: v.nullish(v.string()),
|
|
23
24
|
'format-title': v.nullish(v.boolean()),
|
|
24
|
-
emph: v.nullish(v.boolean()),
|
|
25
|
-
bold: v.nullish(v.boolean()),
|
|
26
|
-
cell_valign: v.nullish(v.picklist(['BOTTOM', 'MIDDLE', 'TOP'])),
|
|
27
|
-
coordinates: v.nullish(v.array(v.nullable(v.number()))),
|
|
28
|
-
fontSize: v.nullish(v.number()),
|
|
29
|
-
leading: v.nullish(v.number()),
|
|
30
|
-
fontName: v.nullish(v.string()),
|
|
31
|
-
ignore_emph: v.nullish(v.boolean()),
|
|
32
|
-
'later-pages': v.nullish(v.boolean()),
|
|
33
|
-
attachment_retrieval: v.nullish(v.literal('no-content')),
|
|
34
|
-
backColor: v.nullish(v.string()),
|
|
35
25
|
})
|
|
36
26
|
),
|
|
37
|
-
}),
|
|
38
|
-
v.strictObject({
|
|
39
|
-
component: v.nullish(v.literal('string')),
|
|
40
|
-
emph: v.nullish(v.boolean()),
|
|
41
|
-
bold: v.nullish(v.boolean()),
|
|
42
|
-
fontSize: v.nullish(v.number()),
|
|
43
|
-
position: v.nullish(v.picklist(['center', 'justify', 'left', 'right'])),
|
|
44
27
|
})
|
|
45
28
|
);
|
|
46
29
|
|
|
47
|
-
const
|
|
48
|
-
v.picklist([
|
|
49
|
-
'amka',
|
|
50
|
-
'attachment',
|
|
51
|
-
'blood_group',
|
|
52
|
-
'document_id',
|
|
53
|
-
'idnumber',
|
|
54
|
-
'string',
|
|
55
|
-
'date',
|
|
56
|
-
])
|
|
57
|
-
);
|
|
58
|
-
|
|
59
|
-
const StringSchema = v.strictObject({
|
|
30
|
+
const StringSchema = createFieldSchema({
|
|
60
31
|
display: v.nullish(StringFieldDisplaySchema),
|
|
61
32
|
'user-input-mode': v.nullish(
|
|
62
33
|
v.picklist(['display', 'noinput', 'optional', 'required'])
|
|
63
34
|
),
|
|
64
|
-
attribute: v.nullish(v.string()),
|
|
65
35
|
value: v.nullish(v.string()),
|
|
66
36
|
'default-value': v.nullish(v.string()),
|
|
67
|
-
sources: v.nullish(v.string()),
|
|
68
|
-
'value-constructor': v.nullish(v.string()),
|
|
69
|
-
'is-display-field': v.nullish(v.boolean()),
|
|
70
|
-
datatype: StringDatatypeSchema,
|
|
71
|
-
'default-on-empty': v.nullish(v.string()),
|
|
72
37
|
safe: v.nullish(v.boolean()),
|
|
73
38
|
});
|
|
74
39
|
|
|
@@ -1,34 +1,26 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const TextDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('text'),
|
|
7
11
|
'component-params': v.nullish(
|
|
8
|
-
|
|
9
|
-
format: v.nullish(v.literal('plaintext')),
|
|
10
|
-
fontSize: v.nullish(v.number()),
|
|
11
|
-
leading: v.nullish(v.number()),
|
|
12
|
-
bold: v.nullish(v.boolean()),
|
|
13
|
-
textColor: v.nullish(v.string()),
|
|
14
|
-
position: v.nullish(v.picklist(['center', 'justify', 'left', 'right'])),
|
|
15
|
-
cell_valign: v.nullish(v.picklist(['BOTTOM', 'MIDDLE', 'TOP'])),
|
|
12
|
+
createComponentParams({
|
|
16
13
|
enforceUppercase: v.nullish(v.boolean()),
|
|
17
14
|
})
|
|
18
15
|
),
|
|
19
16
|
})
|
|
20
17
|
);
|
|
21
18
|
|
|
22
|
-
const TextSchema =
|
|
23
|
-
'user-input-mode': v.picklist(['
|
|
19
|
+
const TextSchema = createFieldSchema({
|
|
20
|
+
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
24
21
|
display: TextDisplaySchema,
|
|
25
22
|
value: v.nullish(v.string()),
|
|
26
23
|
'default-value': v.nullish(v.string()),
|
|
27
|
-
attribute: v.nullish(v.string()),
|
|
28
|
-
datatype: v.nullish(v.picklist(['text', 'string'])),
|
|
29
|
-
sources: v.nullish(v.string()),
|
|
30
|
-
'value-constructor': v.nullish(v.string()),
|
|
31
|
-
safe: v.nullish(v.boolean()),
|
|
32
24
|
});
|
|
33
25
|
|
|
34
26
|
export type TextType = v.InferOutput<typeof TextSchema>;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const ThreeBlockDateDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('three-block-date'),
|
|
7
11
|
'component-params': v.nullish(
|
|
8
|
-
|
|
12
|
+
createComponentParams({
|
|
9
13
|
max: v.literal('now'),
|
|
10
14
|
min: v.nullish(v.string()),
|
|
11
15
|
})
|
|
@@ -13,13 +17,10 @@ const ThreeBlockDateDisplaySchema = createFieldDisplay(
|
|
|
13
17
|
})
|
|
14
18
|
);
|
|
15
19
|
|
|
16
|
-
const ThreeBlockDateSchema =
|
|
20
|
+
const ThreeBlockDateSchema = createFieldSchema({
|
|
17
21
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
18
|
-
attribute: v.nullish(v.string()),
|
|
19
22
|
display: ThreeBlockDateDisplaySchema,
|
|
20
|
-
'default-on-empty': v.nullish(v.string()),
|
|
21
23
|
'default-value': v.nullish(v.string()),
|
|
22
|
-
datatype: v.nullish(v.picklist(['date', 'string'])),
|
|
23
24
|
});
|
|
24
25
|
|
|
25
26
|
export type ThreeBlockDateType = v.InferOutput<typeof ThreeBlockDateSchema>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as v from 'valibot';
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
7
|
+
|
|
8
|
+
const UrlDisplaySchema = createFieldDisplay(
|
|
9
|
+
v.strictObject({
|
|
10
|
+
component: v.literal('url'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
12
|
+
})
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
const UrlSchema = createFieldSchema({
|
|
16
|
+
'user-input-mode': v.picklist(['optional', 'noinput']),
|
|
17
|
+
display: UrlDisplaySchema,
|
|
18
|
+
'default-value': v.nullish(v.string()),
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export type UrlType = v.InferOutput<typeof UrlSchema>;
|
|
22
|
+
export type UrlSchemaType = v.GenericSchema<UrlType>;
|
|
23
|
+
|
|
24
|
+
export default UrlSchema as UrlSchemaType;
|
|
@@ -3,35 +3,27 @@ import * as v from 'valibot';
|
|
|
3
3
|
export const MultiplicityLabelsSchema = v.strictObject({
|
|
4
4
|
/** add dialog title */
|
|
5
5
|
addTitle: v.nullish(v.string()),
|
|
6
|
+
/** add dialog hint */
|
|
7
|
+
addHint: v.nullish(v.string()),
|
|
6
8
|
/** edit dialog title */
|
|
7
9
|
editTitle: v.nullish(v.string()),
|
|
8
10
|
/** add action */
|
|
9
11
|
addItem: v.nullish(v.string()),
|
|
10
|
-
/** remove item action */
|
|
11
|
-
removeItem: v.nullish(v.string()),
|
|
12
12
|
/** edit item action */
|
|
13
13
|
editItem: v.nullish(v.string()),
|
|
14
|
-
/** submit form action (add case) */
|
|
15
|
-
submitAdd: v.nullish(v.string()),
|
|
16
|
-
/** submit form action (edit case) */
|
|
17
|
-
submitEdit: v.nullish(v.string()),
|
|
18
|
-
/** cancel action */
|
|
19
|
-
cancel: v.nullish(v.string()),
|
|
20
14
|
/** empty selection message (form field) */
|
|
21
15
|
empty: v.nullish(v.string()),
|
|
22
|
-
/** empty selection message (field display) */
|
|
23
|
-
emptyValueDisplay: v.nullish(v.string()),
|
|
24
16
|
});
|
|
25
17
|
export type MultiplicityLabels = v.InferOutput<typeof MultiplicityLabelsSchema>;
|
|
26
18
|
|
|
27
19
|
export const OtherComponentParamsSchema = v.strictObject({
|
|
28
|
-
page_break: v.nullish(v.boolean()),
|
|
29
20
|
sticky_title: v.nullish(v.boolean()),
|
|
30
21
|
multiplicity: v.nullish(v.number()),
|
|
31
22
|
multiplicityLabels: v.nullish(MultiplicityLabelsSchema),
|
|
32
23
|
required: v.nullish(v.boolean()),
|
|
33
24
|
fixed: v.nullish(v.boolean()),
|
|
34
25
|
layout: v.nullish(v.picklist(['entry', 'card'])),
|
|
26
|
+
page_break: v.nullish(v.boolean()),
|
|
35
27
|
});
|
|
36
28
|
export type OtherComponentParams = v.InferOutput<
|
|
37
29
|
typeof OtherComponentParamsSchema
|
|
@@ -41,21 +33,13 @@ export const TableComponentParamsSchema = v.strictObject({
|
|
|
41
33
|
lines: v.optional(
|
|
42
34
|
v.nullable(v.picklist(['no', 'grid', 'outer', 'grid-round', 'outer-round']))
|
|
43
35
|
),
|
|
44
|
-
|
|
45
|
-
table_width_ratio: v.nullish(v.number()),
|
|
46
|
-
cell_halign: v.optional(v.nullable(v.picklist(['left', 'center', 'right']))),
|
|
47
|
-
cell_valign: v.optional(v.nullable(v.picklist(['BOTTOM', 'MIDDLE', 'TOP']))),
|
|
36
|
+
fontSize: v.nullish(v.number()),
|
|
48
37
|
cell_height: v.nullish(v.number()),
|
|
49
38
|
auto_columns: v.nullish(v.boolean()),
|
|
50
|
-
fontSize: v.nullish(v.number()),
|
|
51
|
-
no_split: v.nullish(v.boolean()),
|
|
52
39
|
spaceBefore: v.nullish(v.number()),
|
|
53
40
|
spaceAfter: v.nullish(v.number()),
|
|
54
41
|
omit_empty_values: v.nullish(v.boolean()),
|
|
55
|
-
background: v.nullish(v.string()),
|
|
56
42
|
coordinates: v.nullish(v.array(v.number())),
|
|
57
|
-
mirrored: v.nullish(v.boolean()),
|
|
58
|
-
handler: v.nullish(v.string()),
|
|
59
43
|
...OtherComponentParamsSchema.entries,
|
|
60
44
|
});
|
|
61
45
|
export type TableComponentParams = v.InferOutput<
|
|
@@ -3,51 +3,20 @@ import {
|
|
|
3
3
|
ComponentLayoutSchema,
|
|
4
4
|
DisplayLangSchema,
|
|
5
5
|
} from '@uides/stepwise/schemas/common';
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
TableComponentParamsSchema,
|
|
9
|
-
} from '@uides/stepwise/schemas/fieldset/component-params';
|
|
10
|
-
import {
|
|
11
|
-
PdfOtherComponentSchema,
|
|
12
|
-
PdfTableBasedComponentSchema,
|
|
13
|
-
WebComponentSchema,
|
|
14
|
-
} from '@uides/stepwise/schemas/fieldset/enums';
|
|
6
|
+
import { TableComponentParamsSchema } from '@uides/stepwise/schemas/fieldset/component-params';
|
|
7
|
+
import { WebComponentSchema } from '@uides/stepwise/schemas/fieldset/enums';
|
|
15
8
|
|
|
16
9
|
export const FieldsetWebDisplaySchema = v.strictObject({
|
|
17
10
|
/** The explanatory title of the fieldset */
|
|
18
11
|
title: v.nullish(v.string()),
|
|
12
|
+
/** The explanatory hint of the fieldset */
|
|
13
|
+
hint: v.nullish(v.string()),
|
|
19
14
|
component: WebComponentSchema,
|
|
20
15
|
'component-params': v.nullish(TableComponentParamsSchema),
|
|
21
16
|
layout: v.nullish(ComponentLayoutSchema),
|
|
22
17
|
});
|
|
23
18
|
export type FieldsetWebDisplay = v.InferOutput<typeof FieldsetWebDisplaySchema>;
|
|
24
19
|
|
|
25
|
-
export const FieldsetPdfDisplayTableSchema = v.strictObject({
|
|
26
|
-
/** The explanatory title of the fieldset */
|
|
27
|
-
title: v.nullish(v.string()),
|
|
28
|
-
component: PdfTableBasedComponentSchema,
|
|
29
|
-
'component-params': v.nullish(TableComponentParamsSchema),
|
|
30
|
-
});
|
|
31
|
-
export type FieldsetPdfDisplayTable = v.InferOutput<
|
|
32
|
-
typeof FieldsetPdfDisplayTableSchema
|
|
33
|
-
>;
|
|
34
|
-
|
|
35
|
-
export const FieldsetPdfDisplayOtherSchema = v.strictObject({
|
|
36
|
-
/** The explanatory title of the fieldset */
|
|
37
|
-
title: v.nullish(v.string()),
|
|
38
|
-
component: PdfOtherComponentSchema,
|
|
39
|
-
'component-params': v.nullish(OtherComponentParamsSchema),
|
|
40
|
-
});
|
|
41
|
-
export type FieldsetPdfDisplayOther = v.InferOutput<
|
|
42
|
-
typeof FieldsetPdfDisplayOtherSchema
|
|
43
|
-
>;
|
|
44
|
-
|
|
45
|
-
export const FieldsetPdfDisplaySchema = v.variant('component', [
|
|
46
|
-
FieldsetPdfDisplayTableSchema,
|
|
47
|
-
FieldsetPdfDisplayOtherSchema,
|
|
48
|
-
]);
|
|
49
|
-
export type FieldsetPdfDisplay = v.InferOutput<typeof FieldsetPdfDisplaySchema>;
|
|
50
|
-
|
|
51
20
|
export const FieldsetDisplaySchema = v.union([
|
|
52
21
|
v.looseObject({
|
|
53
22
|
default: v.record(DisplayLangSchema, FieldsetWebDisplaySchema),
|
|
@@ -56,7 +25,7 @@ export const FieldsetDisplaySchema = v.union([
|
|
|
56
25
|
web: v.record(DisplayLangSchema, FieldsetWebDisplaySchema),
|
|
57
26
|
}),
|
|
58
27
|
v.looseObject({
|
|
59
|
-
pdf: v.record(DisplayLangSchema,
|
|
28
|
+
pdf: v.record(DisplayLangSchema, v.any()),
|
|
60
29
|
}),
|
|
61
30
|
]);
|
|
62
31
|
|
|
@@ -9,41 +9,3 @@ import * as v from 'valibot';
|
|
|
9
9
|
*/
|
|
10
10
|
export const WebComponentSchema = v.picklist(['values-list', 'hidden', 'form']);
|
|
11
11
|
export type WebComponent = v.InferOutput<typeof WebComponentSchema>;
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
* Pdf table-based component type.
|
|
15
|
-
*
|
|
16
|
-
* @value 'values-list' Used for displaying values.
|
|
17
|
-
* @value 'table' Table. Ideal for displaying multiple fields, by showing both the field title and value. By using the field attributes 'title_md' and 'value_md', it is possible to align the fields in a custom way.
|
|
18
|
-
* @value 'one-liner-table' One-liner table. Ideal for displaying a single row per value.
|
|
19
|
-
* @value 'signature' Signature.
|
|
20
|
-
* @value 'footnotes' Footnotes.
|
|
21
|
-
* @value 'hidden' Hidden.
|
|
22
|
-
* @value 'custom' Custom.
|
|
23
|
-
*/
|
|
24
|
-
export const PdfTableBasedComponentSchema = v.picklist([
|
|
25
|
-
'values-list',
|
|
26
|
-
'table',
|
|
27
|
-
'one-liner-table',
|
|
28
|
-
'signature',
|
|
29
|
-
'footnotes',
|
|
30
|
-
'hidden',
|
|
31
|
-
'custom',
|
|
32
|
-
]);
|
|
33
|
-
export type PdfTableBasedComponent = v.InferOutput<
|
|
34
|
-
typeof PdfTableBasedComponentSchema
|
|
35
|
-
>;
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Pdf component type.
|
|
39
|
-
*
|
|
40
|
-
* @value 'header' Header.
|
|
41
|
-
* @value 'common' Common.
|
|
42
|
-
* @value 'plain-text' Plain text. Ideal for displaying fields with values that are large texts. It helps in displaying the text across multiple pages.
|
|
43
|
-
*/
|
|
44
|
-
export const PdfOtherComponentSchema = v.picklist([
|
|
45
|
-
'header',
|
|
46
|
-
'common',
|
|
47
|
-
'plain-text',
|
|
48
|
-
]);
|
|
49
|
-
export type PdfOtherComponent = v.InferOutput<typeof PdfOtherComponentSchema>;
|
package/src/schemas/step.ts
CHANGED
|
@@ -116,6 +116,7 @@ export const StepSchema = v.pipe(
|
|
|
116
116
|
'has-display-fields': v.nullish(v.boolean()),
|
|
117
117
|
targets: v.nullish(v.array(v.record(v.string(), v.any()))),
|
|
118
118
|
'post-step-claims': v.nullish(v.array(v.string())),
|
|
119
|
+
'pre-step-claims': v.nullish(v.array(v.string())),
|
|
119
120
|
}),
|
|
120
121
|
|
|
121
122
|
validateField('fieldsets', (fieldsets, step) => {
|
|
@@ -5,12 +5,12 @@ import {
|
|
|
5
5
|
} from '@uides/stepwise/schemas/step';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
|
-
* Describes a template
|
|
8
|
+
* Describes a template.
|
|
9
9
|
*
|
|
10
10
|
* A template is a set of steps that the user must complete in order to complete a process
|
|
11
11
|
* in the system, whether that is the issuance of a document or the entry of a request.
|
|
12
12
|
*/
|
|
13
|
-
export const
|
|
13
|
+
export const TemplateSchema = v.strictObject({
|
|
14
14
|
/**
|
|
15
15
|
* Template's creation date
|
|
16
16
|
*/
|
|
@@ -39,7 +39,7 @@ export const TemplateBaseSchema = v.strictObject({
|
|
|
39
39
|
* An entity's gate can be the owner of a template. If not specified, the template is considered
|
|
40
40
|
* to be owned by the "System".
|
|
41
41
|
*/
|
|
42
|
-
owner: v.string(),
|
|
42
|
+
owner: v.nullish(v.string()),
|
|
43
43
|
/** The template's unique identifier */
|
|
44
44
|
refname: v.string(),
|
|
45
45
|
/**
|
|
@@ -52,8 +52,32 @@ export const TemplateBaseSchema = v.strictObject({
|
|
|
52
52
|
* Specification of the steps of the template.
|
|
53
53
|
*/
|
|
54
54
|
steps_spec: v.nullish(StepsSpecSchema as unknown as StepsSpecSchemaType),
|
|
55
|
+
/**
|
|
56
|
+
* Whether the template is enabled or not.
|
|
57
|
+
*/
|
|
58
|
+
enabled: v.nullish(v.boolean()),
|
|
59
|
+
template_type: v.strictObject({
|
|
60
|
+
/** @default 'application' */
|
|
61
|
+
refname: v.string(),
|
|
62
|
+
/** @default [] */
|
|
63
|
+
fields: v.array(v.any()),
|
|
64
|
+
}),
|
|
65
|
+
consent_method: v.literal('login'),
|
|
66
|
+
/**
|
|
67
|
+
* Recipient's business title
|
|
68
|
+
* @deprecated
|
|
69
|
+
*/
|
|
70
|
+
recipient_hint: v.nullish(v.string()),
|
|
71
|
+
/**
|
|
72
|
+
* Claims that the application checks for in the user's session.
|
|
73
|
+
*
|
|
74
|
+
* @default ['mobile_certified_login','is_citizen_user','govgr_login']
|
|
75
|
+
*/
|
|
76
|
+
required_claims: v.array(v.string()),
|
|
77
|
+
login_endpoint: v.nullish(v.string()),
|
|
78
|
+
fields: v.nullish(v.array(v.any())),
|
|
79
|
+
'ui:legacy_renderer': v.nullish(v.boolean()),
|
|
55
80
|
});
|
|
81
|
+
export type Template = v.InferOutput<typeof TemplateSchema>;
|
|
56
82
|
|
|
57
|
-
export
|
|
58
|
-
|
|
59
|
-
export default TemplateBase;
|
|
83
|
+
export default Template;
|
package/src/utils/index.ts
CHANGED
|
@@ -27,7 +27,7 @@ export function collectIssues(
|
|
|
27
27
|
if (!issue?.issues) {
|
|
28
28
|
formattedIssues[path] = {
|
|
29
29
|
...formattedIssues[path],
|
|
30
|
-
[nestedPath]: issue
|
|
30
|
+
[nestedPath]: formatMessage(issue),
|
|
31
31
|
};
|
|
32
32
|
} else {
|
|
33
33
|
const nestedIssues: Record<string, string> = {};
|
|
@@ -60,10 +60,77 @@ function getNestedIssueMessage(
|
|
|
60
60
|
});
|
|
61
61
|
return nestedIssues;
|
|
62
62
|
} else {
|
|
63
|
-
return { [path]: issue
|
|
63
|
+
return { [path]: formatMessage(issue) };
|
|
64
64
|
}
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
+
/**
|
|
68
|
+
* Format a valibot issue into a clearer, actionable message.
|
|
69
|
+
*
|
|
70
|
+
* Handles common-but-noisy cases:
|
|
71
|
+
* - `strict_object` with `expected: 'never'` → unknown key
|
|
72
|
+
* - `variant` with no sub-issues → no matching schema, with component hint
|
|
73
|
+
* - `picklist` / `literal` mismatch → expected vs received with values
|
|
74
|
+
* - same `expected`/`received` labels (e.g. `Object` vs `Object`) → drop the
|
|
75
|
+
* useless "Expected X but received X" wording
|
|
76
|
+
*/
|
|
77
|
+
function formatMessage(issue: BaseIssue<unknown>): string {
|
|
78
|
+
const { type, expected, received, message, input } = issue;
|
|
79
|
+
|
|
80
|
+
if (type === 'strict_object' && expected === 'never') {
|
|
81
|
+
return `Unknown key ${received} not allowed`;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (type === 'variant') {
|
|
85
|
+
const components = extractDisplayComponents(input);
|
|
86
|
+
if (components.length > 0) {
|
|
87
|
+
const list = components.map((c) => `"${c}"`).join(', ');
|
|
88
|
+
return `No schema variant matches display component ${list}`;
|
|
89
|
+
}
|
|
90
|
+
return `No matching schema variant`;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (
|
|
94
|
+
(type === 'picklist' || type === 'literal') &&
|
|
95
|
+
expected != null &&
|
|
96
|
+
received != null
|
|
97
|
+
) {
|
|
98
|
+
return `Expected one of ${expected} but received ${received}`;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// valibot's literal/picklist can surface inside a `raw_check` when the
|
|
102
|
+
// schema author misuses the message-override arg; expected/received are
|
|
103
|
+
// still correct, so prefer those over the bare message.
|
|
104
|
+
if (
|
|
105
|
+
type === 'raw_check' &&
|
|
106
|
+
expected != null &&
|
|
107
|
+
received != null &&
|
|
108
|
+
message !== `Expected ${expected} but received ${received}`
|
|
109
|
+
) {
|
|
110
|
+
return `Expected ${expected} but received ${received}`;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (expected != null && received != null && expected === received) {
|
|
114
|
+
return `Value does not match expected ${expected} shape`;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return message.replace(/^Invalid type: /i, '');
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
function extractDisplayComponents(input: unknown): string[] {
|
|
121
|
+
if (!input || typeof input !== 'object' || Array.isArray(input)) return [];
|
|
122
|
+
const components = new Set<string>();
|
|
123
|
+
for (const modeVal of Object.values(input as Record<string, unknown>)) {
|
|
124
|
+
if (!modeVal || typeof modeVal !== 'object') continue;
|
|
125
|
+
for (const langVal of Object.values(modeVal as Record<string, unknown>)) {
|
|
126
|
+
if (!langVal || typeof langVal !== 'object') continue;
|
|
127
|
+
const c = (langVal as Record<string, unknown>)['component'];
|
|
128
|
+
if (typeof c === 'string') components.add(c);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return Array.from(components);
|
|
132
|
+
}
|
|
133
|
+
|
|
67
134
|
/**
|
|
68
135
|
* Type guard to check if previous pipeline step resulted in a failure dataset.
|
|
69
136
|
*/
|