@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
package/dist/schema.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { setCasingType } from "./utils/casing.mjs";
|
|
2
|
+
import "./utils/index.mjs";
|
|
2
3
|
import { DEFAULT_STORAGE_KEY, MultiStepFormStorage } from "./storage.mjs";
|
|
3
4
|
import { Subscribable } from "./subscribable.mjs";
|
|
4
5
|
import { MultiStepFormStepSchema } from "./steps/schema.mjs";
|
|
@@ -9,6 +10,7 @@ var MultiStepFormSchema = class extends Subscribable {
|
|
|
9
10
|
defaultNameTransformationCasing;
|
|
10
11
|
stepSchema;
|
|
11
12
|
storage;
|
|
13
|
+
storageConfig;
|
|
12
14
|
mountCount = 0;
|
|
13
15
|
constructor(options) {
|
|
14
16
|
super();
|
|
@@ -16,13 +18,17 @@ var MultiStepFormSchema = class extends Subscribable {
|
|
|
16
18
|
this.defaultNameTransformationCasing = setCasingType(nameTransformCasing);
|
|
17
19
|
this.stepSchema = new MultiStepFormStepSchema({
|
|
18
20
|
steps,
|
|
19
|
-
nameTransformCasing: this.defaultNameTransformationCasing
|
|
21
|
+
nameTransformCasing: this.defaultNameTransformationCasing,
|
|
22
|
+
storage
|
|
20
23
|
});
|
|
21
|
-
this.
|
|
24
|
+
this.storageConfig = {
|
|
22
25
|
key: storage?.key ?? DEFAULT_STORAGE_KEY,
|
|
23
|
-
data: this.stepSchema.value,
|
|
24
26
|
store: storage?.store,
|
|
25
|
-
throwWhenUndefined: storage?.throwWhenUndefined
|
|
27
|
+
throwWhenUndefined: storage?.throwWhenUndefined
|
|
28
|
+
};
|
|
29
|
+
this.storage = new MultiStepFormStorage({
|
|
30
|
+
data: this.stepSchema.value,
|
|
31
|
+
...this.storageConfig
|
|
26
32
|
});
|
|
27
33
|
this.stepSchema.subscribe(() => {
|
|
28
34
|
this.notify();
|
|
@@ -49,12 +55,10 @@ var MultiStepFormSchema = class extends Subscribable {
|
|
|
49
55
|
onUnmount() {}
|
|
50
56
|
notify() {
|
|
51
57
|
for (const listener of this.listeners) listener({
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
},
|
|
57
|
-
steps: this.stepSchema.original
|
|
58
|
+
defaultNameTransformationCasing: this.defaultNameTransformationCasing,
|
|
59
|
+
original: this.stepSchema.original,
|
|
60
|
+
steps: this.stepSchema.steps,
|
|
61
|
+
value: this.stepSchema.value
|
|
58
62
|
});
|
|
59
63
|
}
|
|
60
64
|
};
|
package/dist/schema.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.mjs","names":[],"sources":["../src/schema.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"schema.mjs","names":[],"sources":["../src/schema.ts"],"sourcesContent":["import { MultiStepFormStepSchema } from '@/steps';\nimport { setCasingType } from '@/utils';\nimport type { StepSchema } from './internals/index.js';\nimport type { steps } from './steps/steps.js';\nimport {\n DEFAULT_STORAGE_KEY,\n MultiStepFormStorage,\n type BaseStorageConfig,\n} from './storage.js';\nimport { Subscribable } from './subscribable.js';\n\nexport class MultiStepFormSchema<\n const def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n> extends Subscribable<MultiStepFormStepSchema.Listener<def, value>> {\n readonly defaultNameTransformationCasing: def['nameTransformCasing'];\n readonly stepSchema: MultiStepFormStepSchema<def, value>;\n storage: MultiStepFormStorage<value, StepSchema.inferStorageKey<def>>;\n protected readonly storageConfig: BaseStorageConfig<\n StepSchema.inferStorageKey<def>\n >;\n private mountCount = 0;\n\n constructor(options: def) {\n super();\n\n const { steps, nameTransformCasing, storage } = options;\n\n this.defaultNameTransformationCasing = setCasingType(\n nameTransformCasing\n ) as def['nameTransformCasing'];\n this.stepSchema = new MultiStepFormStepSchema<def, value>({\n steps,\n nameTransformCasing: this.defaultNameTransformationCasing,\n storage,\n } as never);\n this.storageConfig = {\n key: (storage?.key ??\n DEFAULT_STORAGE_KEY) as StepSchema.inferStorageKey<def>,\n store: storage?.store,\n throwWhenUndefined: storage?.throwWhenUndefined,\n };\n this.storage = new MultiStepFormStorage({\n data: this.stepSchema.value,\n ...this.storageConfig,\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 defaultNameTransformationCasing: this.defaultNameTransformationCasing,\n original: this.stepSchema.original,\n steps: this.stepSchema.steps,\n value: this.stepSchema.value,\n });\n }\n }\n}\n\nexport function createMultiStepFormSchema<\n const def extends StepSchema.Config,\n value extends steps.instantiateSteps<def>,\n>(options: def) {\n return new MultiStepFormSchema<def, value>(options);\n}\n"],"mappings":";;;;;;;;AAWA,IAAa,sBAAb,cAGU,aAA2D;CACnE,AAAS;CACT,AAAS;CACT;CACA,AAAmB;CAGnB,AAAQ,aAAa;CAErB,YAAY,SAAc;AACxB,SAAO;EAEP,MAAM,EAAE,OAAO,qBAAqB,YAAY;AAEhD,OAAK,kCAAkC,cACrC,oBACD;AACD,OAAK,aAAa,IAAI,wBAAoC;GACxD;GACA,qBAAqB,KAAK;GAC1B;GACD,CAAU;AACX,OAAK,gBAAgB;GACnB,KAAM,SAAS,OACb;GACF,OAAO,SAAS;GAChB,oBAAoB,SAAS;GAC9B;AACD,OAAK,UAAU,IAAI,qBAAqB;GACtC,MAAM,KAAK,WAAW;GACtB,GAAG,KAAK;GACT,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,iCAAiC,KAAK;GACtC,UAAU,KAAK,WAAW;GAC1B,OAAO,KAAK,WAAW;GACvB,OAAO,KAAK,WAAW;GACxB,CAAC;;;AAKR,SAAgB,0BAGd,SAAc;AACd,QAAO,IAAI,oBAAgC,QAAQ"}
|
package/dist/steps/fields.cjs
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
const require_casing = require('../utils/casing.cjs');
|
|
2
|
+
const require_invariant = require('../utils/invariant.cjs');
|
|
3
|
+
require('../utils/index.cjs');
|
|
1
4
|
const require_path = require('../utils/path.cjs');
|
|
2
5
|
require('../_internals.cjs');
|
|
6
|
+
const require_validator = require('../utils/validator.cjs');
|
|
3
7
|
|
|
4
8
|
//#region src/steps/fields.ts
|
|
5
9
|
let fields;
|
|
@@ -17,7 +21,83 @@ let fields;
|
|
|
17
21
|
return `${parent}.${valuePropertyName}.${children.join(".")}`;
|
|
18
22
|
}
|
|
19
23
|
_fields.buildValuePath = buildValuePath;
|
|
24
|
+
function createFieldLabel(label, fieldName, casingType) {
|
|
25
|
+
return label ?? require_casing.changeCasing(fieldName, casingType);
|
|
26
|
+
}
|
|
27
|
+
_fields.createFieldLabel = createFieldLabel;
|
|
28
|
+
function instantiate(def) {
|
|
29
|
+
const { fields: fields$1, defaultCasing, validateFields } = def;
|
|
30
|
+
const invariant = require_invariant.createInvariant("[instantiateFields]");
|
|
31
|
+
if (defaultCasing) {
|
|
32
|
+
invariant(typeof defaultCasing === "string", `The default casing must be a string. Was ${typeof defaultCasing}`);
|
|
33
|
+
invariant(require_casing.isCasingValid(defaultCasing), (formatter) => `The default casing is not a valid casing. Was ${defaultCasing}, must be one of ${formatter.format(require_casing.CASING_TYPES)}`);
|
|
34
|
+
}
|
|
35
|
+
invariant(fields$1, "No fields were provided to the \"fields\" option.", TypeError);
|
|
36
|
+
invariant(typeof fields$1 === "object", `The fields must be an object. Was ${typeof fields$1}`);
|
|
37
|
+
invariant(Object.keys(fields$1).length > 0, `A field must be provided to the "fields" option.`);
|
|
38
|
+
let resolvedFields = {};
|
|
39
|
+
for (const [name, values] of Object.entries(fields$1)) {
|
|
40
|
+
invariant(typeof name === "string", `Each key for the "fields" option must be a string. Key ${name} was a ${typeof name}`);
|
|
41
|
+
invariant(typeof values === "object", `The value for key ${name} must be an object. Was ${typeof values}`);
|
|
42
|
+
const { defaultValue, label, nameTransformCasing } = values;
|
|
43
|
+
const casing = nameTransformCasing ?? defaultCasing ?? require_casing.DEFAULT_CASING;
|
|
44
|
+
const sharedFields = {
|
|
45
|
+
nameTransformCasing: casing,
|
|
46
|
+
name,
|
|
47
|
+
label: createFieldLabel(label, name, casing)
|
|
48
|
+
};
|
|
49
|
+
if (defaultValue instanceof Date) {
|
|
50
|
+
const type = "type" in values ? values.type : "date";
|
|
51
|
+
invariant(type === "date" || type === "string", `The type for key ${name} must be either 'date' or 'string'. Was ${type}`);
|
|
52
|
+
const resolvedValue = type === "date" ? defaultValue : JSON.stringify(defaultValue);
|
|
53
|
+
resolvedFields[name] = {
|
|
54
|
+
...resolvedFields[name],
|
|
55
|
+
...sharedFields,
|
|
56
|
+
defaultValue: resolvedValue,
|
|
57
|
+
type
|
|
58
|
+
};
|
|
59
|
+
} else resolvedFields[name] = {
|
|
60
|
+
...resolvedFields[name],
|
|
61
|
+
...sharedFields,
|
|
62
|
+
defaultValue
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (validateFields) require_validator.runStandardValidation(validateFields, Object.fromEntries(Object.entries(resolvedFields).map(([name, value]) => [name, value.defaultValue])));
|
|
66
|
+
return resolvedFields;
|
|
67
|
+
}
|
|
68
|
+
_fields.instantiate = instantiate;
|
|
69
|
+
function isValidFieldValue(field) {
|
|
70
|
+
if (!("defaultValue" in field)) return false;
|
|
71
|
+
if ("label" in field) {
|
|
72
|
+
const label = field.label;
|
|
73
|
+
if (label !== false && typeof label !== "string") return false;
|
|
74
|
+
}
|
|
75
|
+
if ("nameTransformCasing" in field) {
|
|
76
|
+
const casing = field.nameTransformCasing;
|
|
77
|
+
if (typeof casing !== "string" || !require_casing.isCasingValid(casing)) return false;
|
|
78
|
+
}
|
|
79
|
+
if (field.defaultValue instanceof Date) {
|
|
80
|
+
if ("type" in field) {
|
|
81
|
+
const type = field.type;
|
|
82
|
+
if (type !== "date" && type !== "string") return false;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
function isValidFieldConfig(value) {
|
|
88
|
+
if (value === null || typeof value !== "object") return false;
|
|
89
|
+
const fields$1 = value;
|
|
90
|
+
if (Object.keys(fields$1).length === 0) return false;
|
|
91
|
+
for (const [name, fieldValue] of Object.entries(fields$1)) {
|
|
92
|
+
if (typeof name !== "string") return false;
|
|
93
|
+
if (fieldValue === null || typeof fieldValue !== "object") return false;
|
|
94
|
+
if (!isValidFieldValue(fieldValue)) return false;
|
|
95
|
+
}
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
_fields.isValidFieldConfig = isValidFieldConfig;
|
|
20
99
|
})(fields || (fields = {}));
|
|
100
|
+
const instantiateFields = fields.instantiate;
|
|
21
101
|
|
|
22
102
|
//#endregion
|
|
23
103
|
Object.defineProperty(exports, 'fields', {
|
|
@@ -1 +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 } from './types';\n\nexport namespace fields {\n type GetDeepFields<TFields> = [keyof TFields] extends [never]\n ? never\n : {\n [_ in keyof TFields]: TFields[_] extends Record<\n 'defaultValue',\n infer value\n >\n ? keyof value extends never\n ? TFields\n : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }>\n : never;\n }[keyof TFields];\n export type getFieldsForStep<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep\n > = TResolvedStep[TStep] extends {\n fields: infer fields extends object;\n }\n ? fields\n : never;\n export type get<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TFields extends getFieldsForStep<TResolvedStep, TStep> = getFieldsForStep<\n TResolvedStep,\n TStep\n >\n > = TFields;\n export type removeParentPath<T extends string> = Split<T, '.'> extends [\n infer _,\n ...infer rest\n ]\n ? rest extends string[]\n ? Join<rest, '.'>\n : never\n : never;\n export type getConfig<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TField extends getDeepFields<TResolvedStep, TStep>\n > = parentOf<TField> extends keyof get<TResolvedStep, TStep>\n ? get<TResolvedStep, TStep>[parentOf<TField>]\n : never;\n export type getDeepFields<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep = keyof TResolvedStep\n > = GetDeepFields<\n get<TResolvedStep, TStep>\n > extends infer value extends string\n ? value\n : never;\n\n type buildValuePath<\n TField extends string,\n TValuePropertyName extends string = 'defaultValue',\n TSplit extends Split<TField, '.'> = Split<TField, '.'>\n > = TSplit extends [infer field extends string, ...infer rest]\n ? rest extends []\n ? `${field}.${TValuePropertyName}`\n : rest extends string[]\n ? `${field}.${TValuePropertyName}.${Join<rest, '.'>}`\n : never\n : never;\n export type resolveDeepPath<\n TResolvedStep extends AnyResolvedStep,\n TStep extends keyof TResolvedStep,\n TField extends getDeepFields<TResolvedStep, TStep>,\n TValue extends get<TResolvedStep, TStep> = get<TResolvedStep, TStep>\n > = buildValuePath<TField> extends DeepKeys<TValue>\n ? path.pickBy<TValue, buildValuePath<TField>>\n : never;\n\n export type parentOf<T extends string> = Split<T, '.'>[0];\n\n // TODO add field validation\n export function resolvedDeepPath<\n resolvedStep extends AnyResolvedStep,\n targetStep extends keyof resolvedStep,\n fields extends get<resolvedStep, targetStep>,\n fieldPath extends getDeepFields<resolvedStep, targetStep>\n >(fieldPath: fieldPath, fields: fields, filler = 'defaultValue') {\n const [parent, ...children] = fieldPath.split('.');\n const shared = `${parent}.${filler}`;\n const fullPath = (\n children.length === 0 ? shared : `${shared}.${children.join('.')}`\n ) as DeepKeys<fields>;\n\n const resolvedValue = path.pickBy(fields, fullPath) as resolveDeepPath<\n resolvedStep,\n targetStep,\n fieldPath\n >;\n\n return resolvedValue;\n }\n\n export function buildValuePath<\n TField extends string,\n TValuePropertyName extends string = 'defaultValue',\n TSplit extends Split<TField, '.'> = Split<TField, '.'>\n >(\n field: TField,\n valuePropertyName: TValuePropertyName = 'defaultValue' as TValuePropertyName\n ) {\n const [parent, ...children] = field.split('.');\n\n if (children.length === 0) {\n return `${parent}.${valuePropertyName}` as buildValuePath<\n TField,\n TValuePropertyName,\n TSplit\n >;\n }\n\n return `${parent}.${valuePropertyName}.${children.join(\n '.'\n )}` as buildValuePath<TField, TValuePropertyName, TSplit>;\n }\n}\n"],"mappings":";;;;;;CAgFS,SAAS,iBAKd,WAAsB,UAAgB,SAAS,gBAAgB;EAC/D,MAAM,CAAC,QAAQ,GAAG,YAAY,UAAU,MAAM,IAAI;EAClD,MAAM,SAAS,GAAG,OAAO,GAAG;EAC5B,MAAM,WACJ,SAAS,WAAW,IAAI,SAAS,GAAG,OAAO,GAAG,SAAS,KAAK,IAAI;AASlE,SANsBA,kBAAK,OAAOC,UAAQ,SAAS;;;CAS9C,SAAS,eAKd,OACA,oBAAwC,gBACxC;EACA,MAAM,CAAC,QAAQ,GAAG,YAAY,MAAM,MAAM,IAAI;AAE9C,MAAI,SAAS,WAAW,EACtB,QAAO,GAAG,OAAO,GAAG;AAOtB,SAAO,GAAG,OAAO,GAAG,kBAAkB,GAAG,SAAS,KAChD,IACD"}
|
|
1
|
+
{"version":3,"file":"fields.cjs","names":["path","fields","changeCasing","invariant: Invariant","createInvariant","isCasingValid","CASING_TYPES","resolvedFields: Record<string, unknown>","DEFAULT_CASING"],"sources":["../../src/steps/fields.ts"],"sourcesContent":["import { path } from '@/internals';\nimport {\n CASING_TYPES,\n changeCasing,\n DEFAULT_CASING,\n isCasingValid,\n type CasingType,\n type ChangeCasing,\n type Constrain,\n type DeepKeys,\n type DefaultCasing,\n type Expand,\n type Join,\n type SetDefaultString,\n type Split,\n} from '@/utils';\nimport { createInvariant, type Invariant } from '@/utils/invariant';\nimport {\n runStandardValidation,\n type AnyValidator,\n type DefaultValidator,\n type StandardSchemaValidator,\n} from '@/utils/validator';\nimport type { steps } from './steps';\n\nexport namespace fields {\n type GetDeepFields<TFields> = [keyof TFields] extends [never]\n ? never\n : {\n [_ in keyof TFields]: TFields[_] extends Record<\n 'defaultValue',\n infer value\n >\n ? keyof value extends never\n ? TFields\n : DeepKeys<{ [field in _]: TFields[_]['defaultValue'] }>\n : never;\n }[keyof TFields];\n export type getFieldsForStep<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>\n > = steps[step] extends {\n fields: infer fields extends object;\n }\n ? fields\n : never;\n export type get<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>\n > = getFieldsForStep<steps, step>;\n export type removeParentPath<T extends string> = Split<T, '.'> extends [\n infer _,\n ...infer rest\n ]\n ? rest extends string[]\n ? Join<rest, '.'>\n : never\n : never;\n export type getConfig<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>,\n field extends getDeepFields<steps, step>\n > = parentOf<field> extends keyof get<steps, step>\n ? get<steps, step>[parentOf<field>]\n : never;\n export type getDeepFields<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>\n > = GetDeepFields<get<steps, step>> extends infer value extends string\n ? value\n : never;\n\n type buildValuePath<\n field extends string,\n valuePropertyName extends string = 'defaultValue',\n split extends Split<field, '.'> = Split<field, '.'>\n > = split extends [infer field extends string, ...infer rest]\n ? rest extends []\n ? `${field}.${valuePropertyName}`\n : rest extends string[]\n ? `${field}.${valuePropertyName}.${Join<rest, '.'>}`\n : never\n : never;\n export type resolveDeepPath<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>,\n field extends getDeepFields<steps, step>,\n value extends get<steps, step> = get<steps, step>\n > = buildValuePath<field> extends DeepKeys<value>\n ? path.pickBy<value, buildValuePath<field>>\n : never;\n export type getDefaultValues<\n steps extends steps.instantiateSteps,\n targetStep extends steps.StepNumbers<steps>,\n fields extends get<steps, targetStep> = get<steps, targetStep>\n > = {\n -readonly [key in keyof fields]: fields[key] extends {\n defaultValue: infer defaultValue;\n }\n ? defaultValue\n : never;\n };\n export type parentOf<T extends string> = Split<T, '.'>[0];\n\n // TODO add field validation\n export function resolvedDeepPath<\n steps extends steps.instantiateSteps,\n step extends steps.StepNumbers<steps>,\n fields extends get<steps, step>,\n fieldPath extends getDeepFields<steps, step>\n >(fieldPath: fieldPath, fields: fields, filler = 'defaultValue') {\n const [parent, ...children] = fieldPath.split('.');\n const shared = `${parent}.${filler}`;\n const fullPath = (\n children.length === 0 ? shared : `${shared}.${children.join('.')}`\n ) as DeepKeys<fields>;\n\n const resolvedValue = path.pickBy(fields, fullPath) as resolveDeepPath<\n steps,\n step,\n fieldPath\n >;\n\n return resolvedValue;\n }\n\n export function buildValuePath<\n TField extends string,\n TValuePropertyName extends string = 'defaultValue',\n TSplit extends Split<TField, '.'> = Split<TField, '.'>\n >(\n field: TField,\n valuePropertyName: TValuePropertyName = 'defaultValue' as TValuePropertyName\n ) {\n const [parent, ...children] = field.split('.');\n\n if (children.length === 0) {\n return `${parent}.${valuePropertyName}` as buildValuePath<\n TField,\n TValuePropertyName,\n TSplit\n >;\n }\n\n return `${parent}.${valuePropertyName}.${children.join(\n '.'\n )}` as buildValuePath<TField, TValuePropertyName, TSplit>;\n }\n\n export type DateFieldTypeMap = {\n date: Date;\n string: string;\n };\n export type DateFieldType = keyof DateFieldTypeMap;\n export type DefaultDateFieldType = SetDefaultString<DateFieldType, 'date'>;\n export interface NameTransformCasingOptions<TCasing extends CasingType> {\n /**\n * How the `name` should be transformed for the `label`.\n *\n * If omitted, the default will be whatever is set during {@linkcode MultiStepFormSchema} initialization.\n */\n nameTransformCasing?: Constrain<TCasing, CasingType>;\n }\n export interface BaseFieldOptions<TCasing extends CasingType, TDefaultValue>\n extends NameTransformCasingOptions<TCasing> {\n /**\n * The default value for the field.\n */\n defaultValue: TDefaultValue;\n /**\n * The text for the label.\n *\n * If omitted, it will default to the specified casing.\n *\n * If `false`, `label` will be `undefined`, meaning there won't\n * be a label for this field.\n */\n label?: string | false;\n }\n\n export interface BaseDateFieldOptions<\n TCasing extends CasingType,\n TType extends DateFieldType\n > extends BaseFieldOptions<TCasing, Date> {\n /**\n * The type of the resolved field value. It can either be a `date` or a `string`.\n *\n * - `date`: The field value will be a `date` object.\n * - `string`: The field value will be a `string`. If `transform` is provided, it will be used to transform the date value to a string.\n *\n * @default 'date'\n */\n type?: TType;\n }\n\n export interface StringDateFieldOptions<TCasing extends CasingType>\n extends BaseDateFieldOptions<TCasing, 'string'> {\n type: 'string';\n /**\n * A function to transform the date value to the desired type.\n *\n * If omitted, the date will be transformed to a `string` using the default `Date.toISOString` method.\n *\n * @param value The {@linkcode Date} value to transform.\n * @returns The transformed value.\n */\n transform?: (value: Date) => string;\n }\n\n export type ResolvedDateFieldType<T> = T extends Date ? DateFieldType : never;\n export type DateFieldConfig<\n TCasing extends CasingType = DefaultCasing,\n TType extends DateFieldType = ResolvedDateFieldType<Date>\n > = StringDateFieldOptions<TCasing> | BaseDateFieldOptions<TCasing, TType>;\n type BaseFieldConfig<\n TCasing extends CasingType = DefaultCasing,\n TDefaultValue = unknown\n > = BaseFieldOptions<TCasing, TDefaultValue>;\n export type FieldConfig<TCasing extends CasingType = DefaultCasing> = Record<\n string,\n BaseFieldConfig<TCasing> | DateFieldConfig<TCasing>\n >;\n\n type InferDefaultValue<T> = T extends string\n ? string\n : T extends number\n ? number\n : T extends true\n ? boolean\n : T extends false\n ? boolean\n : T extends object\n ? T extends Date\n ? Date\n : T extends ReadonlyArray<infer item>\n ? Array<InferDefaultValue<item>>\n : { -readonly [key in keyof T]: InferDefaultValue<T[key]> }\n : never;\n\n export type inferDefaultValue<T> = T extends {\n defaultValue: infer defaultValue;\n }\n ? InferDefaultValue<defaultValue>\n : never;\n export type inferNameTransformCasing<\n T,\n TDefault extends CasingType | undefined\n > = T extends {\n nameTransformCasing: infer nameTransformCasing extends CasingType;\n }\n ? nameTransformCasing\n : undefined extends TDefault\n ? DefaultCasing\n : TDefault;\n export type inferLabel<\n T,\n Casing extends CasingType | undefined,\n FieldKey extends string\n > = T extends {\n label: infer label extends string | false;\n }\n ? label\n : undefined extends Casing\n ? ChangeCasing<FieldKey, DefaultCasing>\n : ChangeCasing<FieldKey, Exclude<Casing, undefined>>;\n export type inferResolvedDateFieldType<T> = T extends {\n type: infer type extends DateFieldType;\n }\n ? type\n : DefaultDateFieldType;\n export type instantiateFields<\n T,\n TDefaultCasing extends CasingType = DefaultCasing\n > = [T] extends [object]\n ? T extends instantiateConfig\n ? {\n -readonly [key in keyof T['fields']]: Expand<\n {\n /**\n * The default value for the field.\n */\n defaultValue: inferDefaultValue<T['fields'][key]>;\n /**\n * The casing of the field name.\n */\n nameTransformCasing: inferNameTransformCasing<\n T['fields'][key],\n TDefaultCasing\n >;\n /**\n * The name of the field.\n */\n name: key;\n } & (key extends string\n ? {\n /**\n * The label for the field.\n */\n label: inferLabel<\n T['fields'][key],\n inferNameTransformCasing<T['fields'][key], TDefaultCasing>,\n key\n >;\n }\n : {}) &\n (inferDefaultValue<T['fields'][key]> extends Date\n ? /**\n * The type of the field.\n */\n { type: inferResolvedDateFieldType<T['fields'][key]> }\n : {})\n >;\n }\n : never\n : never;\n export type instantiateConfig<TMap extends FieldConfig = FieldConfig> = {\n fields: TMap;\n defaultCasing?: CasingType;\n validateFields?: Constrain<unknown, AnyValidator, DefaultValidator>;\n };\n\n export function createFieldLabel(\n label: string | false | undefined,\n fieldName: string,\n casingType: CasingType\n ) {\n return label ?? changeCasing(fieldName, casingType);\n }\n /**\n * Creates new fields for the multi step form schema.\n * @param def - The field config.\n * @returns The instantiated field config.\n */\n export function instantiate<\n const def extends instantiateConfig,\n inst = instantiateFields<def>\n >(def: def) {\n const { fields, defaultCasing, validateFields } = def;\n const invariant: Invariant = createInvariant('[instantiateFields]');\n\n if (defaultCasing) {\n invariant(\n typeof defaultCasing === 'string',\n `The default casing must be a string. Was ${typeof defaultCasing}`\n );\n invariant(\n isCasingValid(defaultCasing),\n (formatter) =>\n `The default casing is not a valid casing. Was ${defaultCasing}, must be one of ${formatter.format(\n CASING_TYPES\n )}`\n );\n }\n\n invariant(\n fields,\n 'No fields were provided to the \"fields\" option.',\n TypeError\n );\n invariant(\n typeof fields === 'object',\n `The fields must be an object. Was ${typeof fields}`\n );\n invariant(\n Object.keys(fields).length > 0,\n `A field must be provided to the \"fields\" option.`\n );\n\n let resolvedFields: Record<string, unknown> = {};\n\n for (const [name, values] of Object.entries(fields)) {\n invariant(\n typeof name === 'string',\n `Each key for the \"fields\" option must be a string. Key ${name} was a ${typeof name}`\n );\n invariant(\n typeof values === 'object',\n `The value for key ${name} must be an object. Was ${typeof values}`\n );\n\n const { defaultValue, label, nameTransformCasing } = values;\n const casing = nameTransformCasing ?? defaultCasing ?? DEFAULT_CASING;\n const resolvedLabel = createFieldLabel(label, name, casing);\n const sharedFields = {\n nameTransformCasing: casing,\n name,\n label: resolvedLabel,\n };\n\n if (defaultValue instanceof Date) {\n const type = 'type' in values ? values.type : 'date';\n\n invariant(\n type === 'date' || type === 'string',\n `The type for key ${name} must be either 'date' or 'string'. Was ${type}`\n );\n const resolvedValue =\n type === 'date' ? defaultValue : JSON.stringify(defaultValue);\n\n resolvedFields[name] = {\n ...(resolvedFields[name] as Record<string, unknown>),\n ...sharedFields,\n defaultValue: resolvedValue,\n type,\n };\n } else {\n resolvedFields[name] = {\n ...(resolvedFields[name] as Record<string, unknown>),\n ...sharedFields,\n defaultValue,\n };\n }\n }\n\n if (validateFields) {\n const defaultValues = Object.fromEntries(\n Object.entries(resolvedFields).map(([name, value]) => [\n name,\n (value as Record<string, unknown>).defaultValue,\n ])\n );\n\n runStandardValidation(\n validateFields as StandardSchemaValidator,\n defaultValues\n );\n }\n\n return resolvedFields as inst;\n }\n\n function isValidFieldValue(field: Record<string, unknown>): boolean {\n // Must have defaultValue\n if (!('defaultValue' in field)) {\n return false;\n }\n\n // If label is provided, it must be a string or false\n if ('label' in field) {\n const label = field.label;\n if (label !== false && typeof label !== 'string') {\n return false;\n }\n }\n\n // If nameTransformCasing is provided, it must be a valid casing\n if ('nameTransformCasing' in field) {\n const casing = field.nameTransformCasing;\n if (typeof casing !== 'string' || !isCasingValid(casing)) {\n return false;\n }\n }\n\n // If defaultValue is a Date, validate type field\n if (field.defaultValue instanceof Date) {\n if ('type' in field) {\n const type = field.type;\n if (type !== 'date' && type !== 'string') {\n return false;\n }\n }\n }\n\n return true;\n }\n\n export function isValidFieldConfig(value: unknown): value is FieldConfig {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n\n const fields = value as Record<string, unknown>;\n\n // Check if fields has at least one key\n if (Object.keys(fields).length === 0) {\n return false;\n }\n\n // Validate each field\n for (const [name, fieldValue] of Object.entries(fields)) {\n // Each key must be a string\n if (typeof name !== 'string') {\n return false;\n }\n\n // Each value must be an object\n if (fieldValue === null || typeof fieldValue !== 'object') {\n return false;\n }\n\n if (!isValidFieldValue(fieldValue as Record<string, unknown>)) {\n return false;\n }\n }\n\n return true;\n }\n}\n\nexport const instantiateFields = fields.instantiate;\n"],"mappings":"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"}
|
package/dist/steps/fields.d.cts
CHANGED
|
@@ -1,24 +1,132 @@
|
|
|
1
|
-
import { DeepKeys, Join, Split } from "../utils/types.cjs";
|
|
1
|
+
import { Constrain, DeepKeys, Expand, Join, SetDefaultString, Split } from "../utils/types.cjs";
|
|
2
|
+
import { CasingType, ChangeCasing, DefaultCasing } from "../utils/casing.cjs";
|
|
3
|
+
import { AnyValidator, DefaultValidator } from "../utils/validator.cjs";
|
|
2
4
|
import { path } from "../utils/path.cjs";
|
|
3
|
-
import { AnyResolvedStep } from "./types.cjs";
|
|
4
5
|
|
|
5
6
|
//#region src/steps/fields.d.ts
|
|
6
7
|
declare namespace fields {
|
|
7
8
|
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 getFieldsForStep<
|
|
9
|
+
export type getFieldsForStep<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>> = steps[step] extends {
|
|
9
10
|
fields: infer fields extends object;
|
|
10
11
|
} ? fields : never;
|
|
11
|
-
export type get<
|
|
12
|
+
export type get<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>> = getFieldsForStep<steps, step>;
|
|
12
13
|
export type removeParentPath<T extends string> = Split<T, '.'> extends [infer _, ...infer rest] ? rest extends string[] ? Join<rest, '.'> : never : never;
|
|
13
|
-
export type getConfig<
|
|
14
|
-
export type getDeepFields<
|
|
15
|
-
type buildValuePath<
|
|
16
|
-
export type resolveDeepPath<
|
|
14
|
+
export type getConfig<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>, field extends getDeepFields<steps, step>> = parentOf<field> extends keyof get<steps, step> ? get<steps, step>[parentOf<field>] : never;
|
|
15
|
+
export type getDeepFields<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>> = GetDeepFields<get<steps, step>> extends infer value extends string ? value : never;
|
|
16
|
+
type buildValuePath<field extends string, valuePropertyName extends string = 'defaultValue', split extends Split<field, '.'> = Split<field, '.'>> = split extends [infer field extends string, ...infer rest] ? rest extends [] ? `${field}.${valuePropertyName}` : rest extends string[] ? `${field}.${valuePropertyName}.${Join<rest, '.'>}` : never : never;
|
|
17
|
+
export type resolveDeepPath<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>, field extends getDeepFields<steps, step>, value extends get<steps, step> = get<steps, step>> = buildValuePath<field> extends DeepKeys<value> ? path.pickBy<value, buildValuePath<field>> : never;
|
|
18
|
+
export type getDefaultValues<steps extends steps.instantiateSteps, targetStep extends steps.StepNumbers<steps>, fields$1 extends get<steps, targetStep> = get<steps, targetStep>> = { -readonly [key in keyof fields$1]: fields$1[key] extends {
|
|
19
|
+
defaultValue: infer defaultValue;
|
|
20
|
+
} ? defaultValue : never };
|
|
17
21
|
export type parentOf<T extends string> = Split<T, '.'>[0];
|
|
18
|
-
export function resolvedDeepPath<
|
|
22
|
+
export function resolvedDeepPath<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>, fields$1 extends get<steps, step>, fieldPath extends getDeepFields<steps, step>>(fieldPath: fieldPath, fields: fields$1, filler?: string): resolveDeepPath<steps, step, fieldPath, getFieldsForStep<steps, step>>;
|
|
19
23
|
export function buildValuePath<TField extends string, TValuePropertyName extends string = 'defaultValue', TSplit extends Split<TField, '.'> = Split<TField, '.'>>(field: TField, valuePropertyName?: TValuePropertyName): buildValuePath<TField, TValuePropertyName, TSplit>;
|
|
24
|
+
export type DateFieldTypeMap = {
|
|
25
|
+
date: Date;
|
|
26
|
+
string: string;
|
|
27
|
+
};
|
|
28
|
+
export type DateFieldType = keyof DateFieldTypeMap;
|
|
29
|
+
export type DefaultDateFieldType = SetDefaultString<DateFieldType, 'date'>;
|
|
30
|
+
export interface NameTransformCasingOptions<TCasing extends CasingType> {
|
|
31
|
+
/**
|
|
32
|
+
* How the `name` should be transformed for the `label`.
|
|
33
|
+
*
|
|
34
|
+
* If omitted, the default will be whatever is set during {@linkcode MultiStepFormSchema} initialization.
|
|
35
|
+
*/
|
|
36
|
+
nameTransformCasing?: Constrain<TCasing, CasingType>;
|
|
37
|
+
}
|
|
38
|
+
export interface BaseFieldOptions<TCasing extends CasingType, TDefaultValue> extends NameTransformCasingOptions<TCasing> {
|
|
39
|
+
/**
|
|
40
|
+
* The default value for the field.
|
|
41
|
+
*/
|
|
42
|
+
defaultValue: TDefaultValue;
|
|
43
|
+
/**
|
|
44
|
+
* The text for the label.
|
|
45
|
+
*
|
|
46
|
+
* If omitted, it will default to the specified casing.
|
|
47
|
+
*
|
|
48
|
+
* If `false`, `label` will be `undefined`, meaning there won't
|
|
49
|
+
* be a label for this field.
|
|
50
|
+
*/
|
|
51
|
+
label?: string | false;
|
|
52
|
+
}
|
|
53
|
+
export interface BaseDateFieldOptions<TCasing extends CasingType, TType extends DateFieldType> extends BaseFieldOptions<TCasing, Date> {
|
|
54
|
+
/**
|
|
55
|
+
* The type of the resolved field value. It can either be a `date` or a `string`.
|
|
56
|
+
*
|
|
57
|
+
* - `date`: The field value will be a `date` object.
|
|
58
|
+
* - `string`: The field value will be a `string`. If `transform` is provided, it will be used to transform the date value to a string.
|
|
59
|
+
*
|
|
60
|
+
* @default 'date'
|
|
61
|
+
*/
|
|
62
|
+
type?: TType;
|
|
63
|
+
}
|
|
64
|
+
export interface StringDateFieldOptions<TCasing extends CasingType> extends BaseDateFieldOptions<TCasing, 'string'> {
|
|
65
|
+
type: 'string';
|
|
66
|
+
/**
|
|
67
|
+
* A function to transform the date value to the desired type.
|
|
68
|
+
*
|
|
69
|
+
* If omitted, the date will be transformed to a `string` using the default `Date.toISOString` method.
|
|
70
|
+
*
|
|
71
|
+
* @param value The {@linkcode Date} value to transform.
|
|
72
|
+
* @returns The transformed value.
|
|
73
|
+
*/
|
|
74
|
+
transform?: (value: Date) => string;
|
|
75
|
+
}
|
|
76
|
+
export type ResolvedDateFieldType<T> = T extends Date ? DateFieldType : never;
|
|
77
|
+
export type DateFieldConfig<TCasing extends CasingType = DefaultCasing, TType extends DateFieldType = ResolvedDateFieldType<Date>> = StringDateFieldOptions<TCasing> | BaseDateFieldOptions<TCasing, TType>;
|
|
78
|
+
type BaseFieldConfig<TCasing extends CasingType = DefaultCasing, TDefaultValue = unknown> = BaseFieldOptions<TCasing, TDefaultValue>;
|
|
79
|
+
export type FieldConfig<TCasing extends CasingType = DefaultCasing> = Record<string, BaseFieldConfig<TCasing> | DateFieldConfig<TCasing>>;
|
|
80
|
+
type InferDefaultValue<T> = T extends string ? string : T extends number ? number : T extends true ? boolean : T extends false ? boolean : T extends object ? T extends Date ? Date : T extends ReadonlyArray<infer item> ? Array<InferDefaultValue<item>> : { -readonly [key in keyof T]: InferDefaultValue<T[key]> } : never;
|
|
81
|
+
export type inferDefaultValue<T> = T extends {
|
|
82
|
+
defaultValue: infer defaultValue;
|
|
83
|
+
} ? InferDefaultValue<defaultValue> : never;
|
|
84
|
+
export type inferNameTransformCasing<T, TDefault extends CasingType | undefined> = T extends {
|
|
85
|
+
nameTransformCasing: infer nameTransformCasing extends CasingType;
|
|
86
|
+
} ? nameTransformCasing : undefined extends TDefault ? DefaultCasing : TDefault;
|
|
87
|
+
export type inferLabel<T, Casing extends CasingType | undefined, FieldKey extends string> = T extends {
|
|
88
|
+
label: infer label extends string | false;
|
|
89
|
+
} ? label : undefined extends Casing ? ChangeCasing<FieldKey, DefaultCasing> : ChangeCasing<FieldKey, Exclude<Casing, undefined>>;
|
|
90
|
+
export type inferResolvedDateFieldType<T> = T extends {
|
|
91
|
+
type: infer type extends DateFieldType;
|
|
92
|
+
} ? type : DefaultDateFieldType;
|
|
93
|
+
export type instantiateFields<T, TDefaultCasing extends CasingType = DefaultCasing> = [T] extends [object] ? T extends instantiateConfig ? { -readonly [key in keyof T['fields']]: Expand<{
|
|
94
|
+
/**
|
|
95
|
+
* The default value for the field.
|
|
96
|
+
*/
|
|
97
|
+
defaultValue: inferDefaultValue<T['fields'][key]>;
|
|
98
|
+
/**
|
|
99
|
+
* The casing of the field name.
|
|
100
|
+
*/
|
|
101
|
+
nameTransformCasing: inferNameTransformCasing<T['fields'][key], TDefaultCasing>;
|
|
102
|
+
/**
|
|
103
|
+
* The name of the field.
|
|
104
|
+
*/
|
|
105
|
+
name: key;
|
|
106
|
+
} & (key extends string ? {
|
|
107
|
+
/**
|
|
108
|
+
* The label for the field.
|
|
109
|
+
*/
|
|
110
|
+
label: inferLabel<T['fields'][key], inferNameTransformCasing<T['fields'][key], TDefaultCasing>, key>;
|
|
111
|
+
} : {}) & (inferDefaultValue<T['fields'][key]> extends Date ? {
|
|
112
|
+
type: inferResolvedDateFieldType<T['fields'][key]>;
|
|
113
|
+
} : {})> } : never : never;
|
|
114
|
+
export type instantiateConfig<TMap extends FieldConfig = FieldConfig> = {
|
|
115
|
+
fields: TMap;
|
|
116
|
+
defaultCasing?: CasingType;
|
|
117
|
+
validateFields?: Constrain<unknown, AnyValidator, DefaultValidator>;
|
|
118
|
+
};
|
|
119
|
+
export function createFieldLabel(label: string | false | undefined, fieldName: string, casingType: CasingType): string | false;
|
|
120
|
+
/**
|
|
121
|
+
* Creates new fields for the multi step form schema.
|
|
122
|
+
* @param def - The field config.
|
|
123
|
+
* @returns The instantiated field config.
|
|
124
|
+
*/
|
|
125
|
+
export function instantiate<const def extends instantiateConfig, inst = instantiateFields<def>>(def: def): inst;
|
|
126
|
+
export function isValidFieldConfig(value: unknown): value is FieldConfig;
|
|
20
127
|
export {};
|
|
21
128
|
}
|
|
129
|
+
declare const instantiateFields: typeof fields.instantiate;
|
|
22
130
|
//#endregion
|
|
23
131
|
export { fields };
|
|
24
132
|
//# sourceMappingURL=fields.d.cts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.cts","names":[],"sources":["../../src/steps/fields.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fields.d.cts","names":[],"sources":["../../src/steps/fields.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/steps/fields.d.mts
CHANGED
|
@@ -1,24 +1,132 @@
|
|
|
1
|
-
import { DeepKeys, Join, Split } from "../utils/types.mjs";
|
|
1
|
+
import { Constrain, DeepKeys, Expand, Join, SetDefaultString, Split } from "../utils/types.mjs";
|
|
2
|
+
import { CasingType, ChangeCasing, DefaultCasing } from "../utils/casing.mjs";
|
|
3
|
+
import { AnyValidator, DefaultValidator } from "../utils/validator.mjs";
|
|
2
4
|
import { path } from "../utils/path.mjs";
|
|
3
|
-
import { AnyResolvedStep } from "./types.mjs";
|
|
4
5
|
|
|
5
6
|
//#region src/steps/fields.d.ts
|
|
6
7
|
declare namespace fields {
|
|
7
8
|
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 getFieldsForStep<
|
|
9
|
+
export type getFieldsForStep<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>> = steps[step] extends {
|
|
9
10
|
fields: infer fields extends object;
|
|
10
11
|
} ? fields : never;
|
|
11
|
-
export type get<
|
|
12
|
+
export type get<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>> = getFieldsForStep<steps, step>;
|
|
12
13
|
export type removeParentPath<T extends string> = Split<T, '.'> extends [infer _, ...infer rest] ? rest extends string[] ? Join<rest, '.'> : never : never;
|
|
13
|
-
export type getConfig<
|
|
14
|
-
export type getDeepFields<
|
|
15
|
-
type buildValuePath<
|
|
16
|
-
export type resolveDeepPath<
|
|
14
|
+
export type getConfig<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>, field extends getDeepFields<steps, step>> = parentOf<field> extends keyof get<steps, step> ? get<steps, step>[parentOf<field>] : never;
|
|
15
|
+
export type getDeepFields<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>> = GetDeepFields<get<steps, step>> extends infer value extends string ? value : never;
|
|
16
|
+
type buildValuePath<field extends string, valuePropertyName extends string = 'defaultValue', split extends Split<field, '.'> = Split<field, '.'>> = split extends [infer field extends string, ...infer rest] ? rest extends [] ? `${field}.${valuePropertyName}` : rest extends string[] ? `${field}.${valuePropertyName}.${Join<rest, '.'>}` : never : never;
|
|
17
|
+
export type resolveDeepPath<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>, field extends getDeepFields<steps, step>, value extends get<steps, step> = get<steps, step>> = buildValuePath<field> extends DeepKeys<value> ? path.pickBy<value, buildValuePath<field>> : never;
|
|
18
|
+
export type getDefaultValues<steps extends steps.instantiateSteps, targetStep extends steps.StepNumbers<steps>, fields$1 extends get<steps, targetStep> = get<steps, targetStep>> = { -readonly [key in keyof fields$1]: fields$1[key] extends {
|
|
19
|
+
defaultValue: infer defaultValue;
|
|
20
|
+
} ? defaultValue : never };
|
|
17
21
|
export type parentOf<T extends string> = Split<T, '.'>[0];
|
|
18
|
-
export function resolvedDeepPath<
|
|
22
|
+
export function resolvedDeepPath<steps extends steps.instantiateSteps, step extends steps.StepNumbers<steps>, fields$1 extends get<steps, step>, fieldPath extends getDeepFields<steps, step>>(fieldPath: fieldPath, fields: fields$1, filler?: string): resolveDeepPath<steps, step, fieldPath, getFieldsForStep<steps, step>>;
|
|
19
23
|
export function buildValuePath<TField extends string, TValuePropertyName extends string = 'defaultValue', TSplit extends Split<TField, '.'> = Split<TField, '.'>>(field: TField, valuePropertyName?: TValuePropertyName): buildValuePath<TField, TValuePropertyName, TSplit>;
|
|
24
|
+
export type DateFieldTypeMap = {
|
|
25
|
+
date: Date;
|
|
26
|
+
string: string;
|
|
27
|
+
};
|
|
28
|
+
export type DateFieldType = keyof DateFieldTypeMap;
|
|
29
|
+
export type DefaultDateFieldType = SetDefaultString<DateFieldType, 'date'>;
|
|
30
|
+
export interface NameTransformCasingOptions<TCasing extends CasingType> {
|
|
31
|
+
/**
|
|
32
|
+
* How the `name` should be transformed for the `label`.
|
|
33
|
+
*
|
|
34
|
+
* If omitted, the default will be whatever is set during {@linkcode MultiStepFormSchema} initialization.
|
|
35
|
+
*/
|
|
36
|
+
nameTransformCasing?: Constrain<TCasing, CasingType>;
|
|
37
|
+
}
|
|
38
|
+
export interface BaseFieldOptions<TCasing extends CasingType, TDefaultValue> extends NameTransformCasingOptions<TCasing> {
|
|
39
|
+
/**
|
|
40
|
+
* The default value for the field.
|
|
41
|
+
*/
|
|
42
|
+
defaultValue: TDefaultValue;
|
|
43
|
+
/**
|
|
44
|
+
* The text for the label.
|
|
45
|
+
*
|
|
46
|
+
* If omitted, it will default to the specified casing.
|
|
47
|
+
*
|
|
48
|
+
* If `false`, `label` will be `undefined`, meaning there won't
|
|
49
|
+
* be a label for this field.
|
|
50
|
+
*/
|
|
51
|
+
label?: string | false;
|
|
52
|
+
}
|
|
53
|
+
export interface BaseDateFieldOptions<TCasing extends CasingType, TType extends DateFieldType> extends BaseFieldOptions<TCasing, Date> {
|
|
54
|
+
/**
|
|
55
|
+
* The type of the resolved field value. It can either be a `date` or a `string`.
|
|
56
|
+
*
|
|
57
|
+
* - `date`: The field value will be a `date` object.
|
|
58
|
+
* - `string`: The field value will be a `string`. If `transform` is provided, it will be used to transform the date value to a string.
|
|
59
|
+
*
|
|
60
|
+
* @default 'date'
|
|
61
|
+
*/
|
|
62
|
+
type?: TType;
|
|
63
|
+
}
|
|
64
|
+
export interface StringDateFieldOptions<TCasing extends CasingType> extends BaseDateFieldOptions<TCasing, 'string'> {
|
|
65
|
+
type: 'string';
|
|
66
|
+
/**
|
|
67
|
+
* A function to transform the date value to the desired type.
|
|
68
|
+
*
|
|
69
|
+
* If omitted, the date will be transformed to a `string` using the default `Date.toISOString` method.
|
|
70
|
+
*
|
|
71
|
+
* @param value The {@linkcode Date} value to transform.
|
|
72
|
+
* @returns The transformed value.
|
|
73
|
+
*/
|
|
74
|
+
transform?: (value: Date) => string;
|
|
75
|
+
}
|
|
76
|
+
export type ResolvedDateFieldType<T> = T extends Date ? DateFieldType : never;
|
|
77
|
+
export type DateFieldConfig<TCasing extends CasingType = DefaultCasing, TType extends DateFieldType = ResolvedDateFieldType<Date>> = StringDateFieldOptions<TCasing> | BaseDateFieldOptions<TCasing, TType>;
|
|
78
|
+
type BaseFieldConfig<TCasing extends CasingType = DefaultCasing, TDefaultValue = unknown> = BaseFieldOptions<TCasing, TDefaultValue>;
|
|
79
|
+
export type FieldConfig<TCasing extends CasingType = DefaultCasing> = Record<string, BaseFieldConfig<TCasing> | DateFieldConfig<TCasing>>;
|
|
80
|
+
type InferDefaultValue<T> = T extends string ? string : T extends number ? number : T extends true ? boolean : T extends false ? boolean : T extends object ? T extends Date ? Date : T extends ReadonlyArray<infer item> ? Array<InferDefaultValue<item>> : { -readonly [key in keyof T]: InferDefaultValue<T[key]> } : never;
|
|
81
|
+
export type inferDefaultValue<T> = T extends {
|
|
82
|
+
defaultValue: infer defaultValue;
|
|
83
|
+
} ? InferDefaultValue<defaultValue> : never;
|
|
84
|
+
export type inferNameTransformCasing<T, TDefault extends CasingType | undefined> = T extends {
|
|
85
|
+
nameTransformCasing: infer nameTransformCasing extends CasingType;
|
|
86
|
+
} ? nameTransformCasing : undefined extends TDefault ? DefaultCasing : TDefault;
|
|
87
|
+
export type inferLabel<T, Casing extends CasingType | undefined, FieldKey extends string> = T extends {
|
|
88
|
+
label: infer label extends string | false;
|
|
89
|
+
} ? label : undefined extends Casing ? ChangeCasing<FieldKey, DefaultCasing> : ChangeCasing<FieldKey, Exclude<Casing, undefined>>;
|
|
90
|
+
export type inferResolvedDateFieldType<T> = T extends {
|
|
91
|
+
type: infer type extends DateFieldType;
|
|
92
|
+
} ? type : DefaultDateFieldType;
|
|
93
|
+
export type instantiateFields<T, TDefaultCasing extends CasingType = DefaultCasing> = [T] extends [object] ? T extends instantiateConfig ? { -readonly [key in keyof T['fields']]: Expand<{
|
|
94
|
+
/**
|
|
95
|
+
* The default value for the field.
|
|
96
|
+
*/
|
|
97
|
+
defaultValue: inferDefaultValue<T['fields'][key]>;
|
|
98
|
+
/**
|
|
99
|
+
* The casing of the field name.
|
|
100
|
+
*/
|
|
101
|
+
nameTransformCasing: inferNameTransformCasing<T['fields'][key], TDefaultCasing>;
|
|
102
|
+
/**
|
|
103
|
+
* The name of the field.
|
|
104
|
+
*/
|
|
105
|
+
name: key;
|
|
106
|
+
} & (key extends string ? {
|
|
107
|
+
/**
|
|
108
|
+
* The label for the field.
|
|
109
|
+
*/
|
|
110
|
+
label: inferLabel<T['fields'][key], inferNameTransformCasing<T['fields'][key], TDefaultCasing>, key>;
|
|
111
|
+
} : {}) & (inferDefaultValue<T['fields'][key]> extends Date ? {
|
|
112
|
+
type: inferResolvedDateFieldType<T['fields'][key]>;
|
|
113
|
+
} : {})> } : never : never;
|
|
114
|
+
export type instantiateConfig<TMap extends FieldConfig = FieldConfig> = {
|
|
115
|
+
fields: TMap;
|
|
116
|
+
defaultCasing?: CasingType;
|
|
117
|
+
validateFields?: Constrain<unknown, AnyValidator, DefaultValidator>;
|
|
118
|
+
};
|
|
119
|
+
export function createFieldLabel(label: string | false | undefined, fieldName: string, casingType: CasingType): string | false;
|
|
120
|
+
/**
|
|
121
|
+
* Creates new fields for the multi step form schema.
|
|
122
|
+
* @param def - The field config.
|
|
123
|
+
* @returns The instantiated field config.
|
|
124
|
+
*/
|
|
125
|
+
export function instantiate<const def extends instantiateConfig, inst = instantiateFields<def>>(def: def): inst;
|
|
126
|
+
export function isValidFieldConfig(value: unknown): value is FieldConfig;
|
|
20
127
|
export {};
|
|
21
128
|
}
|
|
129
|
+
declare const instantiateFields: typeof fields.instantiate;
|
|
22
130
|
//#endregion
|
|
23
131
|
export { fields };
|
|
24
132
|
//# sourceMappingURL=fields.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.mts","names":[],"sources":["../../src/steps/fields.ts"],"sourcesContent":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fields.d.mts","names":[],"sources":["../../src/steps/fields.ts"],"sourcesContent":[],"mappings":"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"}
|