udp-schema 0.3.0 → 1.0.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 (69) hide show
  1. package/dist/field-helpers.d.ts +10 -38
  2. package/dist/field-helpers.d.ts.map +1 -1
  3. package/dist/field-helpers.js +40 -66
  4. package/dist/field-helpers.js.map +1 -1
  5. package/dist/field-meta.d.ts +46 -28
  6. package/dist/field-meta.d.ts.map +1 -1
  7. package/dist/field-meta.js +304 -1988
  8. package/dist/field-meta.js.map +1 -1
  9. package/dist/index.d.ts +17 -17
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +32 -32
  12. package/dist/index.js.map +1 -1
  13. package/dist/onboarding-config.d.ts +44 -0
  14. package/dist/onboarding-config.d.ts.map +1 -0
  15. package/dist/onboarding-config.js +705 -0
  16. package/dist/onboarding-config.js.map +1 -0
  17. package/dist/progress-fields.d.ts +3 -3
  18. package/dist/progress-fields.d.ts.map +1 -1
  19. package/dist/progress-fields.js +76 -94
  20. package/dist/progress-fields.js.map +1 -1
  21. package/dist/step-01.schema.d.ts +84 -111
  22. package/dist/step-01.schema.d.ts.map +1 -1
  23. package/dist/step-01.schema.js +94 -101
  24. package/dist/step-01.schema.js.map +1 -1
  25. package/dist/step-02.schema.d.ts +31 -21
  26. package/dist/step-02.schema.d.ts.map +1 -1
  27. package/dist/step-02.schema.js +34 -27
  28. package/dist/step-02.schema.js.map +1 -1
  29. package/dist/step-03.schema.d.ts +24 -300
  30. package/dist/step-03.schema.d.ts.map +1 -1
  31. package/dist/step-03.schema.js +24 -60
  32. package/dist/step-03.schema.js.map +1 -1
  33. package/dist/step-04.schema.d.ts +56 -50
  34. package/dist/step-04.schema.d.ts.map +1 -1
  35. package/dist/step-04.schema.js +48 -43
  36. package/dist/step-04.schema.js.map +1 -1
  37. package/dist/step-05.schema.d.ts +13 -52
  38. package/dist/step-05.schema.d.ts.map +1 -1
  39. package/dist/step-05.schema.js +19 -40
  40. package/dist/step-05.schema.js.map +1 -1
  41. package/dist/step-06.schema.d.ts +101 -117
  42. package/dist/step-06.schema.d.ts.map +1 -1
  43. package/dist/step-06.schema.js +70 -75
  44. package/dist/step-06.schema.js.map +1 -1
  45. package/dist/step-07.schema.d.ts +44 -95
  46. package/dist/step-07.schema.d.ts.map +1 -1
  47. package/dist/step-07.schema.js +51 -78
  48. package/dist/step-07.schema.js.map +1 -1
  49. package/dist/step-08.schema.d.ts +31 -44
  50. package/dist/step-08.schema.d.ts.map +1 -1
  51. package/dist/step-08.schema.js +30 -47
  52. package/dist/step-08.schema.js.map +1 -1
  53. package/dist/step-09.schema.d.ts +48 -85
  54. package/dist/step-09.schema.d.ts.map +1 -1
  55. package/dist/step-09.schema.js +42 -120
  56. package/dist/step-09.schema.js.map +1 -1
  57. package/dist/step-10.schema.d.ts +32 -86
  58. package/dist/step-10.schema.d.ts.map +1 -1
  59. package/dist/step-10.schema.js +44 -120
  60. package/dist/step-10.schema.js.map +1 -1
  61. package/dist/step-11.schema.d.ts +36 -92
  62. package/dist/step-11.schema.d.ts.map +1 -1
  63. package/dist/step-11.schema.js +32 -111
  64. package/dist/step-11.schema.js.map +1 -1
  65. package/dist/step-12.schema.d.ts +56 -93
  66. package/dist/step-12.schema.d.ts.map +1 -1
  67. package/dist/step-12.schema.js +77 -133
  68. package/dist/step-12.schema.js.map +1 -1
  69. package/package.json +1 -1
