@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.
- package/dist/_internals.cjs +0 -4
- package/dist/_internals.d.cts +2 -3
- package/dist/_internals.d.mts +2 -3
- package/dist/_internals.mjs +1 -2
- package/dist/index.cjs +17 -17
- package/dist/index.d.cts +12 -11
- package/dist/index.d.mts +12 -11
- package/dist/index.mjs +8 -10
- package/dist/internals/step-schema.cjs +120 -71
- package/dist/internals/step-schema.cjs.map +1 -1
- package/dist/internals/step-schema.d.cts +47 -29
- package/dist/internals/step-schema.d.cts.map +1 -1
- package/dist/internals/step-schema.d.mts +47 -29
- package/dist/internals/step-schema.d.mts.map +1 -1
- package/dist/internals/step-schema.mjs +120 -71
- package/dist/internals/step-schema.mjs.map +1 -1
- package/dist/schema.cjs +14 -10
- package/dist/schema.cjs.map +1 -1
- package/dist/schema.d.cts +11 -13
- package/dist/schema.d.cts.map +1 -1
- package/dist/schema.d.mts +11 -13
- package/dist/schema.d.mts.map +1 -1
- package/dist/schema.mjs +14 -10
- package/dist/schema.mjs.map +1 -1
- package/dist/steps/fields.cjs +80 -0
- package/dist/steps/fields.cjs.map +1 -1
- package/dist/steps/fields.d.cts +117 -9
- package/dist/steps/fields.d.cts.map +1 -1
- package/dist/steps/fields.d.mts +117 -9
- package/dist/steps/fields.d.mts.map +1 -1
- package/dist/steps/fields.mjs +80 -0
- package/dist/steps/fields.mjs.map +1 -1
- package/dist/steps/fn-utils/helper-fn/index.cjs +81 -0
- package/dist/steps/fn-utils/helper-fn/index.cjs.map +1 -0
- package/dist/steps/fn-utils/helper-fn/index.d.cts +146 -0
- package/dist/steps/fn-utils/helper-fn/index.d.cts.map +1 -0
- package/dist/steps/fn-utils/helper-fn/index.d.mts +146 -0
- package/dist/steps/fn-utils/helper-fn/index.d.mts.map +1 -0
- package/dist/steps/fn-utils/helper-fn/index.mjs +75 -0
- package/dist/steps/fn-utils/helper-fn/index.mjs.map +1 -0
- package/dist/steps/fn-utils/helper-fn/utils.d.cts +81 -0
- package/dist/steps/fn-utils/helper-fn/utils.d.cts.map +1 -0
- package/dist/steps/fn-utils/helper-fn/utils.d.mts +81 -0
- package/dist/steps/fn-utils/helper-fn/utils.d.mts.map +1 -0
- package/dist/steps/fn-utils/index.cjs +1 -0
- package/dist/steps/fn-utils/index.mjs +3 -0
- package/dist/steps/fn-utils/reset-fn.d.cts +30 -0
- package/dist/steps/fn-utils/reset-fn.d.cts.map +1 -0
- package/dist/steps/fn-utils/reset-fn.d.mts +30 -0
- package/dist/steps/fn-utils/reset-fn.d.mts.map +1 -0
- package/dist/steps/fn-utils/update-fn.d.cts +121 -0
- package/dist/steps/fn-utils/update-fn.d.cts.map +1 -0
- package/dist/steps/fn-utils/update-fn.d.mts +121 -0
- package/dist/steps/fn-utils/update-fn.d.mts.map +1 -0
- package/dist/steps/index.cjs +4 -2
- package/dist/steps/index.mjs +5 -3
- package/dist/steps/schema.cjs +61 -84
- package/dist/steps/schema.cjs.map +1 -1
- package/dist/steps/schema.d.cts +66 -67
- package/dist/steps/schema.d.cts.map +1 -1
- package/dist/steps/schema.d.mts +66 -67
- package/dist/steps/schema.d.mts.map +1 -1
- package/dist/steps/schema.mjs +62 -86
- package/dist/steps/schema.mjs.map +1 -1
- package/dist/steps/steps.cjs +83 -0
- package/dist/steps/steps.cjs.map +1 -0
- package/dist/steps/steps.d.cts +81 -0
- package/dist/steps/steps.d.cts.map +1 -0
- package/dist/steps/steps.d.mts +81 -0
- package/dist/steps/steps.d.mts.map +1 -0
- package/dist/steps/steps.mjs +76 -0
- package/dist/steps/steps.mjs.map +1 -0
- package/dist/steps/utils.cjs +40 -30
- package/dist/steps/utils.cjs.map +1 -1
- package/dist/steps/utils.d.cts +8 -5
- package/dist/steps/utils.d.cts.map +1 -1
- package/dist/steps/utils.d.mts +8 -5
- package/dist/steps/utils.d.mts.map +1 -1
- package/dist/steps/utils.mjs +40 -31
- package/dist/steps/utils.mjs.map +1 -1
- package/dist/storage.cjs +1 -1
- package/dist/storage.cjs.map +1 -1
- package/dist/storage.d.cts +9 -7
- package/dist/storage.d.cts.map +1 -1
- package/dist/storage.d.mts +9 -7
- package/dist/storage.d.mts.map +1 -1
- package/dist/storage.mjs +1 -1
- package/dist/storage.mjs.map +1 -1
- package/dist/utils/casing.cjs +1 -1
- package/dist/utils/casing.cjs.map +1 -1
- package/dist/utils/casing.d.cts +27 -11
- package/dist/utils/casing.d.cts.map +1 -1
- package/dist/utils/casing.d.mts +27 -11
- package/dist/utils/casing.d.mts.map +1 -1
- package/dist/utils/casing.mjs +1 -1
- package/dist/utils/casing.mjs.map +1 -1
- package/dist/utils/helpers.cjs +8 -0
- package/dist/utils/helpers.cjs.map +1 -1
- package/dist/utils/helpers.mjs +7 -1
- package/dist/utils/helpers.mjs.map +1 -1
- package/dist/utils/index.cjs +3 -0
- package/dist/utils/index.mjs +5 -0
- package/dist/utils/invariant.cjs +28 -8
- package/dist/utils/invariant.cjs.map +1 -1
- package/dist/utils/invariant.d.cts +12 -2
- package/dist/utils/invariant.d.cts.map +1 -1
- package/dist/utils/invariant.d.mts +12 -2
- package/dist/utils/invariant.d.mts.map +1 -1
- package/dist/utils/invariant.mjs +28 -9
- package/dist/utils/invariant.mjs.map +1 -1
- package/dist/utils/types.d.cts +15 -3
- package/dist/utils/types.d.cts.map +1 -1
- package/dist/utils/types.d.mts +15 -3
- package/dist/utils/types.d.mts.map +1 -1
- package/dist/utils/validator.d.cts.map +1 -1
- package/dist/utils/validator.d.mts.map +1 -1
- package/package.json +1 -1
- package/dist/internals/utils.cjs +0 -94
- package/dist/internals/utils.cjs.map +0 -1
- package/dist/internals/utils.d.cts +0 -33
- package/dist/internals/utils.d.cts.map +0 -1
- package/dist/internals/utils.d.mts +0 -33
- package/dist/internals/utils.d.mts.map +0 -1
- package/dist/internals/utils.mjs +0 -91
- package/dist/internals/utils.mjs.map +0 -1
- package/dist/observable.cjs +0 -44
- package/dist/observable.cjs.map +0 -1
- package/dist/observable.d.cts +0 -26
- package/dist/observable.d.cts.map +0 -1
- package/dist/observable.d.mts +0 -26
- package/dist/observable.d.mts.map +0 -1
- package/dist/observable.mjs +0 -44
- package/dist/observable.mjs.map +0 -1
- package/dist/steps/types.cjs +0 -33
- package/dist/steps/types.cjs.map +0 -1
- package/dist/steps/types.d.cts +0 -354
- package/dist/steps/types.d.cts.map +0 -1
- package/dist/steps/types.d.mts +0 -354
- package/dist/steps/types.d.mts.map +0 -1
- package/dist/steps/types.mjs +0 -27
- package/dist/steps/types.mjs.map +0 -1
- package/dist/utils/field-types.cjs +0 -23
- package/dist/utils/field-types.cjs.map +0 -1
- package/dist/utils/field-types.d.cts +0 -39
- package/dist/utils/field-types.d.cts.map +0 -1
- package/dist/utils/field-types.d.mts +0 -39
- package/dist/utils/field-types.d.mts.map +0 -1
- package/dist/utils/field-types.mjs +0 -20
- package/dist/utils/field-types.mjs.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { DeepKeys, DeepPartial, Expand, Relaxed, Updater, objectHelpers, stripFunctions } from "../../utils/types.mjs";
|
|
2
|
+
import { path } from "../../utils/path.mjs";
|
|
3
|
+
import { steps } from "../steps.mjs";
|
|
4
|
+
import { HelperFn, HelperFnChosenSteps } from "./helper-fn/index.mjs";
|
|
5
|
+
|
|
6
|
+
//#region src/steps/fn-utils/update-fn.d.ts
|
|
7
|
+
declare namespace UpdateFn {
|
|
8
|
+
export type chosenFields<TCurrentStep extends steps.Any> = HelperFnChosenSteps.defaultStringOption | HelperFnChosenSteps.tupleNotation<DeepKeys<TCurrentStep>> | path.generateObjectConfig<TCurrentStep>;
|
|
9
|
+
type resolveAllPropertyPath<TCurrentStep extends steps.Any, TField extends chosenFields<TCurrentStep>> = TField extends HelperFnChosenSteps.defaultStringOption ? Relaxed<TCurrentStep> : never;
|
|
10
|
+
type resolveTuplePropertyPath<TCurrentStep extends steps.Any, TField extends chosenFields<TCurrentStep>, TDeepKeys extends DeepKeys<TCurrentStep> = DeepKeys<TCurrentStep>> = TField extends HelperFnChosenSteps.tupleNotation<TDeepKeys> ? TField[number] extends DeepKeys<Relaxed<TCurrentStep>> ? path.pickBy<Relaxed<TCurrentStep>, TField[number]> : never : never;
|
|
11
|
+
type resolveObjectPropertyPath<TCurrentStep extends steps.Any, TField extends chosenFields<TCurrentStep>, TDeepKeys extends DeepKeys<TCurrentStep> = DeepKeys<TCurrentStep>> = TField extends path.generateObjectConfig<TField> ? path.objectToPath<TField> extends TDeepKeys ? path.objectToPath<TField> extends DeepKeys<Relaxed<TCurrentStep>> ? path.pickBy<Relaxed<TCurrentStep>, path.objectToPath<TField>> : never : never : never;
|
|
12
|
+
type resolvePathType<TCurrentStep extends steps.Any, TField extends chosenFields<TCurrentStep>> = TField extends HelperFnChosenSteps.defaultStringOption ? 'all' : TField extends Array<infer _> ? 'tuple' : objectHelpers.isObject<TField> extends true ? 'object' : never;
|
|
13
|
+
type resolvePathMap<TCurrentStep extends steps.Any, TField extends chosenFields<TCurrentStep>> = {
|
|
14
|
+
all: resolveAllPropertyPath<TCurrentStep, TField>;
|
|
15
|
+
tuple: resolveTuplePropertyPath<TCurrentStep, TField>;
|
|
16
|
+
object: resolveObjectPropertyPath<TCurrentStep, TField>;
|
|
17
|
+
};
|
|
18
|
+
export type resolvedStep<value extends steps.instantiateSteps, targetStep extends steps.StepNumbers<value>> = stripFunctions<value[targetStep]>;
|
|
19
|
+
export type resolvedFieldValue<value extends steps.instantiateSteps, targetStep extends steps.StepNumbers<value>, field extends chosenFields<currentStep>, currentStep extends resolvedStep<value, targetStep> = resolvedStep<value, targetStep>, pathType extends resolvePathType<currentStep, field> = resolvePathType<currentStep, field>> = resolvePathMap<currentStep, field>[pathType];
|
|
20
|
+
export type mode = {
|
|
21
|
+
/**
|
|
22
|
+
* Enables strict mode for the update operation.
|
|
23
|
+
*
|
|
24
|
+
* When enabled, you won't be able to add new keys to an object. If
|
|
25
|
+
* you need to add new keys, set to `false`.
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
strict: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Enables partial mode for the update operation.
|
|
31
|
+
*
|
|
32
|
+
* When enabled, you will be required to return the whole object. If
|
|
33
|
+
* you need to return a partial object, set to `false`.
|
|
34
|
+
* @default false
|
|
35
|
+
*/
|
|
36
|
+
partial: boolean;
|
|
37
|
+
};
|
|
38
|
+
export type additionalUpdaterData = Record<string, unknown> | (() => Record<string, unknown>);
|
|
39
|
+
export type inferAdditionalUpdaterData<T extends additionalUpdaterData> = T extends (() => infer _) ? _ : T;
|
|
40
|
+
export type resolvedUpdaterReturnType<T, TMode extends mode, TAdditionalCtx extends additionalUpdaterData> = TMode['strict'] extends true ? TMode['partial'] extends true ? DeepPartial<T> : T : TMode['partial'] extends true ? DeepPartial<T> & TAdditionalCtx : T & TAdditionalCtx;
|
|
41
|
+
export interface DebugOptions {
|
|
42
|
+
/**
|
|
43
|
+
* Enables verbose debug logging for this update operation.
|
|
44
|
+
* Set to `true` to output helpful information for troubleshooting.
|
|
45
|
+
*/
|
|
46
|
+
debug?: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Controls whether console errors should be silenced.
|
|
49
|
+
*
|
|
50
|
+
* By default, errors will be silenced when `partial: true` OR `strict: false`.
|
|
51
|
+
*
|
|
52
|
+
*/
|
|
53
|
+
silentErrors?: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface BaseOptions<value extends steps.instantiateSteps, targetStep extends steps.StepNumbers<value>, fields extends chosenFields<currentStep>, currentStep extends resolvedStep<value, targetStep> = resolvedStep<value, targetStep>> extends DebugOptions {
|
|
56
|
+
/**
|
|
57
|
+
* The step to update.
|
|
58
|
+
*/
|
|
59
|
+
targetStep: targetStep;
|
|
60
|
+
/**
|
|
61
|
+
* The specific fields to update.
|
|
62
|
+
*
|
|
63
|
+
* Optionally provide a value to narrow the results of the `ctx` in the
|
|
64
|
+
* updater `fn`.
|
|
65
|
+
*/
|
|
66
|
+
fields?: fields;
|
|
67
|
+
}
|
|
68
|
+
export interface ModeOptions<TMode extends mode> {
|
|
69
|
+
/**
|
|
70
|
+
* Enables verbose debug logging for this update operation.
|
|
71
|
+
* Set to `true` to output helpful information for troubleshooting.
|
|
72
|
+
*/
|
|
73
|
+
debug?: boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Controls whether console errors should be silenced.
|
|
76
|
+
*
|
|
77
|
+
* By default, errors will be silenced when `partial: true` OR `strict: false`.
|
|
78
|
+
*
|
|
79
|
+
*/
|
|
80
|
+
silentErrors?: boolean;
|
|
81
|
+
/**
|
|
82
|
+
* Enables strict mode for the update operation.
|
|
83
|
+
*
|
|
84
|
+
* When enabled, you won't be able to add new keys to an object. If
|
|
85
|
+
* you need to add new keys, set to `false`.
|
|
86
|
+
* @default true
|
|
87
|
+
*/
|
|
88
|
+
strict?: TMode['strict'];
|
|
89
|
+
/**
|
|
90
|
+
* Enables partial mode for the update operation.
|
|
91
|
+
*
|
|
92
|
+
* When enabled, you will be required to return the whole object. If
|
|
93
|
+
* you need to return a partial object, set to `false`.
|
|
94
|
+
* @default false
|
|
95
|
+
*/
|
|
96
|
+
partial?: TMode['partial'];
|
|
97
|
+
}
|
|
98
|
+
export interface SharedOptions<value extends steps.instantiateSteps, targetStep extends steps.StepNumbers<value>, fields extends chosenFields<currentStep>, updateMode extends mode, currentStep extends resolvedStep<value, targetStep> = resolvedStep<value, targetStep>> extends BaseOptions<value, targetStep, fields, currentStep>, ModeOptions<updateMode> {}
|
|
99
|
+
export type options<value extends steps.instantiateSteps, targetStep extends steps.StepNumbers<value>, field extends chosenFields<TCurrentStep>, strict extends boolean, partial extends boolean, additionalCtx extends Record<string, unknown>, updaterData extends additionalUpdaterData, TCurrentStep extends resolvedStep<value, targetStep> = resolvedStep<value, targetStep>, TMode extends mode = {
|
|
100
|
+
strict: strict;
|
|
101
|
+
partial: partial;
|
|
102
|
+
}> = SharedOptions<value, targetStep, field, TMode, TCurrentStep> & HelperFn.CtxDataSelector<value, [targetStep], additionalCtx> & {
|
|
103
|
+
updater: Updater<Expand<HelperFn.BaseInput<value, [targetStep], never, additionalCtx>>, resolvedUpdaterReturnType<resolvedFieldValue<value, targetStep, field, TCurrentStep>, TMode, updaterData>>;
|
|
104
|
+
};
|
|
105
|
+
export type general<value extends steps.instantiateSteps> = <targetStep extends steps.StepNumbers<value>, field extends chosenFields<resolvedStep<value, targetStep>> = 'all', strict extends boolean = true, partial extends boolean = false, additionalCtx extends Record<string, unknown> = {}, additionalUpdaterData extends Record<string, unknown> = {}>(options: options<value, targetStep, field, strict, partial, additionalCtx, additionalUpdaterData>) => void;
|
|
106
|
+
export type stepSpecific<value extends steps.instantiateSteps, targetStep extends stepNumbers, stepNumbers extends steps.StepNumbers<value> = steps.StepNumbers<value>> = <field extends chosenFields<resolvedStep<value, targetStep>> = 'all', strict extends boolean = true, partial extends boolean = false, additionalCtx extends Record<string, unknown> = {}, additionalUpdaterData extends Record<string, unknown> = {}>(options: Omit<options<value, targetStep, field, strict, partial, additionalCtx, additionalUpdaterData>, 'targetStep'>) => void;
|
|
107
|
+
export type StepSpecificHelperFn<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = { [key in HelperFnChosenSteps.resolve<value, chosenSteps>]: stepSpecific<value, key> };
|
|
108
|
+
export type createHelperFnForAllSteps<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = chosenSteps extends HelperFnChosenSteps.defaultStringOption ? StepSpecificHelperFn<value, chosenSteps> : never;
|
|
109
|
+
export type createHelperFnForTupleSteps<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = chosenSteps extends HelperFnChosenSteps.tupleNotation<steps.StepNumbers<value>> ? StepSpecificHelperFn<value, chosenSteps> : never;
|
|
110
|
+
export type createHelperFnForObjectSteps<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = chosenSteps extends HelperFnChosenSteps.objectNotation<steps.StepNumbers<value>> ? { [key in keyof chosenSteps]: key extends HelperFnChosenSteps.resolve<value, chosenSteps> ? StepSpecificHelperFn<value, chosenSteps>[key] : never } : never;
|
|
111
|
+
type HelperFnMap<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = {
|
|
112
|
+
all: createHelperFnForAllSteps<value, chosenSteps>;
|
|
113
|
+
tuple: createHelperFnForTupleSteps<value, chosenSteps>;
|
|
114
|
+
object: createHelperFnForObjectSteps<value, chosenSteps>;
|
|
115
|
+
};
|
|
116
|
+
export type HelperFn<value extends steps.instantiateSteps, chosenSteps extends HelperFnChosenSteps.main<value, steps.StepNumbers<value>>> = general<value> & HelperFnMap<value, chosenSteps>[HelperFnChosenSteps.resolveType<value, chosenSteps>];
|
|
117
|
+
export {};
|
|
118
|
+
}
|
|
119
|
+
//#endregion
|
|
120
|
+
export { UpdateFn };
|
|
121
|
+
//# sourceMappingURL=update-fn.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update-fn.d.mts","names":[],"sources":["../../../src/steps/fn-utils/update-fn.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/steps/index.cjs
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
const
|
|
1
|
+
const require_index = require('./fn-utils/helper-fn/index.cjs');
|
|
2
2
|
const require_fields = require('./fields.cjs');
|
|
3
|
+
const require_steps = require('./steps.cjs');
|
|
4
|
+
const require_utils = require('./utils.cjs');
|
|
3
5
|
const require_schema = require('./schema.cjs');
|
|
4
|
-
|
|
6
|
+
require('./fn-utils/index.cjs');
|
package/dist/steps/index.mjs
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { HelperFnChosenSteps } from "./fn-utils/helper-fn/index.mjs";
|
|
2
2
|
import { fields } from "./fields.mjs";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { VALIDATED_STEP_REGEX, steps } from "./steps.mjs";
|
|
4
|
+
import { createCtx } from "./utils.mjs";
|
|
5
|
+
import { MultiStepFormStepSchema, createIsValidStepFn } from "./schema.mjs";
|
|
6
|
+
import "./fn-utils/index.mjs";
|
|
5
7
|
|
|
6
8
|
export { };
|
package/dist/steps/schema.cjs
CHANGED
|
@@ -1,32 +1,39 @@
|
|
|
1
|
+
const require_casing = require('../utils/casing.cjs');
|
|
1
2
|
const require_invariant = require('../utils/invariant.cjs');
|
|
3
|
+
require('../utils/index.cjs');
|
|
4
|
+
const require_fields = require('./fields.cjs');
|
|
5
|
+
const require_steps = require('./steps.cjs');
|
|
6
|
+
const require_helpers = require('../utils/helpers.cjs');
|
|
2
7
|
const require_utils = require('./utils.cjs');
|
|
3
|
-
const require_casing = require('../utils/casing.cjs');
|
|
4
|
-
const require_field_types = require('../utils/field-types.cjs');
|
|
5
|
-
const require_utils$1 = require('../internals/utils.cjs');
|
|
6
8
|
const require_step_schema = require('../internals/step-schema.cjs');
|
|
7
9
|
const require_storage = require('../storage.cjs');
|
|
8
10
|
const require_subscribable = require('../subscribable.cjs');
|
|
9
|
-
const require_fields = require('./fields.cjs');
|
|
10
11
|
|
|
11
12
|
//#region src/steps/schema.ts
|
|
13
|
+
const STRING_KEYS = ["string", "string.keys"];
|
|
14
|
+
const NUMBER_KEYS = ["number"];
|
|
15
|
+
const ARRAY_STRING_KEYS = require_helpers.addToTuple(require_helpers.mapToTuple(STRING_KEYS, (key) => `array.${key}`), "array.string.untyped");
|
|
16
|
+
const ARRAY_NUMBER_KEYS = require_helpers.mapToTuple(NUMBER_KEYS, (key) => `array.${key}`);
|
|
12
17
|
/**
|
|
13
18
|
* Available transformation types for the step numbers.
|
|
14
19
|
*/
|
|
15
20
|
const AS_TYPES = [
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
21
|
+
...STRING_KEYS,
|
|
22
|
+
...NUMBER_KEYS,
|
|
23
|
+
...ARRAY_STRING_KEYS,
|
|
24
|
+
...ARRAY_NUMBER_KEYS
|
|
20
25
|
];
|
|
21
|
-
function
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
if (
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
function createIsValidStepFn(stepNumbers) {
|
|
27
|
+
function isValidStep(value) {
|
|
28
|
+
require_invariant.createInvariant("[isValidStep]")(typeof value === "string" || typeof value === "number", `The value must be a string or a number, was ${typeof value}`);
|
|
29
|
+
if (typeof value === "string") {
|
|
30
|
+
if (!value.includes("step")) return false;
|
|
31
|
+
return stepNumbers.includes(Number.parseInt(value.replace("step", "")));
|
|
32
|
+
}
|
|
33
|
+
if (typeof value === "number") return stepNumbers.includes(value);
|
|
34
|
+
return false;
|
|
28
35
|
}
|
|
29
|
-
return
|
|
36
|
+
return isValidStep;
|
|
30
37
|
}
|
|
31
38
|
var MultiStepFormStepSchema = class extends require_subscribable.Subscribable {
|
|
32
39
|
/**
|
|
@@ -39,45 +46,43 @@ var MultiStepFormStepSchema = class extends require_subscribable.Subscribable {
|
|
|
39
46
|
value;
|
|
40
47
|
steps;
|
|
41
48
|
defaultNameTransformationCasing;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
stepNumbers;
|
|
45
|
-
storage;
|
|
49
|
+
#stepNumbers;
|
|
50
|
+
#storage;
|
|
46
51
|
#internal;
|
|
47
52
|
constructor(config) {
|
|
48
53
|
super();
|
|
49
|
-
const { steps, nameTransformCasing, storage } = config;
|
|
54
|
+
const { steps: steps$1, nameTransformCasing, storage } = config;
|
|
50
55
|
this.defaultNameTransformationCasing = require_casing.setCasingType(nameTransformCasing);
|
|
51
|
-
this.original = steps;
|
|
52
|
-
this.value =
|
|
53
|
-
this.storage = new require_storage.MultiStepFormStorage({
|
|
54
|
-
data: this.value,
|
|
55
|
-
key: storage?.key ?? require_storage.DEFAULT_STORAGE_KEY,
|
|
56
|
-
store: storage?.store,
|
|
57
|
-
throwWhenUndefined: storage?.throwWhenUndefined ?? false
|
|
58
|
-
});
|
|
56
|
+
this.original = steps$1;
|
|
57
|
+
this.value = require_steps.instantiateSteps({ steps: steps$1 });
|
|
59
58
|
this.#internal = new require_step_schema.MultiStepFormStepSchemaInternal({
|
|
60
59
|
originalValue: this.original,
|
|
61
60
|
getValue: () => this.value,
|
|
62
61
|
setValue: (next) => this.handlePostUpdate(next)
|
|
63
62
|
});
|
|
64
63
|
this.value = this.#internal.enrichValues(this.value);
|
|
65
|
-
this
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
this.#storage = new require_storage.MultiStepFormStorage({
|
|
65
|
+
data: this.value,
|
|
66
|
+
key: storage?.key ?? require_storage.DEFAULT_STORAGE_KEY,
|
|
67
|
+
store: storage?.store,
|
|
68
|
+
throwWhenUndefined: storage?.throwWhenUndefined
|
|
69
|
+
});
|
|
70
|
+
this.#stepNumbers = Object.keys(this.value).map((key) => Number.parseInt(key.replace("step", "")));
|
|
68
71
|
this.steps = {
|
|
69
|
-
|
|
70
|
-
last: this.lastStep.step,
|
|
71
|
-
value: this.stepNumbers,
|
|
72
|
+
value: this.#stepNumbers,
|
|
72
73
|
as: (asType) => {
|
|
73
74
|
require_invariant.invariant(typeof asType === "string", `The type of the target transformation type must be a string, was ${typeof asType}`);
|
|
74
|
-
if (asType === "string") return this
|
|
75
|
-
if (asType === "
|
|
76
|
-
if (asType
|
|
75
|
+
if (asType === "string") return this.#stepNumbers.map((value) => `'${value}'`).join(" | ");
|
|
76
|
+
if (asType === "string.keys") return this.#stepNumbers.map((value) => `'step${value}'`).join(" | ");
|
|
77
|
+
if (asType === "number") return this.#stepNumbers.join(" | ");
|
|
78
|
+
if (asType.includes("array.string")) {
|
|
79
|
+
if (asType.includes("keys")) return this.#stepNumbers.map((value) => `step${value}`);
|
|
80
|
+
return this.#stepNumbers.map((value) => `${value}`);
|
|
81
|
+
}
|
|
82
|
+
if (asType.includes("array.number")) return this.#stepNumbers;
|
|
77
83
|
throw new Error(`Transformation type "${asType}" is not supported. Available transformations include: ${AS_TYPES.map((value) => `"${value}"`).join(", ")}`);
|
|
78
84
|
},
|
|
79
|
-
|
|
80
|
-
isValidStepKey: (value) => require_utils$1.isValidStepKey(this.value, value)
|
|
85
|
+
isValidStep: createIsValidStepFn(this.#stepNumbers)
|
|
81
86
|
};
|
|
82
87
|
this.sync();
|
|
83
88
|
}
|
|
@@ -85,7 +90,7 @@ var MultiStepFormStepSchema = class extends require_subscribable.Subscribable {
|
|
|
85
90
|
* @internal
|
|
86
91
|
*/
|
|
87
92
|
__getStorage() {
|
|
88
|
-
return this
|
|
93
|
+
return this.#storage;
|
|
89
94
|
}
|
|
90
95
|
getSnapshot() {
|
|
91
96
|
return this;
|
|
@@ -113,28 +118,17 @@ var MultiStepFormStepSchema = class extends require_subscribable.Subscribable {
|
|
|
113
118
|
get(options) {
|
|
114
119
|
return require_utils.getStep(this.value)(options);
|
|
115
120
|
}
|
|
116
|
-
/**
|
|
117
|
-
* Gets the data for the first step.
|
|
118
|
-
* @returns The data for the first step.
|
|
119
|
-
*/
|
|
120
|
-
first() {
|
|
121
|
-
const firstStep = Math.min(...this.stepNumbers);
|
|
122
|
-
return this.get({ step: firstStep });
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Gets the data for the last step.
|
|
126
|
-
* @returns The data for the last step.
|
|
127
|
-
*/
|
|
128
|
-
last() {
|
|
129
|
-
const lastStep = Math.max(...this.stepNumbers);
|
|
130
|
-
return this.get({ step: lastStep });
|
|
131
|
-
}
|
|
132
121
|
handlePostUpdate(next) {
|
|
133
122
|
this.value = { ...next };
|
|
134
123
|
this.__getStorage().add(this.value);
|
|
135
124
|
this.sync();
|
|
136
125
|
this.notify();
|
|
137
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Updates the step with the given options.
|
|
129
|
+
* @param options The options for updating the step.
|
|
130
|
+
* @returns The return value of the updater function.
|
|
131
|
+
*/
|
|
138
132
|
update(options) {
|
|
139
133
|
this.#internal.update(options);
|
|
140
134
|
}
|
|
@@ -149,29 +143,8 @@ var MultiStepFormStepSchema = class extends require_subscribable.Subscribable {
|
|
|
149
143
|
* Validates that a given object is the proper shape for step data.
|
|
150
144
|
* @param value
|
|
151
145
|
*/
|
|
152
|
-
static hasData(value
|
|
153
|
-
|
|
154
|
-
return assertObjectFields(value, {
|
|
155
|
-
title: (v) => typeof v === "string",
|
|
156
|
-
fields: (v) => {
|
|
157
|
-
if (v === null || typeof v !== "object") return false;
|
|
158
|
-
for (const key of Object.keys(v)) {
|
|
159
|
-
if (typeof key !== "string" || !(key in v)) return false;
|
|
160
|
-
const current = v[key];
|
|
161
|
-
if (current === null || typeof current !== "object") return false;
|
|
162
|
-
if (!assertObjectFields(current, {
|
|
163
|
-
defaultValue: (v$1) => v$1 !== "undefined" && v$1 !== null,
|
|
164
|
-
label: (v$1) => typeof v$1 === "string" || typeof v$1 === "boolean" && !v$1,
|
|
165
|
-
nameTransformCasing: require_casing.isCasingValid,
|
|
166
|
-
type: require_field_types.isFieldType
|
|
167
|
-
})) return false;
|
|
168
|
-
}
|
|
169
|
-
return true;
|
|
170
|
-
},
|
|
171
|
-
createHelperFn: (v) => typeof v === "function",
|
|
172
|
-
nameTransformCasing: require_casing.isCasingValid,
|
|
173
|
-
...options?.optionalKeysToCheck
|
|
174
|
-
});
|
|
146
|
+
static hasData(value) {
|
|
147
|
+
return require_steps.steps.isValidSteps(value);
|
|
175
148
|
}
|
|
176
149
|
/**
|
|
177
150
|
* Gets the value of a given field for a given step.
|
|
@@ -181,14 +154,18 @@ var MultiStepFormStepSchema = class extends require_subscribable.Subscribable {
|
|
|
181
154
|
*/
|
|
182
155
|
getValue(step, field) {
|
|
183
156
|
const stepData = this.value[step];
|
|
157
|
+
const invariant$1 = require_invariant.createInvariant("[getValue]");
|
|
184
158
|
const baseErrorMessage = `Unable to get the value for "${String(step)}.fields.${String(field)}"`;
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
159
|
+
const errorSuffix = "This shouldn't be the case, so please open an issue";
|
|
160
|
+
const createErrorMessage = (reason) => `${baseErrorMessage} because ${reason}. ${errorSuffix}`;
|
|
161
|
+
invariant$1(typeof stepData === "object" && stepData !== null, createErrorMessage("the step data is not an object"));
|
|
162
|
+
invariant$1("fields" in stepData, createErrorMessage("the step data does not have a \"fields\" property"));
|
|
163
|
+
invariant$1(typeof stepData.fields === "object", createErrorMessage("\"fields\" is not an object"));
|
|
164
|
+
return require_fields.fields.resolvedDeepPath(field, stepData.fields);
|
|
189
165
|
}
|
|
190
166
|
};
|
|
191
167
|
|
|
192
168
|
//#endregion
|
|
193
169
|
exports.MultiStepFormStepSchema = MultiStepFormStepSchema;
|
|
170
|
+
exports.createIsValidStepFn = createIsValidStepFn;
|
|
194
171
|
//# sourceMappingURL=schema.cjs.map
|
|
@@ -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":"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"}
|