mirror of https://github.com/nocodb/nocodb
558 lines
14 KiB
558 lines
14 KiB
3 years ago
|
import { isMetaTable } from '@/helpers/xutils'
|
||
|
|
||
4 years ago
|
/* eslint-disable */
|
||
|
/**
|
||
|
*
|
||
|
*
|
||
|
* @export
|
||
|
* @param {*} data - json object from config.xc.json
|
||
|
* @returns {*} projects - vuetify treeview object
|
||
|
*/
|
||
|
export default function (data) {
|
||
|
// data is projects array from sqlite with xmigarator.json file data as project.data
|
||
|
const projects = [];
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const el = data[i];
|
||
|
const uniqKey = `${i}`;
|
||
|
const json = {
|
||
|
type: "project",
|
||
|
name: el.projectJson.title + " (Project)",
|
||
|
key: uniqKey,
|
||
|
active: true,
|
||
|
children: envParser(el.projectJson.envs, uniqKey, el.projectJson),
|
||
|
_nodes: {key: uniqKey, type: "project"}
|
||
|
};
|
||
|
projects.push(json);
|
||
|
}
|
||
|
|
||
|
// console.log(projects);
|
||
|
|
||
|
return projects;
|
||
|
}
|
||
|
|
||
|
function envParser(data, projectKey, projectJson) {
|
||
|
const envDirUniqKey = projectKey + ".projectJson.envs";
|
||
|
const envs = [
|
||
|
{
|
||
|
type: "envDir",
|
||
|
name: "environments",
|
||
|
key: envDirUniqKey,
|
||
|
children: [],
|
||
|
_nodes: {key: envDirUniqKey, type: "envDir", projectKey: projectKey}
|
||
|
}
|
||
|
];
|
||
|
for (const key in data) {
|
||
|
if (data.hasOwnProperty(key)) {
|
||
|
const env = data[key];
|
||
|
const envKey = `${projectKey}.projectJson.envs.${key}.db`;
|
||
|
const json = {
|
||
|
type: "env",
|
||
|
name: `${key} (${projectJson.workingEnv === key ? 'Active Env' : 'Env'})`,
|
||
|
key: envKey,
|
||
|
children: dbparser(env.db, envKey, key),
|
||
|
_nodes: {key: envKey, type: "env", env: key, envDirKey: envDirUniqKey},
|
||
|
active: key === projectJson.workingEnv
|
||
|
};
|
||
|
envs[0].children.push(json);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return envs[0].children;
|
||
|
}
|
||
|
|
||
|
function dbparser(data, envKey, env) {
|
||
|
const dbs = [];
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const db = data[i];
|
||
|
const dbKey = `${envKey}.${i}`;
|
||
3 years ago
|
db.tables = db.tables?.filter(t => !isMetaTable(t.table_name))
|
||
4 years ago
|
let json = {};
|
||
|
json = {
|
||
|
type: "db",
|
||
|
name: `${db.connection.database} (${db.meta.dbAlias})`,
|
||
|
key: dbKey,
|
||
|
dbConnection: db,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: dbKey,
|
||
|
type: "db",
|
||
|
env,
|
||
|
dbAlias: db.meta.dbAlias,
|
||
|
envKey: envKey,
|
||
|
dbConnection: db
|
||
|
}
|
||
|
};
|
||
|
|
||
|
json.children.push(tableParser(db.tables, dbKey, env, db.meta.dbAlias, db));
|
||
|
// enable extra
|
||
3 years ago
|
// json.children.push(viewsParser(db.views, dbKey, env, db.meta.dbAlias, db));
|
||
4 years ago
|
|
||
|
// if (db.client !== 'sqlite3')
|
||
|
// json.children.push(functionsParser(db.functions, dbKey, env, db.meta.dbAlias, db));
|
||
|
//
|
||
|
// if (db.client === 'pg' || db.client === 'oracledb') {
|
||
|
//
|
||
|
// json.children.push(sequencesParser(db.sequences, dbKey, env, db.meta.dbAlias, db));
|
||
|
// } else if (db.client === 'mssql') {
|
||
|
//
|
||
|
// json.children.push(procedureParser(db.procedures, dbKey, env, db.meta.dbAlias, db));
|
||
|
// json.children.push(sequencesParser(db.sequences, dbKey, env, db.meta.dbAlias, db));
|
||
|
// } else if (db.client === 'sqlite3') {
|
||
|
//
|
||
|
// } else {
|
||
|
// json.children.push(procedureParser(db.procedures, dbKey, env, db.meta.dbAlias, db));
|
||
|
// }
|
||
|
|
||
3 years ago
|
// json.children.push(migrationsParser([], dbKey, env, db.meta.dbAlias, db));
|
||
4 years ago
|
json.children.push(sqlClientParser([], dbKey, env, db.meta.dbAlias, db));
|
||
|
dbs.push(json);
|
||
|
}
|
||
|
|
||
|
return dbs;
|
||
|
}
|
||
|
|
||
|
function migrationsParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const tableDirKey = dbKey + ".migrations";
|
||
|
const tables = {
|
||
|
type: "migrationsDir",
|
||
|
name: data.length ? `Audit (${data.length})` : `Audit`,
|
||
|
key: tableDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Click for Migrations",
|
||
|
_nodes: {
|
||
|
key: tableDirKey,
|
||
|
type: "migrationsDir",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const table = data[i];
|
||
|
const tableKey = `${tableDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "table",
|
||
3 years ago
|
name: table.title,
|
||
4 years ago
|
key: tableDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: tableKey,
|
||
|
type: "table",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
tableDirKey: tableDirKey,
|
||
3 years ago
|
table_name: table.table_name,
|
||
|
title: table.title,
|
||
4 years ago
|
dbConnection
|
||
3 years ago
|
}
|
||
4 years ago
|
};
|
||
|
tables.children.push(json);
|
||
|
}
|
||
|
|
||
|
return tables;
|
||
|
}
|
||
|
|
||
|
function apisParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const tableDirKey = dbKey + ".apis";
|
||
|
const tables = {
|
||
|
type: "apisDir",
|
||
|
name: data.length ? `API Server (${data.length})` : `API Server`,
|
||
|
key: tableDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "API server",
|
||
|
_nodes: {
|
||
|
key: tableDirKey,
|
||
|
type: "apisDir",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const table = data[i];
|
||
|
const tableKey = `${tableDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "table",
|
||
|
name: table.table_name,
|
||
|
key: tableDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: tableKey,
|
||
|
type: "table",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
tableDirKey: tableDirKey,
|
||
3 years ago
|
table_name: table.table_name,
|
||
|
title: table.title,
|
||
4 years ago
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
tables.children.push(json);
|
||
|
}
|
||
|
|
||
|
return tables;
|
||
|
}
|
||
|
|
||
|
function sqlClientParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const tableDirKey = dbKey + ".sqlClient";
|
||
|
const tables = {
|
||
|
type: "sqlClientDir",
|
||
|
name: data.length ? `SQL Client(${data.length})` : `SQL Client`,
|
||
|
key: tableDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "SQL Client",
|
||
|
_nodes: {
|
||
|
key: tableDirKey,
|
||
|
type: "sqlClientDir",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const table = data[i];
|
||
|
const tableKey = `${tableDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "table",
|
||
3 years ago
|
name: table.title,
|
||
4 years ago
|
key: tableDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: tableKey,
|
||
|
type: "table",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
tableDirKey: tableDirKey,
|
||
3 years ago
|
table_name: table.table_name,
|
||
|
title: table.title,
|
||
4 years ago
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
tables.children.push(json);
|
||
|
}
|
||
|
|
||
|
return tables;
|
||
|
}
|
||
|
|
||
|
function apiClientParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const tableDirKey = dbKey + ".apiClient";
|
||
|
const tables = {
|
||
|
type: "apiClientDir",
|
||
|
name: data.length ? `Api Client(${data.length})` : `API Client`,
|
||
|
key: tableDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Rest API Client",
|
||
|
_nodes: {
|
||
|
key: tableDirKey,
|
||
|
type: "apiClientDir",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const table = data[i];
|
||
|
const tableKey = `${tableDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "table",
|
||
3 years ago
|
name: table.title,
|
||
4 years ago
|
key: tableDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: tableKey,
|
||
|
type: "table",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
tableDirKey: tableDirKey,
|
||
3 years ago
|
title: table.title,
|
||
4 years ago
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
tables.children.push(json);
|
||
|
}
|
||
|
|
||
|
return tables;
|
||
|
}
|
||
|
|
||
|
function seedParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const tableDirKey = dbKey + ".seedParser";
|
||
|
const seeds = {
|
||
|
type: "apiClientDir",
|
||
|
name: data.length ? `Seed DB(${data.length})` : `Seed DB`,
|
||
|
key: tableDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Seed Database",
|
||
|
_nodes: {
|
||
|
key: tableDirKey,
|
||
|
type: "seedParserDir",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
// for (let i = 0; i < data.length; i++) {
|
||
|
// const table = data[i];
|
||
|
// const tableKey = `${tableDirKey}.${i}`;
|
||
|
// const json = {
|
||
|
// type: "table",
|
||
3 years ago
|
// name: table.table_name,
|
||
4 years ago
|
// key: tableDirKey + "." + i,
|
||
|
// children: [],
|
||
|
// _nodes: {
|
||
|
// key: tableKey,
|
||
|
// type: "table",
|
||
|
// env,
|
||
|
// dbAlias,
|
||
|
// tableDirKey: tableDirKey,
|
||
3 years ago
|
// table_name: table.table_name
|
||
4 years ago
|
// }
|
||
|
// };
|
||
|
// tables.children.push(json);
|
||
|
// }
|
||
|
|
||
|
return seeds;
|
||
|
}
|
||
|
|
||
|
|
||
|
function tableParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const tableDirKey = dbKey + ".tables";
|
||
|
const tables = {
|
||
|
type: "tableDir",
|
||
|
name: data.length ? `Tables (${data.length})` : `Tables`,
|
||
|
key: tableDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Click to Load All Tables",
|
||
|
_nodes: {
|
||
|
key: tableDirKey,
|
||
|
type: "tableDir",
|
||
|
env,
|
||
|
dbAlias,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const table = data[i];
|
||
|
const tableKey = `${tableDirKey}.${i}`;
|
||
3 years ago
|
let json;
|
||
|
json= {
|
||
3 years ago
|
type: table.type || 'table',
|
||
|
name: table.title,
|
||
|
table_name: table.table_name,
|
||
|
id: table.id,
|
||
|
title: table.title || table.table_name,
|
||
3 years ago
|
order: table.order,
|
||
4 years ago
|
key: tableDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: tableKey,
|
||
3 years ago
|
type: table.type,
|
||
4 years ago
|
env,
|
||
|
dbAlias,
|
||
|
tableDirKey: tableDirKey,
|
||
3 years ago
|
table_name: table.table_name,
|
||
|
title: table.title,
|
||
4 years ago
|
dbConnection
|
||
3 years ago
|
}
|
||
4 years ago
|
};
|
||
|
tables.children.push(json);
|
||
|
}
|
||
|
|
||
3 years ago
|
|
||
|
|
||
4 years ago
|
return tables;
|
||
|
}
|
||
|
|
||
|
function viewsParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const viewDirKey = dbKey + ".views";
|
||
|
const views = {
|
||
|
type: "viewDir",
|
||
|
name: data.length ? `Views (${data.length})` : `Views`,
|
||
|
key: viewDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Click to Load All Views",
|
||
|
_nodes: {
|
||
|
key: viewDirKey,
|
||
|
type: "viewDir",
|
||
|
dbAlias,
|
||
|
env,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const view = data[i];
|
||
|
const viewKey = `${viewDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "view",
|
||
3 years ago
|
table_name: view.table_name || view.view_name,
|
||
|
title: view.title,
|
||
|
id: view.id,
|
||
|
name: view.title || view.view_name,
|
||
4 years ago
|
key: viewDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
type: "view",
|
||
|
key: viewKey,
|
||
|
dbAlias,
|
||
|
env,
|
||
|
view_name: view.view_name,
|
||
3 years ago
|
title: view.title,
|
||
4 years ago
|
viewDirKey: viewDirKey,
|
||
|
dbConnection
|
||
|
},
|
||
|
creator_tooltip: `SQL View name : '${view.view_name}'`
|
||
|
};
|
||
|
views.children.push(json);
|
||
|
}
|
||
|
return views;
|
||
|
}
|
||
|
|
||
|
function functionsParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const functionDirKey = dbKey + ".functions";
|
||
|
const functions = {
|
||
|
type: "functionDir",
|
||
|
name: data.length ? `Functions (${data.length})` : `Functions`,
|
||
|
key: functionDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Click to Load All Functions",
|
||
|
_nodes: {
|
||
|
type: "functionDir",
|
||
|
key: functionDirKey,
|
||
|
dbAlias,
|
||
|
env,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const _function = data[i];
|
||
|
const functionKey = `${functionDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "function",
|
||
|
name: _function.function_name,
|
||
|
key: functionDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: functionKey,
|
||
|
type: "function",
|
||
|
dbAlias,
|
||
|
env,
|
||
|
function_name: _function.function_name,
|
||
|
functionDirKey: functionDirKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
functions.children.push(json);
|
||
|
}
|
||
|
return functions;
|
||
|
}
|
||
|
|
||
|
function procedureParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const procedureDirKey = dbKey + ".procedures";
|
||
|
const procedures = {
|
||
|
type: "procedureDir",
|
||
|
name: data.length ? `Procedures (${data.length})` : `Procedures`,
|
||
|
key: procedureDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Click to Load All Procedures",
|
||
|
_nodes: {
|
||
|
key: procedureDirKey,
|
||
|
type: "procedureDir",
|
||
|
dbAlias,
|
||
|
env,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const procedure = data[i];
|
||
|
const procedureKey = `${procedureDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "procedure",
|
||
|
name: procedure.procedure_name,
|
||
|
key: procedureDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: procedureKey,
|
||
|
type: "procedure",
|
||
|
dbAlias,
|
||
|
env,
|
||
|
procedure_name: procedure.procedure_name,
|
||
|
procedureDirKey: procedureDirKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
procedures.children.push(json);
|
||
|
}
|
||
|
return procedures;
|
||
|
}
|
||
|
|
||
|
function sequencesParser(data = [], dbKey, env, dbAlias, dbConnection) {
|
||
|
const sequenceDirKey = dbKey + ".sequences";
|
||
|
const sequences = {
|
||
|
type: "sequenceDir",
|
||
|
name: data.length ? `Sequences (${data.length})` : `Sequences`,
|
||
|
key: sequenceDirKey,
|
||
|
children: [],
|
||
|
tooltip: data[0] ? "" : "Click to Load All Sequences",
|
||
|
_nodes: {
|
||
|
key: sequenceDirKey,
|
||
|
type: "sequenceDir",
|
||
|
dbAlias,
|
||
|
env,
|
||
|
dbKey: dbKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
for (let i = 0; i < data.length; i++) {
|
||
|
const sequence = data[i];
|
||
|
const sequenceKey = `${sequenceDirKey}.${i}`;
|
||
|
const json = {
|
||
|
type: "sequence",
|
||
|
name: sequence.sequence_name,
|
||
|
key: sequenceDirKey + "." + i,
|
||
|
children: [],
|
||
|
_nodes: {
|
||
|
key: sequenceKey,
|
||
|
type: "sequence",
|
||
|
dbAlias,
|
||
|
env,
|
||
|
sequence_name: sequence.sequence_name,
|
||
|
sequenceDirKey: sequenceDirKey,
|
||
|
dbConnection
|
||
|
}
|
||
|
};
|
||
|
sequences.children.push(json);
|
||
|
}
|
||
|
return sequences;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @copyright Copyright (c) 2021, Xgene Cloud Ltd
|
||
|
*
|
||
|
* @author Naveen MR <oof1lab@gmail.com>
|
||
|
* @author Pranav C Balan <pranavxc@gmail.com>
|
||
|
*
|
||
|
* @license GNU AGPL version 3 or any later version
|
||
|
*
|
||
|
* This program is free software: you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU Affero General Public License as
|
||
|
* published by the Free Software Foundation, either version 3 of the
|
||
|
* License, or (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU Affero General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU Affero General Public License
|
||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
*
|
||
|
*/
|