@@ -1,55 +1,27 @@
1
1
  /**
2
- * Convenience helpers for accessing UDP field metadata.
3
- *
4
- * Mirrors the dating-schema `field-helpers.ts` pattern:
5
- * pre-built lookup maps with `getUdpFieldOptions()` and `getUdpFieldMeta()`.
2
+ * Convenience helpers for accessing UDP field metadata and step schemas.
6
3
  *
7
4
  * @module udp-schema/field-helpers
8
5
  */
9
- import { type UdpFieldMeta, type UdpFieldOption } from './field-meta.js';
10
- /**
11
- * Get the `{ value, label }` options array for a UDP field by its key.
12
- *
13
- * @example
14
- * ```ts
15
- * import { getUdpFieldOptions } from 'udp-schema';
16
- * const opts = getUdpFieldOptions('desireToBeLeader');
17
- * // → [{ value: 'YES_STRONGLY', label: 'desireToBeLeader_YES_STRONGLY' }, ...]
18
- * ```
19
- */
20
- export declare function getUdpFieldOptions(fieldKey: string): readonly UdpFieldOption[];
6
+ import type { z } from 'zod';
21
7
  /**
22
- * Get full field metadata (label, step, component, options, etc.) by key.
8
+ * Get the Zod schema for a given step number.
9
+ * Returns undefined for invalid step numbers.
23
10
  *
24
- * @example
25
- * ```ts
26
- * import { getUdpFieldMeta } from 'udp-schema';
27
- * const meta = getUdpFieldMeta('gender');
28
- * // → { key: 'gender', step: 1, labelKey: 'gender', component: 'genderSelector', options: [...], immutable: true }
29
- * ```
30
- */
31
- export declare function getUdpFieldMeta(fieldKey: string): UdpFieldMeta | undefined;
32
- /**
33
- * Get all field metadata entries for a given step number.
11
+ * Use `.partial().parse(data)` for sub-step saves where only one field is sent.
34
12
  *
35
13
  * @example
36
14
  * ```ts
37
- * import { getUdpStepFields } from 'udp-schema';
38
- * const step5Fields = getUdpStepFields(5);
39
- * // [{ key: 'desireToBeLeader', ... }, { key: 'desiredPoliticalPosition', ... }, ...]
15
+ * const schema = getStepSchema(1);
16
+ * if (schema) {
17
+ * const data = schema.partial().parse(req.body);
18
+ * }
40
19
  * ```
41
20
  */
42
- export declare function getUdpStepFields(stepNumber: number): readonly UdpFieldMeta[];
21
+ export declare function getStepSchema(stepNumber: number): z.ZodObject<any> | undefined;
43
22
  /**
44
23
  * Get the list of field keys that are immutable after volunteer approval.
45
24
  * These fields can only be changed by a volunteer in survey-mode once approved.
46
- *
47
- * @example
48
- * ```ts
49
- * import { getImmutableFields } from 'udp-schema';
50
- * const locked = getImmutableFields();
51
- * // → ['firstName', 'middleName', 'lastName', 'gender', 'dateOfBirth', 'phonePrimary']
52
- * ```
53
25
  */
54
26
  export declare function getImmutableFields(): readonly string[];
55
27
  //# sourceMappingURL=field-helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-helpers.d.ts","sourceRoot":"","sources":["../src/field-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AA8BzF;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAE9E;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAE1E;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,YAAY,EAAE,CAE5E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEtD"}
