@jfdevelops/multi-step-form-core 1.0.0-alpha.12 → 1.0.0-alpha.14

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 (178) hide show
  1. package/dist/_internals.cjs +13 -9
  2. package/dist/_internals.d.cts +4 -0
  3. package/dist/_internals.d.mts +4 -0
  4. package/dist/_internals.mjs +5 -7
  5. package/dist/index.cjs +45 -669
  6. package/dist/index.d.cts +14 -0
  7. package/dist/index.d.mts +14 -0
  8. package/dist/index.mjs +16 -668
  9. package/dist/internals/step-schema.cjs +338 -0
  10. package/dist/internals/step-schema.cjs.map +1 -0
  11. package/dist/internals/step-schema.d.cts +40 -0
  12. package/dist/internals/step-schema.d.cts.map +1 -0
  13. package/dist/internals/step-schema.d.mts +40 -0
  14. package/dist/internals/step-schema.d.mts.map +1 -0
  15. package/dist/internals/step-schema.mjs +338 -0
  16. package/dist/internals/step-schema.mjs.map +1 -0
  17. package/dist/internals/utils.cjs +94 -0
  18. package/dist/internals/utils.cjs.map +1 -0
  19. package/dist/internals/utils.d.cts +27 -0
  20. package/dist/internals/utils.d.cts.map +1 -0
  21. package/dist/internals/utils.d.mts +27 -0
  22. package/dist/internals/utils.d.mts.map +1 -0
  23. package/dist/internals/utils.mjs +91 -0
  24. package/dist/internals/utils.mjs.map +1 -0
  25. package/dist/observable.cjs +44 -0
  26. package/dist/observable.cjs.map +1 -0
  27. package/dist/observable.d.cts +26 -0
  28. package/dist/observable.d.cts.map +1 -0
  29. package/dist/observable.d.mts +26 -0
  30. package/dist/observable.d.mts.map +1 -0
  31. package/dist/observable.mjs +44 -0
  32. package/dist/observable.mjs.map +1 -0
  33. package/dist/schema.cjs +68 -0
  34. package/dist/schema.cjs.map +1 -0
  35. package/dist/schema.d.cts +28 -0
  36. package/dist/schema.d.cts.map +1 -0
  37. package/dist/schema.d.mts +28 -0
  38. package/dist/schema.d.mts.map +1 -0
  39. package/dist/schema.mjs +67 -0
  40. package/dist/schema.mjs.map +1 -0
  41. package/dist/steps/fields.cjs +23 -0
  42. package/dist/steps/fields.cjs.map +1 -0
  43. package/dist/steps/fields.d.cts +18 -0
  44. package/dist/steps/fields.d.cts.map +1 -0
  45. package/dist/steps/fields.d.mts +18 -0
  46. package/dist/steps/fields.d.mts.map +1 -0
  47. package/dist/steps/fields.mjs +18 -0
  48. package/dist/steps/fields.mjs.map +1 -0
  49. package/dist/steps/index.cjs +4 -0
  50. package/dist/steps/index.mjs +6 -0
  51. package/dist/steps/schema.cjs +194 -0
  52. package/dist/steps/schema.cjs.map +1 -0
  53. package/dist/steps/schema.d.cts +124 -0
  54. package/dist/steps/schema.d.cts.map +1 -0
  55. package/dist/steps/schema.d.mts +124 -0
  56. package/dist/steps/schema.d.mts.map +1 -0
  57. package/dist/steps/schema.mjs +194 -0
  58. package/dist/steps/schema.mjs.map +1 -0
  59. package/dist/steps/types.cjs +33 -0
  60. package/dist/steps/types.cjs.map +1 -0
  61. package/dist/steps/types.d.cts +277 -0
  62. package/dist/steps/types.d.cts.map +1 -0
  63. package/dist/steps/types.d.mts +277 -0
  64. package/dist/steps/types.d.mts.map +1 -0
  65. package/dist/steps/types.mjs +27 -0
  66. package/dist/steps/types.mjs.map +1 -0
  67. package/dist/steps/utils.cjs +96 -0
  68. package/dist/steps/utils.cjs.map +1 -0
  69. package/dist/steps/utils.d.cts +10 -0
  70. package/dist/steps/utils.d.cts.map +1 -0
  71. package/dist/steps/utils.d.mts +10 -0
  72. package/dist/steps/utils.d.mts.map +1 -0
  73. package/dist/steps/utils.mjs +94 -0
  74. package/dist/steps/utils.mjs.map +1 -0
  75. package/dist/storage.cjs +72 -0
  76. package/dist/storage.cjs.map +1 -0
  77. package/dist/storage.d.cts +33 -0
  78. package/dist/storage.d.cts.map +1 -0
  79. package/dist/storage.d.mts +33 -0
  80. package/dist/storage.d.mts.map +1 -0
  81. package/dist/storage.mjs +71 -0
  82. package/dist/storage.mjs.map +1 -0
  83. package/dist/subscribable.cjs +25 -0
  84. package/dist/subscribable.cjs.map +1 -0
  85. package/dist/subscribable.d.cts +14 -0
  86. package/dist/subscribable.d.cts.map +1 -0
  87. package/dist/subscribable.d.mts +14 -0
  88. package/dist/subscribable.d.mts.map +1 -0
  89. package/dist/subscribable.mjs +24 -0
  90. package/dist/subscribable.mjs.map +1 -0
  91. package/dist/utils/casing.cjs +63 -0
  92. package/dist/utils/casing.cjs.map +1 -0
  93. package/dist/utils/casing.d.cts +40 -0
  94. package/dist/utils/casing.d.cts.map +1 -0
  95. package/dist/utils/casing.d.mts +40 -0
  96. package/dist/utils/casing.d.mts.map +1 -0
  97. package/dist/utils/casing.mjs +57 -0
  98. package/dist/utils/casing.mjs.map +1 -0
  99. package/dist/utils/field-types.cjs +23 -0
  100. package/dist/utils/field-types.cjs.map +1 -0
  101. package/dist/utils/field-types.d.cts +11 -0
  102. package/dist/utils/field-types.d.cts.map +1 -0
  103. package/dist/utils/field-types.d.mts +11 -0
  104. package/dist/utils/field-types.d.mts.map +1 -0
  105. package/dist/utils/field-types.mjs +20 -0
  106. package/dist/utils/field-types.mjs.map +1 -0
  107. package/dist/utils/helpers.cjs +30 -0
  108. package/dist/utils/helpers.cjs.map +1 -0
  109. package/dist/utils/helpers.mjs +27 -0
  110. package/dist/utils/helpers.mjs.map +1 -0
  111. package/dist/utils/invariant.cjs +18 -0
  112. package/dist/utils/invariant.cjs.map +1 -0
  113. package/dist/utils/invariant.d.cts +5 -0
  114. package/dist/utils/invariant.d.cts.map +1 -0
  115. package/dist/utils/invariant.d.mts +5 -0
  116. package/dist/utils/invariant.d.mts.map +1 -0
  117. package/dist/utils/invariant.mjs +17 -0
  118. package/dist/utils/invariant.mjs.map +1 -0
  119. package/dist/utils/logger.cjs +58 -0
  120. package/dist/utils/logger.cjs.map +1 -0
  121. package/dist/utils/logger.d.cts +53 -0
  122. package/dist/utils/logger.d.cts.map +1 -0
  123. package/dist/utils/logger.d.mts +53 -0
  124. package/dist/utils/logger.d.mts.map +1 -0
  125. package/dist/utils/logger.mjs +56 -0
  126. package/dist/utils/logger.mjs.map +1 -0
  127. package/dist/utils/path.cjs +272 -0
  128. package/dist/utils/path.cjs.map +1 -0
  129. package/dist/utils/path.d.cts +131 -0
  130. package/dist/utils/path.d.cts.map +1 -0
  131. package/dist/utils/path.d.mts +131 -0
  132. package/dist/utils/path.d.mts.map +1 -0
  133. package/dist/utils/path.mjs +266 -0
  134. package/dist/utils/path.mjs.map +1 -0
  135. package/dist/utils/types.d.cts +23 -0
  136. package/dist/utils/types.d.cts.map +1 -0
  137. package/dist/utils/types.d.mts +23 -0
  138. package/dist/utils/types.d.mts.map +1 -0
  139. package/dist/utils/validator.cjs +12 -0
  140. package/dist/utils/validator.cjs.map +1 -0
  141. package/dist/utils/validator.d.cts +77 -0
  142. package/dist/utils/validator.d.cts.map +1 -0
  143. package/dist/utils/validator.d.mts +77 -0
  144. package/dist/utils/validator.d.mts.map +1 -0
  145. package/dist/utils/validator.mjs +11 -0
  146. package/dist/utils/validator.mjs.map +1 -0
  147. package/package.json +14 -13
  148. package/dist/_internals.cjs.map +0 -1
  149. package/dist/_internals.mjs.map +0 -1
  150. package/dist/errors/invalid-key.d.ts +0 -18
  151. package/dist/index.cjs.map +0 -1
  152. package/dist/index.d.ts +0 -5
  153. package/dist/index.mjs.map +0 -1
  154. package/dist/internals/index.d.ts +0 -2
  155. package/dist/internals/step-schema.d.ts +0 -28
  156. package/dist/observable.d.ts +0 -21
  157. package/dist/schema.d.ts +0 -22
  158. package/dist/steps/fields.d.ts +0 -20
  159. package/dist/steps/index.d.ts +0 -4
  160. package/dist/steps/schema.d.ts +0 -138
  161. package/dist/steps/types.d.ts +0 -295
  162. package/dist/steps/utils.d.ts +0 -21
  163. package/dist/storage.d.ts +0 -28
  164. package/dist/subscribable.d.ts +0 -10
  165. package/dist/types-C4Mgnku6.cjs +0 -949
  166. package/dist/types-C4Mgnku6.cjs.map +0 -1
  167. package/dist/types-CYf1_lBe.js +0 -953
  168. package/dist/types-CYf1_lBe.js.map +0 -1
  169. package/dist/utils/casing.d.ts +0 -38
  170. package/dist/utils/field-types.d.ts +0 -6
  171. package/dist/utils/helper-fns.d.ts +0 -8
  172. package/dist/utils/helpers.d.ts +0 -8
  173. package/dist/utils/index.d.ts +0 -5
  174. package/dist/utils/invariant.d.ts +0 -1
  175. package/dist/utils/logger.d.ts +0 -50
  176. package/dist/utils/path.d.ts +0 -141
  177. package/dist/utils/types.d.ts +0 -34
  178. package/dist/utils/validator.d.ts +0 -74
