@bach.software/vue-dynamic-form 0.3.0 → 0.5.0
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/README.md +169 -162
- package/dist/examples.cjs.js +4 -4
- package/dist/examples.cjs.js.map +1 -1
- package/dist/examples.es.js +242 -219
- package/dist/examples.es.js.map +1 -1
- package/dist/mapEachMetadataItem-B4xJvJDj.js +732 -0
- package/dist/mapEachMetadataItem-B4xJvJDj.js.map +1 -0
- package/dist/mapEachMetadataItem-CDDSsb0c.cjs +6 -0
- package/dist/mapEachMetadataItem-CDDSsb0c.cjs.map +1 -0
- package/dist/src/components/DynamicForm.vue.d.ts +3 -0
- package/dist/src/components/DynamicFormItem.vue.d.ts +3 -0
- package/dist/src/components/DynamicFormItemArray.vue.d.ts +2 -0
- package/dist/src/components/DynamicFormItemChoice.vue.d.ts +2 -0
- package/dist/src/components/DynamicFormTemplate.vue.d.ts +5 -0
- package/dist/src/core/defineMetadata.d.ts +21 -10
- package/dist/src/core/useDynamicForm.d.ts +10 -3
- package/dist/src/core/useFieldArrayExtended.d.ts +2 -1
- package/dist/src/core/useValidatePartialForm.d.ts +8 -0
- package/dist/src/core/validation.d.ts +1 -0
- package/dist/src/examples/TestForm.vue.d.ts +1 -2
- package/dist/src/examples/TestFormTemplate.vue.d.ts +5 -0
- package/dist/src/examples/__tests__/TestFormTemplate.testcases.d.ts +1 -2
- package/dist/src/index.d.ts +5 -1
- package/dist/src/types/DynamicFormItemProps.d.ts +1 -4
- package/dist/src/types/DynamicFormSettings.d.ts +3 -3
- package/dist/src/types/GetDynamicFormSettingsType.d.ts +3 -0
- package/dist/src/types/MetadataConfiguration.d.ts +1 -0
- package/dist/src/utils/__tests__/mapEachMetadataItem.test.d.ts +1 -0
- package/dist/src/utils/__tests__/removeNullValues.test.d.ts +1 -0
- package/dist/src/utils/isNullOrUndefined.d.ts +2 -0
- package/dist/src/utils/removeNullValues.d.ts +5 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/vue-dynamic-form.cjs.js +1 -1
- package/dist/vue-dynamic-form.cjs.js.map +1 -1
- package/dist/vue-dynamic-form.es.js +51 -11
- package/dist/vue-dynamic-form.es.js.map +1 -1
- package/package.json +6 -7
- package/dist/src/types/KeyValue.d.ts +0 -3
- package/dist/useDynamicForm-C6-0mGw4.js +0 -737
- package/dist/useDynamicForm-C6-0mGw4.js.map +0 -1
- package/dist/useDynamicForm-SHyV1lLH.cjs +0 -6
- package/dist/useDynamicForm-SHyV1lLH.cjs.map +0 -1
- /package/dist/src/{examples/__tests__/DynamicForm.test.d.ts → utils/__tests__/isNullOrUndefined.test.d.ts} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./mapEachMetadataItem-CDDSsb0c.cjs");function u(e){return e==null}function s(e){return!u(e)}function o(e){if(e==null)return e;if(Array.isArray(e)){const a=e.map(o).filter(s);return a.length?a:void 0}if(typeof e=="object"){const a=Object.entries(e).map(([c,t])=>[c,o(t)]).filter(([c,t])=>s(t)).reduce((c,[t,r])=>({...c,[t]:r}),{});return Object.entries(a).length?a:void 0}return e}function l(e,a,c){if(!a.includes(".")&&!a.includes("[")){e[a]=c;return}const t=a.split(/\.|\[(\d+)\]/).filter(Boolean);let r=e;for(let n=0;n<t.length;n++){if(n===t.length-1){r[t[n]]=c;return}if(!(t[n]in r)||r[t[n]]===null||r[t[n]]===void 0){const m=t[n+1];r[t[n]]=/^\d+$/.test(m)?[]:{}}r=r[t[n]]}}exports.DynamicForm=i._sfc_main;exports.DynamicFormItem=i._sfc_main$1;exports.DynamicFormItemArray=i._sfc_main$2;exports.DynamicFormItemChoice=i._sfc_main$3;exports.DynamicFormTemplate=i._sfc_main$4;exports.checkTreeHasValue=i.checkTreeHasValue;exports.defineMetadata=i.defineMetadata;exports.dynamicFormSettingsKey=i.dynamicFormSettingsKey;exports.mapEachMetadataItem=i.mapEachMetadataItem;exports.useDynamicForm=i.useDynamicForm;exports.useValidatePartialForm=i.useValidatePartialForm;exports.removeNullValues=o;exports.setInPath=l;
|
|
2
2
|
//# sourceMappingURL=vue-dynamic-form.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-dynamic-form.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"file":"vue-dynamic-form.cjs.js","sources":["../src/utils/isNullOrUndefined.ts","../src/utils/removeNullValues.ts","../src/utils/setInPath.ts"],"sourcesContent":["export function isNullOrUndefined(arg: any) {\n return arg === undefined || arg === null;\n}\n\nexport function isNotNullOrUndefined(arg: any) {\n return !isNullOrUndefined(arg);\n}\n","import { isNotNullOrUndefined } from '@/utils/isNullOrUndefined';\n\n/**\n * Removes all null value's from object properties and array's.\n * @param element any value\n */\nexport function removeNullValues<T>(element: T): T | undefined {\n if (element === null || element === undefined) {\n return element;\n }\n\n if (Array.isArray(element)) {\n const items = element.map(removeNullValues).filter(isNotNullOrUndefined);\n return items.length ? (items as T) : undefined;\n }\n\n if (typeof element === 'object') {\n const entries = Object.entries(element)\n .map(([key, value]) => [key, removeNullValues(value)])\n .filter(([_, value]) => isNotNullOrUndefined(value))\n .reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});\n\n return Object.entries(entries).length ? (entries as T) : undefined;\n }\n\n return element;\n}\n","/**\n * Sets a value at a nested path within an object.\n * Based on vee-validate's internal setInPath implementation.\n * Creates intermediate objects/arrays as needed.\n *\n * @param object - The object to modify\n * @param path - Dot-separated path (e.g., \"user.address.city\") or with array notation (e.g., \"items[0].name\")\n * @param value - The value to set at the path\n */\nexport function setInPath(\n object: Record<string, any>,\n path: string,\n value: unknown,\n): void {\n // Handle simple non-nested paths\n if (!path.includes('.') && !path.includes('[')) {\n object[path] = value;\n return;\n }\n\n // Split path by dots or array brackets\n const keys = path.split(/\\.|\\[(\\d+)\\]/).filter(Boolean);\n let acc: Record<string, unknown> = object;\n\n for (let i = 0; i < keys.length; i++) {\n // If this is the last key, set the value\n if (i === keys.length - 1) {\n acc[keys[i]] = value;\n return;\n }\n\n // Create intermediate object or array if it doesn't exist\n if (!(keys[i] in acc) || acc[keys[i]] === null || acc[keys[i]] === undefined) {\n // Next key is a number? Create array, otherwise object\n const nextKey = keys[i + 1];\n acc[keys[i]] = /^\\d+$/.test(nextKey) ? [] : {};\n }\n\n acc = acc[keys[i]] as Record<string, unknown>;\n }\n}\n"],"names":["isNullOrUndefined","arg","isNotNullOrUndefined","removeNullValues","element","items","entries","key","value","_","obj","setInPath","object","path","keys","acc","i","nextKey"],"mappings":"sIAAO,SAASA,EAAkBC,EAAU,CAC1C,OAA4BA,GAAQ,IACtC,CAEO,SAASC,EAAqBD,EAAU,CAC7C,MAAO,CAACD,EAAkBC,CAAG,CAC/B,CCAO,SAASE,EAAoBC,EAA2B,CAC7D,GAAIA,GAAY,KACd,OAAOA,EAGT,GAAI,MAAM,QAAQA,CAAO,EAAG,CAC1B,MAAMC,EAAQD,EAAQ,IAAID,CAAgB,EAAE,OAAOD,CAAoB,EACvE,OAAOG,EAAM,OAAUA,EAAc,MACvC,CAEA,GAAI,OAAOD,GAAY,SAAU,CAC/B,MAAME,EAAU,OAAO,QAAQF,CAAO,EACnC,IAAI,CAAC,CAACG,EAAKC,CAAK,IAAM,CAACD,EAAKJ,EAAiBK,CAAK,CAAC,CAAC,EACpD,OAAO,CAAC,CAACC,EAAGD,CAAK,IAAMN,EAAqBM,CAAK,CAAC,EAClD,OAAO,CAACE,EAAK,CAACH,EAAKC,CAAK,KAAO,CAAE,GAAGE,EAAK,CAACH,CAAG,EAAGC,CAAA,GAAU,EAAE,EAE/D,OAAO,OAAO,QAAQF,CAAO,EAAE,OAAUA,EAAgB,MAC3D,CAEA,OAAOF,CACT,CCjBO,SAASO,EACdC,EACAC,EACAL,EACM,CAEN,GAAI,CAACK,EAAK,SAAS,GAAG,GAAK,CAACA,EAAK,SAAS,GAAG,EAAG,CAC9CD,EAAOC,CAAI,EAAIL,EACf,MACF,CAGA,MAAMM,EAAOD,EAAK,MAAM,cAAc,EAAE,OAAO,OAAO,EACtD,IAAIE,EAA+BH,EAEnC,QAASI,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAAK,CAEpC,GAAIA,IAAMF,EAAK,OAAS,EAAG,CACzBC,EAAID,EAAKE,CAAC,CAAC,EAAIR,EACf,MACF,CAGA,GAAI,EAAEM,EAAKE,CAAC,IAAKD,IAAQA,EAAID,EAAKE,CAAC,CAAC,IAAM,MAAQD,EAAID,EAAKE,CAAC,CAAC,IAAM,OAAW,CAE5E,MAAMC,EAAUH,EAAKE,EAAI,CAAC,EAC1BD,EAAID,EAAKE,CAAC,CAAC,EAAI,QAAQ,KAAKC,CAAO,EAAI,CAAA,EAAK,CAAA,CAC9C,CAEAF,EAAMA,EAAID,EAAKE,CAAC,CAAC,CACnB,CACF"}
|
|
@@ -1,15 +1,55 @@
|
|
|
1
|
-
import { _ as m, a as
|
|
1
|
+
import { _ as m, a as y, b as F, c as h, d as D, h as g, e as p, g as v, m as I, u as N, f as O } from "./mapEachMetadataItem-B4xJvJDj.js";
|
|
2
|
+
function u(e) {
|
|
3
|
+
return e == null;
|
|
4
|
+
}
|
|
5
|
+
function s(e) {
|
|
6
|
+
return !u(e);
|
|
7
|
+
}
|
|
8
|
+
function o(e) {
|
|
9
|
+
if (e == null)
|
|
10
|
+
return e;
|
|
11
|
+
if (Array.isArray(e)) {
|
|
12
|
+
const i = e.map(o).filter(s);
|
|
13
|
+
return i.length ? i : void 0;
|
|
14
|
+
}
|
|
15
|
+
if (typeof e == "object") {
|
|
16
|
+
const i = Object.entries(e).map(([a, r]) => [a, o(r)]).filter(([a, r]) => s(r)).reduce((a, [r, n]) => ({ ...a, [r]: n }), {});
|
|
17
|
+
return Object.entries(i).length ? i : void 0;
|
|
18
|
+
}
|
|
19
|
+
return e;
|
|
20
|
+
}
|
|
21
|
+
function l(e, i, a) {
|
|
22
|
+
if (!i.includes(".") && !i.includes("[")) {
|
|
23
|
+
e[i] = a;
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const r = i.split(/\.|\[(\d+)\]/).filter(Boolean);
|
|
27
|
+
let n = e;
|
|
28
|
+
for (let t = 0; t < r.length; t++) {
|
|
29
|
+
if (t === r.length - 1) {
|
|
30
|
+
n[r[t]] = a;
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
if (!(r[t] in n) || n[r[t]] === null || n[r[t]] === void 0) {
|
|
34
|
+
const c = r[t + 1];
|
|
35
|
+
n[r[t]] = /^\d+$/.test(c) ? [] : {};
|
|
36
|
+
}
|
|
37
|
+
n = n[r[t]];
|
|
38
|
+
}
|
|
39
|
+
}
|
|
2
40
|
export {
|
|
3
41
|
m as DynamicForm,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
42
|
+
y as DynamicFormItem,
|
|
43
|
+
F as DynamicFormItemArray,
|
|
44
|
+
h as DynamicFormItemChoice,
|
|
45
|
+
D as DynamicFormTemplate,
|
|
46
|
+
g as checkTreeHasValue,
|
|
47
|
+
p as defineMetadata,
|
|
48
|
+
v as dynamicFormSettingsKey,
|
|
49
|
+
I as mapEachMetadataItem,
|
|
50
|
+
o as removeNullValues,
|
|
51
|
+
l as setInPath,
|
|
52
|
+
N as useDynamicForm,
|
|
53
|
+
O as useValidatePartialForm
|
|
14
54
|
};
|
|
15
55
|
//# sourceMappingURL=vue-dynamic-form.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vue-dynamic-form.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
|
|
1
|
+
{"version":3,"file":"vue-dynamic-form.es.js","sources":["../src/utils/isNullOrUndefined.ts","../src/utils/removeNullValues.ts","../src/utils/setInPath.ts"],"sourcesContent":["export function isNullOrUndefined(arg: any) {\n return arg === undefined || arg === null;\n}\n\nexport function isNotNullOrUndefined(arg: any) {\n return !isNullOrUndefined(arg);\n}\n","import { isNotNullOrUndefined } from '@/utils/isNullOrUndefined';\n\n/**\n * Removes all null value's from object properties and array's.\n * @param element any value\n */\nexport function removeNullValues<T>(element: T): T | undefined {\n if (element === null || element === undefined) {\n return element;\n }\n\n if (Array.isArray(element)) {\n const items = element.map(removeNullValues).filter(isNotNullOrUndefined);\n return items.length ? (items as T) : undefined;\n }\n\n if (typeof element === 'object') {\n const entries = Object.entries(element)\n .map(([key, value]) => [key, removeNullValues(value)])\n .filter(([_, value]) => isNotNullOrUndefined(value))\n .reduce((obj, [key, value]) => ({ ...obj, [key]: value }), {});\n\n return Object.entries(entries).length ? (entries as T) : undefined;\n }\n\n return element;\n}\n","/**\n * Sets a value at a nested path within an object.\n * Based on vee-validate's internal setInPath implementation.\n * Creates intermediate objects/arrays as needed.\n *\n * @param object - The object to modify\n * @param path - Dot-separated path (e.g., \"user.address.city\") or with array notation (e.g., \"items[0].name\")\n * @param value - The value to set at the path\n */\nexport function setInPath(\n object: Record<string, any>,\n path: string,\n value: unknown,\n): void {\n // Handle simple non-nested paths\n if (!path.includes('.') && !path.includes('[')) {\n object[path] = value;\n return;\n }\n\n // Split path by dots or array brackets\n const keys = path.split(/\\.|\\[(\\d+)\\]/).filter(Boolean);\n let acc: Record<string, unknown> = object;\n\n for (let i = 0; i < keys.length; i++) {\n // If this is the last key, set the value\n if (i === keys.length - 1) {\n acc[keys[i]] = value;\n return;\n }\n\n // Create intermediate object or array if it doesn't exist\n if (!(keys[i] in acc) || acc[keys[i]] === null || acc[keys[i]] === undefined) {\n // Next key is a number? Create array, otherwise object\n const nextKey = keys[i + 1];\n acc[keys[i]] = /^\\d+$/.test(nextKey) ? [] : {};\n }\n\n acc = acc[keys[i]] as Record<string, unknown>;\n }\n}\n"],"names":["isNullOrUndefined","arg","isNotNullOrUndefined","removeNullValues","element","items","entries","key","value","_","obj","setInPath","object","path","keys","acc","i","nextKey"],"mappings":";AAAO,SAASA,EAAkBC,GAAU;AAC1C,SAA4BA,KAAQ;AACtC;AAEO,SAASC,EAAqBD,GAAU;AAC7C,SAAO,CAACD,EAAkBC,CAAG;AAC/B;ACAO,SAASE,EAAoBC,GAA2B;AAC7D,MAAIA,KAAY;AACd,WAAOA;AAGT,MAAI,MAAM,QAAQA,CAAO,GAAG;AAC1B,UAAMC,IAAQD,EAAQ,IAAID,CAAgB,EAAE,OAAOD,CAAoB;AACvE,WAAOG,EAAM,SAAUA,IAAc;AAAA,EACvC;AAEA,MAAI,OAAOD,KAAY,UAAU;AAC/B,UAAME,IAAU,OAAO,QAAQF,CAAO,EACnC,IAAI,CAAC,CAACG,GAAKC,CAAK,MAAM,CAACD,GAAKJ,EAAiBK,CAAK,CAAC,CAAC,EACpD,OAAO,CAAC,CAACC,GAAGD,CAAK,MAAMN,EAAqBM,CAAK,CAAC,EAClD,OAAO,CAACE,GAAK,CAACH,GAAKC,CAAK,OAAO,EAAE,GAAGE,GAAK,CAACH,CAAG,GAAGC,EAAA,IAAU,EAAE;AAE/D,WAAO,OAAO,QAAQF,CAAO,EAAE,SAAUA,IAAgB;AAAA,EAC3D;AAEA,SAAOF;AACT;ACjBO,SAASO,EACdC,GACAC,GACAL,GACM;AAEN,MAAI,CAACK,EAAK,SAAS,GAAG,KAAK,CAACA,EAAK,SAAS,GAAG,GAAG;AAC9C,IAAAD,EAAOC,CAAI,IAAIL;AACf;AAAA,EACF;AAGA,QAAMM,IAAOD,EAAK,MAAM,cAAc,EAAE,OAAO,OAAO;AACtD,MAAIE,IAA+BH;AAEnC,WAASI,IAAI,GAAGA,IAAIF,EAAK,QAAQE,KAAK;AAEpC,QAAIA,MAAMF,EAAK,SAAS,GAAG;AACzB,MAAAC,EAAID,EAAKE,CAAC,CAAC,IAAIR;AACf;AAAA,IACF;AAGA,QAAI,EAAEM,EAAKE,CAAC,KAAKD,MAAQA,EAAID,EAAKE,CAAC,CAAC,MAAM,QAAQD,EAAID,EAAKE,CAAC,CAAC,MAAM,QAAW;AAE5E,YAAMC,IAAUH,EAAKE,IAAI,CAAC;AAC1B,MAAAD,EAAID,EAAKE,CAAC,CAAC,IAAI,QAAQ,KAAKC,CAAO,IAAI,CAAA,IAAK,CAAA;AAAA,IAC9C;AAEA,IAAAF,IAAMA,EAAID,EAAKE,CAAC,CAAC;AAAA,EACnB;AACF;"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bach.software/vue-dynamic-form",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"description": "A simple yet highly extendable dynamic form system, inspired by the flexibility of XSD and powered by Vee-Validate.",
|
|
6
6
|
"author": "Jeroen Bach <jeroen@bach.software> (https://bach.software)",
|
|
7
7
|
"homepage": "https://github.com/jeroenbach/dynamic-form",
|
|
@@ -38,10 +38,9 @@
|
|
|
38
38
|
"dist"
|
|
39
39
|
],
|
|
40
40
|
"peerDependencies": {
|
|
41
|
-
"@vee-validate/rules": ">=4.
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"vue": ">=3.5"
|
|
41
|
+
"@vee-validate/rules": ">=4.12",
|
|
42
|
+
"vee-validate": ">=4.12",
|
|
43
|
+
"vue": ">=3.5.18"
|
|
45
44
|
},
|
|
46
45
|
"devDependencies": {
|
|
47
46
|
"@antfu/eslint-config": "5.2.1",
|
|
@@ -54,10 +53,10 @@
|
|
|
54
53
|
"jsdom": "26.0.0",
|
|
55
54
|
"tsc-alias": "1.8.16",
|
|
56
55
|
"typescript": "5.9.2",
|
|
57
|
-
"vee-validate": ">=4.
|
|
56
|
+
"vee-validate": ">=4.12",
|
|
58
57
|
"vite": "7.1.2",
|
|
59
58
|
"vitest": "3.2.4",
|
|
60
|
-
"vue": ">=3.5",
|
|
59
|
+
"vue": ">=3.5.18",
|
|
61
60
|
"vue-tsc": "3.0.5"
|
|
62
61
|
},
|
|
63
62
|
"scripts": {
|