diff --git a/package-lock.json b/package-lock.json
index 1543635..62666d3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "@lolocompany/ra-lolo-cli",
- "version": "0.2.3",
+ "version": "0.3.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@lolocompany/ra-lolo-cli",
- "version": "0.2.3",
+ "version": "0.3.0",
"license": "ISC",
"dependencies": {
"change-case": "^5.4.4",
diff --git a/package.json b/package.json
index 147c0de..197fc4b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@lolocompany/ra-lolo-cli",
- "version": "0.2.3",
+ "version": "0.3.0",
"description": "CLI tool to build react-admin components based on json-schema",
"main": "index.js",
"bin": {
diff --git a/services/componentService.js b/services/componentService.js
index db8b887..e2af333 100644
--- a/services/componentService.js
+++ b/services/componentService.js
@@ -1,25 +1,45 @@
export const generateFields = (properties, disableChoices = false) => {
+ if (!Array.isArray(properties)) {
+ throw new Error("Invalid properties: must be an array.");
+ }
+
return properties.map((field) => {
+ if (!field || !field.component || !field.value) {
+ console.warn("Invalid field definition:", field);
+ return null;
+ }
+
// Handle NestedObjectSection
if (field.component === "NestedObjectSection") {
+ if (!Array.isArray(field.properties)) {
+ console.warn("Invalid NestedObjectSection properties:", field);
+ return null;
+ }
const nestedFields = field.properties
.map(
(nestedField) =>
- `<${nestedField.component} source="${nestedField.value}" />`
+ nestedField.component && nestedField.value
+ ? `<${nestedField.component} source="${nestedField.value}" />`
+ : null
)
+ .filter(Boolean)
.join("\n");
return `<>
-
${field.name}
+ ${field.name || "Section"}
${nestedFields}
>`;
}
// Handle ArrayObjectSimpleFormIterator
if (field.component === "ArrayObjectSimpleFormIterator") {
+ if (!Array.isArray(field.items)) {
+ console.warn("Invalid items for ArrayObjectSimpleFormIterator:", field);
+ return null;
+ }
return `<>
- ${generateFields(field.items).join("\n")}
+ ${generateFields(field.items, disableChoices).join("\n")}
>`;
@@ -39,12 +59,16 @@ export const generateFields = (properties, disableChoices = false) => {
return `
-
+
`;
}
// Handle CheckboxGroupInput for createView
if (field.component === "CheckboxGroupInput") {
+ if (!disableChoices && !Array.isArray(field.choices)) {
+ console.warn("Invalid choices for CheckboxGroupInput:", field);
+ return null;
+ }
return ``;
@@ -61,5 +85,5 @@ export const generateFields = (properties, disableChoices = false) => {
? ` choices={${JSON.stringify(field.choices)}}`
: ""
} />`;
- });
-};
+ }).filter(Boolean); // Remove null/invalid fields from the result
+};
\ No newline at end of file
diff --git a/services/schemaService.js b/services/schemaService.js
index 375c7ee..301e66c 100644
--- a/services/schemaService.js
+++ b/services/schemaService.js
@@ -16,6 +16,17 @@ export const getProperties = (schema, parentKey = "") => {
filter: [],
};
+ // Validate schema and schema.properties
+ if (
+ !schema ||
+ typeof schema !== "object" ||
+ !schema.properties ||
+ typeof schema.properties !== "object"
+ ) {
+ console.warn("Invalid schema or schema.properties is not an object.");
+ return views; // Return empty views if invalid
+ }
+
Object.keys(schema.properties).forEach((key) => {
const property = schema.properties[key];
const fieldName = parentKey ? `${parentKey}.${key}` : key;
@@ -76,4 +87,4 @@ export const getProperties = (schema, parentKey = "") => {
});
return views;
-};
+};
\ No newline at end of file