1
+ {"version":3,"file":"field-helpers.d.ts","sourceRoot":"","sources":["../src/field-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAgC7B;;;;;;;;;;;;;GAaG;AAEH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,SAAS,CAE9E;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,MAAM,EAAE,CAEtD"}
@@ -1,85 +1,59 @@
1
1
  /**
2
- * Convenience helpers for accessing UDP field metadata.
3
- *
4
- * Mirrors the dating-schema `field-helpers.ts` pattern:
5
- * pre-built lookup maps with `getUdpFieldOptions()` and `getUdpFieldMeta()`.
2
+ * Convenience helpers for accessing UDP field metadata and step schemas.
6
3
  *
7
4
  * @module udp-schema/field-helpers
8
5
  */
9
- import { UDP_FIELD_META } from './field-meta.js';
10
- // ─── Pre-built lookup maps ───────────────────────────────────────────────────
11
- const optionsMap = new Map();
12
- const fieldMap = new Map();
13
- const stepFieldsMap = new Map();
14
- const immutableFieldKeys = [];
15
- for (const meta of Object.values(UDP_FIELD_META)) {
16
- fieldMap.set(meta.key, meta);
17
- if (meta.options) {
18
- optionsMap.set(meta.key, meta.options);
19
- }
20
- if (meta.immutable) {
21
- immutableFieldKeys.push(meta.key);
22
- }
23
- const existing = stepFieldsMap.get(meta.step);
24
- if (existing) {
25
- existing.push(meta);
26
- }
27
- else {
28
- stepFieldsMap.set(meta.step, [meta]);
29
- }
30
- }
31
- // ─── Public helpers ──────────────────────────────────────────────────────────
6
+ import { step01ProfileSchema } from './step-01.schema.js';
7
+ import { step02PoliticalSchema } from './step-02.schema.js';
8
+ import { step03ElectoralSchema } from './step-03.schema.js';
9
+ import { step04LeadershipSchema } from './step-04.schema.js';
10
+ import { step05PsychologicalSchema } from './step-05.schema.js';
11
+ import { step06EducationSchema } from './step-06.schema.js';
12
+ import { step07EmploymentSchema } from './step-07.schema.js';
13
+ import { step08NeurodiversitySchema } from './step-08.schema.js';
14
+ import { step09HealthSchema } from './step-09.schema.js';
15
+ import { step10WorldViewSchema } from './step-10.schema.js';
16
+ import { step11ResidenceSchema } from './step-11.schema.js';
17
+ import { step12HouseholdSchema } from './step-12.schema.js';
18
+ // ─── Step Schema Registry ───────────────────────────────────────────────────
19
+ // biome-ignore lint/suspicious/noExplicitAny: Zod schema types vary per step
20
+ const STEP_SCHEMAS = {
21
+ 1: step01ProfileSchema,
22
+ 2: step02PoliticalSchema,
23
+ 3: step03ElectoralSchema,
24
+ 4: step04LeadershipSchema,
25
+ 5: step05PsychologicalSchema,
26
+ 6: step06EducationSchema,
27
+ 7: step07EmploymentSchema,
28
+ 8: step08NeurodiversitySchema,
29
+ 9: step09HealthSchema,
30
+ 10: step10WorldViewSchema,
31
+ 11: step11ResidenceSchema,
32
+ 12: step12HouseholdSchema,
33
+ };
32
34
  /**
33
- * Get the `{ value, label }` options array for a UDP field by its key.
35
+ * Get the Zod schema for a given step number.
36
+ * Returns undefined for invalid step numbers.
34
37
  *
35
- * @example
36
- * ```ts
37
- * import { getUdpFieldOptions } from 'udp-schema';
38
- * const opts = getUdpFieldOptions('desireToBeLeader');
39
- * // → [{ value: 'YES_STRONGLY', label: 'desireToBeLeader_YES_STRONGLY' }, ...]
40
- * ```
41
- */
42
- export function getUdpFieldOptions(fieldKey) {
43
- return optionsMap.get(fieldKey) ?? [];
44
- }
45
- /**
46
- * Get full field metadata (label, step, component, options, etc.) by key.
38
+ * Use `.partial().parse(data)` for sub-step saves where only one field is sent.
47
39
  *
48
40
  * @example
49
41
  * ```ts
50
- * import { getUdpFieldMeta } from 'udp-schema';
51
- * const meta = getUdpFieldMeta('gender');
52
- * // { key: 'gender', step: 1, labelKey: 'gender', component: 'genderSelector', options: [...], immutable: true }
42
+ * const schema = getStepSchema(1);
43
+ * if (schema) {
44
+ * const data = schema.partial().parse(req.body);
45
+ * }
53
46
  * ```
54
47
  */
55
- export function getUdpFieldMeta(fieldKey) {
56
- return fieldMap.get(fieldKey);
57
- }
58
- /**
59
- * Get all field metadata entries for a given step number.
60
- *
61
- * @example
62
- * ```ts
63
- * import { getUdpStepFields } from 'udp-schema';
64
- * const step5Fields = getUdpStepFields(5);
65
- * // → [{ key: 'desireToBeLeader', ... }, { key: 'desiredPoliticalPosition', ... }, ...]
66
- * ```
67
- */
68
- export function getUdpStepFields(stepNumber) {
69
- return stepFieldsMap.get(stepNumber) ?? [];
48
+ // biome-ignore lint/suspicious/noExplicitAny: Zod schema types vary per step
49
+ export function getStepSchema(stepNumber) {
50
+ return STEP_SCHEMAS[stepNumber];
70
51
  }
71
52
  /**
72
53
  * Get the list of field keys that are immutable after volunteer approval.
73
54
  * These fields can only be changed by a volunteer in survey-mode once approved.
74
- *
75
- * @example
76
- * ```ts
77
- * import { getImmutableFields } from 'udp-schema';
78
- * const locked = getImmutableFields();
79
- * // → ['firstName', 'middleName', 'lastName', 'gender', 'dateOfBirth', 'phonePrimary']
80
- * ```
81
55
  */
82
56
  export function getImmutableFields() {
83
- return immutableFieldKeys;
57
+ return ['firstName', 'middleName', 'lastName', 'gender', 'dateOfBirth'];
84
58
  }
85
59
  //# sourceMappingURL=field-helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-helpers.js","sourceRoot":"","sources":["../src/field-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAA0C,MAAM,iBAAiB,CAAC;AAEzF,gFAAgF;AAEhF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAqC,CAAC;AAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;AACjD,MAAM,aAAa,GAAG,IAAI,GAAG,EAA0B,CAAC;AACxD,MAAM,kBAAkB,GAAa,EAAE,CAAC;AAExC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC;IACjD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAE7B,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;;GASG;AACH,MAAM,UAAU,kBAAkB,CAAC,QAAgB;IACjD,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,OAAO,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB;IACjD,OAAO,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,kBAAkB,CAAC;AAC5B,CAAC","sourcesContent":["/**\n * Convenience helpers for accessing UDP field metadata.\n *\n * Mirrors the dating-schema `field-helpers.ts` pattern:\n * pre-built lookup maps with `getUdpFieldOptions()` and `getUdpFieldMeta()`.\n *\n * @module udp-schema/field-helpers\n */\n\nimport { UDP_FIELD_META, type UdpFieldMeta, type UdpFieldOption } from './field-meta.js';\n\n// ─── Pre-built lookup maps ───────────────────────────────────────────────────\n\nconst optionsMap = new Map<string, readonly UdpFieldOption[]>();\nconst fieldMap = new Map<string, UdpFieldMeta>();\nconst stepFieldsMap = new Map<number, UdpFieldMeta[]>();\nconst immutableFieldKeys: string[] = [];\n\nfor (const meta of Object.values(UDP_FIELD_META)) {\n fieldMap.set(meta.key, meta);\n\n if (meta.options) {\n optionsMap.set(meta.key, meta.options);\n }\n\n if (meta.immutable) {\n immutableFieldKeys.push(meta.key);\n }\n\n const existing = stepFieldsMap.get(meta.step);\n if (existing) {\n existing.push(meta);\n } else {\n stepFieldsMap.set(meta.step, [meta]);\n }\n}\n\n// ─── Public helpers ──────────────────────────────────────────────────────────\n\n/**\n * Get the `{ value, label }` options array for a UDP field by its key.\n *\n * @example\n * ```ts\n * import { getUdpFieldOptions } from 'udp-schema';\n * const opts = getUdpFieldOptions('desireToBeLeader');\n * // [{ value: 'YES_STRONGLY', label: 'desireToBeLeader_YES_STRONGLY' }, ...]\n * ```\n */\nexport function getUdpFieldOptions(fieldKey: string): readonly UdpFieldOption[] {\n return optionsMap.get(fieldKey) ?? [];\n}\n\n/**\n * Get full field metadata (label, step, component, options, etc.) by key.\n *\n * @example\n * ```ts\n * import { getUdpFieldMeta } from 'udp-schema';\n * const meta = getUdpFieldMeta('gender');\n * // { key: 'gender', step: 1, labelKey: 'gender', component: 'genderSelector', options: [...], immutable: true }\n * ```\n */\nexport function getUdpFieldMeta(fieldKey: string): UdpFieldMeta | undefined {\n return fieldMap.get(fieldKey);\n}\n\n/**\n * Get all field metadata entries for a given step number.\n *\n * @example\n * ```ts\n * import { getUdpStepFields } from 'udp-schema';\n * const step5Fields = getUdpStepFields(5);\n * // [{ key: 'desireToBeLeader', ... }, { key: 'desiredPoliticalPosition', ... }, ...]\n * ```\n */\nexport function getUdpStepFields(stepNumber: number): readonly UdpFieldMeta[] {\n return stepFieldsMap.get(stepNumber) ?? [];\n}\n\n/**\n * Get the list of field keys that are immutable after volunteer approval.\n * These fields can only be changed by a volunteer in survey-mode once approved.\n *\n * @example\n * ```ts\n * import { getImmutableFields } from 'udp-schema';\n * const locked = getImmutableFields();\n * // ['firstName', 'middleName', 'lastName', 'gender', 'dateOfBirth', 'phonePrimary']\n * ```\n */\nexport function getImmutableFields(): readonly string[] {\n return immutableFieldKeys;\n}\n"]}
1
+ {"version":3,"file":"field-helpers.js","sourceRoot":"","sources":["../src/field-helpers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,+EAA+E;AAE/E,6EAA6E;AAC7E,MAAM,YAAY,GAAqC;IACrD,CAAC,EAAE,mBAAmB;IACtB,CAAC,EAAE,qBAAqB;IACxB,CAAC,EAAE,qBAAqB;IACxB,CAAC,EAAE,sBAAsB;IACzB,CAAC,EAAE,yBAAyB;IAC5B,CAAC,EAAE,qBAAqB;IACxB,CAAC,EAAE,sBAAsB;IACzB,CAAC,EAAE,0BAA0B;IAC7B,CAAC,EAAE,kBAAkB;IACrB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,qBAAqB;IACzB,EAAE,EAAE,qBAAqB;CAC1B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,6EAA6E;AAC7E,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,OAAO,YAAY,CAAC,UAAU,CAAC,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB;IAChC,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;AAC1E,CAAC","sourcesContent":["/**\n * Convenience helpers for accessing UDP field metadata and step schemas.\n *\n * @module udp-schema/field-helpers\n */\n\nimport type { z } from 'zod';\nimport { step01ProfileSchema } from './step-01.schema.js';\nimport { step02PoliticalSchema } from './step-02.schema.js';\nimport { step03ElectoralSchema } from './step-03.schema.js';\nimport { step04LeadershipSchema } from './step-04.schema.js';\nimport { step05PsychologicalSchema } from './step-05.schema.js';\nimport { step06EducationSchema } from './step-06.schema.js';\nimport { step07EmploymentSchema } from './step-07.schema.js';\nimport { step08NeurodiversitySchema } from './step-08.schema.js';\nimport { step09HealthSchema } from './step-09.schema.js';\nimport { step10WorldViewSchema } from './step-10.schema.js';\nimport { step11ResidenceSchema } from './step-11.schema.js';\nimport { step12HouseholdSchema } from './step-12.schema.js';\n\n// ─── Step Schema Registry ───────────────────────────────────────────────────\n\n// biome-ignore lint/suspicious/noExplicitAny: Zod schema types vary per step\nconst STEP_SCHEMAS: Record<number, z.ZodObject<any>> = {\n 1: step01ProfileSchema,\n 2: step02PoliticalSchema,\n 3: step03ElectoralSchema,\n 4: step04LeadershipSchema,\n 5: step05PsychologicalSchema,\n 6: step06EducationSchema,\n 7: step07EmploymentSchema,\n 8: step08NeurodiversitySchema,\n 9: step09HealthSchema,\n 10: step10WorldViewSchema,\n 11: step11ResidenceSchema,\n 12: step12HouseholdSchema,\n};\n\n/**\n * Get the Zod schema for a given step number.\n * Returns undefined for invalid step numbers.\n *\n * Use `.partial().parse(data)` for sub-step saves where only one field is sent.\n *\n * @example\n * ```ts\n * const schema = getStepSchema(1);\n * if (schema) {\n * const data = schema.partial().parse(req.body);\n * }\n * ```\n */\n// biome-ignore lint/suspicious/noExplicitAny: Zod schema types vary per step\nexport function getStepSchema(stepNumber: number): z.ZodObject<any> | undefined {\n return STEP_SCHEMAS[stepNumber];\n}\n\n/**\n * Get the list of field keys that are immutable after volunteer approval.\n * These fields can only be changed by a volunteer in survey-mode once approved.\n */\nexport function getImmutableFields(): readonly string[] {\n return ['firstName', 'middleName', 'lastName', 'gender', 'dateOfBirth'];\n}\n"]}
@@ -1,10 +1,8 @@
1
1
  /**
2
- * UDP Field Metadata
3
- * ==================
4
- * Single source of truth for field-level metadata across all 14 UDP steps.
5
- * Both frontend and backend import this — NO hardcoded option arrays elsewhere.
2
+ * UDP Field Metadata — Option arrays for all field types.
6
3
  *
7
4
  * Labels use i18n translation keys (not hardcoded English strings).
5
+ * Options that match dating-schema use the SAME values for cross-product consistency.
8
6
  *
9
7
  * @module udp-schema/field-meta
10
8
  */
@@ -12,29 +10,49 @@ export interface UdpFieldOption {
12
10
  value: string;
13
11
  /** i18n translation key */
14
12
  label: string;
13
+ /** Optional description i18n key */
14
+ description?: string;
15
15
  }
16
- export interface UdpFieldMeta {
17
- /** Unique field key matches the Zod schema key and form field key */
18
- key: string;
19
- /** Step number (1–14) this field belongs to */
20
- step: number;
21
- /** i18n key for the field label */
22
- labelKey: string;
23
- /** i18n key for help text / description */
24
- descriptionKey?: string;
25
- /** Component type hint (matches frontend FieldComponentType) */
26
- component: string;
27
- /** Options for select / radio / multiCheckbox / genderSelector fields */
28
- options?: readonly UdpFieldOption[];
29
- /** Whether the field is required to complete the step */
30
- required?: boolean;
31
- /** i18n key for the toast shown after saving this field's step */
32
- successMessageKey?: string;
33
- /**
34
- * If true, this field is locked after first volunteer approval.
35
- * Only a volunteer (survey-mode) can change it once locked.
36
- */
37
- immutable?: boolean;
38
- }
39
- export declare const UDP_FIELD_META: Record<string, UdpFieldMeta>;
16
+ /** Gender options — matches dating-schema values */
17
+ export declare const GENDER_OPTIONS: readonly UdpFieldOption[];
18
+ /** Religion options — matches dating-schema values exactly */
19
+ export declare const RELIGION_OPTIONS: readonly UdpFieldOption[];
20
+ /** Language options — matches dating-schema motherTongue values */
21
+ export declare const LANGUAGE_OPTIONS: readonly UdpFieldOption[];
22
+ /** Reservation / caste category options */
23
+ export declare const RESERVATION_STATUS_OPTIONS: readonly UdpFieldOption[];
24
+ /** Minority status options */
25
+ export declare const MINORITY_STATUS_OPTIONS: readonly UdpFieldOption[];
26
+ /** Political spectrum — matches dating-schema cognitiveBand values */
27
+ export declare const POLITICAL_SPECTRUM_OPTIONS: readonly UdpFieldOption[];
28
+ /** Major Indian political parties */
29
+ export declare const PARTY_OPTIONS: readonly UdpFieldOption[];
30
+ /** Civic engagement types */
31
+ export declare const CIVIC_ENGAGEMENT_OPTIONS: readonly UdpFieldOption[];
32
+ /** Voting issues */
33
+ export declare const VOTING_ISSUES_OPTIONS: readonly UdpFieldOption[];
34
+ /** Leadership skillset options */
35
+ export declare const LEADERSHIP_SKILLSET_OPTIONS: readonly UdpFieldOption[];
36
+ /** Highest qualification options */
37
+ export declare const QUALIFICATION_OPTIONS: readonly UdpFieldOption[];
38
+ /** Neurodiversity conditions */
39
+ export declare const NEURODIVERSITY_CONDITIONS_OPTIONS: readonly UdpFieldOption[];
40
+ /** Sensory preferences */
41
+ export declare const SENSORY_PREFERENCES_OPTIONS: readonly UdpFieldOption[];
42
+ /** Support needs */
43
+ export declare const SUPPORT_NEEDS_OPTIONS: readonly UdpFieldOption[];
44
+ /** Disability status options */
45
+ export declare const DISABILITY_STATUS_OPTIONS: readonly UdpFieldOption[];
46
+ /** Substance use options */
47
+ export declare const SUBSTANCE_USE_OPTIONS: readonly UdpFieldOption[];
48
+ /** LGBTQ+ statement options (reused from existing UDP) */
49
+ export declare const LGBTQ_STATEMENTS_OPTIONS: readonly UdpFieldOption[];
50
+ /** Transgender inclusion statement options (reused from existing UDP) */
51
+ export declare const TRANSGENDER_STATEMENTS_OPTIONS: readonly UdpFieldOption[];
52
+ /** Caste discrimination places (reused from existing UDP) */
53
+ export declare const CASTE_DISCRIMINATION_PLACES_OPTIONS: readonly UdpFieldOption[];
54
+ /** Family members options */
55
+ export declare const FAMILY_MEMBERS_OPTIONS: readonly UdpFieldOption[];
56
+ /** Digital access options */
57
+ export declare const DIGITAL_ACCESS_OPTIONS: readonly UdpFieldOption[];
40
58
  //# sourceMappingURL=field-meta.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-meta.d.ts","sourceRoot":"","sources":["../src/field-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,GAAG,EAAE,MAAM,CAAC;IACZ,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,OAAO,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AA09BD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAwmC9C,CAAC"}
1
+ {"version":3,"file":"field-meta.d.ts","sourceRoot":"","sources":["../src/field-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,oDAAoD;AACpD,eAAO,MAAM,cAAc,EAAE,SAAS,cAAc,EAY1C,CAAC;AAEX,8DAA8D;AAC9D,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EAuB5C,CAAC;AAEX,mEAAmE;AACnE,eAAO,MAAM,gBAAgB,EAAE,SAAS,cAAc,EA8B5C,CAAC;AAEX,2CAA2C;AAC3C,eAAO,MAAM,0BAA0B,EAAE,SAAS,cAAc,EAStD,CAAC;AAEX,8BAA8B;AAC9B,eAAO,MAAM,uBAAuB,EAAE,SAAS,cAAc,EAKnD,CAAC;AAIX,sEAAsE;AACtE,eAAO,MAAM,0BAA0B,EAAE,SAAS,cAAc,EAStD,CAAC;AAEX,qCAAqC;AACrC,eAAO,MAAM,aAAa,EAAE,SAAS,cAAc,EAsBzC,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EAYpD,CAAC;AAIX,oBAAoB;AACpB,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EAejD,CAAC;AAIX,kCAAkC;AAClC,eAAO,MAAM,2BAA2B,EAAE,SAAS,cAAc,EAWvD,CAAC;AAIX,oCAAoC;AACpC,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EASjD,CAAC;AAIX,gCAAgC;AAChC,eAAO,MAAM,iCAAiC,EAAE,SAAS,cAAc,EAa7D,CAAC;AAEX,0BAA0B;AAC1B,eAAO,MAAM,2BAA2B,EAAE,SAAS,cAAc,EAQvD,CAAC;AAEX,oBAAoB;AACpB,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EAUjD,CAAC;AAIX,gCAAgC;AAChC,eAAO,MAAM,yBAAyB,EAAE,SAAS,cAAc,EASrD,CAAC;AAEX,4BAA4B;AAC5B,eAAO,MAAM,qBAAqB,EAAE,SAAS,cAAc,EAQjD,CAAC;AAIX,0DAA0D;AAC1D,eAAO,MAAM,wBAAwB,EAAE,SAAS,cAAc,EASpD,CAAC;AAEX,yEAAyE;AACzE,eAAO,MAAM,8BAA8B,EAAE,SAAS,cAAc,EAS1D,CAAC;AAEX,6DAA6D;AAC7D,eAAO,MAAM,mCAAmC,EAAE,SAAS,cAAc,EAQ/D,CAAC;AAIX,6BAA6B;AAC7B,eAAO,MAAM,sBAAsB,EAAE,SAAS,cAAc,EAelD,CAAC;AAEX,6BAA6B;AAC7B,eAAO,MAAM,sBAAsB,EAAE,SAAS,cAAc,EAOlD,CAAC"}