@jfdevelops/multi-step-form-core 1.0.0-alpha.23 → 1.0.0-alpha.25

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 (147) 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 -18
  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 +95 -0
  26. package/dist/steps/fields.cjs.map +1 -1
  27. package/dist/steps/fields.d.cts +119 -9
  28. package/dist/steps/fields.d.cts.map +1 -1
  29. package/dist/steps/fields.d.mts +119 -9
  30. package/dist/steps/fields.d.mts.map +1 -1
  31. package/dist/steps/fields.mjs +95 -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/package.json +1 -1
  116. package/dist/internals/utils.cjs +0 -102
  117. package/dist/internals/utils.cjs.map +0 -1
  118. package/dist/internals/utils.d.cts +0 -11
  119. package/dist/internals/utils.d.cts.map +0 -1
  120. package/dist/internals/utils.d.mts +0 -11
  121. package/dist/internals/utils.d.mts.map +0 -1
  122. package/dist/internals/utils.mjs +0 -99
  123. package/dist/internals/utils.mjs.map +0 -1
  124. package/dist/observable.cjs +0 -44
  125. package/dist/observable.cjs.map +0 -1
  126. package/dist/observable.d.cts +0 -26
  127. package/dist/observable.d.cts.map +0 -1
  128. package/dist/observable.d.mts +0 -26
  129. package/dist/observable.d.mts.map +0 -1
  130. package/dist/observable.mjs +0 -44
  131. package/dist/observable.mjs.map +0 -1
  132. package/dist/steps/types.cjs +0 -33
  133. package/dist/steps/types.cjs.map +0 -1
  134. package/dist/steps/types.d.cts +0 -354
  135. package/dist/steps/types.d.cts.map +0 -1
  136. package/dist/steps/types.d.mts +0 -354
  137. package/dist/steps/types.d.mts.map +0 -1
  138. package/dist/steps/types.mjs +0 -27
  139. package/dist/steps/types.mjs.map +0 -1
  140. package/dist/utils/field-types.cjs +0 -97
  141. package/dist/utils/field-types.cjs.map +0 -1
  142. package/dist/utils/field-types.d.cts +0 -52
  143. package/dist/utils/field-types.d.cts.map +0 -1
  144. package/dist/utils/field-types.d.mts +0 -52
  145. package/dist/utils/field-types.d.mts.map +0 -1
  146. package/dist/utils/field-types.mjs +0 -93
  147. package/dist/utils/field-types.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schema.cjs","names":["Subscribable","#internal","setCasingType","createStep","MultiStepFormStorage","DEFAULT_STORAGE_KEY","MultiStepFormStepSchemaInternal","isValidStepKey","getStep","v","isCasingValid","isFieldType","fields","fieldsUtils"],"sources":["../../src/steps/schema.ts"],"sourcesContent":["import { MultiStepFormStepSchemaInternal } from '@/internals/step-schema';\nimport {\n DEFAULT_STORAGE_KEY,\n DefaultStorageKey,\n MultiStepFormStorage,\n} from '@/storage';\nimport {\n isCasingValid,\n isFieldType,\n setCasingType,\n type CasingType,\n type Constrain,\n type DefaultCasing,\n type Expand,\n type Join,\n} from '@/utils';\nimport { invariant } from '@/utils/invariant';\nimport { Subscribable } from '../subscribable';\nimport { fields as fieldsUtils } from './fields';\nimport {\n AnyResolvedStep,\n AnyStepField,\n AnyStepFieldOption,\n CreateHelperFunctionOptionsWithCustomCtxOptions,\n CreateHelperFunctionOptionsWithValidator,\n CreateHelperFunctionOptionsWithoutValidator,\n CreateStepHelperFn,\n CreatedHelperFnWithInput,\n CreatedHelperFnWithoutInput,\n ExtractStepFromKey,\n FirstStep,\n GetCurrentStep,\n HelperFnChosenSteps,\n HelperFnWithValidator,\n HelperFnWithoutValidator,\n InferStepOptions,\n LastStep,\n MultiStepFormSchemaStepConfig,\n ResolvedFields,\n ResolvedStep,\n Step,\n StepData,\n StepNumbers,\n StepOptions,\n UnionToTuple,\n UpdateFn,\n ValidStepKey,\n type ResetFn,\n} from './types';\nimport { getStep, type GetStepOptions } from './utils';\nimport { createStep, isValidStepKey } from '@/internals/utils';\n\nexport interface MultiStepFormStepSchemaFunctions<\n TResolvedStep extends AnyResolvedStep,\n TStepNumbers extends StepNumbers<TResolvedStep>\n> {\n update: UpdateFn.general<TResolvedStep, TStepNumbers>;\n createHelperFn: CreateStepHelperFn<TResolvedStep, TStepNumbers>;\n}\nexport type AsType = (typeof AS_TYPES)[number];\ntype Quote<T extends string[]> = {\n [K in keyof T]: T[K] extends string ? `'${T[K]}'` : never;\n};\nexport type AsTypeMap<\n resolvedStep extends AnyResolvedStep,\n stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>\n> = {\n // Exclude is needed due to all the Constrains\n string: Exclude<\n Join<\n Constrain<\n Quote<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>>,\n string[]\n >,\n ' | '\n >,\n ''\n >;\n number: Exclude<\n Join<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>, ' | '>,\n ''\n >;\n 'array.string': UnionToTuple<`${stepNumbers}`>;\n 'array.string.untyped': string[];\n};\nexport type AsFunctionReturn<\n resolvedStep extends AnyResolvedStep,\n stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>,\n asType extends AsType\n> = AsTypeMap<resolvedStep, stepNumbers>[asType];\nexport type AsFunction<\n resolvedStep extends AnyResolvedStep,\n stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>\n> = <asType extends AsType>(\n asType: asType\n) => AsFunctionReturn<resolvedStep, stepNumbers, asType>;\nexport type MultiStepFormStepStepsConfig<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<\n TStep,\n TCasing\n >,\n TStepNumbers extends StepNumbers<TResolvedStep> = StepNumbers<TResolvedStep>\n> = {\n first: FirstStep<TResolvedStep>;\n last: LastStep<TResolvedStep>;\n value: ReadonlyArray<TStepNumbers>;\n as: AsFunction<TResolvedStep, TStepNumbers>;\n isValidStepNumber: (stepNumber: number) => stepNumber is TStepNumbers;\n isValidStepKey: (\n value: string\n ) => value is Constrain<keyof TResolvedStep, string>;\n};\nexport type MultiStepFormStepSchemaListener<\n TStep extends Step<TCasing>,\n TCasing extends CasingType\n> = (data: {\n original: InferStepOptions<TStep>;\n value: ResolvedStep<TStep, TCasing>;\n steps: MultiStepFormStepStepsConfig<TStep, TCasing>;\n defaultNameTransformationCasing: TCasing;\n}) => void;\n\n/**\n * Available transformation types for the step numbers.\n */\nconst AS_TYPES = [\n 'string',\n 'number',\n 'array.string',\n 'array.string.untyped',\n] as const;\n\ntype ValueCheck<T> = (v: unknown) => v is T;\n\ntype FieldChecks<T extends object> = {\n [K in keyof T]: ValueCheck<T[K]>;\n};\n\nfunction assertObjectFields<T extends object>(\n obj: unknown,\n checks: FieldChecks<T>\n): obj is T {\n if (typeof obj !== 'object' || obj === null) return false;\n\n for (const key of Object.keys(checks) as (keyof T)[]) {\n // Check that the property exists\n if (!(key in obj)) return false;\n\n // Now check the type\n const checkFn = checks[key];\n const value = (obj as any)[key];\n if (!checkFn(value)) return false;\n }\n\n return true;\n}\n\nexport class MultiStepFormStepSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<\n step,\n casing\n >,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n storageKey extends string = DefaultStorageKey\n >\n extends Subscribable<MultiStepFormStepSchemaListener<step, casing>>\n implements MultiStepFormStepSchemaFunctions<resolvedStep, stepNumbers>\n{\n /**\n * The original config before any validation or transformations have been applied.\n */\n readonly original: InferStepOptions<step>;\n /**\n * The resolved step values.\n */\n value: resolvedStep;\n readonly steps: MultiStepFormStepStepsConfig<step, casing>;\n readonly defaultNameTransformationCasing: casing;\n //@ts-ignore\n private readonly firstStep: StepData<resolvedStep, FirstStep<resolvedStep>>;\n private readonly lastStep: StepData<resolvedStep, LastStep<resolvedStep>>;\n private readonly stepNumbers: Array<number>;\n private readonly storage: MultiStepFormStorage<resolvedStep, storageKey>;\n readonly #internal: MultiStepFormStepSchemaInternal<\n step,\n casing,\n resolvedStep,\n stepNumbers\n >;\n\n constructor(\n config: MultiStepFormSchemaStepConfig<\n step,\n Constrain<casing, CasingType>,\n storageKey\n >\n ) {\n super();\n\n const { steps, nameTransformCasing, storage } = config;\n\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n ) as casing;\n\n this.original = steps;\n\n this.value = createStep<step, casing>(this.original) as resolvedStep;\n this.storage = new MultiStepFormStorage<resolvedStep, storageKey>({\n data: this.value,\n key: (storage?.key ?? DEFAULT_STORAGE_KEY) as storageKey,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined ?? false,\n });\n this.#internal = new MultiStepFormStepSchemaInternal<\n step,\n casing,\n resolvedStep,\n stepNumbers\n >({\n originalValue: this.original,\n getValue: () => this.value,\n setValue: (next) => this.handlePostUpdate(next),\n });\n\n this.value = this.#internal.enrichValues(this.value);\n this.stepNumbers = Object.keys(this.value).map((key) =>\n Number.parseInt(key.replace('step', ''))\n );\n\n this.firstStep = this.first();\n this.lastStep = this.last();\n this.steps = {\n first: this.firstStep.step,\n last: this.lastStep.step,\n value: this.stepNumbers as unknown as ReadonlyArray<stepNumbers>,\n as: (asType): any => {\n invariant(\n typeof asType === 'string',\n `The type of the target transformation type must be a string, was ${typeof asType}`\n );\n\n if (asType === 'string') {\n return this.stepNumbers.map((value) => `'${value}'`).join(' | ');\n }\n\n if (asType === 'number') {\n return this.stepNumbers.join(' | ');\n }\n\n if (asType.includes('array.string')) {\n return this.stepNumbers.map((value) => `${value}`);\n }\n\n throw new Error(\n `Transformation type \"${asType}\" is not supported. Available transformations include: ${AS_TYPES.map(\n (value) => `\"${value}\"`\n ).join(', ')}`\n );\n },\n isValidStepNumber: (stepNumber): stepNumber is stepNumbers =>\n this.stepNumbers.includes(stepNumber),\n isValidStepKey: (value) =>\n isValidStepKey<resolvedStep>(this.value, value),\n };\n\n this.sync();\n }\n\n /**\n * @internal\n */\n __getStorage() {\n return this.storage;\n }\n\n getSnapshot() {\n return this;\n }\n\n /**\n * Syncs the values from storage to {@linkcode value}.\n */\n sync() {\n // TODO add \"syncOptions\" so caller can chose where to sync from ('storage' | 'instance')\n const storageValues = this.__getStorage().get();\n\n if (storageValues) {\n const enrichedValues = this.#internal.enrichValues(storageValues);\n\n this.value = { ...enrichedValues };\n }\n }\n\n protected notify() {\n for (const listener of this.listeners) {\n listener({\n defaultNameTransformationCasing: this.defaultNameTransformationCasing,\n original: this.original,\n steps: this.steps,\n value: this.value,\n });\n }\n }\n\n /**\n * Gets the data for a specific step.\n * @param options The options for getting the step data.\n * @returns The step data for the target step.\n */\n get<stepNumber extends stepNumbers>(\n options: GetStepOptions<resolvedStep, stepNumbers, stepNumber>\n ) {\n return getStep(this.value)(options);\n }\n\n /**\n * Gets the data for the first step.\n * @returns The data for the first step.\n */\n first() {\n const firstStep = Math.min(...this.stepNumbers) as FirstStep<resolvedStep>;\n\n return this.get({ step: firstStep });\n }\n\n /**\n * Gets the data for the last step.\n * @returns The data for the last step.\n */\n last() {\n const lastStep = Math.max(...this.stepNumbers);\n\n return this.get<LastStep<resolvedStep>>({ step: lastStep as never });\n }\n\n protected handlePostUpdate(next: resolvedStep) {\n this.value = { ...next };\n\n this.__getStorage().add(this.value);\n this.sync();\n this.notify();\n }\n\n update<\n targetStep extends ValidStepKey<stepNumbers>,\n field extends UpdateFn.chosenFields<\n UpdateFn.resolvedStep<resolvedStep, stepNumbers, targetStep>\n > = 'all',\n strict extends boolean = true,\n partial extends boolean = false,\n additionalCtx extends Record<string, unknown> = {},\n additionalUpdaterData extends UpdateFn.additionalUpdaterData = never\n >(\n options: UpdateFn.options<\n resolvedStep,\n stepNumbers,\n targetStep,\n field,\n strict,\n partial,\n additionalCtx,\n additionalUpdaterData\n >\n ) {\n this.#internal.update(options);\n }\n\n reset<\n targetStep extends ValidStepKey<stepNumbers>,\n fields extends UpdateFn.chosenFields<currentStep>,\n currentStep extends UpdateFn.resolvedStep<\n resolvedStep,\n stepNumbers,\n targetStep\n >\n >(\n options: ResetFn.Options<\n resolvedStep,\n stepNumbers,\n targetStep,\n fields,\n currentStep\n >\n ) {\n this.#internal.reset(options);\n }\n\n /**\n * Create a helper function with validated input.\n */\n createHelperFn<\n const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n validator,\n additionalCtx extends Record<string, unknown>,\n response\n >(\n options: CreateHelperFunctionOptionsWithValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n validator,\n additionalCtx\n >,\n fn: HelperFnWithValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n validator,\n additionalCtx,\n response\n >\n ): CreatedHelperFnWithInput<validator, response>;\n /**\n * Create a helper function without input.\n */\n createHelperFn<\n const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n additionalCtx extends Record<string, unknown>,\n response\n >(\n options: CreateHelperFunctionOptionsWithoutValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps\n > &\n CreateHelperFunctionOptionsWithCustomCtxOptions<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n additionalCtx\n >,\n fn: HelperFnWithoutValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n additionalCtx,\n response\n >\n ): CreatedHelperFnWithoutInput<response>;\n // Implementation\n createHelperFn<\n const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>,\n response,\n additionalCtx extends Record<string, unknown>,\n validator = never\n >(\n options:\n | CreateHelperFunctionOptionsWithValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n validator,\n additionalCtx\n >\n | CreateHelperFunctionOptionsWithoutValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps\n >,\n fn:\n | HelperFnWithValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n validator,\n additionalCtx,\n response\n >\n | HelperFnWithoutValidator<\n resolvedStep,\n stepNumbers,\n chosenSteps,\n additionalCtx,\n response\n >\n ) {\n const { stepData, ...rest } = options;\n\n return this.#internal.createStepHelperFn(stepData)(rest, fn);\n }\n\n /**\n * Validates that a given object is the proper shape for step data.\n * @param value\n */\n static hasData<\n step extends Step<casing>,\n resolvedStep extends ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep>,\n casing extends CasingType = DefaultCasing\n >(\n value: unknown,\n options?: {\n optionalKeysToCheck?: FieldChecks<\n Pick<StepOptions, 'description' | 'validateFields'>\n >;\n }\n ): value is GetCurrentStep<resolvedStep, stepNumbers> {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n\n return assertObjectFields<\n | GetCurrentStep<resolvedStep, stepNumbers>\n | (Omit<StepOptions, 'fields'> & {\n fields: Expand<\n ResolvedFields<InferStepOptions<step>, keyof InferStepOptions<step>>\n >;\n })\n >(value, {\n title: (v) => typeof v === 'string',\n fields: (\n v\n ): v is Expand<\n ResolvedFields<InferStepOptions<step>, keyof InferStepOptions<step>>\n > => {\n if (v === null || typeof v !== 'object') {\n return false;\n }\n\n for (const key of Object.keys(v)) {\n if (typeof key !== 'string' || !(key in v)) {\n return false;\n }\n\n const current = (v as Record<string, unknown>)[key];\n\n if (current === null || typeof current !== 'object') {\n return false;\n }\n\n const hasField = assertObjectFields<AnyStepFieldOption>(current, {\n defaultValue: (v): v is {} => v !== 'undefined' && v !== null,\n label: (v) =>\n typeof v === 'string' || (typeof v === 'boolean' && !v),\n nameTransformCasing: isCasingValid,\n type: isFieldType,\n });\n\n if (!hasField) {\n return false;\n }\n }\n\n return true;\n },\n createHelperFn: (\n v\n ): v is GetCurrentStep<resolvedStep, stepNumbers>['createHelperFn'] =>\n typeof v === 'function',\n // update: (v): v is GetCurrentStep<resolvedStep, stepNumbers>['update'] =>\n // typeof v === 'function',\n nameTransformCasing: isCasingValid,\n ...options?.optionalKeysToCheck,\n });\n }\n\n /**\n * Gets the value of a given field for a given step.\n * @param step The step to get the value from.\n * @param field The field to get the value from.\n * @returns The value of the {@linkcode field}.\n */\n getValue<\n step extends keyof resolvedStep,\n field extends fieldsUtils.getDeepFields<resolvedStep, step>\n >(step: step, field: field) {\n const stepData = this.value[step];\n const baseErrorMessage = `Unable to get the value for \"${String(\n step\n )}.fields.${String(field)}\"`;\n\n invariant('fields' in stepData, baseErrorMessage);\n invariant(\n typeof stepData.fields === 'object',\n `${baseErrorMessage} because \"fields\" is not an object. This shouldn't be the case, so please open an issue`\n );\n\n const fields = stepData.fields as AnyStepField;\n\n const defaultValue = fieldsUtils.resolvedDeepPath<\n resolvedStep,\n step,\n fieldsUtils.get<resolvedStep, step>,\n field\n >(field, fields as fieldsUtils.get<resolvedStep, step>);\n\n return defaultValue;\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"schema.cjs","names":["addToTuple","mapToTuple","createInvariant","Subscribable","#stepNumbers","#storage","#internal","setCasingType","steps","instantiateSteps","MultiStepFormStepSchemaInternal","MultiStepFormStorage","DEFAULT_STORAGE_KEY","getStep","invariant: Invariant","fields"],"sources":["../../src/steps/schema.ts"],"sourcesContent":["import {\n MultiStepFormStepSchemaInternal,\n type StepSchema,\n} from '@/internals/step-schema';\nimport { DEFAULT_STORAGE_KEY, MultiStepFormStorage } from '@/storage';\nimport {\n setCasingType,\n type Constrain,\n type Join,\n type UnionToTuple,\n} from '@/utils';\nimport { addToTuple, mapToTuple } from '@/utils/helpers';\nimport { createInvariant, invariant, type Invariant } from '@/utils/invariant';\nimport { Subscribable } from '../subscribable';\nimport { fields } from './fields';\nimport type { HelperFnChosenSteps } from './fn-utils/helper-fn';\nimport type {\n GeneralHelperFn,\n HelperFnInput,\n HelperFnOptions,\n HelperFnOutput,\n} from './fn-utils/helper-fn/utils';\nimport type { ResetFn } from './fn-utils/reset-fn';\nimport type { UpdateFn } from './fn-utils/update-fn';\nimport { instantiateSteps, steps } from './steps';\nimport { getStep, type ExtractStepFromKey, type GetStepOptions } from './utils';\n\nexport interface MultiStepFormStepSchemaFunctions<\n value extends steps.instantiateSteps,\n> {\n update: UpdateFn.general<value>;\n reset: ResetFn.general<value>;\n createHelperFn: GeneralHelperFn<value>;\n}\nexport type AsType = (typeof AS_TYPES)[number];\ntype Quote<T extends string[]> = {\n [K in keyof T]: T[K] extends string ? `'${T[K]}'` : never;\n};\nexport type AsTypeMap<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n stepNumbers extends steps.StepNumbers<value> = steps.StepNumbers<value>,\n> = {\n // Exclude is needed due to all the Constrains\n string: Exclude<\n Join<\n Constrain<\n Quote<\n Constrain<\n UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>,\n string[]\n >\n >,\n string[]\n >,\n ' | '\n >,\n ''\n >;\n 'string.keys': Exclude<\n Join<\n Constrain<UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>, string[]>,\n ' | '\n >,\n ''\n >;\n number: Exclude<\n Join<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>, ' | '>,\n ''\n >;\n 'array.number': UnionToTuple<ExtractStepFromKey<stepNumbers>>;\n 'array.string': UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>;\n 'array.string.keys': UnionToTuple<`${stepNumbers}`>;\n 'array.string.untyped': string[];\n};\nexport type AsFunctionReturn<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n asType extends AsType,\n> = AsTypeMap<def, value>[asType];\nexport type AsFunction<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n> = <asType extends AsType>(\n asType: asType\n) => AsFunctionReturn<def, value, asType>;\n\nexport type IsValidStepFn<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n> = {\n /**\n * Checks if a given string is a valid step key.\n */\n (value: string): value is steps.StepNumbers<value>;\n /**\n * Checks if a given number is a valid step number.\n */\n (value: number): value is ExtractStepFromKey<steps.StepNumbers<value>>;\n};\nexport type MultiStepFormStepStepsConfig<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n> = {\n value: ReadonlyArray<steps.StepNumbers<value>>;\n as: AsFunction<def, value>;\n isValidStep: IsValidStepFn<def, value>;\n};\n\nconst STRING_KEYS = ['string', 'string.keys'] as const;\nconst NUMBER_KEYS = ['number'] as const;\nconst ARRAY_STRING_KEYS = addToTuple(\n mapToTuple(STRING_KEYS, (key) => `array.${key}` as const),\n 'array.string.untyped'\n);\nconst ARRAY_NUMBER_KEYS = mapToTuple(\n NUMBER_KEYS,\n (key) => `array.${key}` as const\n);\n\n/**\n * Available transformation types for the step numbers.\n */\nconst AS_TYPES = [\n ...STRING_KEYS,\n ...NUMBER_KEYS,\n ...ARRAY_STRING_KEYS,\n ...ARRAY_NUMBER_KEYS,\n] as const;\n\nexport function createIsValidStepFn<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n>(stepNumbers: Array<number>): IsValidStepFn<def, value> {\n function isValidStep(value: string): value is steps.StepNumbers<value>;\n function isValidStep(\n value: number\n ): value is ExtractStepFromKey<steps.StepNumbers<value>>;\n function isValidStep(value: string | number) {\n const invariant: Invariant = createInvariant('[isValidStep]');\n\n invariant(\n typeof value === 'string' || typeof value === 'number',\n `The value must be a string or a number, was ${typeof value}`\n );\n\n if (typeof value === 'string') {\n if (!value.includes('step')) {\n return false;\n }\n\n return stepNumbers.includes(Number.parseInt(value.replace('step', '')));\n }\n\n if (typeof value === 'number') {\n return stepNumbers.includes(value);\n }\n\n return false;\n }\n\n return isValidStep;\n}\n\nexport namespace MultiStepFormStepSchema {\n export type ListenerOptions<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n > = {\n original: def['steps'];\n value: value;\n steps: MultiStepFormStepStepsConfig<def, value>;\n defaultNameTransformationCasing: def['nameTransformCasing'];\n };\n export type Listener<\n def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n > = (data: ListenerOptions<def, value>) => void;\n}\n\nexport class MultiStepFormStepSchema<\n const def extends StepSchema.Config,\n value extends steps.instantiateSteps<def> = steps.instantiateSteps<def>,\n>\n extends Subscribable<MultiStepFormStepSchema.Listener<def, value>>\n implements MultiStepFormStepSchemaFunctions<value>\n{\n /**\n * The original config before any validation or transformations have been applied.\n */\n readonly original: def['steps'];\n /**\n * The resolved step values.\n */\n value: value;\n readonly steps: MultiStepFormStepStepsConfig<def, value>;\n readonly defaultNameTransformationCasing: def['nameTransformCasing'];\n readonly #stepNumbers: Array<number>;\n readonly #storage: MultiStepFormStorage<\n value,\n StepSchema.inferStorageKey<def>\n >;\n readonly #internal: MultiStepFormStepSchemaInternal<def, value>;\n\n constructor(config: def) {\n super();\n\n const { steps, nameTransformCasing, storage } = config;\n\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n ) as def['nameTransformCasing'];\n\n this.original = steps;\n\n this.value = instantiateSteps({ steps });\n this.#internal = new MultiStepFormStepSchemaInternal({\n originalValue: this.original,\n getValue: () => this.value,\n setValue: (next) => this.handlePostUpdate(next),\n });\n\n this.value = this.#internal.enrichValues(this.value);\n this.#storage = new MultiStepFormStorage({\n data: this.value,\n key: (storage?.key ??\n DEFAULT_STORAGE_KEY) as StepSchema.inferStorageKey<def>,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined,\n });\n this.#stepNumbers = Object.keys(this.value).map((key) =>\n Number.parseInt(key.replace('step', ''))\n );\n\n this.steps = {\n value: this.#stepNumbers as unknown as ReadonlyArray<\n steps.StepNumbers<value>\n >,\n as: (asType): any => {\n invariant(\n typeof asType === 'string',\n `The type of the target transformation type must be a string, was ${typeof asType}`\n );\n\n if (asType === 'string') {\n return this.#stepNumbers.map((value) => `'${value}'`).join(' | ');\n }\n\n if (asType === 'string.keys') {\n return this.#stepNumbers.map((value) => `'step${value}'`).join(' | ');\n }\n\n if (asType === 'number') {\n return this.#stepNumbers.join(' | ');\n }\n\n if (asType.includes('array.string')) {\n if (asType.includes('keys')) {\n return this.#stepNumbers.map((value) => `step${value}`);\n }\n\n return this.#stepNumbers.map((value) => `${value}`);\n }\n\n if (asType.includes('array.number')) {\n return this.#stepNumbers;\n }\n\n throw new Error(\n `Transformation type \"${asType}\" is not supported. Available transformations include: ${AS_TYPES.map(\n (value) => `\"${value}\"`\n ).join(', ')}`\n );\n },\n isValidStep: createIsValidStepFn(this.#stepNumbers),\n };\n\n this.sync();\n }\n\n /**\n * @internal\n */\n __getStorage() {\n return this.#storage;\n }\n\n getSnapshot() {\n return this;\n }\n\n /**\n * Syncs the values from storage to {@linkcode value}.\n */\n sync() {\n // TODO add \"syncOptions\" so caller can chose where to sync from ('storage' | 'instance')\n const storageValues = this.__getStorage().get();\n\n if (storageValues) {\n const enrichedValues = this.#internal.enrichValues(storageValues);\n\n this.value = { ...enrichedValues };\n }\n }\n\n protected notify() {\n for (const listener of this.listeners) {\n listener({\n defaultNameTransformationCasing: this.defaultNameTransformationCasing,\n original: this.original,\n steps: this.steps,\n value: this.value,\n });\n }\n }\n\n /**\n * Gets the data for a specific step.\n * @param options The options for getting the step data.\n * @returns The step data for the target step.\n */\n get<stepNumber extends steps.StepNumbers<value>>(\n options: GetStepOptions<value, steps.StepNumbers<value>, stepNumber>\n ) {\n return getStep(this.value)(options);\n }\n\n protected handlePostUpdate(next: value) {\n this.value = { ...next };\n\n this.__getStorage().add(this.value);\n this.sync();\n this.notify();\n }\n\n /**\n * Updates the step with the given options.\n * @param options The options for updating the step.\n * @returns The return value of the updater function.\n */\n update<\n targetStep extends steps.StepNumbers<value>,\n field extends UpdateFn.chosenFields<\n UpdateFn.resolvedStep<value, targetStep>\n > = 'all',\n strict extends boolean = true,\n partial extends boolean = false,\n additionalCtx extends Record<string, unknown> = {},\n additionalUpdaterData extends UpdateFn.additionalUpdaterData = never,\n >(\n options: UpdateFn.options<\n value,\n targetStep,\n field,\n strict,\n partial,\n additionalCtx,\n additionalUpdaterData\n >\n ) {\n this.#internal.update(options);\n }\n\n reset<\n targetStep extends steps.StepNumbers<value>,\n fields extends UpdateFn.chosenFields<currentStep>,\n currentStep extends UpdateFn.resolvedStep<value, targetStep>,\n >(options: ResetFn.Options<value, targetStep, fields, currentStep>) {\n this.#internal.reset(options);\n }\n\n /**\n * Create a helper function with validated input.\n */\n createHelperFn<\n const chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n validator,\n additionalCtx extends Record<string, unknown>,\n response,\n >(\n options: HelperFnOptions.WithValidator<\n value,\n chosenSteps,\n validator,\n additionalCtx\n >,\n fn: HelperFnInput.WithValidator<\n value,\n chosenSteps,\n validator,\n additionalCtx,\n response\n >\n ): HelperFnOutput.WithValidator<validator, response>;\n /**\n * Create a helper function without input.\n */\n createHelperFn<\n const chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n additionalCtx extends Record<string, unknown>,\n response,\n >(\n options: HelperFnOptions.WithoutValidator<\n value,\n chosenSteps,\n additionalCtx\n >,\n fn: HelperFnInput.WithoutValidator<\n value,\n chosenSteps,\n additionalCtx,\n response\n >\n ): HelperFnOutput.WithoutInput<response>;\n // Implementation\n createHelperFn<\n const chosenSteps extends HelperFnChosenSteps.main<\n value,\n steps.StepNumbers<value>\n >,\n response,\n additionalCtx extends Record<string, unknown>,\n validator = never,\n >(\n options:\n | HelperFnOptions.WithValidator<\n value,\n chosenSteps,\n validator,\n additionalCtx\n >\n | HelperFnOptions.WithoutValidator<value, chosenSteps, additionalCtx>,\n fn:\n | HelperFnInput.WithValidator<\n value,\n chosenSteps,\n validator,\n additionalCtx,\n response\n >\n | HelperFnInput.WithoutValidator<\n value,\n chosenSteps,\n additionalCtx,\n response\n >\n ) {\n const { stepData, ...rest } = options;\n\n return this.#internal.createStepHelperFn(stepData)(rest, fn);\n }\n\n /**\n * Validates that a given object is the proper shape for step data.\n * @param value\n */\n static hasData(value: unknown): value is steps.config {\n return steps.isValidSteps(value);\n }\n\n /**\n * Gets the value of a given field for a given step.\n * @param step The step to get the value from.\n * @param field The field to get the value from.\n * @returns The value of the {@linkcode field}.\n */\n getValue<\n step extends steps.StepNumbers<value>,\n field extends fields.getDeepFields<value, step>,\n >(step: step, field: field) {\n const stepData = this.value[step];\n const invariant: Invariant = createInvariant('[getValue]');\n const baseErrorMessage = `Unable to get the value for \"${String(\n step\n )}.fields.${String(field)}\"`;\n const errorSuffix = \"This shouldn't be the case, so please open an issue\";\n const createErrorMessage = (reason: string) =>\n `${baseErrorMessage} because ${reason}. ${errorSuffix}`;\n\n invariant(\n typeof stepData === 'object' && stepData !== null,\n createErrorMessage('the step data is not an object')\n );\n invariant(\n 'fields' in stepData,\n createErrorMessage('the step data does not have a \"fields\" property')\n );\n invariant(\n typeof stepData.fields === 'object',\n createErrorMessage('\"fields\" is not an object')\n );\n\n const defaultValue = fields.resolvedDeepPath<\n value,\n step,\n fields.get<value, step>,\n field\n >(field, stepData.fields as fields.get<value, step>);\n\n return defaultValue;\n }\n}\n"],"mappings":";;;;;;;;;;;;AA6GA,MAAM,cAAc,CAAC,UAAU,cAAc;AAC7C,MAAM,cAAc,CAAC,SAAS;AAC9B,MAAM,oBAAoBA,2BACxBC,2BAAW,cAAc,QAAQ,SAAS,MAAe,EACzD,uBACD;AACD,MAAM,oBAAoBA,2BACxB,cACC,QAAQ,SAAS,MACnB;;;;AAKD,MAAM,WAAW;CACf,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AAED,SAAgB,oBAGd,aAAuD;CAKvD,SAAS,YAAY,OAAwB;AAG3C,EAF6BC,kCAAgB,gBAAgB,CAG3D,OAAO,UAAU,YAAY,OAAO,UAAU,UAC9C,+CAA+C,OAAO,QACvD;AAED,MAAI,OAAO,UAAU,UAAU;AAC7B,OAAI,CAAC,MAAM,SAAS,OAAO,CACzB,QAAO;AAGT,UAAO,YAAY,SAAS,OAAO,SAAS,MAAM,QAAQ,QAAQ,GAAG,CAAC,CAAC;;AAGzE,MAAI,OAAO,UAAU,SACnB,QAAO,YAAY,SAAS,MAAM;AAGpC,SAAO;;AAGT,QAAO;;AAmBT,IAAa,0BAAb,cAIUC,kCAEV;;;;CAIE,AAAS;;;;CAIT;CACA,AAAS;CACT,AAAS;CACT,CAASC;CACT,CAASC;CAIT,CAASC;CAET,YAAY,QAAa;AACvB,SAAO;EAEP,MAAM,EAAE,gBAAO,qBAAqB,YAAY;AAEhD,OAAK,kCAAkCC,6BACrC,oBACD;AAED,OAAK,WAAWC;AAEhB,OAAK,QAAQC,+BAAiB,EAAE,gBAAO,CAAC;AACxC,QAAKH,WAAY,IAAII,oDAAgC;GACnD,eAAe,KAAK;GACpB,gBAAgB,KAAK;GACrB,WAAW,SAAS,KAAK,iBAAiB,KAAK;GAChD,CAAC;AAEF,OAAK,QAAQ,MAAKJ,SAAU,aAAa,KAAK,MAAM;AACpD,QAAKD,UAAW,IAAIM,qCAAqB;GACvC,MAAM,KAAK;GACX,KAAM,SAAS,OACbC;GACF,OAAO,SAAS;GAChB,oBAAoB,SAAS;GAC9B,CAAC;AACF,QAAKR,cAAe,OAAO,KAAK,KAAK,MAAM,CAAC,KAAK,QAC/C,OAAO,SAAS,IAAI,QAAQ,QAAQ,GAAG,CAAC,CACzC;AAED,OAAK,QAAQ;GACX,OAAO,MAAKA;GAGZ,KAAK,WAAgB;AACnB,gCACE,OAAO,WAAW,UAClB,oEAAoE,OAAO,SAC5E;AAED,QAAI,WAAW,SACb,QAAO,MAAKA,YAAa,KAAK,UAAU,IAAI,MAAM,GAAG,CAAC,KAAK,MAAM;AAGnE,QAAI,WAAW,cACb,QAAO,MAAKA,YAAa,KAAK,UAAU,QAAQ,MAAM,GAAG,CAAC,KAAK,MAAM;AAGvE,QAAI,WAAW,SACb,QAAO,MAAKA,YAAa,KAAK,MAAM;AAGtC,QAAI,OAAO,SAAS,eAAe,EAAE;AACnC,SAAI,OAAO,SAAS,OAAO,CACzB,QAAO,MAAKA,YAAa,KAAK,UAAU,OAAO,QAAQ;AAGzD,YAAO,MAAKA,YAAa,KAAK,UAAU,GAAG,QAAQ;;AAGrD,QAAI,OAAO,SAAS,eAAe,CACjC,QAAO,MAAKA;AAGd,UAAM,IAAI,MACR,wBAAwB,OAAO,yDAAyD,SAAS,KAC9F,UAAU,IAAI,MAAM,GACtB,CAAC,KAAK,KAAK,GACb;;GAEH,aAAa,oBAAoB,MAAKA,YAAa;GACpD;AAED,OAAK,MAAM;;;;;CAMb,eAAe;AACb,SAAO,MAAKC;;CAGd,cAAc;AACZ,SAAO;;;;;CAMT,OAAO;EAEL,MAAM,gBAAgB,KAAK,cAAc,CAAC,KAAK;AAE/C,MAAI,cAGF,MAAK,QAAQ,EAAE,GAFQ,MAAKC,SAAU,aAAa,cAAc,EAE/B;;CAItC,AAAU,SAAS;AACjB,OAAK,MAAM,YAAY,KAAK,UAC1B,UAAS;GACP,iCAAiC,KAAK;GACtC,UAAU,KAAK;GACf,OAAO,KAAK;GACZ,OAAO,KAAK;GACb,CAAC;;;;;;;CASN,IACE,SACA;AACA,SAAOO,sBAAQ,KAAK,MAAM,CAAC,QAAQ;;CAGrC,AAAU,iBAAiB,MAAa;AACtC,OAAK,QAAQ,EAAE,GAAG,MAAM;AAExB,OAAK,cAAc,CAAC,IAAI,KAAK,MAAM;AACnC,OAAK,MAAM;AACX,OAAK,QAAQ;;;;;;;CAQf,OAUE,SASA;AACA,QAAKP,SAAU,OAAO,QAAQ;;CAGhC,MAIE,SAAkE;AAClE,QAAKA,SAAU,MAAM,QAAQ;;CAqD/B,eASE,SAQA,IAcA;EACA,MAAM,EAAE,UAAU,GAAG,SAAS;AAE9B,SAAO,MAAKA,SAAU,mBAAmB,SAAS,CAAC,MAAM,GAAG;;;;;;CAO9D,OAAO,QAAQ,OAAuC;AACpD,SAAOE,oBAAM,aAAa,MAAM;;;;;;;;CASlC,SAGE,MAAY,OAAc;EAC1B,MAAM,WAAW,KAAK,MAAM;EAC5B,MAAMM,cAAuBZ,kCAAgB,aAAa;EAC1D,MAAM,mBAAmB,gCAAgC,OACvD,KACD,CAAC,UAAU,OAAO,MAAM,CAAC;EAC1B,MAAM,cAAc;EACpB,MAAM,sBAAsB,WAC1B,GAAG,iBAAiB,WAAW,OAAO,IAAI;AAE5C,cACE,OAAO,aAAa,YAAY,aAAa,MAC7C,mBAAmB,iCAAiC,CACrD;AACD,cACE,YAAY,UACZ,mBAAmB,oDAAkD,CACtE;AACD,cACE,OAAO,SAAS,WAAW,UAC3B,mBAAmB,8BAA4B,CAChD;AASD,SAPqBa,sBAAO,iBAK1B,OAAO,SAAS,OAAkC"}
