57 lines
1.3 KiB
JavaScript
57 lines
1.3 KiB
JavaScript
import fs from "fs";
|
|
import path from "path";
|
|
|
|
function getPrismaSchema() {
|
|
try {
|
|
const schemaPath = path.join(
|
|
process.cwd(),
|
|
"prisma",
|
|
"json",
|
|
"json-schema.json"
|
|
);
|
|
if (!fs.existsSync(schemaPath)) return false;
|
|
|
|
const schema = fs.readFileSync(schemaPath, "utf8");
|
|
if (!schema) return false;
|
|
|
|
return JSON.parse(schema);
|
|
} catch (error) {
|
|
console.log(error.message);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function getPrismaSchemaTable(table = null) {
|
|
const tableDisabled = ["user", "role", "userrole"];
|
|
|
|
const JSONSchema = getPrismaSchema();
|
|
|
|
if (!JSONSchema) return false;
|
|
if (table) return JSONSchema.definitions[table];
|
|
|
|
const keys = Object.keys(JSONSchema.definitions);
|
|
|
|
let schema = [];
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const tbl = JSONSchema.definitions[keys[i]];
|
|
|
|
schema.push({
|
|
name: keys[i],
|
|
fields: Object.keys(tbl.properties),
|
|
disabled: tableDisabled.includes(keys[i]),
|
|
});
|
|
}
|
|
|
|
// Sort schema by name asc and disabled last
|
|
schema.sort((a, b) => {
|
|
if (a.disabled && !b.disabled) return 1;
|
|
if (!a.disabled && b.disabled) return -1;
|
|
if (a.name < b.name) return -1;
|
|
if (a.name > b.name) return 1;
|
|
return 0;
|
|
});
|
|
|
|
return schema;
|
|
}
|
|
|
|
export { getPrismaSchema, getPrismaSchemaTable }; |