@jfdevelops/multi-step-form-core 1.0.0-alpha.22 → 1.0.0-alpha.24

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 (149) hide show
  1. package/dist/_internals.cjs +0 -4
  2. package/dist/_internals.d.cts +2 -3
  3. package/dist/_internals.d.mts +2 -3
  4. package/dist/_internals.mjs +1 -2
  5. package/dist/index.cjs +17 -17
  6. package/dist/index.d.cts +12 -11
  7. package/dist/index.d.mts +12 -11
  8. package/dist/index.mjs +8 -10
  9. package/dist/internals/step-schema.cjs +120 -71
  10. package/dist/internals/step-schema.cjs.map +1 -1
  11. package/dist/internals/step-schema.d.cts +47 -29
  12. package/dist/internals/step-schema.d.cts.map +1 -1
  13. package/dist/internals/step-schema.d.mts +47 -29
  14. package/dist/internals/step-schema.d.mts.map +1 -1
  15. package/dist/internals/step-schema.mjs +120 -71
  16. package/dist/internals/step-schema.mjs.map +1 -1
  17. package/dist/schema.cjs +14 -10
  18. package/dist/schema.cjs.map +1 -1
  19. package/dist/schema.d.cts +11 -13
  20. package/dist/schema.d.cts.map +1 -1
  21. package/dist/schema.d.mts +11 -13
  22. package/dist/schema.d.mts.map +1 -1
  23. package/dist/schema.mjs +14 -10
  24. package/dist/schema.mjs.map +1 -1
  25. package/dist/steps/fields.cjs +80 -0
  26. package/dist/steps/fields.cjs.map +1 -1
  27. package/dist/steps/fields.d.cts +117 -9
  28. package/dist/steps/fields.d.cts.map +1 -1
  29. package/dist/steps/fields.d.mts +117 -9
  30. package/dist/steps/fields.d.mts.map +1 -1
  31. package/dist/steps/fields.mjs +80 -0
  32. package/dist/steps/fields.mjs.map +1 -1
  33. package/dist/steps/fn-utils/helper-fn/index.cjs +81 -0
  34. package/dist/steps/fn-utils/helper-fn/index.cjs.map +1 -0
  35. package/dist/steps/fn-utils/helper-fn/index.d.cts +146 -0
  36. package/dist/steps/fn-utils/helper-fn/index.d.cts.map +1 -0
  37. package/dist/steps/fn-utils/helper-fn/index.d.mts +146 -0
  38. package/dist/steps/fn-utils/helper-fn/index.d.mts.map +1 -0
  39. package/dist/steps/fn-utils/helper-fn/index.mjs +75 -0
  40. package/dist/steps/fn-utils/helper-fn/index.mjs.map +1 -0
  41. package/dist/steps/fn-utils/helper-fn/utils.d.cts +81 -0
  42. package/dist/steps/fn-utils/helper-fn/utils.d.cts.map +1 -0
  43. package/dist/steps/fn-utils/helper-fn/utils.d.mts +81 -0
  44. package/dist/steps/fn-utils/helper-fn/utils.d.mts.map +1 -0
  45. package/dist/steps/fn-utils/index.cjs +1 -0
  46. package/dist/steps/fn-utils/index.mjs +3 -0
  47. package/dist/steps/fn-utils/reset-fn.d.cts +30 -0
  48. package/dist/steps/fn-utils/reset-fn.d.cts.map +1 -0
  49. package/dist/steps/fn-utils/reset-fn.d.mts +30 -0
  50. package/dist/steps/fn-utils/reset-fn.d.mts.map +1 -0
  51. package/dist/steps/fn-utils/update-fn.d.cts +121 -0
  52. package/dist/steps/fn-utils/update-fn.d.cts.map +1 -0
  53. package/dist/steps/fn-utils/update-fn.d.mts +121 -0
  54. package/dist/steps/fn-utils/update-fn.d.mts.map +1 -0
  55. package/dist/steps/index.cjs +4 -2
  56. package/dist/steps/index.mjs +5 -3
  57. package/dist/steps/schema.cjs +61 -84
  58. package/dist/steps/schema.cjs.map +1 -1
  59. package/dist/steps/schema.d.cts +66 -67
  60. package/dist/steps/schema.d.cts.map +1 -1
  61. package/dist/steps/schema.d.mts +66 -67
  62. package/dist/steps/schema.d.mts.map +1 -1
  63. package/dist/steps/schema.mjs +62 -86
  64. package/dist/steps/schema.mjs.map +1 -1
  65. package/dist/steps/steps.cjs +83 -0
  66. package/dist/steps/steps.cjs.map +1 -0
  67. package/dist/steps/steps.d.cts +81 -0
  68. package/dist/steps/steps.d.cts.map +1 -0
  69. package/dist/steps/steps.d.mts +81 -0
  70. package/dist/steps/steps.d.mts.map +1 -0
  71. package/dist/steps/steps.mjs +76 -0
  72. package/dist/steps/steps.mjs.map +1 -0
  73. package/dist/steps/utils.cjs +40 -30
  74. package/dist/steps/utils.cjs.map +1 -1
  75. package/dist/steps/utils.d.cts +8 -5
  76. package/dist/steps/utils.d.cts.map +1 -1
  77. package/dist/steps/utils.d.mts +8 -5
  78. package/dist/steps/utils.d.mts.map +1 -1
  79. package/dist/steps/utils.mjs +40 -31
  80. package/dist/steps/utils.mjs.map +1 -1
  81. package/dist/storage.cjs +1 -1
  82. package/dist/storage.cjs.map +1 -1
  83. package/dist/storage.d.cts +9 -7
  84. package/dist/storage.d.cts.map +1 -1
  85. package/dist/storage.d.mts +9 -7
  86. package/dist/storage.d.mts.map +1 -1
  87. package/dist/storage.mjs +1 -1
  88. package/dist/storage.mjs.map +1 -1
  89. package/dist/utils/casing.cjs +1 -1
  90. package/dist/utils/casing.cjs.map +1 -1
  91. package/dist/utils/casing.d.cts +27 -11
  92. package/dist/utils/casing.d.cts.map +1 -1
  93. package/dist/utils/casing.d.mts +27 -11
  94. package/dist/utils/casing.d.mts.map +1 -1
  95. package/dist/utils/casing.mjs +1 -1
  96. package/dist/utils/casing.mjs.map +1 -1
  97. package/dist/utils/helpers.cjs +8 -0
  98. package/dist/utils/helpers.cjs.map +1 -1
  99. package/dist/utils/helpers.mjs +7 -1
  100. package/dist/utils/helpers.mjs.map +1 -1
  101. package/dist/utils/index.cjs +3 -0
  102. package/dist/utils/index.mjs +5 -0
  103. package/dist/utils/invariant.cjs +28 -8
  104. package/dist/utils/invariant.cjs.map +1 -1
  105. package/dist/utils/invariant.d.cts +12 -2
  106. package/dist/utils/invariant.d.cts.map +1 -1
  107. package/dist/utils/invariant.d.mts +12 -2
  108. package/dist/utils/invariant.d.mts.map +1 -1
  109. package/dist/utils/invariant.mjs +28 -9
  110. package/dist/utils/invariant.mjs.map +1 -1
  111. package/dist/utils/types.d.cts +15 -3
  112. package/dist/utils/types.d.cts.map +1 -1
  113. package/dist/utils/types.d.mts +15 -3
  114. package/dist/utils/types.d.mts.map +1 -1
  115. package/dist/utils/validator.d.cts.map +1 -1
  116. package/dist/utils/validator.d.mts.map +1 -1
  117. package/package.json +1 -1
  118. package/dist/internals/utils.cjs +0 -94
  119. package/dist/internals/utils.cjs.map +0 -1
  120. package/dist/internals/utils.d.cts +0 -33
  121. package/dist/internals/utils.d.cts.map +0 -1
  122. package/dist/internals/utils.d.mts +0 -33
  123. package/dist/internals/utils.d.mts.map +0 -1
  124. package/dist/internals/utils.mjs +0 -91
  125. package/dist/internals/utils.mjs.map +0 -1
  126. package/dist/observable.cjs +0 -44
  127. package/dist/observable.cjs.map +0 -1
  128. package/dist/observable.d.cts +0 -26
  129. package/dist/observable.d.cts.map +0 -1
  130. package/dist/observable.d.mts +0 -26
  131. package/dist/observable.d.mts.map +0 -1
  132. package/dist/observable.mjs +0 -44
  133. package/dist/observable.mjs.map +0 -1
  134. package/dist/steps/types.cjs +0 -33
  135. package/dist/steps/types.cjs.map +0 -1
  136. package/dist/steps/types.d.cts +0 -354
  137. package/dist/steps/types.d.cts.map +0 -1
  138. package/dist/steps/types.d.mts +0 -354
  139. package/dist/steps/types.d.mts.map +0 -1
  140. package/dist/steps/types.mjs +0 -27
  141. package/dist/steps/types.mjs.map +0 -1
  142. package/dist/utils/field-types.cjs +0 -23
  143. package/dist/utils/field-types.cjs.map +0 -1
  144. package/dist/utils/field-types.d.cts +0 -39
  145. package/dist/utils/field-types.d.cts.map +0 -1
  146. package/dist/utils/field-types.d.mts +0 -39
  147. package/dist/utils/field-types.d.mts.map +0 -1
  148. package/dist/utils/field-types.mjs +0 -20
  149. package/dist/utils/field-types.mjs.map +0 -1