@@ -1,67 +1,79 @@
1
- import { Constrain, Join } from "../utils/types.cjs";
2
- import { CasingType, DefaultCasing } from "../utils/casing.cjs";
3
- import { AnyResolvedStep, CreateHelperFunctionOptionsWithCustomCtxOptions, CreateHelperFunctionOptionsWithValidator, CreateHelperFunctionOptionsWithoutValidator, CreateStepHelperFn, CreatedHelperFnWithInput, CreatedHelperFnWithoutInput, ExtractStepFromKey, FirstStep, GetCurrentStep, HelperFnChosenSteps, HelperFnWithValidator, HelperFnWithoutValidator, InferStepOptions, LastStep, MultiStepFormSchemaStepConfig, ResetFn, ResolvedStep, Step, StepNumbers, StepOptions, UnionToTuple, UpdateFn, ValidStepKey } from "./types.cjs";
4
- import { DefaultStorageKey, MultiStepFormStorage } from "../storage.cjs";
1
+ import { Constrain, Join, UnionToTuple } from "../utils/types.cjs";
2
+ import { UpdateFn } from "./fn-utils/update-fn.cjs";
3
+ import { ResetFn } from "./fn-utils/reset-fn.cjs";
4
+ import { GeneralHelperFn, HelperFnInput, HelperFnOptions, HelperFnOutput } from "./fn-utils/helper-fn/utils.cjs";
5
+ import { steps } from "./steps.cjs";
6
+ import { HelperFnChosenSteps } from "./fn-utils/helper-fn/index.cjs";
7
+ import { MultiStepFormStorage } from "../storage.cjs";
8
+ import { StepSchema } from "../internals/step-schema.cjs";
5
9
  import { Subscribable } from "../subscribable.cjs";