@@ -0,0 +1,91 @@
1
+ import { invariant } from "../utils/invariant.mjs";
2
+ import { DEFAULT_CASING, changeCasing } from "../utils/casing.mjs";
3
+ import { DEFAULT_FIELD_TYPE } from "../utils/field-types.mjs";
4
+ import { runStandardValidation } from "../utils/validator.mjs";
5
+
6
+ //#region src/internals/utils.ts
7
+ const VALIDATED_STEP_REGEX = /^step\d+$/i;
8
+ function isValidStepKey(steps, stepKey) {
9
+ return Object.keys(steps).includes(stepKey);
10
+ }
11
+ function createFieldLabel(label, fieldName, casingType) {
12
+ return label ?? changeCasing(fieldName, casingType);
13
+ }
14
+ function createStepFields(options) {
15
+ const resolvedFields = {};
16
+ const { fields, defaultCasing, validateFields } = options;
17
+ for (const [name, values] of Object.entries(fields)) {
18
+ invariant(typeof name === "string", `Each key for the "fields" option must be a string. Key ${name} was a ${typeof name}`);
19
+ invariant(typeof values === "object", `The value for key ${name} must be an object. Was ${typeof values}`);
20
+ const { defaultValue, label, nameTransformCasing, type = DEFAULT_FIELD_TYPE } = values;
21
+ if (validateFields) resolvedFields[name] = defaultValue;
22
+ else {
23
+ const casing = nameTransformCasing ?? defaultCasing;
24
+ resolvedFields[name] = {
25
+ ...resolvedFields[name],
26
+ nameTransformCasing: casing,
27
+ type,
28
+ defaultValue,
29
+ label: createFieldLabel(label, name, casing)
30
+ };
31
+ }
32
+ }
33
+ if (validateFields) {
34
+ const validatedFields = runStandardValidation(validateFields, resolvedFields);
35
+ invariant(typeof validatedFields === "object", `The result of the validated fields must be an object, was (${typeof validatedFields}). This is probably an internal error, so open up an issue about it`);
36
+ invariant(!!validatedFields, "The result of the validated fields must be defined. This is probably an internal error, so open up an issue about it");
37
+ for (const [name, defaultValue] of Object.entries(validatedFields)) {
38
+ const currentField = fields[name];
39
+ invariant(currentField, `No field found in the fields config for "${name}"`);
40
+ const { label, type = DEFAULT_FIELD_TYPE, nameTransformCasing } = currentField;
41
+ const casing = nameTransformCasing ?? defaultCasing;
42
+ resolvedFields[name] = {
43
+ ...resolvedFields[name],
44
+ nameTransformCasing: casing,
45
+ type,
46
+ defaultValue,
47
+ label: createFieldLabel(label, name, casing)
48
+ };
49
+ }
50
+ }
51
+ return resolvedFields;
52
+ }
53
+ function createStep(stepsConfig) {
54
+ const resolvedSteps = {};
55
+ invariant(!!stepsConfig, "The steps config must be defined", TypeError);
56
+ invariant(typeof stepsConfig === "object", `The steps config must be an object, was (${typeof stepsConfig})`, TypeError);
57
+ for (const [stepKey, stepValue] of Object.entries(stepsConfig)) {
58
+ invariant(typeof stepKey === "string", `Each key for the step config must be a string. Key "${stepKey}" was ${typeof stepKey} `, TypeError);
59
+ invariant(VALIDATED_STEP_REGEX.test(stepKey), `The key "${stepKey}" isn't formatted properly. Each key in the step config must be the following format: "step{number}"`);
60
+ const validStepKey = stepKey;
61
+ const { fields, title, nameTransformCasing: defaultCasing = DEFAULT_CASING, description, validateFields } = stepValue;
62
+ const currentStep = validStepKey.toString().replace("step", "");
63
+ invariant(fields, `Missing fields for step ${currentStep} (${String(validStepKey)})`, TypeError);
64
+ invariant(typeof fields === "object", "Fields must be an object", TypeError);
65
+ invariant(Object.keys(fields).length > 0, `The fields config for step ${currentStep} (${String(validStepKey)}) is empty. Please add a field`);
66
+ invariant(typeof fields === "object", `The "fields" property must be an object. Was ${typeof fields}`);
67
+ const resolvedFields = createStepFields({
68
+ defaultCasing,
69
+ fields,
70
+ validateFields
71
+ });
72
+ resolvedSteps[validStepKey] = {
73
+ ...resolvedSteps[validStepKey],
74
+ title,
75
+ nameTransformCasing: defaultCasing,
76
+ ...typeof description === "string" ? { description } : {},
77
+ fields: resolvedFields
78
+ };
79
+ }
80
+ return resolvedSteps;
81
+ }
82
+ function isTupleNotation(value) {
83
+ if (!Array.isArray(value)) return false;
84
+ if (value.length === 0) return false;
85
+ if (!value.every((v) => typeof v === "string")) return false;
86
+ return true;
87
+ }
88
+
89
+ //#endregion
90
+ export { VALIDATED_STEP_REGEX, createStep, isTupleNotation, isValidStepKey };
91
+ //# sourceMappingURL=utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.mjs","names":["resolvedFields: Record<string, unknown>"],"sources":["../../src/internals/utils.ts"],"sourcesContent":["import type {\n AnyResolvedStep,\n AnyStepField,\n Step,\n InferStepOptions,\n ResolvedStep,\n HelperFnChosenSteps,\n} from '@/steps';\nimport {\n type Constrain,\n type CasingType,\n changeCasing,\n DEFAULT_FIELD_TYPE,\n invariant,\n type DefaultCasing,\n DEFAULT_CASING,\n} from '@/utils';\nimport {\n type AnyValidator,\n type DefaultValidator,\n runStandardValidation,\n type StandardSchemaValidator,\n} from '@/utils/validator';\n\nexport const VALIDATED_STEP_REGEX = /^step\\d+$/i;\nexport function isValidStepKey<T extends AnyResolvedStep>(\n steps: T,\n stepKey: string\n): stepKey is Constrain<keyof T, string> {\n return Object.keys(steps).includes(stepKey);\n}\n\nexport function createFieldLabel(\n label: string | false | undefined,\n fieldName: string,\n casingType: CasingType\n) {\n return label ?? changeCasing(fieldName, casingType);\n}\n\nexport function createStepFields(options: {\n fields: AnyStepField;\n validateFields:\n | Constrain<unknown, AnyValidator, DefaultValidator>\n | undefined;\n defaultCasing: CasingType;\n}) {\n const resolvedFields: Record<string, unknown> = {};\n const { fields, defaultCasing, validateFields } = options;\n\n for (const [name, values] of Object.entries(fields)) {\n invariant(\n typeof name === 'string',\n `Each key for the \"fields\" option must be a string. Key ${name} was a ${typeof name}`\n );\n invariant(\n typeof values === 'object',\n `The value for key ${name} must be an object. Was ${typeof values}`\n );\n\n const {\n defaultValue,\n label,\n nameTransformCasing,\n type = DEFAULT_FIELD_TYPE,\n } = values;\n\n if (validateFields) {\n resolvedFields[name] = defaultValue;\n } else {\n const casing = nameTransformCasing ?? defaultCasing;\n\n resolvedFields[name] = {\n ...(resolvedFields[name] as Record<string, unknown>),\n nameTransformCasing: casing,\n type,\n defaultValue,\n label: createFieldLabel(label, name, casing),\n\n // TODO add more fields here\n };\n }\n }\n\n if (validateFields) {\n const validatedFields = runStandardValidation(\n validateFields as StandardSchemaValidator,\n resolvedFields\n );\n\n invariant(\n typeof validatedFields === 'object',\n `The result of the validated fields must be an object, was (${typeof validatedFields}). This is probably an internal error, so open up an issue about it`\n );\n invariant(\n !!validatedFields,\n 'The result of the validated fields must be defined. This is probably an internal error, so open up an issue about it'\n );\n\n for (const [name, defaultValue] of Object.entries(validatedFields)) {\n const currentField = fields[name];\n\n invariant(\n currentField,\n `No field found in the fields config for \"${name}\"`\n );\n\n const {\n label,\n type = DEFAULT_FIELD_TYPE,\n nameTransformCasing,\n } = currentField;\n const casing = nameTransformCasing ?? defaultCasing;\n\n resolvedFields[name] = {\n ...(resolvedFields[name] as Record<string, unknown>),\n nameTransformCasing: casing,\n type,\n defaultValue,\n label: createFieldLabel(label, name, casing),\n };\n }\n }\n\n return resolvedFields;\n}\nexport function createStep<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing\n>(stepsConfig: InferStepOptions<step>) {\n const resolvedSteps = {} as ResolvedStep<step, casing>;\n\n invariant(!!stepsConfig, 'The steps config must be defined', TypeError);\n invariant(\n typeof stepsConfig === 'object',\n `The steps config must be an object, was (${typeof stepsConfig})`,\n TypeError\n );\n\n for (const [stepKey, stepValue] of Object.entries(stepsConfig)) {\n invariant(\n typeof stepKey === 'string',\n `Each key for the step config must be a string. Key \"${stepKey}\" was ${typeof stepKey} `,\n TypeError\n );\n invariant(\n VALIDATED_STEP_REGEX.test(stepKey),\n `The key \"${stepKey}\" isn't formatted properly. Each key in the step config must be the following format: \"step{number}\"`\n );\n\n const validStepKey = stepKey as keyof typeof resolvedSteps;\n const {\n fields,\n title,\n nameTransformCasing: defaultCasing = DEFAULT_CASING,\n description,\n validateFields,\n } = stepValue;\n\n const currentStep = validStepKey.toString().replace('step', '');\n\n invariant(\n fields,\n `Missing fields for step ${currentStep} (${String(validStepKey)})`,\n TypeError\n );\n invariant(\n typeof fields === 'object',\n 'Fields must be an object',\n TypeError\n );\n invariant(\n Object.keys(fields).length > 0,\n `The fields config for step ${currentStep} (${String(\n validStepKey\n )}) is empty. Please add a field`\n );\n invariant(\n typeof fields === 'object',\n `The \"fields\" property must be an object. Was ${typeof fields}`\n );\n\n const resolvedFields = createStepFields({\n defaultCasing,\n fields,\n validateFields,\n });\n\n resolvedSteps[validStepKey] = {\n ...resolvedSteps[validStepKey],\n title,\n nameTransformCasing: defaultCasing,\n // Only add the description if it's defined\n ...(typeof description === 'string' ? { description } : {}),\n fields: resolvedFields,\n };\n }\n\n return resolvedSteps;\n}\n\nexport function isTupleNotation<T extends string>(\n value: unknown\n): value is HelperFnChosenSteps.tupleNotation<T> {\n if (!Array.isArray(value)) {\n return false;\n }\n\n if (value.length === 0) {\n return false;\n }\n\n if (!value.every((v) => typeof v === 'string')) {\n return false;\n }\n\n return true;\n}\n"],"mappings":";;;;;;AAwBA,MAAa,uBAAuB;AACpC,SAAgB,eACd,OACA,SACuC;AACvC,QAAO,OAAO,KAAK,MAAM,CAAC,SAAS,QAAQ;;AAG7C,SAAgB,iBACd,OACA,WACA,YACA;AACA,QAAO,SAAS,aAAa,WAAW,WAAW;;AAGrD,SAAgB,iBAAiB,SAM9B;CACD,MAAMA,iBAA0C,EAAE;CAClD,MAAM,EAAE,QAAQ,eAAe,mBAAmB;AAElD,MAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,OAAO,EAAE;AACnD,YACE,OAAO,SAAS,UAChB,0DAA0D,KAAK,SAAS,OAAO,OAChF;AACD,YACE,OAAO,WAAW,UAClB,qBAAqB,KAAK,0BAA0B,OAAO,SAC5D;EAED,MAAM,EACJ,cACA,OACA,qBACA,OAAO,uBACL;AAEJ,MAAI,eACF,gBAAe,QAAQ;OAClB;GACL,MAAM,SAAS,uBAAuB;AAEtC,kBAAe,QAAQ;IACrB,GAAI,eAAe;IACnB,qBAAqB;IACrB;IACA;IACA,OAAO,iBAAiB,OAAO,MAAM,OAAO;IAG7C;;;AAIL,KAAI,gBAAgB;EAClB,MAAM,kBAAkB,sBACtB,gBACA,eACD;AAED,YACE,OAAO,oBAAoB,UAC3B,8DAA8D,OAAO,gBAAgB,qEACtF;AACD,YACE,CAAC,CAAC,iBACF,uHACD;AAED,OAAK,MAAM,CAAC,MAAM,iBAAiB,OAAO,QAAQ,gBAAgB,EAAE;GAClE,MAAM,eAAe,OAAO;AAE5B,aACE,cACA,4CAA4C,KAAK,GAClD;GAED,MAAM,EACJ,OACA,OAAO,oBACP,wBACE;GACJ,MAAM,SAAS,uBAAuB;AAEtC,kBAAe,QAAQ;IACrB,GAAI,eAAe;IACnB,qBAAqB;IACrB;IACA;IACA,OAAO,iBAAiB,OAAO,MAAM,OAAO;IAC7C;;;AAIL,QAAO;;AAET,SAAgB,WAGd,aAAqC;CACrC,MAAM,gBAAgB,EAAE;AAExB,WAAU,CAAC,CAAC,aAAa,oCAAoC,UAAU;AACvE,WACE,OAAO,gBAAgB,UACvB,4CAA4C,OAAO,YAAY,IAC/D,UACD;AAED,MAAK,MAAM,CAAC,SAAS,cAAc,OAAO,QAAQ,YAAY,EAAE;AAC9D,YACE,OAAO,YAAY,UACnB,uDAAuD,QAAQ,QAAQ,OAAO,QAAQ,IACtF,UACD;AACD,YACE,qBAAqB,KAAK,QAAQ,EAClC,YAAY,QAAQ,sGACrB;EAED,MAAM,eAAe;EACrB,MAAM,EACJ,QACA,OACA,qBAAqB,gBAAgB,gBACrC,aACA,mBACE;EAEJ,MAAM,cAAc,aAAa,UAAU,CAAC,QAAQ,QAAQ,GAAG;AAE/D,YACE,QACA,2BAA2B,YAAY,IAAI,OAAO,aAAa,CAAC,IAChE,UACD;AACD,YACE,OAAO,WAAW,UAClB,4BACA,UACD;AACD,YACE,OAAO,KAAK,OAAO,CAAC,SAAS,GAC7B,8BAA8B,YAAY,IAAI,OAC5C,aACD,CAAC,gCACH;AACD,YACE,OAAO,WAAW,UAClB,gDAAgD,OAAO,SACxD;EAED,MAAM,iBAAiB,iBAAiB;GACtC;GACA;GACA;GACD,CAAC;AAEF,gBAAc,gBAAgB;GAC5B,GAAG,cAAc;GACjB;GACA,qBAAqB;GAErB,GAAI,OAAO,gBAAgB,WAAW,EAAE,aAAa,GAAG,EAAE;GAC1D,QAAQ;GACT;;AAGH,QAAO;;AAGT,SAAgB,gBACd,OAC+C;AAC/C,KAAI,CAAC,MAAM,QAAQ,MAAM,CACvB,QAAO;AAGT,KAAI,MAAM,WAAW,EACnB,QAAO;AAGT,KAAI,CAAC,MAAM,OAAO,MAAM,OAAO,MAAM,SAAS,CAC5C,QAAO;AAGT,QAAO"}
@@ -0,0 +1,44 @@
1
+ const require_subscribable = require('./subscribable.cjs');
2
+
3
+ //#region src/observable.ts
4
+ var MultiStepFormObserver = class extends require_subscribable.Subscribable {
5
+ schema;
6
+ unsubscribeFromSchema;
7
+ constructor(options) {
8
+ super();
9
+ this.schema = options.schema;
10
+ this.subscribeToSchema();
11
+ }
12
+ subscribeToSchema() {
13
+ this.unsubscribeFromSchema = this.schema.subscribe(() => {
14
+ this.notify();
15
+ });
16
+ }
17
+ getSnapshot() {
18
+ return this;
19
+ }
20
+ getResult() {
21
+ return this.schema;
22
+ }
23
+ setOptions(options) {
24
+ if (options.schema && options.schema !== this.schema) {
25
+ this.unsubscribeFromSchema?.();
26
+ this.schema = options.schema;
27
+ this.subscribeToSchema();
28
+ this.notify();
29
+ }
30
+ }
31
+ notify() {
32
+ for (const listener of this.listeners) listener(this.schema);
33
+ }
34
+ destroy() {
35
+ this.unsubscribeFromSchema?.();
36
+ this.listeners.clear();
37
+ }
38
+ onSubscribe() {}
39
+ onUnsubscribe() {}
40
+ };
41
+
42
+ //#endregion
43
+ exports.MultiStepFormObserver = MultiStepFormObserver;
44
+ //# sourceMappingURL=observable.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.cjs","names":["Subscribable"],"sources":["../src/observable.ts"],"sourcesContent":["import type { MultiStepFormSchema } from './schema';\nimport type {\n ResolvedStep,\n Step,\n StepNumbers\n} from '@/steps/types';\nimport { Subscribable } from './subscribable';\nimport type { CasingType } from '@/utils/casing';\n\nexport type ObserverListener<\n TStep extends Step<TCasing>,\n TResolvedStep extends ResolvedStep<TStep, TCasing>,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TCasing extends CasingType,\n TStorageKey extends string\n> = (\n schema: MultiStepFormSchema<\n TStep,\n TCasing,\n TResolvedStep,\n TStepNumbers,\n TStorageKey\n >\n) => void;\n\nexport type ObserverOptions<\n TStep extends Step<TCasing>,\n TResolvedStep extends ResolvedStep<TStep, TCasing>,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TCasing extends CasingType,\n TStorageKey extends string\n> = {\n schema: MultiStepFormSchema<\n TStep,\n TCasing,\n TResolvedStep,\n TStepNumbers,\n TStorageKey\n >;\n};\n\nexport class MultiStepFormObserver<\n step extends Step<casing>,\n resolvedStep extends ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep>,\n casing extends CasingType,\n storageKey extends string\n> extends Subscribable<\n ObserverListener<step, resolvedStep, stepNumbers, casing, storageKey>\n> {\n protected schema: MultiStepFormSchema<\n step,\n casing,\n resolvedStep,\n stepNumbers,\n storageKey\n >;\n private unsubscribeFromSchema?: () => void;\n\n constructor(\n options: ObserverOptions<\n step,\n resolvedStep,\n stepNumbers,\n casing,\n storageKey\n >\n ) {\n super();\n\n this.schema = options.schema;\n this.subscribeToSchema();\n }\n\n protected subscribeToSchema() {\n this.unsubscribeFromSchema = this.schema.subscribe(() => {\n this.notify();\n });\n }\n\n getSnapshot() {\n return this;\n }\n\n getResult() {\n return this.schema;\n }\n\n setOptions(\n options: Partial<\n ObserverOptions<step, resolvedStep, stepNumbers, casing, storageKey>\n >\n ) {\n if (options.schema && options.schema !== this.schema) {\n this.unsubscribeFromSchema?.();\n this.schema = options.schema;\n this.subscribeToSchema();\n this.notify();\n }\n }\n\n protected notify() {\n for (const listener of this.listeners) {\n listener(this.schema);\n }\n }\n\n destroy() {\n this.unsubscribeFromSchema?.();\n this.listeners.clear();\n }\n\n protected onSubscribe() {}\n\n protected onUnsubscribe() {}\n}\n"],"mappings":";;;AAyCA,IAAa,wBAAb,cAMUA,kCAER;CACA,AAAU;CAOV,AAAQ;CAER,YACE,SAOA;AACA,SAAO;AAEP,OAAK,SAAS,QAAQ;AACtB,OAAK,mBAAmB;;CAG1B,AAAU,oBAAoB;AAC5B,OAAK,wBAAwB,KAAK,OAAO,gBAAgB;AACvD,QAAK,QAAQ;IACb;;CAGJ,cAAc;AACZ,SAAO;;CAGT,YAAY;AACV,SAAO,KAAK;;CAGd,WACE,SAGA;AACA,MAAI,QAAQ,UAAU,QAAQ,WAAW,KAAK,QAAQ;AACpD,QAAK,yBAAyB;AAC9B,QAAK,SAAS,QAAQ;AACtB,QAAK,mBAAmB;AACxB,QAAK,QAAQ;;;CAIjB,AAAU,SAAS;AACjB,OAAK,MAAM,YAAY,KAAK,UAC1B,UAAS,KAAK,OAAO;;CAIzB,UAAU;AACR,OAAK,yBAAyB;AAC9B,OAAK,UAAU,OAAO;;CAGxB,AAAU,cAAc;CAExB,AAAU,gBAAgB"}
@@ -0,0 +1,26 @@
1
+ import { CasingType } from "./utils/casing.cjs";
2
+ import { ResolvedStep, Step, StepNumbers } from "./steps/types.cjs";
3
+ import { Subscribable } from "./subscribable.cjs";
4
+ import { MultiStepFormSchema } from "./schema.cjs";
5
+
6
+ //#region src/observable.d.ts
7
+ type ObserverListener<TStep extends Step<TCasing>, TResolvedStep extends ResolvedStep<TStep, TCasing>, TStepNumbers extends StepNumbers<TResolvedStep>, TCasing extends CasingType, TStorageKey extends string> = (schema: MultiStepFormSchema<TStep, TCasing, TResolvedStep, TStepNumbers, TStorageKey>) => void;
8
+ type ObserverOptions<TStep extends Step<TCasing>, TResolvedStep extends ResolvedStep<TStep, TCasing>, TStepNumbers extends StepNumbers<TResolvedStep>, TCasing extends CasingType, TStorageKey extends string> = {
9
+ schema: MultiStepFormSchema<TStep, TCasing, TResolvedStep, TStepNumbers, TStorageKey>;
10
+ };
11
+ declare class MultiStepFormObserver<step extends Step<casing>, resolvedStep extends ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep>, casing extends CasingType, storageKey extends string> extends Subscribable<ObserverListener<step, resolvedStep, stepNumbers, casing, storageKey>> {
12
+ protected schema: MultiStepFormSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
13
+ private unsubscribeFromSchema?;
14
+ constructor(options: ObserverOptions<step, resolvedStep, stepNumbers, casing, storageKey>);
15
+ protected subscribeToSchema(): void;
16
+ getSnapshot(): this;
17
+ getResult(): MultiStepFormSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
18
+ setOptions(options: Partial<ObserverOptions<step, resolvedStep, stepNumbers, casing, storageKey>>): void;
19
+ protected notify(): void;
20
+ destroy(): void;
21
+ protected onSubscribe(): void;
22
+ protected onUnsubscribe(): void;
23
+ }
24
+ //#endregion
25
+ export { MultiStepFormObserver, ObserverListener, ObserverOptions };
26
+ //# sourceMappingURL=observable.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.d.cts","names":[],"sources":["../src/observable.ts"],"sourcesContent":[],"mappings":";;;;;;KASY,+BACI,KAAK,gCACG,aAAa,OAAO,+BACrB,YAAY,gCACjB,mDAGR,oBACN,OACA,SACA,eACA,cACA;KAIQ,8BACI,KAAK,gCACG,aAAa,OAAO,+BACrB,YAAY,gCACjB;EApBN,MAAA,EAuBF,mBAvBkB,CAwBxB,KAxBwB,EAyBxB,OAzBwB,EA0BxB,aA1BwB,EA2BxB,YA3BwB,EA4BxB,WA5BwB,CAAA;CACP;AAAL,cA+BH,qBA/BG,CAAA,aAgCD,IAhCC,CAgCI,MAhCJ,CAAA,EAAA,qBAiCO,YAjCP,CAiCoB,IAjCpB,EAiC0B,MAjC1B,CAAA,EAAA,oBAkCM,WAlCN,CAkCkB,YAlClB,CAAA,EAAA,eAmCC,UAnCD,EAAA,mBAAA,MAAA,CAAA,SAqCN,YArCM,CAsCd,gBAtCc,CAsCG,IAtCH,EAsCS,YAtCT,EAsCuB,WAtCvB,EAsCoC,MAtCpC,EAsC4C,UAtC5C,CAAA,CAAA,CAAA;EACqB,UAAA,MAAA,EAuCjB,mBAvCiB,CAwCjC,IAxCiC,EAyCjC,MAzCiC,EA0CjC,YA1CiC,EA2CjC,WA3CiC,EA4CjC,UA5CiC,CAAA;EAAO,QAAA,qBAAA;EAApB,WAAA,CAAA,OAAA,EAiDX,eAjDW,CAkDlB,IAlDkB,EAmDlB,YAnDkB,EAoDlB,WApDkB,EAqDlB,MArDkB,EAsDlB,UAtDkB,CAAA;EACW,UAAA,iBAAA,CAAA,CAAA,EAAA,IAAA;EAAZ,WAAA,CAAA,CAAA,EAAA,IAAA;EACL,SAAA,CAAA,CAAA,EAuEP,mBAvEO,CAuEP,IAvEO,EAuEP,MAvEO,EAuEP,YAvEO,EAuEP,WAvEO,EAuEP,UAvEO,CAAA;EAId,UAAA,CAAA,OAAA,EAwES,OAxET,CAyEE,eAzEF,CAyEkB,IAzElB,EAyEwB,YAzExB,EAyEsC,WAzEtC,EAyEmD,MAzEnD,EAyE2D,UAzE3D,CAAA,CAAA,CAAA,EAAA,IAAA;EACA,UAAA,MAAA,CAAA,CAAA,EAAA,IAAA;EACA,OAAA,CAAA,CAAA,EAAA,IAAA;EACA,UAAA,WAAA,CAAA,CAAA,EAAA,IAAA;EACA,UAAA,aAAA,CAAA,CAAA,EAAA,IAAA"}
@@ -0,0 +1,26 @@
1
+ import { CasingType } from "./utils/casing.mjs";
2
+ import { ResolvedStep, Step, StepNumbers } from "./steps/types.mjs";
3
+ import { Subscribable } from "./subscribable.mjs";
4
+ import { MultiStepFormSchema } from "./schema.mjs";
5
+
6
+ //#region src/observable.d.ts
7
+ type ObserverListener<TStep extends Step<TCasing>, TResolvedStep extends ResolvedStep<TStep, TCasing>, TStepNumbers extends StepNumbers<TResolvedStep>, TCasing extends CasingType, TStorageKey extends string> = (schema: MultiStepFormSchema<TStep, TCasing, TResolvedStep, TStepNumbers, TStorageKey>) => void;
8
+ type ObserverOptions<TStep extends Step<TCasing>, TResolvedStep extends ResolvedStep<TStep, TCasing>, TStepNumbers extends StepNumbers<TResolvedStep>, TCasing extends CasingType, TStorageKey extends string> = {
9
+ schema: MultiStepFormSchema<TStep, TCasing, TResolvedStep, TStepNumbers, TStorageKey>;
10
+ };
11
+ declare class MultiStepFormObserver<step extends Step<casing>, resolvedStep extends ResolvedStep<step, casing>, stepNumbers extends StepNumbers<resolvedStep>, casing extends CasingType, storageKey extends string> extends Subscribable<ObserverListener<step, resolvedStep, stepNumbers, casing, storageKey>> {
12
+ protected schema: MultiStepFormSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
13
+ private unsubscribeFromSchema?;
14
+ constructor(options: ObserverOptions<step, resolvedStep, stepNumbers, casing, storageKey>);
15
+ protected subscribeToSchema(): void;
16
+ getSnapshot(): this;
17
+ getResult(): MultiStepFormSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
18
+ setOptions(options: Partial<ObserverOptions<step, resolvedStep, stepNumbers, casing, storageKey>>): void;
19
+ protected notify(): void;
20
+ destroy(): void;
21
+ protected onSubscribe(): void;
22
+ protected onUnsubscribe(): void;
23
+ }
24
+ //#endregion
25
+ export { MultiStepFormObserver, ObserverListener, ObserverOptions };
26
+ //# sourceMappingURL=observable.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.d.mts","names":[],"sources":["../src/observable.ts"],"sourcesContent":[],"mappings":";;;;;;KASY,+BACI,KAAK,gCACG,aAAa,OAAO,+BACrB,YAAY,gCACjB,mDAGR,oBACN,OACA,SACA,eACA,cACA;KAIQ,8BACI,KAAK,gCACG,aAAa,OAAO,+BACrB,YAAY,gCACjB;EApBN,MAAA,EAuBF,mBAvBkB,CAwBxB,KAxBwB,EAyBxB,OAzBwB,EA0BxB,aA1BwB,EA2BxB,YA3BwB,EA4BxB,WA5BwB,CAAA;CACP;AAAL,cA+BH,qBA/BG,CAAA,aAgCD,IAhCC,CAgCI,MAhCJ,CAAA,EAAA,qBAiCO,YAjCP,CAiCoB,IAjCpB,EAiC0B,MAjC1B,CAAA,EAAA,oBAkCM,WAlCN,CAkCkB,YAlClB,CAAA,EAAA,eAmCC,UAnCD,EAAA,mBAAA,MAAA,CAAA,SAqCN,YArCM,CAsCd,gBAtCc,CAsCG,IAtCH,EAsCS,YAtCT,EAsCuB,WAtCvB,EAsCoC,MAtCpC,EAsC4C,UAtC5C,CAAA,CAAA,CAAA;EACqB,UAAA,MAAA,EAuCjB,mBAvCiB,CAwCjC,IAxCiC,EAyCjC,MAzCiC,EA0CjC,YA1CiC,EA2CjC,WA3CiC,EA4CjC,UA5CiC,CAAA;EAAO,QAAA,qBAAA;EAApB,WAAA,CAAA,OAAA,EAiDX,eAjDW,CAkDlB,IAlDkB,EAmDlB,YAnDkB,EAoDlB,WApDkB,EAqDlB,MArDkB,EAsDlB,UAtDkB,CAAA;EACW,UAAA,iBAAA,CAAA,CAAA,EAAA,IAAA;EAAZ,WAAA,CAAA,CAAA,EAAA,IAAA;EACL,SAAA,CAAA,CAAA,EAuEP,mBAvEO,CAuEP,IAvEO,EAuEP,MAvEO,EAuEP,YAvEO,EAuEP,WAvEO,EAuEP,UAvEO,CAAA;EAId,UAAA,CAAA,OAAA,EAwES,OAxET,CAyEE,eAzEF,CAyEkB,IAzElB,EAyEwB,YAzExB,EAyEsC,WAzEtC,EAyEmD,MAzEnD,EAyE2D,UAzE3D,CAAA,CAAA,CAAA,EAAA,IAAA;EACA,UAAA,MAAA,CAAA,CAAA,EAAA,IAAA;EACA,OAAA,CAAA,CAAA,EAAA,IAAA;EACA,UAAA,WAAA,CAAA,CAAA,EAAA,IAAA;EACA,UAAA,aAAA,CAAA,CAAA,EAAA,IAAA"}
@@ -0,0 +1,44 @@
1
+ import { Subscribable } from "./subscribable.mjs";
2
+
3
+ //#region src/observable.ts
4
+ var MultiStepFormObserver = class extends Subscribable {
5
+ schema;
6
+ unsubscribeFromSchema;
7
+ constructor(options) {
8
+ super();
9
+ this.schema = options.schema;
10
+ this.subscribeToSchema();
11
+ }
12
+ subscribeToSchema() {
13
+ this.unsubscribeFromSchema = this.schema.subscribe(() => {
14
+ this.notify();
15
+ });
16
+ }
17
+ getSnapshot() {
18
+ return this;
19
+ }
20
+ getResult() {
21
+ return this.schema;
22
+ }
23
+ setOptions(options) {
24
+ if (options.schema && options.schema !== this.schema) {
25
+ this.unsubscribeFromSchema?.();
26
+ this.schema = options.schema;
27
+ this.subscribeToSchema();
28
+ this.notify();
29
+ }
30
+ }
31
+ notify() {
32
+ for (const listener of this.listeners) listener(this.schema);
33
+ }
34
+ destroy() {
35
+ this.unsubscribeFromSchema?.();
36
+ this.listeners.clear();
37
+ }
38
+ onSubscribe() {}
39
+ onUnsubscribe() {}
40
+ };
41
+
42
+ //#endregion
43
+ export { MultiStepFormObserver };
44
+ //# sourceMappingURL=observable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observable.mjs","names":[],"sources":["../src/observable.ts"],"sourcesContent":["import type { MultiStepFormSchema } from './schema';\nimport type {\n ResolvedStep,\n Step,\n StepNumbers\n} from '@/steps/types';\nimport { Subscribable } from './subscribable';\nimport type { CasingType } from '@/utils/casing';\n\nexport type ObserverListener<\n TStep extends Step<TCasing>,\n TResolvedStep extends ResolvedStep<TStep, TCasing>,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TCasing extends CasingType,\n TStorageKey extends string\n> = (\n schema: MultiStepFormSchema<\n TStep,\n TCasing,\n TResolvedStep,\n TStepNumbers,\n TStorageKey\n >\n) => void;\n\nexport type ObserverOptions<\n TStep extends Step<TCasing>,\n TResolvedStep extends ResolvedStep<TStep, TCasing>,\n TStepNumbers extends StepNumbers<TResolvedStep>,\n TCasing extends CasingType,\n TStorageKey extends string\n> = {\n schema: MultiStepFormSchema<\n TStep,\n TCasing,\n TResolvedStep,\n TStepNumbers,\n TStorageKey\n >;\n};\n\nexport class MultiStepFormObserver<\n step extends Step<casing>,\n resolvedStep extends ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep>,\n casing extends CasingType,\n storageKey extends string\n> extends Subscribable<\n ObserverListener<step, resolvedStep, stepNumbers, casing, storageKey>\n> {\n protected schema: MultiStepFormSchema<\n step,\n casing,\n resolvedStep,\n stepNumbers,\n storageKey\n >;\n private unsubscribeFromSchema?: () => void;\n\n constructor(\n options: ObserverOptions<\n step,\n resolvedStep,\n stepNumbers,\n casing,\n storageKey\n >\n ) {\n super();\n\n this.schema = options.schema;\n this.subscribeToSchema();\n }\n\n protected subscribeToSchema() {\n this.unsubscribeFromSchema = this.schema.subscribe(() => {\n this.notify();\n });\n }\n\n getSnapshot() {\n return this;\n }\n\n getResult() {\n return this.schema;\n }\n\n setOptions(\n options: Partial<\n ObserverOptions<step, resolvedStep, stepNumbers, casing, storageKey>\n >\n ) {\n if (options.schema && options.schema !== this.schema) {\n this.unsubscribeFromSchema?.();\n this.schema = options.schema;\n this.subscribeToSchema();\n this.notify();\n }\n }\n\n protected notify() {\n for (const listener of this.listeners) {\n listener(this.schema);\n }\n }\n\n destroy() {\n this.unsubscribeFromSchema?.();\n this.listeners.clear();\n }\n\n protected onSubscribe() {}\n\n protected onUnsubscribe() {}\n}\n"],"mappings":";;;AAyCA,IAAa,wBAAb,cAMU,aAER;CACA,AAAU;CAOV,AAAQ;CAER,YACE,SAOA;AACA,SAAO;AAEP,OAAK,SAAS,QAAQ;AACtB,OAAK,mBAAmB;;CAG1B,AAAU,oBAAoB;AAC5B,OAAK,wBAAwB,KAAK,OAAO,gBAAgB;AACvD,QAAK,QAAQ;IACb;;CAGJ,cAAc;AACZ,SAAO;;CAGT,YAAY;AACV,SAAO,KAAK;;CAGd,WACE,SAGA;AACA,MAAI,QAAQ,UAAU,QAAQ,WAAW,KAAK,QAAQ;AACpD,QAAK,yBAAyB;AAC9B,QAAK,SAAS,QAAQ;AACtB,QAAK,mBAAmB;AACxB,QAAK,QAAQ;;;CAIjB,AAAU,SAAS;AACjB,OAAK,MAAM,YAAY,KAAK,UAC1B,UAAS,KAAK,OAAO;;CAIzB,UAAU;AACR,OAAK,yBAAyB;AAC9B,OAAK,UAAU,OAAO;;CAGxB,AAAU,cAAc;CAExB,AAAU,gBAAgB"}
@@ -0,0 +1,68 @@
1
+ const require_casing = require('./utils/casing.cjs');
2
+ const require_storage = require('./storage.cjs');
3
+ const require_subscribable = require('./subscribable.cjs');
4
+ const require_schema = require('./steps/schema.cjs');
5
+ require('./steps/index.cjs');
6
+
7
+ //#region src/schema.ts
8
+ var MultiStepFormSchema = class extends require_subscribable.Subscribable {
9
+ defaultNameTransformationCasing;
10
+ stepSchema;
11
+ storage;
12
+ mountCount = 0;
13
+ constructor(options) {
14
+ super();
15
+ const { steps, nameTransformCasing, storage } = options;
16
+ this.defaultNameTransformationCasing = require_casing.setCasingType(nameTransformCasing);
17
+ this.stepSchema = new require_schema.MultiStepFormStepSchema({
18
+ steps,
19
+ nameTransformCasing: this.defaultNameTransformationCasing
20
+ });
21
+ this.storage = new require_storage.MultiStepFormStorage({
22
+ key: storage?.key ?? require_storage.DEFAULT_STORAGE_KEY,
23
+ data: this.stepSchema.value,
24
+ store: storage?.store,
25
+ throwWhenUndefined: storage?.throwWhenUndefined ?? false
26
+ });
27
+ this.stepSchema.subscribe(() => {
28
+ this.notify();
29
+ });
30
+ }
31
+ getSnapshot() {
32
+ return this;
33
+ }
34
+ mount() {
35
+ this.mountCount++;
36
+ if (this.mountCount === 1) this.onMount();
37
+ return () => {
38
+ this.unmount();
39
+ };
40
+ }
41
+ unmount() {
42
+ this.mountCount = Math.max(0, this.mountCount - 1);
43
+ if (this.mountCount === 0) this.onUnmount();
44
+ }
45
+ isMounted() {
46
+ return this.mountCount > 0;
47
+ }
48
+ onMount() {}
49
+ onUnmount() {}
50
+ notify() {
51
+ for (const listener of this.listeners) listener({
52
+ nameTransformCasing: this.defaultNameTransformationCasing,
53
+ storage: {
54
+ key: this.storage.key,
55
+ store: this.storage.store
56
+ },
57
+ steps: this.stepSchema.original
58
+ });
59
+ }
60
+ };
61
+ function createMultiStepFormSchema(options) {
62
+ return new MultiStepFormSchema(options);
63
+ }
64
+
65
+ //#endregion
66
+ exports.MultiStepFormSchema = MultiStepFormSchema;
67
+ exports.createMultiStepFormSchema = createMultiStepFormSchema;
68
+ //# sourceMappingURL=schema.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.cjs","names":["Subscribable","setCasingType","MultiStepFormStepSchema","MultiStepFormStorage","DEFAULT_STORAGE_KEY"],"sources":["../src/schema.ts"],"sourcesContent":["import {\n MultiStepFormStepSchema,\n type MultiStepFormSchemaStepConfig,\n type ResolvedStep,\n type Step,\n type StepNumbers,\n} from '@/steps';\nimport {\n setCasingType,\n type CasingType,\n type Constrain,\n type DefaultCasing,\n} from '@/utils';\nimport {\n DEFAULT_STORAGE_KEY,\n MultiStepFormStorage,\n type DefaultStorageKey,\n} from './storage.js';\nimport { Subscribable } from './subscribable.js';\n\nexport interface MultiStepFormSchemaOptions<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string\n> extends MultiStepFormSchemaStepConfig<TStep, TCasing, TStorageKey> {}\nexport type MultiStepFormSchemaListener<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string\n> = (data: MultiStepFormSchemaOptions<TStep, TCasing, TStorageKey>) => void;\n\nexport class MultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n storageKey extends string = DefaultStorageKey\n> extends Subscribable<MultiStepFormSchemaListener<step, casing, storageKey>> {\n readonly defaultNameTransformationCasing: casing;\n readonly stepSchema: MultiStepFormStepSchema<\n step,\n casing,\n resolvedStep,\n stepNumbers,\n storageKey\n >;\n storage: MultiStepFormStorage<resolvedStep, storageKey>;\n private mountCount = 0;\n\n constructor(\n options: MultiStepFormSchemaOptions<\n step,\n // Allows full autocomplete\n Constrain<casing, CasingType>,\n storageKey\n >\n ) {\n super();\n\n const { steps, nameTransformCasing, storage } = options;\n\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n ) as casing;\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\n this.stepSchema = new MultiStepFormStepSchema({\n steps,\n nameTransformCasing: this.defaultNameTransformationCasing,\n });\n this.storage = new MultiStepFormStorage<resolvedStep, storageKey>({\n key: (storage?.key ?? DEFAULT_STORAGE_KEY) as storageKey,\n data: this.stepSchema.value as never,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined ?? false,\n });\n\n this.stepSchema.subscribe(() => {\n this.notify();\n });\n }\n\n getSnapshot() {\n return this;\n }\n\n mount() {\n this.mountCount++;\n\n if (this.mountCount === 1) {\n this.onMount();\n }\n\n return () => {\n this.unmount();\n };\n }\n\n unmount() {\n this.mountCount = Math.max(0, this.mountCount - 1);\n\n if (this.mountCount === 0) {\n this.onUnmount();\n }\n }\n\n isMounted() {\n return this.mountCount > 0;\n }\n\n protected onMount() {}\n protected onUnmount() {}\n\n protected notify() {\n for (const listener of this.listeners) {\n listener({\n nameTransformCasing: this.defaultNameTransformationCasing,\n storage: {\n key: this.storage.key,\n store: this.storage.store,\n },\n steps: this.stepSchema.original,\n });\n }\n }\n}\n\nexport function createMultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n storageKey extends string = DefaultStorageKey\n>(\n options: MultiStepFormSchemaOptions<\n step,\n // Allows full autocomplete\n Constrain<casing, CasingType>,\n storageKey\n >\n) {\n return new MultiStepFormSchema<\n step,\n casing,\n resolvedStep,\n stepNumbers,\n storageKey\n >(options);\n}\n"],"mappings":";;;;;;;AA+BA,IAAa,sBAAb,cAMUA,kCAAoE;CAC5E,AAAS;CACT,AAAS;CAOT;CACA,AAAQ,aAAa;CAErB,YACE,SAMA;AACA,SAAO;EAEP,MAAM,EAAE,OAAO,qBAAqB,YAAY;AAEhD,OAAK,kCAAkCC,6BACrC,oBACD;AAED,OAAK,aAAa,IAAIC,uCAAwB;GAC5C;GACA,qBAAqB,KAAK;GAC3B,CAAC;AACF,OAAK,UAAU,IAAIC,qCAA+C;GAChE,KAAM,SAAS,OAAOC;GACtB,MAAM,KAAK,WAAW;GACtB,OAAO,SAAS;GAChB,oBAAoB,SAAS,sBAAsB;GACpD,CAAC;AAEF,OAAK,WAAW,gBAAgB;AAC9B,QAAK,QAAQ;IACb;;CAGJ,cAAc;AACZ,SAAO;;CAGT,QAAQ;AACN,OAAK;AAEL,MAAI,KAAK,eAAe,EACtB,MAAK,SAAS;AAGhB,eAAa;AACX,QAAK,SAAS;;;CAIlB,UAAU;AACR,OAAK,aAAa,KAAK,IAAI,GAAG,KAAK,aAAa,EAAE;AAElD,MAAI,KAAK,eAAe,EACtB,MAAK,WAAW;;CAIpB,YAAY;AACV,SAAO,KAAK,aAAa;;CAG3B,AAAU,UAAU;CACpB,AAAU,YAAY;CAEtB,AAAU,SAAS;AACjB,OAAK,MAAM,YAAY,KAAK,UAC1B,UAAS;GACP,qBAAqB,KAAK;GAC1B,SAAS;IACP,KAAK,KAAK,QAAQ;IAClB,OAAO,KAAK,QAAQ;IACrB;GACD,OAAO,KAAK,WAAW;GACxB,CAAC;;;AAKR,SAAgB,0BAOd,SAMA;AACA,QAAO,IAAI,oBAMT,QAAQ"}
@@ -0,0 +1,28 @@
1
+ import { DefaultStorageKey, MultiStepFormStorage } from "./storage.cjs";
2
+ import { Constrain } from "./utils/types.cjs";
3
+ import { CasingType, DefaultCasing } from "./utils/casing.cjs";
4
+ import { MultiStepFormSchemaStepConfig, ResolvedStep, Step, StepNumbers } from "./steps/types.cjs";
5
+ import { Subscribable } from "./subscribable.cjs";
6
+ import { MultiStepFormStepSchema } from "./steps/schema.cjs";
7
+
8
+ //#region src/schema.d.ts
9
+ interface MultiStepFormSchemaOptions<TStep extends Step<TCasing>, TCasing extends CasingType, TStorageKey extends string> extends MultiStepFormSchemaStepConfig<TStep, TCasing, TStorageKey> {}
10
+ type MultiStepFormSchemaListener<TStep extends Step<TCasing>, TCasing extends CasingType, TStorageKey extends string> = (data: MultiStepFormSchemaOptions<TStep, TCasing, TStorageKey>) => void;
11
+ declare class MultiStepFormSchema<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<MultiStepFormSchemaListener<step, casing, storageKey>> {
12
+ readonly defaultNameTransformationCasing: casing;
13
+ readonly stepSchema: MultiStepFormStepSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
14
+ storage: MultiStepFormStorage<resolvedStep, storageKey>;
15
+ private mountCount;
16
+ constructor(options: MultiStepFormSchemaOptions<step, Constrain<casing, CasingType>, storageKey>);
17
+ getSnapshot(): this;
18
+ mount(): () => void;
19
+ unmount(): void;
20
+ isMounted(): boolean;
21
+ protected onMount(): void;
22
+ protected onUnmount(): void;
23
+ protected notify(): void;
24
+ }
25
+ declare function createMultiStepFormSchema<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>(options: MultiStepFormSchemaOptions<step, Constrain<casing, CasingType>, storageKey>): MultiStepFormSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
26
+ //#endregion
27
+ export { MultiStepFormSchema, MultiStepFormSchemaListener, MultiStepFormSchemaOptions, createMultiStepFormSchema };
28
+ //# sourceMappingURL=schema.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.cts","names":[],"sources":["../src/schema.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAoBiB,yCACD,KAAK,0BACH,gDAER,8BAA8B,OAAO,SAAS;KAC5C,0CACI,KAAK,0BACH,iDAEP,2BAA2B,OAAO,SAAS;cAEzC,iCACE,KAAK,wBACH,aAAa,oCACP,aAAa,MAAM,UAAU,aAAa,MAAM,6BACjD,YAAY,gBAAgB,YAAY,2CAChC,2BACpB,aAAa,4BAA4B,MAAM,QAAQ;EAjBhD,SAAA,+BAA0B,EAkBC,MAlBD;EACtB,SAAA,UAAA,EAkBE,uBAlBF,CAmBjB,IAnBiB,EAoBjB,MApBiB,EAqBjB,YArBiB,EAsBjB,WAtBiB,EAuBjB,UAvBiB,CAAA;EAAL,OAAA,EAyBL,oBAzBK,CAyBgB,YAzBhB,EAyB8B,UAzB9B,CAAA;EACE,QAAA,UAAA;EAEsB,WAAA,CAAA,OAAA,EA0B3B,0BA1B2B,CA2BlC,IA3BkC,EA6BlC,SA7BkC,CA6BxB,MA7BwB,EA6BhB,UA7BgB,CAAA,EA8BlC,UA9BkC,CAAA;EAAO,WAAA,CAAA,CAAA,EAAA,IAAA;EAAS,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAA9C,OAAA,CAAA,CAAA,EAAA,IAAA;EAA6B,SAAA,CAAA,CAAA,EAAA,OAAA;EAC3B,UAAA,OAAA,CAAA,CAAA,EAAA,IAAA;EACS,UAAA,SAAA,CAAA,CAAA,EAAA,IAAA;EAAL,UAAA,MAAA,CAAA,CAAA,EAAA,IAAA;;AAGsB,iBAiGtB,yBAjGsB,CAAA,aAkGvB,IAlGuB,CAkGlB,MAlGkB,CAAA,EAAA,eAmGrB,UAnGqB,GAmGR,aAnGQ,EAAA,qBAoGf,YApGe,CAoGF,IApGE,EAoGI,MApGJ,CAAA,GAoGc,YApGd,CAoG2B,IApG3B,EAoGiC,MApGjC,CAAA,EAAA,oBAqGhB,WArGgB,CAqGJ,YArGI,CAAA,GAqGY,WArGZ,CAqGwB,YArGxB,CAAA,EAAA,mBAAA,MAAA,GAsGR,iBAtGQ,CAAA,CAAA,OAAA,EAwG3B,0BAxG2B,CAyGlC,IAzGkC,EA2GlC,SA3GkC,CA2GxB,MA3GwB,EA2GhB,UA3GgB,CAAA,EA4GlC,UA5GkC,CAAA,CAAA,EA6GnC,mBA7GmC,CA6GnC,IA7GmC,EA6GnC,MA7GmC,EA6GnC,YA7GmC,EA6GnC,WA7GmC,EA6GnC,UA7GmC,CAAA"}
@@ -0,0 +1,28 @@
1
+ import { DefaultStorageKey, MultiStepFormStorage } from "./storage.mjs";
2
+ import { Constrain } from "./utils/types.mjs";
3
+ import { CasingType, DefaultCasing } from "./utils/casing.mjs";
4
+ import { MultiStepFormSchemaStepConfig, ResolvedStep, Step, StepNumbers } from "./steps/types.mjs";
5
+ import { Subscribable } from "./subscribable.mjs";
6
+ import { MultiStepFormStepSchema } from "./steps/schema.mjs";
7
+
8
+ //#region src/schema.d.ts
9
+ interface MultiStepFormSchemaOptions<TStep extends Step<TCasing>, TCasing extends CasingType, TStorageKey extends string> extends MultiStepFormSchemaStepConfig<TStep, TCasing, TStorageKey> {}
10
+ type MultiStepFormSchemaListener<TStep extends Step<TCasing>, TCasing extends CasingType, TStorageKey extends string> = (data: MultiStepFormSchemaOptions<TStep, TCasing, TStorageKey>) => void;
11
+ declare class MultiStepFormSchema<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<MultiStepFormSchemaListener<step, casing, storageKey>> {
12
+ readonly defaultNameTransformationCasing: casing;
13
+ readonly stepSchema: MultiStepFormStepSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
14
+ storage: MultiStepFormStorage<resolvedStep, storageKey>;
15
+ private mountCount;
16
+ constructor(options: MultiStepFormSchemaOptions<step, Constrain<casing, CasingType>, storageKey>);
17
+ getSnapshot(): this;
18
+ mount(): () => void;
19
+ unmount(): void;
20
+ isMounted(): boolean;
21
+ protected onMount(): void;
22
+ protected onUnmount(): void;
23
+ protected notify(): void;
24
+ }
25
+ declare function createMultiStepFormSchema<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>(options: MultiStepFormSchemaOptions<step, Constrain<casing, CasingType>, storageKey>): MultiStepFormSchema<step, casing, resolvedStep, stepNumbers, storageKey>;
26
+ //#endregion
27
+ export { MultiStepFormSchema, MultiStepFormSchemaListener, MultiStepFormSchemaOptions, createMultiStepFormSchema };
28
+ //# sourceMappingURL=schema.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.mts","names":[],"sources":["../src/schema.ts"],"sourcesContent":[],"mappings":";;;;;;;;UAoBiB,yCACD,KAAK,0BACH,gDAER,8BAA8B,OAAO,SAAS;KAC5C,0CACI,KAAK,0BACH,iDAEP,2BAA2B,OAAO,SAAS;cAEzC,iCACE,KAAK,wBACH,aAAa,oCACP,aAAa,MAAM,UAAU,aAAa,MAAM,6BACjD,YAAY,gBAAgB,YAAY,2CAChC,2BACpB,aAAa,4BAA4B,MAAM,QAAQ;EAjBhD,SAAA,+BAA0B,EAkBC,MAlBD;EACtB,SAAA,UAAA,EAkBE,uBAlBF,CAmBjB,IAnBiB,EAoBjB,MApBiB,EAqBjB,YArBiB,EAsBjB,WAtBiB,EAuBjB,UAvBiB,CAAA;EAAL,OAAA,EAyBL,oBAzBK,CAyBgB,YAzBhB,EAyB8B,UAzB9B,CAAA;EACE,QAAA,UAAA;EAEsB,WAAA,CAAA,OAAA,EA0B3B,0BA1B2B,CA2BlC,IA3BkC,EA6BlC,SA7BkC,CA6BxB,MA7BwB,EA6BhB,UA7BgB,CAAA,EA8BlC,UA9BkC,CAAA;EAAO,WAAA,CAAA,CAAA,EAAA,IAAA;EAAS,KAAA,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EAA9C,OAAA,CAAA,CAAA,EAAA,IAAA;EAA6B,SAAA,CAAA,CAAA,EAAA,OAAA;EAC3B,UAAA,OAAA,CAAA,CAAA,EAAA,IAAA;EACS,UAAA,SAAA,CAAA,CAAA,EAAA,IAAA;EAAL,UAAA,MAAA,CAAA,CAAA,EAAA,IAAA;;AAGsB,iBAiGtB,yBAjGsB,CAAA,aAkGvB,IAlGuB,CAkGlB,MAlGkB,CAAA,EAAA,eAmGrB,UAnGqB,GAmGR,aAnGQ,EAAA,qBAoGf,YApGe,CAoGF,IApGE,EAoGI,MApGJ,CAAA,GAoGc,YApGd,CAoG2B,IApG3B,EAoGiC,MApGjC,CAAA,EAAA,oBAqGhB,WArGgB,CAqGJ,YArGI,CAAA,GAqGY,WArGZ,CAqGwB,YArGxB,CAAA,EAAA,mBAAA,MAAA,GAsGR,iBAtGQ,CAAA,CAAA,OAAA,EAwG3B,0BAxG2B,CAyGlC,IAzGkC,EA2GlC,SA3GkC,CA2GxB,MA3GwB,EA2GhB,UA3GgB,CAAA,EA4GlC,UA5GkC,CAAA,CAAA,EA6GnC,mBA7GmC,CA6GnC,IA7GmC,EA6GnC,MA7GmC,EA6GnC,YA7GmC,EA6GnC,WA7GmC,EA6GnC,UA7GmC,CAAA"}
@@ -0,0 +1,67 @@
1
+ import { setCasingType } from "./utils/casing.mjs";
2
+ import { DEFAULT_STORAGE_KEY, MultiStepFormStorage } from "./storage.mjs";
3
+ import { Subscribable } from "./subscribable.mjs";
4
+ import { MultiStepFormStepSchema } from "./steps/schema.mjs";
5
+ import "./steps/index.mjs";
6
+
7
+ //#region src/schema.ts
8
+ var MultiStepFormSchema = class extends Subscribable {
9
+ defaultNameTransformationCasing;
10
+ stepSchema;
11
+ storage;
12
+ mountCount = 0;
13
+ constructor(options) {
14
+ super();
15
+ const { steps, nameTransformCasing, storage } = options;
16
+ this.defaultNameTransformationCasing = setCasingType(nameTransformCasing);
17
+ this.stepSchema = new MultiStepFormStepSchema({
18
+ steps,
19
+ nameTransformCasing: this.defaultNameTransformationCasing
20
+ });
21
+ this.storage = new MultiStepFormStorage({
22
+ key: storage?.key ?? DEFAULT_STORAGE_KEY,
23
+ data: this.stepSchema.value,
24
+ store: storage?.store,
25
+ throwWhenUndefined: storage?.throwWhenUndefined ?? false
26
+ });
27
+ this.stepSchema.subscribe(() => {
28
+ this.notify();
29
+ });
30
+ }
31
+ getSnapshot() {
32
+ return this;
33
+ }
34
+ mount() {
35
+ this.mountCount++;
36
+ if (this.mountCount === 1) this.onMount();
37
+ return () => {
38
+ this.unmount();
39
+ };
40
+ }
41
+ unmount() {
42
+ this.mountCount = Math.max(0, this.mountCount - 1);
43
+ if (this.mountCount === 0) this.onUnmount();
44
+ }
45
+ isMounted() {
46
+ return this.mountCount > 0;
47
+ }
48
+ onMount() {}
49
+ onUnmount() {}
50
+ notify() {
51
+ for (const listener of this.listeners) listener({
52
+ nameTransformCasing: this.defaultNameTransformationCasing,
53
+ storage: {
54
+ key: this.storage.key,
55
+ store: this.storage.store
56
+ },
57
+ steps: this.stepSchema.original
58
+ });
59
+ }
60
+ };
61
+ function createMultiStepFormSchema(options) {
62
+ return new MultiStepFormSchema(options);
63
+ }
64
+
65
+ //#endregion
66
+ export { MultiStepFormSchema, createMultiStepFormSchema };
67
+ //# sourceMappingURL=schema.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.mjs","names":[],"sources":["../src/schema.ts"],"sourcesContent":["import {\n MultiStepFormStepSchema,\n type MultiStepFormSchemaStepConfig,\n type ResolvedStep,\n type Step,\n type StepNumbers,\n} from '@/steps';\nimport {\n setCasingType,\n type CasingType,\n type Constrain,\n type DefaultCasing,\n} from '@/utils';\nimport {\n DEFAULT_STORAGE_KEY,\n MultiStepFormStorage,\n type DefaultStorageKey,\n} from './storage.js';\nimport { Subscribable } from './subscribable.js';\n\nexport interface MultiStepFormSchemaOptions<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string\n> extends MultiStepFormSchemaStepConfig<TStep, TCasing, TStorageKey> {}\nexport type MultiStepFormSchemaListener<\n TStep extends Step<TCasing>,\n TCasing extends CasingType,\n TStorageKey extends string\n> = (data: MultiStepFormSchemaOptions<TStep, TCasing, TStorageKey>) => void;\n\nexport class MultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n storageKey extends string = DefaultStorageKey\n> extends Subscribable<MultiStepFormSchemaListener<step, casing, storageKey>> {\n readonly defaultNameTransformationCasing: casing;\n readonly stepSchema: MultiStepFormStepSchema<\n step,\n casing,\n resolvedStep,\n stepNumbers,\n storageKey\n >;\n storage: MultiStepFormStorage<resolvedStep, storageKey>;\n private mountCount = 0;\n\n constructor(\n options: MultiStepFormSchemaOptions<\n step,\n // Allows full autocomplete\n Constrain<casing, CasingType>,\n storageKey\n >\n ) {\n super();\n\n const { steps, nameTransformCasing, storage } = options;\n\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n ) as casing;\n // @ts-ignore Type instantiation is excessively deep and possibly infinite\n this.stepSchema = new MultiStepFormStepSchema({\n steps,\n nameTransformCasing: this.defaultNameTransformationCasing,\n });\n this.storage = new MultiStepFormStorage<resolvedStep, storageKey>({\n key: (storage?.key ?? DEFAULT_STORAGE_KEY) as storageKey,\n data: this.stepSchema.value as never,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined ?? false,\n });\n\n this.stepSchema.subscribe(() => {\n this.notify();\n });\n }\n\n getSnapshot() {\n return this;\n }\n\n mount() {\n this.mountCount++;\n\n if (this.mountCount === 1) {\n this.onMount();\n }\n\n return () => {\n this.unmount();\n };\n }\n\n unmount() {\n this.mountCount = Math.max(0, this.mountCount - 1);\n\n if (this.mountCount === 0) {\n this.onUnmount();\n }\n }\n\n isMounted() {\n return this.mountCount > 0;\n }\n\n protected onMount() {}\n protected onUnmount() {}\n\n protected notify() {\n for (const listener of this.listeners) {\n listener({\n nameTransformCasing: this.defaultNameTransformationCasing,\n storage: {\n key: this.storage.key,\n store: this.storage.store,\n },\n steps: this.stepSchema.original,\n });\n }\n }\n}\n\nexport function createMultiStepFormSchema<\n step extends Step<casing>,\n casing extends CasingType = DefaultCasing,\n resolvedStep extends ResolvedStep<step, casing> = ResolvedStep<step, casing>,\n stepNumbers extends StepNumbers<resolvedStep> = StepNumbers<resolvedStep>,\n storageKey extends string = DefaultStorageKey\n>(\n options: MultiStepFormSchemaOptions<\n step,\n // Allows full autocomplete\n Constrain<casing, CasingType>,\n storageKey\n >\n) {\n return new MultiStepFormSchema<\n step,\n casing,\n resolvedStep,\n stepNumbers,\n storageKey\n >(options);\n}\n"],"mappings":";;;;;;;AA+BA,IAAa,sBAAb,cAMU,aAAoE;CAC5E,AAAS;CACT,AAAS;CAOT;CACA,AAAQ,aAAa;CAErB,YACE,SAMA;AACA,SAAO;EAEP,MAAM,EAAE,OAAO,qBAAqB,YAAY;AAEhD,OAAK,kCAAkC,cACrC,oBACD;AAED,OAAK,aAAa,IAAI,wBAAwB;GAC5C;GACA,qBAAqB,KAAK;GAC3B,CAAC;AACF,OAAK,UAAU,IAAI,qBAA+C;GAChE,KAAM,SAAS,OAAO;GACtB,MAAM,KAAK,WAAW;GACtB,OAAO,SAAS;GAChB,oBAAoB,SAAS,sBAAsB;GACpD,CAAC;AAEF,OAAK,WAAW,gBAAgB;AAC9B,QAAK,QAAQ;IACb;;CAGJ,cAAc;AACZ,SAAO;;CAGT,QAAQ;AACN,OAAK;AAEL,MAAI,KAAK,eAAe,EACtB,MAAK,SAAS;AAGhB,eAAa;AACX,QAAK,SAAS;;;CAIlB,UAAU;AACR,OAAK,aAAa,KAAK,IAAI,GAAG,KAAK,aAAa,EAAE;AAElD,MAAI,KAAK,eAAe,EACtB,MAAK,WAAW;;CAIpB,YAAY;AACV,SAAO,KAAK,aAAa;;CAG3B,AAAU,UAAU;CACpB,AAAU,YAAY;CAEtB,AAAU,SAAS;AACjB,OAAK,MAAM,YAAY,KAAK,UAC1B,UAAS;GACP,qBAAqB,KAAK;GAC1B,SAAS;IACP,KAAK,KAAK,QAAQ;IAClB,OAAO,KAAK,QAAQ;IACrB;GACD,OAAO,KAAK,WAAW;GACxB,CAAC;;;AAKR,SAAgB,0BAOd,SAMA;AACA,QAAO,IAAI,oBAMT,QAAQ"}
@@ -0,0 +1,23 @@
1
+ const require_path = require('../utils/path.cjs');
2
+ require('../_internals.cjs');
3
+
4
+ //#region src/steps/fields.ts
5
+ let fields;
6
+ (function(_fields) {
7
+ function resolvedDeepPath(fieldPath, fields$1, filler = "defaultValue") {
8
+ const [parent, ...children] = fieldPath.split(".");
9
+ const shared = `${parent}.${filler}`;
10
+ const fullPath = children.length === 0 ? shared : `${shared}.${children.join(".")}`;
11
+ return require_path.path.pickBy(fields$1, fullPath);
12
+ }
13
+ _fields.resolvedDeepPath = resolvedDeepPath;
14
+ })(fields || (fields = {}));
15
+
16
+ //#endregion
17
+ Object.defineProperty(exports, 'fields', {
18
+ enumerable: true,
19
+ get: function () {
20
+ return fields;
21
+ }
22
+ });
23
+ //# sourceMappingURL=fields.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.cjs","names":["path","fields"],"sources":["../../src/steps/fields.ts"],"sourcesContent":["import { path } from '@/internals';\nimport type { DeepKeys, Join, Split } from '@/utils';\nimport type { AnyResolvedStep, GetFieldsForStep } from './types';\n\nexport namespace fields {\n type GetDeepFields<TFields> = [keyof TFields] extends [never]\n ? never\n : {\n [_ in keyof TFields]: TFields[_] extends Record<\n 'defaultValue',\n infer value\n >\n ? keyof value extends never\n ? TFields\n : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }>\n : never;\n }[keyof TFields];\n export type get<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TFields extends GetFieldsForStep<TResolvedStep, TStep> = GetFieldsForStep<\n TResolvedStep,\n TStep\n >\n > = TFields;\n export type removeParentPath<T extends string> = Split<T, '.'> extends [\n infer _,\n ...infer rest\n ]\n ? rest extends string[]\n ? Join<rest, '.'>\n : never\n : never;\n export type getDeep<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep\n > = GetDeepFields<\n get<TResolvedStep, TStep>\n > extends infer value extends string\n ? value\n : never;\n export type parentOf<T extends string> = Split<T, '.'>[0];\n export type resolveDeepPath<\n TResolvedStep extends AnyResolvedStep,\n TTargetStep extends keyof TResolvedStep,\n TField extends getDeep<TResolvedStep, TTargetStep>,\n TParent extends parentOf<TField> = parentOf<TField>,\n TDefaultValue = get<TResolvedStep, TTargetStep>[TParent]['defaultValue']\n > = removeParentPath<TField> extends never\n ? TDefaultValue\n : path.pickBy<TDefaultValue, removeParentPath<TField>>;\n\n // TODO add field validation\n export function resolvedDeepPath<\n resolvedStep extends AnyResolvedStep,\n targetStep extends keyof resolvedStep,\n fields extends get<resolvedStep, targetStep>,\n fieldPath extends getDeep<resolvedStep, targetStep>\n >(fieldPath: fieldPath, fields: fields, filler = 'defaultValue') {\n const [parent, ...children] = fieldPath.split('.');\n const shared = `${parent}.${filler}`;\n const fullPath = (\n children.length === 0 ? shared : `${shared}.${children.join('.')}`\n ) as DeepKeys<fields>;\n\n const resolvedValue = path.pickBy(fields, fullPath) as resolveDeepPath<\n resolvedStep,\n targetStep,\n fieldPath\n >;\n\n return resolvedValue;\n }\n}\n"],"mappings":";;;;;;CAqDS,SAAS,iBAKd,WAAsB,UAAgB,SAAS,gBAAgB;EAC/D,MAAM,CAAC,QAAQ,GAAG,YAAY,UAAU,MAAM,IAAI;EAClD,MAAM,SAAS,GAAG,OAAO,GAAG;EAC5B,MAAM,WACJ,SAAS,WAAW,IAAI,SAAS,GAAG,OAAO,GAAG,SAAS,KAAK,IAAI;AASlE,SANsBA,kBAAK,OAAOC,UAAQ,SAAS"}
@@ -0,0 +1,18 @@
1
+ import { DeepKeys, Join, Split } from "../utils/types.cjs";
2
+ import { path } from "../utils/path.cjs";
3
+ import { AnyResolvedStep, GetFieldsForStep } from "./types.cjs";
4
+
5
+ //#region src/steps/fields.d.ts
6
+ declare namespace fields {
7
+ type GetDeepFields<TFields> = [keyof TFields] extends [never] ? never : { [_ in keyof TFields]: TFields[_] extends Record<'defaultValue', infer value> ? keyof value extends never ? TFields : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }> : never }[keyof TFields];
8
+ export type get<TResolvedStep extends AnyResolvedStep, TStep extends keyof TResolvedStep, TFields extends GetFieldsForStep<TResolvedStep, TStep> = GetFieldsForStep<TResolvedStep, TStep>> = TFields;
9
+ export type removeParentPath<T extends string> = Split<T, '.'> extends [infer _, ...infer rest] ? rest extends string[] ? Join<rest, '.'> : never : never;
10
+ export type getDeep<TResolvedStep extends AnyResolvedStep, TStep extends keyof TResolvedStep> = GetDeepFields<get<TResolvedStep, TStep>> extends infer value extends string ? value : never;
11
+ export type parentOf<T extends string> = Split<T, '.'>[0];
12
+ export type resolveDeepPath<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep, TField extends getDeep<TResolvedStep, TTargetStep>, TParent extends parentOf<TField> = parentOf<TField>, TDefaultValue = get<TResolvedStep, TTargetStep>[TParent]['defaultValue']> = removeParentPath<TField> extends never ? TDefaultValue : path.pickBy<TDefaultValue, removeParentPath<TField>>;
13
+ export function resolvedDeepPath<resolvedStep extends AnyResolvedStep, targetStep extends keyof resolvedStep, fields$1 extends get<resolvedStep, targetStep>, fieldPath extends getDeep<resolvedStep, targetStep>>(fieldPath: fieldPath, fields: fields$1, filler?: string): resolveDeepPath<resolvedStep, targetStep, fieldPath, parentOf<fieldPath>, GetFieldsForStep<resolvedStep, targetStep>[parentOf<fieldPath>]["defaultValue"]>;
14
+ export {};
15
+ }
16
+ //#endregion
17
+ export { fields };
18
+ //# sourceMappingURL=fields.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.cts","names":[],"sources":["../../src/steps/fields.ts"],"sourcesContent":[],"mappings":";;;;;kBAIiB,MAAA;uCACsB,2CADhB,MAIH,OAJG,GAIO,OAJP,CAIe,CAJf,CAAA,SAI0B,MAJ1B,CAAA,cAAA,EAAA,KAAA,MAAA,CAAA,GAAA,MAQL,KARK,SAAA,KAAA,GAST,OATS,GAUT,QAVS,CAAA,YAUY,CATI,GASA,OATA,CASQ,CATR,CAAA,CAAA,cAAA,CAAA,EAGnB,CAAA,GAAA,KAAA,EAAU,CAAA,MAQhB,OARgB,CAAA;EAAQ,OAAA,KAAA,GAAA,CAAA,sBAUZ,eAVY,EAAA,cAAA,MAWd,aAXc,EAAA,gBAYlB,gBAZkB,CAYD,aAZC,EAYc,KAZd,CAAA,GAYuB,gBAZvB,CAahC,aAbgC,EAchC,KAdgC,CAAA,CAAA,GAgBhC,OAhBgC;EAAW,OAAA,KAAA,gBAAA,CAAA,UAAA,MAAA,CAAA,GAiBE,KAjBF,CAiBQ,CAjBR,EAAA,GAAA,CAAA,SAAA,CAI/B,KAAA,EAAA,EACJ,GAAA,KAAA,KAAA,CACqB,GAAA,IAAA,SAAA,MAAA,EAAA,GAgB3B,IAhB2B,CAgBtB,IAhBsB,EAAA,GAAA,CAAA,GAAA,KAAA,GAAA,KAAA;EAAI,OAAA,KAAA,OAAA,CAAA,sBAoBb,eApBa,EAAA,cAAA,MAqBf,aArBe,CAAA,GAsBjC,aAtBiC,CAuBnC,GAvBmC,CAuB/B,aAvB+B,EAuBhB,KAvBgB,CAAA,CAAA,SAAA,KAAA,eAAA,MAAA,GAAA,KAAA,GAAA,KAAA;EAAQ,OAAA,KAAA,QAAA,CAAA,UAAA,MAAA,CAAA,GA2BJ,KA3BI,CA2BE,CA3BF,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EAAjC,OAAA,KAAA,eAAA,CAAA,sBA6BY,eA7BZ,EAAA,oBAAA,MA8BgB,aA9BhB,EAAA,eA+BK,OA/BL,CA+Ba,aA/Bb,EA+B4B,WA/B5B,CAAA,EAAA,gBAgCM,QAhCN,CAgCe,MAhCf,CAAA,GAgCyB,QAhCzB,CAgCkC,MAhClC,CAAA,EAAA,gBAiCM,GAjCN,CAiCU,aAjCV,EAiCyB,WAjCzB,CAAA,CAiCsC,OAjCtC,CAAA,CAAA,cAAA,CAAA,CAAA,GAkCR,gBAlCQ,CAkCS,MAlCT,CAAA,SAAA,KAAA,GAmCR,aAnCQ,GAoCR,IAAA,CAAK,MApCG,CAoCI,aApCJ,EAoCmB,gBApCnB,CAoCoC,MApCpC,CAAA,CAAA;EAEA,OAAA,SAAA,gBAAA,CAAA,qBAsCW,eAtCX,EAAA,mBAAA,MAuCe,YAvCf,EAAA,iBAwCK,GAxCL,CAwCS,YAxCT,EAwCuB,UAxCvB,CAAA,EAAA,kBAyCQ,OAzCR,CAyCgB,YAzChB,EAyC8B,UAzC9B,CAAA,CAAA,CAAA,SAAA,EA0CC,SA1CD,EAAA,MAAA,EA0CoB,QA1CpB,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EA0CmD,eA1CnD,CA0CmD,YA1CnD,EA0CmD,UA1CnD,EA0CmD,SA1CnD,EA0CmD,QA1CnD,CA0CmD,SA1CnD,CAAA,EA0CmD,gBA1CnD,CA0CmD,YA1CnD,EA0CmD,UA1CnD,CAAA,CA0CmD,QA1CnD,CA0CmD,SA1CnD,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA;EAEY"}
@@ -0,0 +1,18 @@
1
+ import { DeepKeys, Join, Split } from "../utils/types.mjs";
2
+ import { path } from "../utils/path.mjs";
3
+ import { AnyResolvedStep, GetFieldsForStep } from "./types.mjs";
4
+
5
+ //#region src/steps/fields.d.ts
6
+ declare namespace fields {
7
+ type GetDeepFields<TFields> = [keyof TFields] extends [never] ? never : { [_ in keyof TFields]: TFields[_] extends Record<'defaultValue', infer value> ? keyof value extends never ? TFields : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }> : never }[keyof TFields];
8
+ export type get<TResolvedStep extends AnyResolvedStep, TStep extends keyof TResolvedStep, TFields extends GetFieldsForStep<TResolvedStep, TStep> = GetFieldsForStep<TResolvedStep, TStep>> = TFields;
9
+ export type removeParentPath<T extends string> = Split<T, '.'> extends [infer _, ...infer rest] ? rest extends string[] ? Join<rest, '.'> : never : never;
10
+ export type getDeep<TResolvedStep extends AnyResolvedStep, TStep extends keyof TResolvedStep> = GetDeepFields<get<TResolvedStep, TStep>> extends infer value extends string ? value : never;
11
+ export type parentOf<T extends string> = Split<T, '.'>[0];
12
+ export type resolveDeepPath<TResolvedStep extends AnyResolvedStep, TTargetStep extends keyof TResolvedStep, TField extends getDeep<TResolvedStep, TTargetStep>, TParent extends parentOf<TField> = parentOf<TField>, TDefaultValue = get<TResolvedStep, TTargetStep>[TParent]['defaultValue']> = removeParentPath<TField> extends never ? TDefaultValue : path.pickBy<TDefaultValue, removeParentPath<TField>>;
13
+ export function resolvedDeepPath<resolvedStep extends AnyResolvedStep, targetStep extends keyof resolvedStep, fields$1 extends get<resolvedStep, targetStep>, fieldPath extends getDeep<resolvedStep, targetStep>>(fieldPath: fieldPath, fields: fields$1, filler?: string): resolveDeepPath<resolvedStep, targetStep, fieldPath, parentOf<fieldPath>, GetFieldsForStep<resolvedStep, targetStep>[parentOf<fieldPath>]["defaultValue"]>;
14
+ export {};
15
+ }
16
+ //#endregion
17
+ export { fields };
18
+ //# sourceMappingURL=fields.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fields.d.mts","names":[],"sources":["../../src/steps/fields.ts"],"sourcesContent":[],"mappings":";;;;;kBAIiB,MAAA;uCACsB,2CADhB,MAIH,OAJG,GAIO,OAJP,CAIe,CAJf,CAAA,SAI0B,MAJ1B,CAAA,cAAA,EAAA,KAAA,MAAA,CAAA,GAAA,MAQL,KARK,SAAA,KAAA,GAST,OATS,GAUT,QAVS,CAAA,YAUY,CATI,GASA,OATA,CASQ,CATR,CAAA,CAAA,cAAA,CAAA,EAGnB,CAAA,GAAA,KAAA,EAAU,CAAA,MAQhB,OARgB,CAAA;EAAQ,OAAA,KAAA,GAAA,CAAA,sBAUZ,eAVY,EAAA,cAAA,MAWd,aAXc,EAAA,gBAYlB,gBAZkB,CAYD,aAZC,EAYc,KAZd,CAAA,GAYuB,gBAZvB,CAahC,aAbgC,EAchC,KAdgC,CAAA,CAAA,GAgBhC,OAhBgC;EAAW,OAAA,KAAA,gBAAA,CAAA,UAAA,MAAA,CAAA,GAiBE,KAjBF,CAiBQ,CAjBR,EAAA,GAAA,CAAA,SAAA,CAI/B,KAAA,EAAA,EACJ,GAAA,KAAA,KAAA,CACqB,GAAA,IAAA,SAAA,MAAA,EAAA,GAgB3B,IAhB2B,CAgBtB,IAhBsB,EAAA,GAAA,CAAA,GAAA,KAAA,GAAA,KAAA;EAAI,OAAA,KAAA,OAAA,CAAA,sBAoBb,eApBa,EAAA,cAAA,MAqBf,aArBe,CAAA,GAsBjC,aAtBiC,CAuBnC,GAvBmC,CAuB/B,aAvB+B,EAuBhB,KAvBgB,CAAA,CAAA,SAAA,KAAA,eAAA,MAAA,GAAA,KAAA,GAAA,KAAA;EAAQ,OAAA,KAAA,QAAA,CAAA,UAAA,MAAA,CAAA,GA2BJ,KA3BI,CA2BE,CA3BF,EAAA,GAAA,CAAA,CAAA,CAAA,CAAA;EAAjC,OAAA,KAAA,eAAA,CAAA,sBA6BY,eA7BZ,EAAA,oBAAA,MA8BgB,aA9BhB,EAAA,eA+BK,OA/BL,CA+Ba,aA/Bb,EA+B4B,WA/B5B,CAAA,EAAA,gBAgCM,QAhCN,CAgCe,MAhCf,CAAA,GAgCyB,QAhCzB,CAgCkC,MAhClC,CAAA,EAAA,gBAiCM,GAjCN,CAiCU,aAjCV,EAiCyB,WAjCzB,CAAA,CAiCsC,OAjCtC,CAAA,CAAA,cAAA,CAAA,CAAA,GAkCR,gBAlCQ,CAkCS,MAlCT,CAAA,SAAA,KAAA,GAmCR,aAnCQ,GAoCR,IAAA,CAAK,MApCG,CAoCI,aApCJ,EAoCmB,gBApCnB,CAoCoC,MApCpC,CAAA,CAAA;EAEA,OAAA,SAAA,gBAAA,CAAA,qBAsCW,eAtCX,EAAA,mBAAA,MAuCe,YAvCf,EAAA,iBAwCK,GAxCL,CAwCS,YAxCT,EAwCuB,UAxCvB,CAAA,EAAA,kBAyCQ,OAzCR,CAyCgB,YAzChB,EAyC8B,UAzC9B,CAAA,CAAA,CAAA,SAAA,EA0CC,SA1CD,EAAA,MAAA,EA0CoB,QA1CpB,EAAA,MAAA,CAAA,EAAA,MAAA,CAAA,EA0CmD,eA1CnD,CA0CmD,YA1CnD,EA0CmD,UA1CnD,EA0CmD,SA1CnD,EA0CmD,QA1CnD,CA0CmD,SA1CnD,CAAA,EA0CmD,gBA1CnD,CA0CmD,YA1CnD,EA0CmD,UA1CnD,CAAA,CA0CmD,QA1CnD,CA0CmD,SA1CnD,CAAA,CAAA,CAAA,cAAA,CAAA,CAAA;EAEY"}
@@ -0,0 +1,18 @@
1
+ import { path } from "../utils/path.mjs";
2
+ import "../_internals.mjs";
3
+
4
+ //#region src/steps/fields.ts
5
+ let fields;
6
+ (function(_fields) {
7
+ function resolvedDeepPath(fieldPath, fields$1, filler = "defaultValue") {
8
+ const [parent, ...children] = fieldPath.split(".");
9
+ const shared = `${parent}.${filler}`;
10
+ const fullPath = children.length === 0 ? shared : `${shared}.${children.join(".")}`;
11
+ return path.pickBy(fields$1, fullPath);
12
+ }
13
+ _fields.resolvedDeepPath = resolvedDeepPath;
14
+ })(fields || (fields = {}));
15
+
16
+ //#endregion
17
+ export { fields };
18
+ //# sourceMappingURL=fields.mjs.map