@@ -1,5 +1,9 @@
1
+ import { CASING_TYPES, DEFAULT_CASING, changeCasing, isCasingValid } from "../utils/casing.mjs";
2
+ import { createInvariant } from "../utils/invariant.mjs";
3
+ import "../utils/index.mjs";
1
4
  import { path } from "../utils/path.mjs";
2
5
  import "../_internals.mjs";
6
+ import { runStandardValidation } from "../utils/validator.mjs";
3
7
 
4
8
  //#region src/steps/fields.ts
5
9
  let fields;
@@ -17,7 +21,83 @@ let fields;
17
21
  return `${parent}.${valuePropertyName}.${children.join(".")}`;
18
22
  }
19
23
  _fields.buildValuePath = buildValuePath;
24
+ function createFieldLabel(label, fieldName, casingType) {
25
+ return label ?? changeCasing(fieldName, casingType);
26
+ }
27
+ _fields.createFieldLabel = createFieldLabel;
28
+ function instantiate(def) {
29
+ const { fields: fields$1, defaultCasing, validateFields } = def;
30
+ const invariant = createInvariant("[instantiateFields]");
31
+ if (defaultCasing) {
32
+ invariant(typeof defaultCasing === "string", `The default casing must be a string. Was ${typeof defaultCasing}`);
33
+ invariant(isCasingValid(defaultCasing), (formatter) => `The default casing is not a valid casing. Was ${defaultCasing}, must be one of ${formatter.format(CASING_TYPES)}`);
34
+ }
35
+ invariant(fields$1, "No fields were provided to the \"fields\" option.", TypeError);
36
+ invariant(typeof fields$1 === "object", `The fields must be an object. Was ${typeof fields$1}`);
37
+ invariant(Object.keys(fields$1).length > 0, `A field must be provided to the "fields" option.`);
38
+ let resolvedFields = {};
39
+ for (const [name, values] of Object.entries(fields$1)) {
40
+ invariant(typeof name === "string", `Each key for the "fields" option must be a string. Key ${name} was a ${typeof name}`);
41
+ invariant(typeof values === "object", `The value for key ${name} must be an object. Was ${typeof values}`);
42
+ const { defaultValue, label, nameTransformCasing } = values;
43
+ const casing = nameTransformCasing ?? defaultCasing ?? DEFAULT_CASING;
44
+ const sharedFields = {
45
+ nameTransformCasing: casing,
46
+ name,
47
+ label: createFieldLabel(label, name, casing)
48
+ };
49
+ if (defaultValue instanceof Date) {
50
+ const type = "type" in values ? values.type : "date";
51
+ invariant(type === "date" || type === "string", `The type for key ${name} must be either 'date' or 'string'. Was ${type}`);
52
+ const resolvedValue = type === "date" ? defaultValue : JSON.stringify(defaultValue);
53
+ resolvedFields[name] = {
54
+ ...resolvedFields[name],
55
+ ...sharedFields,
56
+ defaultValue: resolvedValue,
57
+ type
58
+ };
59
+ } else resolvedFields[name] = {
60
+ ...resolvedFields[name],
61
+ ...sharedFields,
62
+ defaultValue
63
+ };
64
+ }
65
+ if (validateFields) runStandardValidation(validateFields, Object.fromEntries(Object.entries(resolvedFields).map(([name, value]) => [name, value.defaultValue])));
66
+ return resolvedFields;
67
+ }
68
+ _fields.instantiate = instantiate;
69
+ function isValidFieldValue(field) {
70
+ if (!("defaultValue" in field)) return false;
71
+ if ("label" in field) {
72
+ const label = field.label;
73
+ if (label !== false && typeof label !== "string") return false;
74
+ }
75
+ if ("nameTransformCasing" in field) {
76
+ const casing = field.nameTransformCasing;
77
+ if (typeof casing !== "string" || !isCasingValid(casing)) return false;
78
+ }
79
+ if (field.defaultValue instanceof Date) {
80
+ if ("type" in field) {
81
+ const type = field.type;
82
+ if (type !== "date" && type !== "string") return false;
83
+ }
84
+ }
85
+ return true;
86
+ }
87
+ function isValidFieldConfig(value) {
88
+ if (value === null || typeof value !== "object") return false;
89
+ const fields$1 = value;
90
+ if (Object.keys(fields$1).length === 0) return false;
91
+ for (const [name, fieldValue] of Object.entries(fields$1)) {
92
+ if (typeof name !== "string") return false;
93
+ if (fieldValue === null || typeof fieldValue !== "object") return false;
94
+ if (!isValidFieldValue(fieldValue)) return false;
95
+ }
96
+ return true;
97
+ }
98
+ _fields.isValidFieldConfig = isValidFieldConfig;
20
99
  })(fields || (fields = {}));
100
+ const instantiateFields = fields.instantiate;
21
101
 
22
102
  //#endregion
23
103
  export { fields };