6
- import { fields } from "./fields.cjs";
7
- import { GetStepOptions } from "./utils.cjs";
10
+ import { ExtractStepFromKey, GetStepOptions } from "./utils.cjs";
8
11
 
9
12
  //#region src/steps/schema.d.ts
10
- interface MultiStepFormStepSchemaFunctions<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>> {
11
- update: UpdateFn.general<TResolvedStep, TStepNumbers>;
12
- createHelperFn: CreateStepHelperFn<TResolvedStep, TStepNumbers>;
13
+ interface MultiStepFormStepSchemaFunctions<value extends steps.instantiateSteps> {
14
+ update: UpdateFn.general<value>;
15
+ reset: ResetFn.general<value>;
16
+ createHelperFn: GeneralHelperFn<value>;
13
17
  }
14
18
  type AsType = (typeof AS_TYPES)[number];
15
19
  type Quote<T extends string[]> = { [K in keyof T]: T[K] extends string ? `'${T[K]}'` : never };
16
- type AsTypeMap<resolvedStep extends AnyResolvedStep, stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>> = {
17
- string: Exclude<Join<Constrain<Quote<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>>, string[]>, ' | '>, ''>;
20
+ type AsTypeMap<def extends StepSchema.Config, value extends steps.instantiateSteps<def>, stepNumbers extends steps.StepNumbers<value> = steps.StepNumbers<value>> = {
21
+ string: Exclude<Join<Constrain<Quote<Constrain<UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>, string[]>>, string[]>, ' | '>, ''>;
22
+ 'string.keys': Exclude<Join<Constrain<UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>, string[]>, ' | '>, ''>;
18
23
  number: Exclude<Join<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>, ' | '>, ''>;
19
- 'array.string': UnionToTuple<`${stepNumbers}`>;
24
+ 'array.number': UnionToTuple<ExtractStepFromKey<stepNumbers>>;
25
+ 'array.string': UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>;
26
+ 'array.string.keys': UnionToTuple<`${stepNumbers}`>;
20
27
  'array.string.untyped': string[];
21
28
  };
22
- type AsFunctionReturn<resolvedStep extends AnyResolvedStep, stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>, asType extends AsType> = AsTypeMap<resolvedStep, stepNumbers>[asType];
23
- type AsFunction<resolvedStep extends AnyResolvedStep, stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>> = <asType extends AsType>(asType: asType) => AsFunctionReturn<resolvedStep, stepNumbers, asType>;
24
- type MultiStepFormStepStepsConfig<TStep extends Step<TCasing>, TCasing extends CasingType, TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<TStep, TCasing>, TStepNumbers extends StepNumbers<TResolvedStep> = StepNumbers<TResolvedStep>> = {
25
- first: FirstStep<TResolvedStep>;
26
- last: LastStep<TResolvedStep>;
27
- value: ReadonlyArray<TStepNumbers>;
28
- as: AsFunction<TResolvedStep, TStepNumbers>;
29
- isValidStepNumber: (stepNumber: number) => stepNumber is TStepNumbers;
30
- isValidStepKey: (value: string) => value is Constrain<keyof TResolvedStep, string>;
29
+ type AsFunctionReturn<def extends StepSchema.Config, value extends steps.instantiateSteps<def>, asType extends AsType> = AsTypeMap<def, value>[asType];
30
+ type AsFunction<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = <asType extends AsType>(asType: asType) => AsFunctionReturn<def, value, asType>;
31
+ type IsValidStepFn<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = {
32
+ /**
33
+ * Checks if a given string is a valid step key.
34
+ */
35
+ (value: string): value is steps.StepNumbers<value>;
36
+ /**
37
+ * Checks if a given number is a valid step number.
38
+ */
39
+ (value: number): value is ExtractStepFromKey<steps.StepNumbers<value>>;
40
+ };
41
+ type MultiStepFormStepStepsConfig<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = {
42
+ value: ReadonlyArray<steps.StepNumbers<value>>;
43
+ as: AsFunction<def, value>;
44
+ isValidStep: IsValidStepFn<def, value>;
31
45
  };
32
- type MultiStepFormStepSchemaListener<TStep extends Step<TCasing>, TCasing extends CasingType> = (data: {
33
- original: InferStepOptions<TStep>;
34
- value: ResolvedStep<TStep, TCasing>;
35
- steps: MultiStepFormStepStepsConfig<TStep, TCasing>;
36
- defaultNameTransformationCasing: TCasing;
37
- }) => void;
38
46
  /**
39
47
  * Available transformation types for the step numbers.
40
48
  */
41
- declare const AS_TYPES: readonly ["string", "number", "array.string", "array.string.untyped"];
42
- type ValueCheck<T> = (v: unknown) => v is T;
43
- type FieldChecks<T extends object> = { [K in keyof T]: ValueCheck<T[K]> };
44
- declare class MultiStepFormStepSchema<step extends Step<casing>, casing extends CasingType = DefaultCasing, resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>, storageKey extends string = DefaultStorageKey> extends Subscribable<MultiStepFormStepSchemaListener<step, casing>> implements MultiStepFormStepSchemaFunctions<resolvedStep, stepNumbers> {
49
+ declare const AS_TYPES: readonly ["string", "string.keys", "number", "array.string", "array.string.keys", "array.string.untyped", "array.number"];
50
+ declare function createIsValidStepFn<def extends StepSchema.Config, value extends steps.instantiateSteps<def>>(stepNumbers: Array<number>): IsValidStepFn<def, value>;
51
+ declare namespace MultiStepFormStepSchema {
52
+ type ListenerOptions<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = {
53
+ original: def['steps'];
54
+ value: value;
55
+ steps: MultiStepFormStepStepsConfig<def, value>;
56
+ defaultNameTransformationCasing: def['nameTransformCasing'];
57
+ };
58
+ type Listener<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = (data: ListenerOptions<def, value>) => void;
59
+ }
60
+ declare class MultiStepFormStepSchema<const def extends StepSchema.Config, value extends steps.instantiateSteps<def> = steps.instantiateSteps<def>> extends Subscribable<MultiStepFormStepSchema.Listener<def, value>> implements MultiStepFormStepSchemaFunctions<value> {
45
61
  #private;
46
62
  /**
47
63
  * The original config before any validation or transformations have been applied.
48
64
  */
49
- readonly original: InferStepOptions<step>;
65
+ readonly original: def['steps'];
50
66
  /**
51
67
  * The resolved step values.
52
68
  */
53
- value: resolvedStep;
54
- readonly steps: MultiStepFormStepStepsConfig<step, casing>;
55
- readonly defaultNameTransformationCasing: casing;
56
- private readonly firstStep;
57
- private readonly lastStep;
58
- private readonly stepNumbers;
59
- private readonly storage;
60
- constructor(config: MultiStepFormSchemaStepConfig<step, Constrain<casing, CasingType>, storageKey>);
69
+ value: value;
70
+ readonly steps: MultiStepFormStepStepsConfig<def, value>;
71
+ readonly defaultNameTransformationCasing: def['nameTransformCasing'];
72
+ constructor(config: def);
61
73
  /**
62
74
  * @internal
63
75
  */
64
- __getStorage(): MultiStepFormStorage<resolvedStep, storageKey>;
76
+ __getStorage(): MultiStepFormStorage<value, StepSchema.inferStorageKey<def>>;
65
77
  getSnapshot(): this;
66
78
  /**
67
79
  * Syncs the values from storage to {@linkcode value}.
@@ -73,52 +85,39 @@ declare class MultiStepFormStepSchema<step extends Step<casing>, casing extends
73
85
  * @param options The options for getting the step data.
74
86
  * @returns The step data for the target step.
75
87
  */
76
- get<stepNumber extends stepNumbers>(options: GetStepOptions<resolvedStep, stepNumbers, stepNumber>): {
88
+ get<stepNumber extends steps.StepNumbers<value>>(options: GetStepOptions<value, steps.StepNumbers<value>, stepNumber>): {
77
89
  step: stepNumber;
78
- data: GetCurrentStep<resolvedStep, stepNumber>;
90
+ data: steps.getCurrent<value, stepNumber>;
79
91
  };
92
+ protected handlePostUpdate(next: value): void;
80
93
  /**
81
- * Gets the data for the first step.
82
- * @returns The data for the first step.
94
+ * Updates the step with the given options.
95
+ * @param options The options for updating the step.
96
+ * @returns The return value of the updater function.
83
97
  */
84
- first(): {
85
- step: FirstStep<resolvedStep>;
86
- data: GetCurrentStep<resolvedStep, FirstStep<resolvedStep>>;
87
- };
88
- /**
89
- * Gets the data for the last step.
90
- * @returns The data for the last step.
91
- */
92
- last(): {
93
- step: LastStep<resolvedStep>;
94
- data: GetCurrentStep<resolvedStep, LastStep<resolvedStep>>;
95
- };
96
- protected handlePostUpdate(next: resolvedStep): void;
97
- update<targetStep extends ValidStepKey<stepNumbers>, field extends UpdateFn.chosenFields<UpdateFn.resolvedStep<resolvedStep, stepNumbers, targetStep>> = 'all', strict extends boolean = true, partial extends boolean = false, additionalCtx extends Record<string, unknown> = {}, additionalUpdaterData extends UpdateFn.additionalUpdaterData = never>(options: UpdateFn.options<resolvedStep, stepNumbers, targetStep, field, strict, partial, additionalCtx, additionalUpdaterData>): void;
98
- reset<targetStep extends ValidStepKey<stepNumbers>, fields$1 extends UpdateFn.chosenFields<currentStep>, currentStep extends UpdateFn.resolvedStep<resolvedStep, stepNumbers, targetStep>>(options: ResetFn.Options<resolvedStep, stepNumbers, targetStep, fields$1, currentStep>): void;
98
+ update<targetStep extends steps.StepNumbers<value>, field extends UpdateFn.chosenFields<UpdateFn.resolvedStep<value, targetStep>> = 'all', strict extends boolean = true, partial extends boolean = false, additionalCtx extends Record<string, unknown> = {}, additionalUpdaterData extends UpdateFn.additionalUpdaterData = never>(options: UpdateFn.options<value, targetStep, field, strict, partial, additionalCtx, additionalUpdaterData>): void;
99
+ reset<targetStep extends steps.StepNumbers<value>, fields extends UpdateFn.chosenFields<currentStep>, currentStep extends UpdateFn.resolvedStep<value, targetStep>>(options: ResetFn.Options<value, targetStep, fields, currentStep>): void;
99
100
  /**
100
101
  * Create a helper function with validated input.
101
102
  */
102
- createHelperFn<const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>, validator, additionalCtx extends Record<string, unknown>, response>(options: CreateHelperFunctionOptionsWithValidator<resolvedStep, stepNumbers, chosenSteps, validator, additionalCtx>, fn: HelperFnWithValidator<resolvedStep, stepNumbers, chosenSteps, validator, additionalCtx, response>): CreatedHelperFnWithInput<validator, response>;
103
+ createHelperFn<const chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, validator, additionalCtx extends Record<string, unknown>, response>(options: HelperFnOptions.WithValidator<value, chosenSteps, validator, additionalCtx>, fn: HelperFnInput.WithValidator<value, chosenSteps, validator, additionalCtx, response>): HelperFnOutput.WithValidator<validator, response>;
103
104
  /**
104
105
  * Create a helper function without input.
105
106
  */
106
- createHelperFn<const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>, additionalCtx extends Record<string, unknown>, response>(options: CreateHelperFunctionOptionsWithoutValidator<resolvedStep, stepNumbers, chosenSteps> & CreateHelperFunctionOptionsWithCustomCtxOptions<resolvedStep, stepNumbers, chosenSteps, additionalCtx>, fn: HelperFnWithoutValidator<resolvedStep, stepNumbers, chosenSteps, additionalCtx, response>): CreatedHelperFnWithoutInput<response>;
107
+ createHelperFn<const chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, additionalCtx extends Record<string, unknown>, response>(options: HelperFnOptions.WithoutValidator<value, chosenSteps, additionalCtx>, fn: HelperFnInput.WithoutValidator<value, chosenSteps, additionalCtx, response>): HelperFnOutput.WithoutInput<response>;
107
108
  /**
108
109
  * Validates that a given object is the proper shape for step data.
109
110
  * @param value
110
111
  */
111
- static hasData<step extends Step<casing>, resolvedStep extends ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep>, casing extends CasingType = DefaultCasing>(value: unknown, options?: {
112
- optionalKeysToCheck?: FieldChecks<Pick<StepOptions, 'description' | 'validateFields'>>;
113
- }): value is GetCurrentStep<resolvedStep, stepNumbers>;
112
+ static hasData(value: unknown): value is steps.config;
114
113
  /**
115
114
  * Gets the value of a given field for a given step.
116
115
  * @param step The step to get the value from.
117
116
  * @param field The field to get the value from.
118
117
  * @returns The value of the {@linkcode field}.
119
118
  */
120
- getValue<step extends keyof resolvedStep, field extends fields.getDeepFields<resolvedStep, step>>(step: step, field: field): fields.resolveDeepPath<resolvedStep, step, field, fields.getFieldsForStep<resolvedStep, step>>;
119
+ getValue<step extends steps.StepNumbers<value>, field extends fields.getDeepFields<value, step>>(step: step, field: field): fields.resolveDeepPath<value, step, field, fields.getFieldsForStep<value, step>>;
121
120
  }
122
121
  //#endregion
123
- export { AsFunction, AsFunctionReturn, AsType, AsTypeMap, MultiStepFormStepSchema, MultiStepFormStepSchemaFunctions, MultiStepFormStepSchemaListener, MultiStepFormStepStepsConfig };
122
+ export { AsFunction, AsFunctionReturn, AsType, AsTypeMap, IsValidStepFn, MultiStepFormStepSchema, MultiStepFormStepSchemaFunctions, MultiStepFormStepStepsConfig, createIsValidStepFn };
124
123
  //# sourceMappingURL=schema.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.cts","names":[],"sources":["../../src/steps/schema.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"schema.d.cts","names":[],"sources":["../../src/steps/schema.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,67 +1,79 @@
1
- import { Constrain, Join } from "../utils/types.mjs";
2
- import { CasingType, DefaultCasing } from "../utils/casing.mjs";
3
- import { AnyResolvedStep, CreateHelperFunctionOptionsWithCustomCtxOptions, CreateHelperFunctionOptionsWithValidator, CreateHelperFunctionOptionsWithoutValidator, CreateStepHelperFn, CreatedHelperFnWithInput, CreatedHelperFnWithoutInput, ExtractStepFromKey, FirstStep, GetCurrentStep, HelperFnChosenSteps, HelperFnWithValidator, HelperFnWithoutValidator, InferStepOptions, LastStep, MultiStepFormSchemaStepConfig, ResetFn, ResolvedStep, Step, StepNumbers, StepOptions, UnionToTuple, UpdateFn, ValidStepKey } from "./types.mjs";
4
- import { DefaultStorageKey, MultiStepFormStorage } from "../storage.mjs";
1
+ import { Constrain, Join, UnionToTuple } from "../utils/types.mjs";
2
+ import { UpdateFn } from "./fn-utils/update-fn.mjs";
3
+ import { ResetFn } from "./fn-utils/reset-fn.mjs";
4
+ import { GeneralHelperFn, HelperFnInput, HelperFnOptions, HelperFnOutput } from "./fn-utils/helper-fn/utils.mjs";
5
+ import { steps } from "./steps.mjs";
6
+ import { HelperFnChosenSteps } from "./fn-utils/helper-fn/index.mjs";
7
+ import { MultiStepFormStorage } from "../storage.mjs";
8
+ import { StepSchema } from "../internals/step-schema.mjs";
5
9
  import { Subscribable } from "../subscribable.mjs";
6
- import { fields } from "./fields.mjs";
7
- import { GetStepOptions } from "./utils.mjs";
10
+ import { ExtractStepFromKey, GetStepOptions } from "./utils.mjs";
8
11
 
9
12
  //#region src/steps/schema.d.ts
10
- interface MultiStepFormStepSchemaFunctions<TResolvedStep extends AnyResolvedStep, TStepNumbers extends StepNumbers<TResolvedStep>> {
11
- update: UpdateFn.general<TResolvedStep, TStepNumbers>;
12
- createHelperFn: CreateStepHelperFn<TResolvedStep, TStepNumbers>;
13
+ interface MultiStepFormStepSchemaFunctions<value extends steps.instantiateSteps> {
14
+ update: UpdateFn.general<value>;
15
+ reset: ResetFn.general<value>;
16
+ createHelperFn: GeneralHelperFn<value>;
13
17
  }
14
18
  type AsType = (typeof AS_TYPES)[number];
15
19
  type Quote<T extends string[]> = { [K in keyof T]: T[K] extends string ? `'${T[K]}'` : never };
16
- type AsTypeMap<resolvedStep extends AnyResolvedStep, stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>> = {
17
- string: Exclude<Join<Constrain<Quote<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>>, string[]>, ' | '>, ''>;
20
+ type AsTypeMap<def extends StepSchema.Config, value extends steps.instantiateSteps<def>, stepNumbers extends steps.StepNumbers<value> = steps.StepNumbers<value>> = {
21
+ string: Exclude<Join<Constrain<Quote<Constrain<UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>, string[]>>, string[]>, ' | '>, ''>;
22
+ 'string.keys': Exclude<Join<Constrain<UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>, string[]>, ' | '>, ''>;
18
23
  number: Exclude<Join<Constrain<UnionToTuple<`${stepNumbers}`>, string[]>, ' | '>, ''>;
19
- 'array.string': UnionToTuple<`${stepNumbers}`>;
24
+ 'array.number': UnionToTuple<ExtractStepFromKey<stepNumbers>>;
25
+ 'array.string': UnionToTuple<`${ExtractStepFromKey<stepNumbers>}`>;
26
+ 'array.string.keys': UnionToTuple<`${stepNumbers}`>;
20
27
  'array.string.untyped': string[];
21
28
  };
22
- type AsFunctionReturn<resolvedStep extends AnyResolvedStep, stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>, asType extends AsType> = AsTypeMap<resolvedStep, stepNumbers>[asType];
23
- type AsFunction<resolvedStep extends AnyResolvedStep, stepNumbers extends ExtractStepFromKey<Constrain<keyof resolvedStep, string>>> = <asType extends AsType>(asType: asType) => AsFunctionReturn<resolvedStep, stepNumbers, asType>;
24
- type MultiStepFormStepStepsConfig<TStep extends Step<TCasing>, TCasing extends CasingType, TResolvedStep extends ResolvedStep<TStep, TCasing> = ResolvedStep<TStep, TCasing>, TStepNumbers extends StepNumbers<TResolvedStep> = StepNumbers<TResolvedStep>> = {
25
- first: FirstStep<TResolvedStep>;
26
- last: LastStep<TResolvedStep>;
27
- value: ReadonlyArray<TStepNumbers>;
28
- as: AsFunction<TResolvedStep, TStepNumbers>;
29
- isValidStepNumber: (stepNumber: number) => stepNumber is TStepNumbers;
30
- isValidStepKey: (value: string) => value is Constrain<keyof TResolvedStep, string>;
29
+ type AsFunctionReturn<def extends StepSchema.Config, value extends steps.instantiateSteps<def>, asType extends AsType> = AsTypeMap<def, value>[asType];
30
+ type AsFunction<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = <asType extends AsType>(asType: asType) => AsFunctionReturn<def, value, asType>;
31
+ type IsValidStepFn<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = {
32
+ /**
33
+ * Checks if a given string is a valid step key.
34
+ */
35
+ (value: string): value is steps.StepNumbers<value>;
36
+ /**
37
+ * Checks if a given number is a valid step number.
38
+ */
39
+ (value: number): value is ExtractStepFromKey<steps.StepNumbers<value>>;
40
+ };
41
+ type MultiStepFormStepStepsConfig<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = {
42
+ value: ReadonlyArray<steps.StepNumbers<value>>;
43
+ as: AsFunction<def, value>;
44
+ isValidStep: IsValidStepFn<def, value>;
31
45
  };
32
- type MultiStepFormStepSchemaListener<TStep extends Step<TCasing>, TCasing extends CasingType> = (data: {
33
- original: InferStepOptions<TStep>;
34
- value: ResolvedStep<TStep, TCasing>;
35
- steps: MultiStepFormStepStepsConfig<TStep, TCasing>;
36
- defaultNameTransformationCasing: TCasing;
37
- }) => void;
38
46
  /**
39
47
  * Available transformation types for the step numbers.
40
48
  */
41
- declare const AS_TYPES: readonly ["string", "number", "array.string", "array.string.untyped"];
42
- type ValueCheck<T> = (v: unknown) => v is T;
43
- type FieldChecks<T extends object> = { [K in keyof T]: ValueCheck<T[K]> };
44
- declare class MultiStepFormStepSchema<step extends Step<casing>, casing extends CasingType = DefaultCasing, resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>, storageKey extends string = DefaultStorageKey> extends Subscribable<MultiStepFormStepSchemaListener<step, casing>> implements MultiStepFormStepSchemaFunctions<resolvedStep, stepNumbers> {
49
+ declare const AS_TYPES: readonly ["string", "string.keys", "number", "array.string", "array.string.keys", "array.string.untyped", "array.number"];
50
+ declare function createIsValidStepFn<def extends StepSchema.Config, value extends steps.instantiateSteps<def>>(stepNumbers: Array<number>): IsValidStepFn<def, value>;
51
+ declare namespace MultiStepFormStepSchema {
52
+ type ListenerOptions<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = {
53
+ original: def['steps'];
54
+ value: value;
55
+ steps: MultiStepFormStepStepsConfig<def, value>;
56
+ defaultNameTransformationCasing: def['nameTransformCasing'];
57
+ };
58
+ type Listener<def extends StepSchema.Config, value extends steps.instantiateSteps<def>> = (data: ListenerOptions<def, value>) => void;
59
+ }
60
+ declare class MultiStepFormStepSchema<const def extends StepSchema.Config, value extends steps.instantiateSteps<def> = steps.instantiateSteps<def>> extends Subscribable<MultiStepFormStepSchema.Listener<def, value>> implements MultiStepFormStepSchemaFunctions<value> {
45
61
  #private;
46
62
  /**
47
63
  * The original config before any validation or transformations have been applied.
48
64
  */
49
- readonly original: InferStepOptions<step>;
65
+ readonly original: def['steps'];
50
66
  /**
51
67
  * The resolved step values.
52
68
  */
53
- value: resolvedStep;
54
- readonly steps: MultiStepFormStepStepsConfig<step, casing>;
55
- readonly defaultNameTransformationCasing: casing;
56
- private readonly firstStep;
57
- private readonly lastStep;
58
- private readonly stepNumbers;
59
- private readonly storage;
60
- constructor(config: MultiStepFormSchemaStepConfig<step, Constrain<casing, CasingType>, storageKey>);
69
+ value: value;
70
+ readonly steps: MultiStepFormStepStepsConfig<def, value>;
71
+ readonly defaultNameTransformationCasing: def['nameTransformCasing'];
72
+ constructor(config: def);
61
73
  /**
62
74
  * @internal
63
75
  */
64
- __getStorage(): MultiStepFormStorage<resolvedStep, storageKey>;
76
+ __getStorage(): MultiStepFormStorage<value, StepSchema.inferStorageKey<def>>;
65
77
  getSnapshot(): this;
66
78
  /**
67
79
  * Syncs the values from storage to {@linkcode value}.
@@ -73,52 +85,39 @@ declare class MultiStepFormStepSchema<step extends Step<casing>, casing extends
73
85
  * @param options The options for getting the step data.
74
86
  * @returns The step data for the target step.
75
87
  */
76
- get<stepNumber extends stepNumbers>(options: GetStepOptions<resolvedStep, stepNumbers, stepNumber>): {
88
+ get<stepNumber extends steps.StepNumbers<value>>(options: GetStepOptions<value, steps.StepNumbers<value>, stepNumber>): {
77
89
  step: stepNumber;
78
- data: GetCurrentStep<resolvedStep, stepNumber>;
90
+ data: steps.getCurrent<value, stepNumber>;
79
91
  };
92
+ protected handlePostUpdate(next: value): void;
80
93
  /**
81
- * Gets the data for the first step.
82
- * @returns The data for the first step.
94
+ * Updates the step with the given options.
95
+ * @param options The options for updating the step.
96
+ * @returns The return value of the updater function.
83
97
  */
84
- first(): {
85
- step: FirstStep<resolvedStep>;
86
- data: GetCurrentStep<resolvedStep, FirstStep<resolvedStep>>;
87
- };
88
- /**
89
- * Gets the data for the last step.
90
- * @returns The data for the last step.
91
- */
92
- last(): {
93
- step: LastStep<resolvedStep>;
94
- data: GetCurrentStep<resolvedStep, LastStep<resolvedStep>>;
95
- };
96
- protected handlePostUpdate(next: resolvedStep): void;
97
- update<targetStep extends ValidStepKey<stepNumbers>, field extends UpdateFn.chosenFields<UpdateFn.resolvedStep<resolvedStep, stepNumbers, targetStep>> = 'all', strict extends boolean = true, partial extends boolean = false, additionalCtx extends Record<string, unknown> = {}, additionalUpdaterData extends UpdateFn.additionalUpdaterData = never>(options: UpdateFn.options<resolvedStep, stepNumbers, targetStep, field, strict, partial, additionalCtx, additionalUpdaterData>): void;
98
- reset<targetStep extends ValidStepKey<stepNumbers>, fields$1 extends UpdateFn.chosenFields<currentStep>, currentStep extends UpdateFn.resolvedStep<resolvedStep, stepNumbers, targetStep>>(options: ResetFn.Options<resolvedStep, stepNumbers, targetStep, fields$1, currentStep>): void;
98
+ update<targetStep extends steps.StepNumbers<value>, field extends UpdateFn.chosenFields<UpdateFn.resolvedStep<value, targetStep>> = 'all', strict extends boolean = true, partial extends boolean = false, additionalCtx extends Record<string, unknown> = {}, additionalUpdaterData extends UpdateFn.additionalUpdaterData = never>(options: UpdateFn.options<value, targetStep, field, strict, partial, additionalCtx, additionalUpdaterData>): void;
99
+ reset<targetStep extends steps.StepNumbers<value>, fields extends UpdateFn.chosenFields<currentStep>, currentStep extends UpdateFn.resolvedStep<value, targetStep>>(options: ResetFn.Options<value, targetStep, fields, currentStep>): void;
99
100
  /**
100
101
  * Create a helper function with validated input.
101
102
  */
102
- createHelperFn<const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>, validator, additionalCtx extends Record<string, unknown>, response>(options: CreateHelperFunctionOptionsWithValidator<resolvedStep, stepNumbers, chosenSteps, validator, additionalCtx>, fn: HelperFnWithValidator<resolvedStep, stepNumbers, chosenSteps, validator, additionalCtx, response>): CreatedHelperFnWithInput<validator, response>;
103
+ createHelperFn<const chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, validator, additionalCtx extends Record<string, unknown>, response>(options: HelperFnOptions.WithValidator<value, chosenSteps, validator, additionalCtx>, fn: HelperFnInput.WithValidator<value, chosenSteps, validator, additionalCtx, response>): HelperFnOutput.WithValidator<validator, response>;
103
104
  /**
104
105
  * Create a helper function without input.
105
106
  */
106
- createHelperFn<const chosenSteps extends HelperFnChosenSteps<resolvedStep, stepNumbers>, additionalCtx extends Record<string, unknown>, response>(options: CreateHelperFunctionOptionsWithoutValidator<resolvedStep, stepNumbers, chosenSteps> & CreateHelperFunctionOptionsWithCustomCtxOptions<resolvedStep, stepNumbers, chosenSteps, additionalCtx>, fn: HelperFnWithoutValidator<resolvedStep, stepNumbers, chosenSteps, additionalCtx, response>): CreatedHelperFnWithoutInput<response>;
107
+ createHelperFn<const chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>, additionalCtx extends Record<string, unknown>, response>(options: HelperFnOptions.WithoutValidator<value, chosenSteps, additionalCtx>, fn: HelperFnInput.WithoutValidator<value, chosenSteps, additionalCtx, response>): HelperFnOutput.WithoutInput<response>;
107
108
  /**
108
109
  * Validates that a given object is the proper shape for step data.
109
110
  * @param value
110
111
  */
111
- static hasData<step extends Step<casing>, resolvedStep extends ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep>, casing extends CasingType = DefaultCasing>(value: unknown, options?: {
112
- optionalKeysToCheck?: FieldChecks<Pick<StepOptions, 'description' | 'validateFields'>>;
113
- }): value is GetCurrentStep<resolvedStep, stepNumbers>;
112
+ static hasData(value: unknown): value is steps.config;
114
113
  /**
115
114
  * Gets the value of a given field for a given step.
116
115
  * @param step The step to get the value from.
117
116
  * @param field The field to get the value from.
118
117
  * @returns The value of the {@linkcode field}.
119
118
  */
120
- getValue<step extends keyof resolvedStep, field extends fields.getDeepFields<resolvedStep, step>>(step: step, field: field): fields.resolveDeepPath<resolvedStep, step, field, fields.getFieldsForStep<resolvedStep, step>>;
119
+ getValue<step extends steps.StepNumbers<value>, field extends fields.getDeepFields<value, step>>(step: step, field: field): fields.resolveDeepPath<value, step, field, fields.getFieldsForStep<value, step>>;
121
120
  }
122
121
  //#endregion
123
- export { AsFunction, AsFunctionReturn, AsType, AsTypeMap, MultiStepFormStepSchema, MultiStepFormStepSchemaFunctions, MultiStepFormStepSchemaListener, MultiStepFormStepStepsConfig };
122
+ export { AsFunction, AsFunctionReturn, AsType, AsTypeMap, IsValidStepFn, MultiStepFormStepSchema, MultiStepFormStepSchemaFunctions, MultiStepFormStepStepsConfig, createIsValidStepFn };
124
123
  //# sourceMappingURL=schema.d.mts.map