@@ -1 +1 @@
1
- {"version":3,"file":"fields.mjs","names":["fields"],"sources":["../../src/steps/fields.ts"],"sourcesContent":["import { path } from '@/internals';\nimport type { DeepKeys, Join, Split } from '@/utils';\nimport type { AnyResolvedStep } from './types';\n\nexport namespace fields {\n type GetDeepFields<TFields> = [keyof TFields] extends [never]\n ? never\n : {\n [_ in keyof TFields]: TFields[_] extends Record<\n 'defaultValue',\n infer value\n >\n ? keyof value extends never\n ? TFields\n : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }>\n : never;\n }[keyof TFields];\n export type getFieldsForStep<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep\n > = TResolvedStep[TStep] extends {\n fields: infer fields extends object;\n }\n ? fields\n : never;\n export type get<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TFields extends getFieldsForStep<TResolvedStep, TStep> = getFieldsForStep<\n TResolvedStep,\n TStep\n >\n > = TFields;\n export type removeParentPath<T extends string> = Split<T, '.'> extends [\n infer _,\n ...infer rest\n ]\n ? rest extends string[]\n ? Join<rest, '.'>\n : never\n : never;\n export type getConfig<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TField extends getDeepFields<TResolvedStep, TStep>\n > = parentOf<TField> extends keyof get<TResolvedStep, TStep>\n ? get<TResolvedStep, TStep>[parentOf<TField>]\n : never;\n export type getDeepFields<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep = keyof TResolvedStep\n > = GetDeepFields<\n get<TResolvedStep, TStep>\n > extends infer value extends string\n ? value\n : never;\n\n type buildValuePath<\n TField extends string,\n TValuePropertyName extends string = 'defaultValue',\n TSplit extends Split<TField, '.'> = Split<TField, '.'>\n > = TSplit extends [infer field extends string, ...infer rest]\n ? rest extends []\n ? `${field}.${TValuePropertyName}`\n : rest extends string[]\n ? `${field}.${TValuePropertyName}.${Join<rest, '.'>}`\n : never\n : never;\n export type resolveDeepPath<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TField extends getDeepFields<TResolvedStep, TStep>,\n TValue extends get<TResolvedStep, TStep> = get<TResolvedStep, TStep>\n > = buildValuePath<TField> extends DeepKeys<TValue>\n ? path.pickBy<TValue, buildValuePath<TField>>\n : never;\n\n export type parentOf<T extends string> = Split<T, '.'>[0];\n\n // TODO add field validation\n export function resolvedDeepPath<\n resolvedStep extends AnyResolvedStep,\n targetStep extends keyof resolvedStep,\n fields extends get<resolvedStep, targetStep>,\n fieldPath extends getDeepFields<resolvedStep, targetStep>\n >(fieldPath: fieldPath, fields: fields, filler = 'defaultValue') {\n const [parent, ...children] = fieldPath.split('.');\n const shared = `${parent}.${filler}`;\n const fullPath = (\n children.length === 0 ? shared : `${shared}.${children.join('.')}`\n ) as DeepKeys<fields>;\n\n const resolvedValue = path.pickBy(fields, fullPath) as resolveDeepPath<\n resolvedStep,\n targetStep,\n fieldPath\n >;\n\n return resolvedValue;\n }\n\n export function buildValuePath<\n TField extends string,\n TValuePropertyName extends string = 'defaultValue',\n TSplit extends Split<TField, '.'> = Split<TField, '.'>\n >(\n field: TField,\n valuePropertyName: TValuePropertyName = 'defaultValue' as TValuePropertyName\n ) {\n const [parent, ...children] = field.split('.');\n\n if (children.length === 0) {\n return `${parent}.${valuePropertyName}` as buildValuePath<\n TField,\n TValuePropertyName,\n TSplit\n >;\n }\n\n return `${parent}.${valuePropertyName}.${children.join(\n '.'\n )}` as buildValuePath<TField, TValuePropertyName, TSplit>;\n }\n}\n"],"mappings":";;;;;;CAgFS,SAAS,iBAKd,WAAsB,UAAgB,SAAS,gBAAgB;EAC/D,MAAM,CAAC,QAAQ,GAAG,YAAY,UAAU,MAAM,IAAI;EAClD,MAAM,SAAS,GAAG,OAAO,GAAG;EAC5B,MAAM,WACJ,SAAS,WAAW,IAAI,SAAS,GAAG,OAAO,GAAG,SAAS,KAAK,IAAI;AASlE,SANsB,KAAK,OAAOA,UAAQ,SAAS;;;CAS9C,SAAS,eAKd,OACA,oBAAwC,gBACxC;EACA,MAAM,CAAC,QAAQ,GAAG,YAAY,MAAM,MAAM,IAAI;AAE9C,MAAI,SAAS,WAAW,EACtB,QAAO,GAAG,OAAO,GAAG;AAOtB,SAAO,GAAG,OAAO,GAAG,kBAAkB,GAAG,SAAS,KAChD,IACD"}
1
+ {"version":3,"file":"fields.mjs","names":["fields","invariant: Invariant","resolvedFields: Record<string, unknown>"],"sources":["../../src/steps/fields.ts"],"sourcesContent":["import { path } from '@/internals';\nimport {\n CASING_TYPES,\n changeCasing,\n DEFAULT_CASING,\n isCasingValid,\n type CasingType,\n type ChangeCasing,\n type Constrain,\n type DeepKeys,\n type DefaultCasing,\n type Expand,\n type Join,\n type SetDefaultString,\n type Split,\n} from '@/utils';\nimport { createInvariant, type Invariant } from '@/utils/invariant';\nimport {\n runStandardValidation,\n type AnyValidator,\n type DefaultValidator,\n type StandardSchemaValidator,\n} from '@/utils/validator';\nimport type { steps } from './steps';\n\nexport namespace fields {\n type GetDeepFields<TFields> = [keyof TFields] extends [never]\n ? never\n : {\n [_ in keyof TFields]: TFields[_] extends Record<\n 'defaultValue',\n infer value\n >\n ? keyof value extends never\n ? TFields\n : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }>\n : never;\n }[keyof TFields];\n export type getFieldsForStep<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>\n > = steps[step] extends {\n fields: infer fields extends object;\n }\n ? fields\n : never;\n export type get<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>\n > = getFieldsForStep<steps, step>;\n export type removeParentPath<T extends string> = Split<T, '.'> extends [\n infer _,\n ...infer rest\n ]\n ? rest extends string[]\n ? Join<rest, '.'>\n : never\n : never;\n export type getConfig<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>,\n field extends getDeepFields<steps, step>\n > = parentOf<field> extends keyof get<steps, step>\n ? get<steps, step>[parentOf<field>]\n : never;\n export type getDeepFields<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>\n > = GetDeepFields<get<steps, step>> extends infer value extends string\n ? value\n : never;\n\n type buildValuePath<\n field extends string,\n valuePropertyName extends string = 'defaultValue',\n split extends Split<field, '.'> = Split<field, '.'>\n > = split extends [infer field extends string, ...infer rest]\n ? rest extends []\n ? `${field}.${valuePropertyName}`\n : rest extends string[]\n ? `${field}.${valuePropertyName}.${Join<rest, '.'>}`\n : never\n : never;\n export type resolveDeepPath<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>,\n field extends getDeepFields<steps, step>,\n value extends get<steps, step> = get<steps, step>\n > = buildValuePath<field> extends DeepKeys<value>\n ? path.pickBy<value, buildValuePath<field>>\n : never;\n export type getDefaultValues<\n steps extends steps.instantiateSteps,\n targetStep extends steps.StepNumbers<steps>,\n fields extends get<steps, targetStep> = get<steps, targetStep>\n > = {\n -readonly [key in keyof fields]: fields[key] extends {\n defaultValue: infer defaultValue;\n }\n ? defaultValue\n : never;\n };\n export type parentOf<T extends string> = Split<T, '.'>[0];\n\n // TODO add field validation\n export function resolvedDeepPath<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>,\n fields extends get<steps, step>,\n fieldPath extends getDeepFields<steps, step>\n >(fieldPath: fieldPath, fields: fields, filler = 'defaultValue') {\n const [parent, ...children] = fieldPath.split('.');\n const shared = `${parent}.${filler}`;\n const fullPath = (\n children.length === 0 ? shared : `${shared}.${children.join('.')}`\n ) as DeepKeys<fields>;\n\n const resolvedValue = path.pickBy(fields, fullPath) as resolveDeepPath<\n steps,\n step,\n fieldPath\n >;\n\n return resolvedValue;\n }\n\n export function buildValuePath<\n TField extends string,\n TValuePropertyName extends string = 'defaultValue',\n TSplit extends Split<TField, '.'> = Split<TField, '.'>\n >(\n field: TField,\n valuePropertyName: TValuePropertyName = 'defaultValue' as TValuePropertyName\n ) {\n const [parent, ...children] = field.split('.');\n\n if (children.length === 0) {\n return `${parent}.${valuePropertyName}` as buildValuePath<\n TField,\n TValuePropertyName,\n TSplit\n >;\n }\n\n return `${parent}.${valuePropertyName}.${children.join(\n '.'\n )}` as buildValuePath<TField, TValuePropertyName, TSplit>;\n }\n\n export type DateFieldTypeMap = {\n date: Date;\n string: string;\n };\n export type DateFieldType = keyof DateFieldTypeMap;\n export type DefaultDateFieldType = SetDefaultString<DateFieldType, 'date'>;\n export interface NameTransformCasingOptions<TCasing extends CasingType> {\n /**\n * How the `name` should be transformed for the `label`.\n *\n * If omitted, the default will be whatever is set during {@linkcode MultiStepFormSchema} initialization.\n */\n nameTransformCasing?: Constrain<TCasing, CasingType>;\n }\n export interface BaseFieldOptions<TCasing extends CasingType, TDefaultValue>\n extends NameTransformCasingOptions<TCasing> {\n /**\n * The default value for the field.\n */\n defaultValue: TDefaultValue;\n /**\n * The text for the label.\n *\n * If omitted, it will default to the specified casing.\n *\n * If `false`, `label` will be `undefined`, meaning there won't\n * be a label for this field.\n */\n label?: string | false;\n }\n\n export interface BaseDateFieldOptions<\n TCasing extends CasingType,\n TType extends DateFieldType\n > extends BaseFieldOptions<TCasing, Date> {\n /**\n * The type of the resolved field value. It can either be a `date` or a `string`.\n *\n * - `date`: The field value will be a `date` object.\n * - `string`: The field value will be a `string`. If `transform` is provided, it will be used to transform the date value to a string.\n *\n * @default 'date'\n */\n type?: TType;\n }\n\n export interface StringDateFieldOptions<TCasing extends CasingType>\n extends BaseDateFieldOptions<TCasing, 'string'> {\n type: 'string';\n /**\n * A function to transform the date value to the desired type.\n *\n * If omitted, the date will be transformed to a `string` using the default `Date.toISOString` method.\n *\n * @param value The {@linkcode Date} value to transform.\n * @returns The transformed value.\n */\n transform?: (value: Date) => string;\n }\n\n export type ResolvedDateFieldType<T> = T extends Date ? DateFieldType : never;\n export type DateFieldConfig<\n TCasing extends CasingType = DefaultCasing,\n TType extends DateFieldType = ResolvedDateFieldType<Date>\n > = StringDateFieldOptions<TCasing> | BaseDateFieldOptions<TCasing, TType>;\n type BaseFieldConfig<\n TCasing extends CasingType = DefaultCasing,\n TDefaultValue = unknown\n > = BaseFieldOptions<TCasing, TDefaultValue>;\n export type FieldConfig<TCasing extends CasingType = DefaultCasing> = Record<\n string,\n BaseFieldConfig<TCasing> | DateFieldConfig<TCasing>\n >;\n\n type InferDefaultValue<T> = T extends string\n ? string\n : T extends number\n ? number\n : T extends true\n ? boolean\n : T extends false\n ? boolean\n : T extends object\n ? T extends Date\n ? Date\n : T extends ReadonlyArray<infer item>\n ? Array<InferDefaultValue<item>>\n : { -readonly [key in keyof T]: InferDefaultValue<T[key]> }\n : never;\n\n export type inferDefaultValue<T> = T extends {\n defaultValue: infer defaultValue;\n }\n ? InferDefaultValue<defaultValue>\n : never;\n export type inferNameTransformCasing<\n T,\n TDefault extends CasingType | undefined\n > = T extends {\n nameTransformCasing: infer nameTransformCasing extends CasingType;\n }\n ? nameTransformCasing\n : undefined extends TDefault\n ? DefaultCasing\n : TDefault;\n export type inferLabel<\n T,\n Casing extends CasingType | undefined,\n FieldKey extends string\n > = T extends {\n label: infer label extends string | false;\n }\n ? label\n : undefined extends Casing\n ? ChangeCasing<FieldKey, DefaultCasing>\n : ChangeCasing<FieldKey, Exclude<Casing, undefined>>;\n export type inferResolvedDateFieldType<T> = T extends {\n type: infer type extends DateFieldType;\n }\n ? type\n : DefaultDateFieldType;\n export type instantiateFields<\n T,\n TDefaultCasing extends CasingType = DefaultCasing\n > = [T] extends [object]\n ? T extends instantiateConfig\n ? {\n -readonly [key in keyof T['fields']]: Expand<\n {\n /**\n * The default value for the field.\n */\n defaultValue: inferDefaultValue<T['fields'][key]>;\n /**\n * The casing of the field name.\n */\n nameTransformCasing: inferNameTransformCasing<\n T['fields'][key],\n TDefaultCasing\n >;\n /**\n * The name of the field.\n */\n name: key;\n } & (key extends string\n ? {\n /**\n * The label for the field.\n */\n label: inferLabel<\n T['fields'][key],\n inferNameTransformCasing<T['fields'][key], TDefaultCasing>,\n key\n >;\n }\n : {}) &\n (inferDefaultValue<T['fields'][key]> extends Date\n ? /**\n * The type of the field.\n */\n { type: inferResolvedDateFieldType<T['fields'][key]> }\n : {})\n >;\n }\n : never\n : never;\n export type instantiateConfig<TMap extends FieldConfig = FieldConfig> = {\n fields: TMap;\n defaultCasing?: CasingType;\n validateFields?: Constrain<unknown, AnyValidator, DefaultValidator>;\n };\n\n export function createFieldLabel(\n label: string | false | undefined,\n fieldName: string,\n casingType: CasingType\n ) {\n return label ?? changeCasing(fieldName, casingType);\n }\n /**\n * Creates new fields for the multi step form schema.\n * @param def - The field config.\n * @returns The instantiated field config.\n */\n export function instantiate<\n const def extends instantiateConfig,\n inst = instantiateFields<def>\n >(def: def) {\n const { fields, defaultCasing, validateFields } = def;\n const invariant: Invariant = createInvariant('[instantiateFields]');\n\n if (defaultCasing) {\n invariant(\n typeof defaultCasing === 'string',\n `The default casing must be a string. Was ${typeof defaultCasing}`\n );\n invariant(\n isCasingValid(defaultCasing),\n (formatter) =>\n `The default casing is not a valid casing. Was ${defaultCasing}, must be one of ${formatter.format(\n CASING_TYPES\n )}`\n );\n }\n\n invariant(\n fields,\n 'No fields were provided to the \"fields\" option.',\n TypeError\n );\n invariant(\n typeof fields === 'object',\n `The fields must be an object. Was ${typeof fields}`\n );\n invariant(\n Object.keys(fields).length > 0,\n `A field must be provided to the \"fields\" option.`\n );\n\n let resolvedFields: Record<string, unknown> = {};\n\n for (const [name, values] of Object.entries(fields)) {\n invariant(\n typeof name === 'string',\n `Each key for the \"fields\" option must be a string. Key ${name} was a ${typeof name}`\n );\n invariant(\n typeof values === 'object',\n `The value for key ${name} must be an object. Was ${typeof values}`\n );\n\n const { defaultValue, label, nameTransformCasing } = values;\n const casing = nameTransformCasing ?? defaultCasing ?? DEFAULT_CASING;\n const resolvedLabel = createFieldLabel(label, name, casing);\n const sharedFields = {\n nameTransformCasing: casing,\n name,\n label: resolvedLabel,\n };\n\n if (defaultValue instanceof Date) {\n const type = 'type' in values ? values.type : 'date';\n\n invariant(\n type === 'date' || type === 'string',\n `The type for key ${name} must be either 'date' or 'string'. Was ${type}`\n );\n const resolvedValue =\n type === 'date' ? defaultValue : JSON.stringify(defaultValue);\n\n resolvedFields[name] = {\n ...(resolvedFields[name] as Record<string, unknown>),\n ...sharedFields,\n defaultValue: resolvedValue,\n type,\n };\n } else {\n resolvedFields[name] = {\n ...(resolvedFields[name] as Record<string, unknown>),\n ...sharedFields,\n defaultValue,\n };\n }\n }\n\n if (validateFields) {\n const defaultValues = Object.fromEntries(\n Object.entries(resolvedFields).map(([name, value]) => [\n name,\n (value as Record<string, unknown>).defaultValue,\n ])\n );\n\n runStandardValidation(\n validateFields as StandardSchemaValidator,\n defaultValues\n );\n }\n\n return resolvedFields as inst;\n }\n\n function isValidFieldValue(field: Record<string, unknown>): boolean {\n // Must have defaultValue\n if (!('defaultValue' in field)) {\n return false;\n }\n\n // If label is provided, it must be a string or false\n if ('label' in field) {\n const label = field.label;\n if (label !== false && typeof label !== 'string') {\n return false;\n }\n }\n\n // If nameTransformCasing is provided, it must be a valid casing\n if ('nameTransformCasing' in field) {\n const casing = field.nameTransformCasing;\n if (typeof casing !== 'string' || !isCasingValid(casing)) {\n return false;\n }\n }\n\n // If defaultValue is a Date, validate type field\n if (field.defaultValue instanceof Date) {\n if ('type' in field) {\n const type = field.type;\n if (type !== 'date' && type !== 'string') {\n return false;\n }\n }\n }\n\n return true;\n }\n\n export function isValidFieldConfig(value: unknown): value is FieldConfig {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n\n const fields = value as Record<string, unknown>;\n\n // Check if fields has at least one key\n if (Object.keys(fields).length === 0) {\n return false;\n }\n\n // Validate each field\n for (const [name, fieldValue] of Object.entries(fields)) {\n // Each key must be a string\n if (typeof name !== 'string') {\n return false;\n }\n\n // Each value must be an object\n if (fieldValue === null || typeof fieldValue !== 'object') {\n return false;\n }\n\n if (!isValidFieldValue(fieldValue as Record<string, unknown>)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport const instantiateFields = fields.instantiate;\n"],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+
2
+ //#region src/steps/fn-utils/helper-fn/index.ts
3
+ let HelperFnChosenSteps;
4
+ (function(_HelperFnChosenSteps) {
5
+ function createCatchAllMessage(availableSteps, type = "chosen") {
6
+ return `The ${type} steps must either be set to on of the following: "all", an array of steps (${new Intl.ListFormat("en", {
7
+ style: "long",
8
+ type: "disjunction"
9
+ }).format(availableSteps.map((step) => `"${step}"`))}), or an object containing the steps to chose ({ ${availableSteps.map((step) => `${step}: true`).join(", ")} })`;
10
+ }
11
+ _HelperFnChosenSteps.createCatchAllMessage = createCatchAllMessage;
12
+ function isAll(value) {
13
+ return Boolean(value && typeof value === "string" && value === "all");
14
+ }
15
+ _HelperFnChosenSteps.isAll = isAll;
16
+ function isTuple(value, validValues) {
17
+ if (!Array.isArray(value)) return false;
18
+ if (validValues) return value.every((key) => validValues.includes(key));
19
+ return true;
20
+ }
21
+ _HelperFnChosenSteps.isTuple = isTuple;
22
+ function isObject(value, validKeys) {
23
+ if (!value) return false;
24
+ const keys = Object.keys(value);
25
+ if (keys.length === 0) return false;
26
+ if (validKeys && !keys.every((key) => validKeys.includes(key))) return false;
27
+ return Object.entries(value).every(([_, v]) => v === true);
28
+ }
29
+ _HelperFnChosenSteps.isObject = isObject;
30
+ function isValid(value, validValues) {
31
+ if (isAll(value)) return true;
32
+ if (isTuple(value, validValues)) return true;
33
+ if (isObject(value, validValues)) return true;
34
+ return false;
35
+ }
36
+ _HelperFnChosenSteps.isValid = isValid;
37
+ function resolveType(chosenSteps, validValues) {
38
+ if (isAll(chosenSteps)) return "all";
39
+ if (isTuple(chosenSteps, validValues)) return "tuple";
40
+ if (isObject(chosenSteps, validValues)) return "object";
41
+ throw new Error("Unable to resolve the type of the chosen steps. Valid values are: \"all\", an array of steps, or an object containing the steps to chose.");
42
+ }
43
+ _HelperFnChosenSteps.resolveType = resolveType;
44
+ function match(options) {
45
+ const { meta, validValues, default: defaultHandler, ...handlers } = options;
46
+ return (chosenSteps) => {
47
+ let context = { chosenSteps };
48
+ let defaultContext = context;
49
+ if (meta) context = {
50
+ ...context,
51
+ meta
52
+ };
53
+ if (validValues) context = {
54
+ ...context,
55
+ validValues
56
+ };
57
+ const values = validValues?.(context);
58
+ if (values) defaultContext = {
59
+ ...defaultContext,
60
+ errorMessage: createCatchAllMessage(values)
61
+ };
62
+ const handler = handlers[resolveType(chosenSteps, values)];
63
+ return handler?.(context) ?? defaultHandler(defaultContext);
64
+ };
65
+ }
66
+ _HelperFnChosenSteps.match = match;
67
+ function createTupleNotation(...values) {
68
+ const [value, ...rest] = values;
69
+ return [value, ...rest];
70
+ }
71
+ _HelperFnChosenSteps.createTupleNotation = createTupleNotation;
72
+ })(HelperFnChosenSteps || (HelperFnChosenSteps = {}));
73
+
74
+ //#endregion
75
+ Object.defineProperty(exports, 'HelperFnChosenSteps', {
76
+ enumerable: true,
77
+ get: function () {
78
+ return HelperFnChosenSteps;
79
+ }
80
+ });
81
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["context: Record<string, unknown>","defaultContext: Record<string, unknown>"],"sources":["../../../../src/steps/fn-utils/helper-fn/index.ts"],"sourcesContent":["import type { steps } from '@/steps/steps';\nimport type {\n Expand,\n IsString,\n RequireAtLeastOne,\n stripFunctions,\n} from '@/utils';\n\nexport * from './utils';\nexport namespace HelperFnChosenSteps {\n export type defaultStringOption = 'all';\n export type stringOption<T extends string> = defaultStringOption | T;\n export type tupleNotation<T extends string> = [T, ...T[]];\n export type objectNotation<T extends string> = RequireAtLeastOne<{\n [_ in T]: true;\n }>;\n\n export type build<\n value extends string,\n stringOptions = defaultStringOption\n > = stringOptions | tupleNotation<value> | objectNotation<value>;\n export type main<\n value extends steps.instantiateSteps,\n stepNumbers extends steps.StepNumbers<value>\n > = build<stepNumbers>;\n export type resolveAll<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n > = chosenSteps extends 'all' ? steps.StepNumbers<value> : never;\n export type resolveTuple<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n > = chosenSteps extends tupleNotation<steps.StepNumbers<value>>\n ? chosenSteps[number] extends steps.StepNumbers<value>\n ? chosenSteps[number]\n : never\n : never;\n export type resolveObject<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n > = chosenSteps extends objectNotation<steps.StepNumbers<value>>\n ? steps.StepNumbers<value> extends keyof chosenSteps\n ? steps.StepNumbers<value>\n : never\n : never;\n export type resolve<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n > =\n | resolveAll<value, chosenSteps>\n | resolveTuple<value, chosenSteps>\n | resolveObject<value, chosenSteps>;\n export type resolveType<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n > = chosenSteps extends 'all'\n ? 'all'\n : chosenSteps extends tupleNotation<steps.StepNumbers<value>>\n ? 'tuple'\n : chosenSteps extends objectNotation<steps.StepNumbers<value>>\n ? 'object'\n : never;\n\n export type currentStep<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n > = value[resolve<value, chosenSteps>];\n\n export function createCatchAllMessage(\n availableSteps: string[],\n type: 'chosen' | 'enabledFor' = 'chosen'\n ) {\n const formatter = new Intl.ListFormat('en', {\n style: 'long',\n type: 'disjunction',\n });\n\n return `The ${type} steps must either be set to on of the following: \"all\", an array of steps (${formatter.format(\n availableSteps.map((step) => `\"${step}\"`)\n )}), or an object containing the steps to chose ({ ${availableSteps\n .map((step) => `${step}: true`)\n .join(', ')} })`;\n }\n\n export function isAll(value: unknown): value is defaultStringOption {\n return Boolean(value && typeof value === 'string' && value === 'all');\n }\n\n export function isTuple<t>(\n value: unknown\n ): value is tupleNotation<steps.StepNumbers<t>>;\n export function isTuple<def, steps extends steps.instantiateSteps<def>>(\n value: unknown,\n validValues?: Array<unknown>\n ): value is tupleNotation<steps.StepNumbers<steps>>;\n export function isTuple(value: unknown, validValues?: Array<unknown>) {\n if (!Array.isArray(value)) {\n return false;\n }\n\n if (validValues) {\n return value.every((key) => validValues.includes(key));\n }\n\n return true;\n }\n\n export function isObject<def, steps extends steps.instantiateSteps<def>>(\n value: unknown,\n validKeys?: Array<unknown>\n ): value is objectNotation<steps.StepNumbers<steps>> {\n if (!value) {\n return false;\n }\n\n const keys = Object.keys(value);\n\n if (keys.length === 0) {\n return false;\n }\n\n if (validKeys && !keys.every((key) => validKeys.includes(key))) {\n return false;\n }\n\n return Object.entries(value).every(([_, v]) => v === true);\n }\n\n export function isValid<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n >(value: unknown, validValues?: Array<string>): value is chosenSteps {\n if (isAll(value)) {\n return true;\n }\n\n if (isTuple(value, validValues)) {\n return true;\n }\n\n if (isObject(value, validValues)) {\n return true;\n }\n\n return false;\n }\n\n export function resolveType<\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n >(chosenSteps: chosenSteps, validValues?: Array<string>) {\n if (isAll(chosenSteps)) {\n return 'all';\n }\n\n if (isTuple(chosenSteps, validValues)) {\n return 'tuple';\n }\n\n if (isObject(chosenSteps, validValues)) {\n return 'object';\n }\n\n throw new Error(\n 'Unable to resolve the type of the chosen steps. Valid values are: \"all\", an array of steps, or an object containing the steps to chose.'\n );\n }\n\n export interface MatchContextBase {\n /**\n * The chosen steps.\n */\n chosenSteps: main<\n steps.instantiateSteps,\n steps.StepNumbers<steps.instantiateSteps>\n >;\n }\n export interface AllMatchContext extends MatchContextBase {\n chosenSteps: 'all';\n }\n export interface TupleMatchContext extends MatchContextBase {\n chosenSteps: tupleNotation<steps.StepNumbers<steps.instantiateSteps>>;\n }\n export interface ObjectMatchContext extends MatchContextBase {\n chosenSteps: objectNotation<steps.StepNumbers<steps.instantiateSteps>>;\n }\n export type MatchContextWithMeta<meta extends Record<string, unknown>> = [\n meta\n ] extends [never]\n ? {}\n : {\n /**\n * Meta data that's available in the match function.\n */\n meta: meta;\n };\n export type MatchContextWithValidValues<validValues extends Array<string>> = [\n validValues\n ] extends [never]\n ? {}\n : validValues extends Array<infer value>\n ? value extends string\n ? {\n /**\n * The values that the tuple or object keys can be.\n */\n validValues: validValues;\n }\n : {}\n : {};\n export type MatchContext<\n meta extends Record<string, unknown>,\n validValues extends Array<string>,\n additionalCtx = {}\n > = Expand<\n MatchContextWithMeta<meta> &\n MatchContextWithValidValues<validValues> &\n additionalCtx\n >;\n export type MatchHandlerWithoutValidValues<\n meta extends Record<string, unknown>,\n ret = void\n > = [meta] extends [never]\n ? () => ret\n : (context: MatchContext<meta, never>) => ret;\n export type DefaultMatchContext<\n meta extends Record<string, unknown>,\n validValues extends Array<string>\n > = MatchContext<\n meta,\n validValues,\n MatchContextBase &\n ([validValues] extends [never]\n ? {}\n : {\n /**\n * A detailed error message that includes all ways to match the chosen steps.\n *\n * This is derived from {@linkcode createCatchAllMessage}.\n */\n errorMessage: string;\n })\n >;\n export type DefaultMatchHandler<\n meta extends Record<string, unknown>,\n validValues extends Array<string>,\n ret = void\n > = (context: DefaultMatchContext<meta, validValues>) => ret;\n export type MatchHandler<\n meta extends Record<string, unknown>,\n validValues extends Array<string>,\n ret = void\n > = (context: MatchContext<meta, validValues>) => ret;\n type AllMatchHandler<\n meta extends Record<string, unknown>,\n validValues extends Array<string>,\n ret = void\n > = (context: MatchContext<meta, validValues, AllMatchContext>) => ret;\n type TupleMatchHandler<\n meta extends Record<string, unknown>,\n validValues extends Array<string>,\n ret = void\n > = (context: MatchContext<meta, validValues, TupleMatchContext>) => ret;\n type ObjectMatchHandler<\n meta extends Record<string, unknown>,\n validValues extends Array<string>,\n ret = void\n > = (context: MatchContext<meta, validValues, ObjectMatchContext>) => ret;\n export type MatchOptions<\n meta extends Record<string, unknown> = never,\n validValues extends Array<string> = never,\n ret = void,\n defaultMatch = void\n > = {\n /**\n * Optionally provide data that will be available in the match functions.\n */\n meta?: meta;\n /**\n * Optionally provide valid values that will be used to validate the chosen steps.\n *\n * Note: if provided, the values will be used to match against `tuple` and `object` handlers.\n */\n validValues?: MatchHandlerWithoutValidValues<meta, validValues>;\n /**\n * A function to match against when the chosen steps are set to `'all'`.\n * @param meta The meta data to match against.\n * @returns\n */\n all?: AllMatchHandler<meta, validValues, ret>;\n /**\n * A function to match against when the chosen steps are set to a tuple.\n * @param meta The meta data to match against.\n * @returns\n */\n tuple?: TupleMatchHandler<meta, validValues, ret>;\n /**\n * A function to match against when the chosen steps are set to an object.\n * @param meta The meta data to match against.\n * @returns\n */\n object?: ObjectMatchHandler<meta, validValues, ret>;\n /**\n * The default handler to match against when no other handler matches.\n */\n default: DefaultMatchHandler<meta, validValues, defaultMatch>;\n };\n export type inferMatch<reg, defaultMatch> = [defaultMatch] extends [never]\n ? reg\n : reg | defaultMatch;\n\n export function match<\n meta extends Record<string, unknown> = never,\n validValues extends Array<string> = never,\n ret = void,\n defaultMatch = void\n >(options: MatchOptions<meta, validValues, ret, defaultMatch>) {\n const { meta, validValues, default: defaultHandler, ...handlers } = options;\n\n return <\n value extends steps.instantiateSteps,\n chosenSteps extends main<value, steps.StepNumbers<value>>\n >(\n chosenSteps: chosenSteps\n ) => {\n let context: Record<string, unknown> = { chosenSteps };\n let defaultContext: Record<string, unknown> = context;\n\n if (meta) {\n context = { ...context, meta };\n }\n\n if (validValues) {\n context = { ...context, validValues };\n }\n\n const values = validValues?.(context as never);\n\n if (values) {\n defaultContext = {\n ...defaultContext,\n errorMessage: createCatchAllMessage(values),\n };\n }\n\n const type = resolveType<value, chosenSteps>(chosenSteps, values);\n const handler = handlers[type];\n\n return (\n handler?.(context as never) ??\n (defaultHandler(defaultContext as never) as inferMatch<\n ret,\n defaultMatch\n >)\n );\n };\n }\n\n export function createTupleNotation<T extends string>(...values: T[]) {\n const [value, ...rest] = values;\n\n return [value, ...rest] as tupleNotation<T>;\n }\n}\n\nexport namespace HelperFn {\n export type buildAllCtx<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>\n > = Expand<\n Omit<\n {\n [key in steps.StepNumbers<value>]: stripFunctions<\n steps.getCurrent<value, key>\n >;\n },\n IsString<omitSteps>\n >\n >;\n export type buildTupleCtx<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>\n > = chosenSteps extends HelperFnChosenSteps.tupleNotation<\n steps.StepNumbers<value>\n >\n ? Expand<\n Omit<\n {\n -readonly [key in chosenSteps[number]]: key extends steps.StepNumbers<value>\n ? stripFunctions<steps.getCurrent<value, key>>\n : never;\n },\n IsString<omitSteps>\n >\n >\n : never;\n export type buildObjectCtx<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>\n > = chosenSteps extends HelperFnChosenSteps.objectNotation<\n steps.StepNumbers<value>\n >\n ? Expand<\n Omit<\n {\n [key in keyof chosenSteps]: key extends steps.StepNumbers<value>\n ? stripFunctions<steps.getCurrent<value, key>>\n : never;\n },\n IsString<omitSteps>\n >\n >\n : never;\n type CtxMap<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>\n > = {\n all: buildAllCtx<value, chosenSteps, omitSteps>;\n tuple: buildTupleCtx<value, chosenSteps, omitSteps>;\n // tuple: buildTupleCtx<value, chosenSteps, omitSteps>;\n object: buildObjectCtx<value, chosenSteps, omitSteps>;\n };\n export type buildCtx<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps> = never\n > = CtxMap<value, chosenSteps, omitSteps>[HelperFnChosenSteps.resolveType<\n value,\n chosenSteps\n >];\n export interface BaseOptions<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >\n > {\n /**\n * The step data to use for the function. It can either be an array with the **available**\n * step numbers or `'all'`.\n *\n * - If set to `'all'`, data from **all** the steps will be available.\n * - If an array of the **available** step numbers is provided, only data from those steps will be available.\n */\n stepData: chosenSteps;\n }\n export interface BaseInput<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps> = never,\n TAdditionalCtx extends Record<string, unknown> = {}\n > {\n /**\n * The multi-step form step context.\n */\n ctx: Expand<buildCtx<value, chosenSteps, omitSteps> & TAdditionalCtx>;\n }\n export interface CtxDataSelector<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n TAdditionalCtx extends Record<string, unknown> = {}\n > {\n /**\n * A function to select the data that will be available in the `fn`'s ctx.\n * @param input The available input to create the context with.\n * @returns The created ctx.\n */\n ctxData?: (\n input: BaseInput<\n value,\n 'all',\n HelperFnChosenSteps.resolve<value, chosenSteps>\n >\n ) => TAdditionalCtx;\n }\n}\nexport type createStepSpecificHelperFn<\n value extends steps.instantiateSteps,\n chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>\n> = HelperFnChosenSteps.resolve<value, chosenSteps>;\n"],"mappings":";;;;CAoES,SAAS,sBACd,gBACA,OAAgC,UAChC;AAMA,SAAO,OAAO,KAAK,8EALD,IAAI,KAAK,WAAW,MAAM;GAC1C,OAAO;GACP,MAAM;GACP,CAAC,CAEyG,OACzG,eAAe,KAAK,SAAS,IAAI,KAAK,GAAG,CAC1C,CAAC,mDAAmD,eAClD,KAAK,SAAS,GAAG,KAAK,QAAQ,CAC9B,KAAK,KAAK,CAAC;;;CAGT,SAAS,MAAM,OAA8C;AAClE,SAAO,QAAQ,SAAS,OAAO,UAAU,YAAY,UAAU,MAAM;;;CAUhE,SAAS,QAAQ,OAAgB,aAA8B;AACpE,MAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO;AAGT,MAAI,YACF,QAAO,MAAM,OAAO,QAAQ,YAAY,SAAS,IAAI,CAAC;AAGxD,SAAO;;;CAGF,SAAS,SACd,OACA,WACmD;AACnD,MAAI,CAAC,MACH,QAAO;EAGT,MAAM,OAAO,OAAO,KAAK,MAAM;AAE/B,MAAI,KAAK,WAAW,EAClB,QAAO;AAGT,MAAI,aAAa,CAAC,KAAK,OAAO,QAAQ,UAAU,SAAS,IAAI,CAAC,CAC5D,QAAO;AAGT,SAAO,OAAO,QAAQ,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,MAAM,KAAK;;;CAGrD,SAAS,QAGd,OAAgB,aAAmD;AACnE,MAAI,MAAM,MAAM,CACd,QAAO;AAGT,MAAI,QAAQ,OAAO,YAAY,CAC7B,QAAO;AAGT,MAAI,SAAS,OAAO,YAAY,CAC9B,QAAO;AAGT,SAAO;;;CAGF,SAAS,YAGd,aAA0B,aAA6B;AACvD,MAAI,MAAM,YAAY,CACpB,QAAO;AAGT,MAAI,QAAQ,aAAa,YAAY,CACnC,QAAO;AAGT,MAAI,SAAS,aAAa,YAAY,CACpC,QAAO;AAGT,QAAM,IAAI,MACR,4IACD;;;CAkJI,SAAS,MAKd,SAA6D;EAC7D,MAAM,EAAE,MAAM,aAAa,SAAS,gBAAgB,GAAG,aAAa;AAEpE,UAIE,gBACG;GACH,IAAIA,UAAmC,EAAE,aAAa;GACtD,IAAIC,iBAA0C;AAE9C,OAAI,KACF,WAAU;IAAE,GAAG;IAAS;IAAM;AAGhC,OAAI,YACF,WAAU;IAAE,GAAG;IAAS;IAAa;GAGvC,MAAM,SAAS,cAAc,QAAiB;AAE9C,OAAI,OACF,kBAAiB;IACf,GAAG;IACH,cAAc,sBAAsB,OAAO;IAC5C;GAIH,MAAM,UAAU,SADH,YAAgC,aAAa,OAAO;AAGjE,UACE,UAAU,QAAiB,IAC1B,eAAe,eAAwB;;;;CAQvC,SAAS,oBAAsC,GAAG,QAAa;EACpE,MAAM,CAAC,OAAO,GAAG,QAAQ;AAEzB,SAAO,CAAC,OAAO,GAAG,KAAK"}
@@ -0,0 +1,146 @@
1
+ import { Expand, IsString, RequireAtLeastOne, stripFunctions } from "../../../utils/types.cjs";
2
+ import { GeneralHelperFn, HelperFnInput, HelperFnOptions, HelperFnOutput, StepSpecificHelperFn } from "./utils.cjs";
3
+ import { steps } from "../../steps.cjs";
4
+
5
+ //#region src/steps/fn-utils/helper-fn/index.d.ts
6
+ declare namespace HelperFnChosenSteps {
7
+ export type defaultStringOption = 'all';
8
+ export type stringOption<T extends string> = defaultStringOption | T;
9
+ export type tupleNotation<T extends string> = [T, ...T[]];
10
+ export type objectNotation<T extends string> = RequireAtLeastOne<{ [_ in T]: true }>;
11
+ export type build<value extends string, stringOptions = defaultStringOption> = stringOptions | tupleNotation<value> | objectNotation<value>;
12
+ export type main<value extends steps$1.instantiateSteps, stepNumbers extends steps$1.StepNumbers<value>> = build<stepNumbers>;
13
+ export type resolveAll<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends 'all' ? steps$1.StepNumbers<value> : never;
14
+ export type resolveTuple<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends tupleNotation<steps$1.StepNumbers<value>> ? chosenSteps[number] extends steps$1.StepNumbers<value> ? chosenSteps[number] : never : never;
15
+ export type resolveObject<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends objectNotation<steps$1.StepNumbers<value>> ? steps$1.StepNumbers<value> extends keyof chosenSteps ? steps$1.StepNumbers<value> : never : never;
16
+ export type resolve<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = resolveAll<value, chosenSteps> | resolveTuple<value, chosenSteps> | resolveObject<value, chosenSteps>;
17
+ export type resolveType<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends 'all' ? 'all' : chosenSteps extends tupleNotation<steps$1.StepNumbers<value>> ? 'tuple' : chosenSteps extends objectNotation<steps$1.StepNumbers<value>> ? 'object' : never;
18
+ export type currentStep<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = value[resolve<value, chosenSteps>];
19
+ export function createCatchAllMessage(availableSteps: string[], type?: 'chosen' | 'enabledFor'): string;
20
+ export function isAll(value: unknown): value is defaultStringOption;
21
+ export function isTuple<t>(value: unknown): value is tupleNotation<steps$1.StepNumbers<t>>;
22
+ export function isTuple<def, steps$1 extends steps$1.instantiateSteps<def>>(value: unknown, validValues?: Array<unknown>): value is tupleNotation<steps$1.StepNumbers<steps$1>>;
23
+ export function isObject<def, steps$1 extends steps$1.instantiateSteps<def>>(value: unknown, validKeys?: Array<unknown>): value is objectNotation<steps$1.StepNumbers<steps$1>>;
24
+ export function isValid<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>>(value: unknown, validValues?: Array<string>): value is chosenSteps;
25
+ export function resolveType<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>>(chosenSteps: chosenSteps, validValues?: Array<string>): "all" | "tuple" | "object";
26
+ export interface MatchContextBase {
27
+ /**
28
+ * The chosen steps.
29
+ */
30
+ chosenSteps: main<steps$1.instantiateSteps, steps$1.StepNumbers<steps$1.instantiateSteps>>;
31
+ }
32
+ export interface AllMatchContext extends MatchContextBase {
33
+ chosenSteps: 'all';
34
+ }
35
+ export interface TupleMatchContext extends MatchContextBase {
36
+ chosenSteps: tupleNotation<steps$1.StepNumbers<steps$1.instantiateSteps>>;
37
+ }
38
+ export interface ObjectMatchContext extends MatchContextBase {
39
+ chosenSteps: objectNotation<steps$1.StepNumbers<steps$1.instantiateSteps>>;
40
+ }
41
+ export type MatchContextWithMeta<meta extends Record<string, unknown>> = [meta] extends [never] ? {} : {
42
+ /**
43
+ * Meta data that's available in the match function.
44
+ */
45
+ meta: meta;
46
+ };
47
+ export type MatchContextWithValidValues<validValues extends Array<string>> = [validValues] extends [never] ? {} : validValues extends Array<infer value> ? value extends string ? {
48
+ /**
49
+ * The values that the tuple or object keys can be.
50
+ */
51
+ validValues: validValues;
52
+ } : {} : {};
53
+ export type MatchContext<meta extends Record<string, unknown>, validValues extends Array<string>, additionalCtx = {}> = Expand<MatchContextWithMeta<meta> & MatchContextWithValidValues<validValues> & additionalCtx>;
54
+ export type MatchHandlerWithoutValidValues<meta extends Record<string, unknown>, ret = void> = [meta] extends [never] ? () => ret : (context: MatchContext<meta, never>) => ret;
55
+ export type DefaultMatchContext<meta extends Record<string, unknown>, validValues extends Array<string>> = MatchContext<meta, validValues, MatchContextBase & ([validValues] extends [never] ? {} : {
56
+ /**
57
+ * A detailed error message that includes all ways to match the chosen steps.
58
+ *
59
+ * This is derived from {@linkcode createCatchAllMessage}.
60
+ */
61
+ errorMessage: string;
62
+ })>;
63
+ export type DefaultMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: DefaultMatchContext<meta, validValues>) => ret;
64
+ export type MatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues>) => ret;
65
+ type AllMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues, AllMatchContext>) => ret;
66
+ type TupleMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues, TupleMatchContext>) => ret;
67
+ type ObjectMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues, ObjectMatchContext>) => ret;
68
+ export type MatchOptions<meta extends Record<string, unknown> = never, validValues extends Array<string> = never, ret = void, defaultMatch = void> = {
69
+ /**
70
+ * Optionally provide data that will be available in the match functions.
71
+ */
72
+ meta?: meta;
73
+ /**
74
+ * Optionally provide valid values that will be used to validate the chosen steps.
75
+ *
76
+ * Note: if provided, the values will be used to match against `tuple` and `object` handlers.
77
+ */
78
+ validValues?: MatchHandlerWithoutValidValues<meta, validValues>;
79
+ /**
80
+ * A function to match against when the chosen steps are set to `'all'`.
81
+ * @param meta The meta data to match against.
82
+ * @returns
83
+ */
84
+ all?: AllMatchHandler<meta, validValues, ret>;
85
+ /**
86
+ * A function to match against when the chosen steps are set to a tuple.
87
+ * @param meta The meta data to match against.
88
+ * @returns
89
+ */
90
+ tuple?: TupleMatchHandler<meta, validValues, ret>;
91
+ /**
92
+ * A function to match against when the chosen steps are set to an object.
93
+ * @param meta The meta data to match against.
94
+ * @returns
95
+ */
96
+ object?: ObjectMatchHandler<meta, validValues, ret>;
97
+ /**
98
+ * The default handler to match against when no other handler matches.
99
+ */
100
+ default: DefaultMatchHandler<meta, validValues, defaultMatch>;
101
+ };
102
+ export type inferMatch<reg, defaultMatch> = [defaultMatch] extends [never] ? reg : reg | defaultMatch;
103
+ export function match<meta extends Record<string, unknown> = never, validValues extends Array<string> = never, ret = void, defaultMatch = void>(options: MatchOptions<meta, validValues, ret, defaultMatch>): <value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>>(chosenSteps: chosenSteps) => inferMatch<ret, defaultMatch>;
104
+ export function createTupleNotation<T extends string>(...values: T[]): tupleNotation<T>;
105
+ export {};
106
+ }
107
+ declare namespace HelperFn {
108
+ export type buildAllCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = Expand<Omit<{ [key in steps.StepNumbers<value>]: stripFunctions<steps.getCurrent<value, key>> }, IsString<omitSteps>>>;
109
+ export type buildTupleCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = chosenSteps extends HelperFnChosenSteps.tupleNotation<steps.StepNumbers<value>> ? Expand<Omit<{ -readonly [key in chosenSteps[number]]: key extends steps.StepNumbers<value> ? stripFunctions<steps.getCurrent<value, key>> : never }, IsString<omitSteps>>> : never;
110
+ export type buildObjectCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = chosenSteps extends HelperFnChosenSteps.objectNotation<steps.StepNumbers<value>> ? Expand<Omit<{ [key in keyof chosenSteps]: key extends steps.StepNumbers<value> ? stripFunctions<steps.getCurrent<value, key>> : never }, IsString<omitSteps>>> : never;
111
+ type CtxMap<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = {
112
+ all: buildAllCtx<value, chosenSteps, omitSteps>;
113
+ tuple: buildTupleCtx<value, chosenSteps, omitSteps>;
114
+ object: buildObjectCtx<value, chosenSteps, omitSteps>;
115
+ };
116
+ export type buildCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps> = never> = CtxMap<value, chosenSteps, omitSteps>[HelperFnChosenSteps.resolveType<value, chosenSteps>];
117
+ export interface BaseOptions<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> {
118
+ /**
119
+ * The step data to use for the function. It can either be an array with the **available**
120
+ * step numbers or `'all'`.
121
+ *
122
+ * - If set to `'all'`, data from **all** the steps will be available.
123
+ * - If an array of the **available** step numbers is provided, only data from those steps will be available.
124
+ */
125
+ stepData: chosenSteps;
126
+ }
127
+ export interface BaseInput<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps> = never, TAdditionalCtx extends Record<string, unknown> = {}> {
128
+ /**
129
+ * The multi-step form step context.
130
+ */
131
+ ctx: Expand<buildCtx<value, chosenSteps, omitSteps> & TAdditionalCtx>;
132
+ }
133
+ export interface CtxDataSelector<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, TAdditionalCtx extends Record<string, unknown> = {}> {
134
+ /**
135
+ * A function to select the data that will be available in the `fn`'s ctx.
136
+ * @param input The available input to create the context with.
137
+ * @returns The created ctx.
138
+ */
139
+ ctxData?: (input: BaseInput<value, 'all', HelperFnChosenSteps.resolve<value, chosenSteps>>) => TAdditionalCtx;
140
+ }
141
+ export {};
142
+ }
143
+ type createStepSpecificHelperFn<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = HelperFnChosenSteps.resolve<value, chosenSteps>;
144
+ //#endregion
145
+ export { HelperFn, HelperFnChosenSteps, createStepSpecificHelperFn };
146
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../../../../src/steps/fn-utils/helper-fn/index.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import { Expand, IsString, RequireAtLeastOne, stripFunctions } from "../../../utils/types.mjs";
2
+ import { GeneralHelperFn, HelperFnInput, HelperFnOptions, HelperFnOutput, StepSpecificHelperFn } from "./utils.mjs";
3
+ import { steps } from "../../steps.mjs";
4
+
5
+ //#region src/steps/fn-utils/helper-fn/index.d.ts
6
+ declare namespace HelperFnChosenSteps {
7
+ export type defaultStringOption = 'all';
8
+ export type stringOption<T extends string> = defaultStringOption | T;
9
+ export type tupleNotation<T extends string> = [T, ...T[]];
10
+ export type objectNotation<T extends string> = RequireAtLeastOne<{ [_ in T]: true }>;
11
+ export type build<value extends string, stringOptions = defaultStringOption> = stringOptions | tupleNotation<value> | objectNotation<value>;
12
+ export type main<value extends steps$1.instantiateSteps, stepNumbers extends steps$1.StepNumbers<value>> = build<stepNumbers>;
13
+ export type resolveAll<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends 'all' ? steps$1.StepNumbers<value> : never;
14
+ export type resolveTuple<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends tupleNotation<steps$1.StepNumbers<value>> ? chosenSteps[number] extends steps$1.StepNumbers<value> ? chosenSteps[number] : never : never;
15
+ export type resolveObject<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends objectNotation<steps$1.StepNumbers<value>> ? steps$1.StepNumbers<value> extends keyof chosenSteps ? steps$1.StepNumbers<value> : never : never;
16
+ export type resolve<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = resolveAll<value, chosenSteps> | resolveTuple<value, chosenSteps> | resolveObject<value, chosenSteps>;
17
+ export type resolveType<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = chosenSteps extends 'all' ? 'all' : chosenSteps extends tupleNotation<steps$1.StepNumbers<value>> ? 'tuple' : chosenSteps extends objectNotation<steps$1.StepNumbers<value>> ? 'object' : never;
18
+ export type currentStep<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>> = value[resolve<value, chosenSteps>];
19
+ export function createCatchAllMessage(availableSteps: string[], type?: 'chosen' | 'enabledFor'): string;
20
+ export function isAll(value: unknown): value is defaultStringOption;
21
+ export function isTuple<t>(value: unknown): value is tupleNotation<steps$1.StepNumbers<t>>;
22
+ export function isTuple<def, steps$1 extends steps$1.instantiateSteps<def>>(value: unknown, validValues?: Array<unknown>): value is tupleNotation<steps$1.StepNumbers<steps$1>>;
23
+ export function isObject<def, steps$1 extends steps$1.instantiateSteps<def>>(value: unknown, validKeys?: Array<unknown>): value is objectNotation<steps$1.StepNumbers<steps$1>>;
24
+ export function isValid<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>>(value: unknown, validValues?: Array<string>): value is chosenSteps;
25
+ export function resolveType<value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>>(chosenSteps: chosenSteps, validValues?: Array<string>): "all" | "tuple" | "object";
26
+ export interface MatchContextBase {
27
+ /**
28
+ * The chosen steps.
29
+ */
30
+ chosenSteps: main<steps$1.instantiateSteps, steps$1.StepNumbers<steps$1.instantiateSteps>>;
31
+ }
32
+ export interface AllMatchContext extends MatchContextBase {
33
+ chosenSteps: 'all';
34
+ }
35
+ export interface TupleMatchContext extends MatchContextBase {
36
+ chosenSteps: tupleNotation<steps$1.StepNumbers<steps$1.instantiateSteps>>;
37
+ }
38
+ export interface ObjectMatchContext extends MatchContextBase {
39
+ chosenSteps: objectNotation<steps$1.StepNumbers<steps$1.instantiateSteps>>;
40
+ }
41
+ export type MatchContextWithMeta<meta extends Record<string, unknown>> = [meta] extends [never] ? {} : {
42
+ /**
43
+ * Meta data that's available in the match function.
44
+ */
45
+ meta: meta;
46
+ };
47
+ export type MatchContextWithValidValues<validValues extends Array<string>> = [validValues] extends [never] ? {} : validValues extends Array<infer value> ? value extends string ? {
48
+ /**
49
+ * The values that the tuple or object keys can be.
50
+ */
51
+ validValues: validValues;
52
+ } : {} : {};
53
+ export type MatchContext<meta extends Record<string, unknown>, validValues extends Array<string>, additionalCtx = {}> = Expand<MatchContextWithMeta<meta> & MatchContextWithValidValues<validValues> & additionalCtx>;
54
+ export type MatchHandlerWithoutValidValues<meta extends Record<string, unknown>, ret = void> = [meta] extends [never] ? () => ret : (context: MatchContext<meta, never>) => ret;
55
+ export type DefaultMatchContext<meta extends Record<string, unknown>, validValues extends Array<string>> = MatchContext<meta, validValues, MatchContextBase & ([validValues] extends [never] ? {} : {
56
+ /**
57
+ * A detailed error message that includes all ways to match the chosen steps.
58
+ *
59
+ * This is derived from {@linkcode createCatchAllMessage}.
60
+ */
61
+ errorMessage: string;
62
+ })>;
63
+ export type DefaultMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: DefaultMatchContext<meta, validValues>) => ret;
64
+ export type MatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues>) => ret;
65
+ type AllMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues, AllMatchContext>) => ret;
66
+ type TupleMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues, TupleMatchContext>) => ret;
67
+ type ObjectMatchHandler<meta extends Record<string, unknown>, validValues extends Array<string>, ret = void> = (context: MatchContext<meta, validValues, ObjectMatchContext>) => ret;
68
+ export type MatchOptions<meta extends Record<string, unknown> = never, validValues extends Array<string> = never, ret = void, defaultMatch = void> = {
69
+ /**
70
+ * Optionally provide data that will be available in the match functions.
71
+ */
72
+ meta?: meta;
73
+ /**
74
+ * Optionally provide valid values that will be used to validate the chosen steps.
75
+ *
76
+ * Note: if provided, the values will be used to match against `tuple` and `object` handlers.
77
+ */
78
+ validValues?: MatchHandlerWithoutValidValues<meta, validValues>;
79
+ /**
80
+ * A function to match against when the chosen steps are set to `'all'`.
81
+ * @param meta The meta data to match against.
82
+ * @returns
83
+ */
84
+ all?: AllMatchHandler<meta, validValues, ret>;
85
+ /**
86
+ * A function to match against when the chosen steps are set to a tuple.
87
+ * @param meta The meta data to match against.
88
+ * @returns
89
+ */
90
+ tuple?: TupleMatchHandler<meta, validValues, ret>;
91
+ /**
92
+ * A function to match against when the chosen steps are set to an object.
93
+ * @param meta The meta data to match against.
94
+ * @returns
95
+ */
96
+ object?: ObjectMatchHandler<meta, validValues, ret>;
97
+ /**
98
+ * The default handler to match against when no other handler matches.
99
+ */
100
+ default: DefaultMatchHandler<meta, validValues, defaultMatch>;
101
+ };
102
+ export type inferMatch<reg, defaultMatch> = [defaultMatch] extends [never] ? reg : reg | defaultMatch;
103
+ export function match<meta extends Record<string, unknown> = never, validValues extends Array<string> = never, ret = void, defaultMatch = void>(options: MatchOptions<meta, validValues, ret, defaultMatch>): <value extends steps$1.instantiateSteps, chosenSteps extends main<value, steps$1.StepNumbers<value>>>(chosenSteps: chosenSteps) => inferMatch<ret, defaultMatch>;
104
+ export function createTupleNotation<T extends string>(...values: T[]): tupleNotation<T>;
105
+ export {};
106
+ }
107
+ declare namespace HelperFn {
108
+ export type buildAllCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = Expand<Omit<{ [key in steps.StepNumbers<value>]: stripFunctions<steps.getCurrent<value, key>> }, IsString<omitSteps>>>;
109
+ export type buildTupleCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = chosenSteps extends HelperFnChosenSteps.tupleNotation<steps.StepNumbers<value>> ? Expand<Omit<{ -readonly [key in chosenSteps[number]]: key extends steps.StepNumbers<value> ? stripFunctions<steps.getCurrent<value, key>> : never }, IsString<omitSteps>>> : never;
110
+ export type buildObjectCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = chosenSteps extends HelperFnChosenSteps.objectNotation<steps.StepNumbers<value>> ? Expand<Omit<{ [key in keyof chosenSteps]: key extends steps.StepNumbers<value> ? stripFunctions<steps.getCurrent<value, key>> : never }, IsString<omitSteps>>> : never;
111
+ type CtxMap<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps>> = {
112
+ all: buildAllCtx<value, chosenSteps, omitSteps>;
113
+ tuple: buildTupleCtx<value, chosenSteps, omitSteps>;
114
+ object: buildObjectCtx<value, chosenSteps, omitSteps>;
115
+ };
116
+ export type buildCtx<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps> = never> = CtxMap<value, chosenSteps, omitSteps>[HelperFnChosenSteps.resolveType<value, chosenSteps>];
117
+ export interface BaseOptions<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> {
118
+ /**
119
+ * The step data to use for the function. It can either be an array with the **available**
120
+ * step numbers or `'all'`.
121
+ *
122
+ * - If set to `'all'`, data from **all** the steps will be available.
123
+ * - If an array of the **available** step numbers is provided, only data from those steps will be available.
124
+ */
125
+ stepData: chosenSteps;
126
+ }
127
+ export interface BaseInput<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, omitSteps extends HelperFnChosenSteps.resolve<value, chosenSteps> = never, TAdditionalCtx extends Record<string, unknown> = {}> {
128
+ /**
129
+ * The multi-step form step context.
130
+ */
131
+ ctx: Expand<buildCtx<value, chosenSteps, omitSteps> & TAdditionalCtx>;
132
+ }
133
+ export interface CtxDataSelector<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, TAdditionalCtx extends Record<string, unknown> = {}> {
134
+ /**
135
+ * A function to select the data that will be available in the `fn`'s ctx.
136
+ * @param input The available input to create the context with.
137
+ * @returns The created ctx.
138
+ */
139
+ ctxData?: (input: BaseInput<value, 'all', HelperFnChosenSteps.resolve<value, chosenSteps>>) => TAdditionalCtx;
140
+ }
141
+ export {};
142
+ }
143
+ type createStepSpecificHelperFn<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = HelperFnChosenSteps.resolve<value, chosenSteps>;
144
+ //#endregion
145
+ export { HelperFn, HelperFnChosenSteps, createStepSpecificHelperFn };
146
+ //# sourceMappingURL=index.d.mts.map