dbgate-api 4.8.7 → 5.0.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/env/portal/.env +1 -1
- package/package.json +5 -5
- package/src/controllers/config.js +2 -1
- package/src/controllers/files.js +35 -0
- package/src/controllers/plugins.js +1 -0
- package/src/currentVersion.js +2 -2
- package/src/main.js +2 -2
- package/src/shell/sqlDataWriter.js +5 -4
- package/src/utility/directories.js +23 -1
- package/src/utility/socket.js +15 -5
package/env/portal/.env
CHANGED
|
@@ -38,7 +38,7 @@ SSH_LOGIN_mysqlssh=root
|
|
|
38
38
|
SSH_PASSWORD_mysqlssh=xxx
|
|
39
39
|
|
|
40
40
|
LABEL_sqlite=sqlite
|
|
41
|
-
FILE_sqlite=/home/jena
|
|
41
|
+
FILE_sqlite=/home/jena/.dbgate/files/sqlite/feeds.sqlite
|
|
42
42
|
ENGINE_sqlite=sqlite@dbgate-plugin-sqlite
|
|
43
43
|
|
|
44
44
|
# docker run -p 3000:3000 -e CONNECTIONS=mongo -e URL_mongo=mongodb://localhost:27017 -e ENGINE_mongo=mongo@dbgate-plugin-mongo -e LABEL_mongo=mongo dbgate/dbgate:beta
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dbgate-api",
|
|
3
3
|
"main": "src/index.js",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "5.0.0",
|
|
5
5
|
"homepage": "https://dbgate.org/",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"cors": "^2.8.5",
|
|
27
27
|
"cross-env": "^6.0.3",
|
|
28
28
|
"dbgate-query-splitter": "^4.9.0",
|
|
29
|
-
"dbgate-sqltree": "^
|
|
30
|
-
"dbgate-tools": "^
|
|
29
|
+
"dbgate-sqltree": "^5.0.0",
|
|
30
|
+
"dbgate-tools": "^5.0.0",
|
|
31
31
|
"diff": "^5.0.0",
|
|
32
32
|
"diff2html": "^3.4.13",
|
|
33
33
|
"eslint": "^6.8.0",
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@types/fs-extra": "^9.0.11",
|
|
65
65
|
"@types/lodash": "^4.14.149",
|
|
66
|
-
"dbgate-types": "^
|
|
66
|
+
"dbgate-types": "^5.0.0",
|
|
67
67
|
"env-cmd": "^10.1.0",
|
|
68
68
|
"node-loader": "^1.0.2",
|
|
69
69
|
"nodemon": "^2.0.2",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"webpack-cli": "^3.3.11"
|
|
73
73
|
},
|
|
74
74
|
"optionalDependencies": {
|
|
75
|
-
"better-sqlite3": "7.
|
|
75
|
+
"better-sqlite3": "7.5.0",
|
|
76
76
|
"msnodesqlv8": "^2.4.4"
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -73,7 +73,8 @@ module.exports = {
|
|
|
73
73
|
...value,
|
|
74
74
|
};
|
|
75
75
|
if (value['app.useNativeMenu'] !== true && value['app.useNativeMenu'] !== false) {
|
|
76
|
-
res['app.useNativeMenu'] = os.platform() == 'darwin' ? true : false;
|
|
76
|
+
// res['app.useNativeMenu'] = os.platform() == 'darwin' ? true : false;
|
|
77
|
+
res['app.useNativeMenu'] = false;
|
|
77
78
|
}
|
|
78
79
|
return res;
|
|
79
80
|
},
|
package/src/controllers/files.js
CHANGED
|
@@ -62,6 +62,15 @@ module.exports = {
|
|
|
62
62
|
return true;
|
|
63
63
|
},
|
|
64
64
|
|
|
65
|
+
refresh_meta: true,
|
|
66
|
+
async refresh({ folders }, req) {
|
|
67
|
+
for (const folder of folders) {
|
|
68
|
+
socket.emitChanged(`files-changed-${folder}`);
|
|
69
|
+
socket.emitChanged(`all-files-changed`);
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
},
|
|
73
|
+
|
|
65
74
|
copy_meta: true,
|
|
66
75
|
async copy({ folder, file, newFile }, req) {
|
|
67
76
|
if (!hasPermission(`files/${folder}/write`, req)) return false;
|
|
@@ -90,6 +99,12 @@ module.exports = {
|
|
|
90
99
|
}
|
|
91
100
|
},
|
|
92
101
|
|
|
102
|
+
loadFrom_meta: true,
|
|
103
|
+
async loadFrom({ filePath, format }, req) {
|
|
104
|
+
const text = await fs.readFile(filePath, { encoding: 'utf-8' });
|
|
105
|
+
return deserialize(format, text);
|
|
106
|
+
},
|
|
107
|
+
|
|
93
108
|
save_meta: true,
|
|
94
109
|
async save({ folder, file, data, format }, req) {
|
|
95
110
|
if (folder.startsWith('archive:')) {
|
|
@@ -177,4 +192,24 @@ module.exports = {
|
|
|
177
192
|
await fs.writeFile(filePath, getDiagramExport(html, css, themeType, themeClassName));
|
|
178
193
|
return true;
|
|
179
194
|
},
|
|
195
|
+
|
|
196
|
+
getFileRealPath_meta: true,
|
|
197
|
+
async getFileRealPath({ folder, file }, req) {
|
|
198
|
+
if (folder.startsWith('archive:')) {
|
|
199
|
+
if (!hasPermission(`archive/write`, req)) return false;
|
|
200
|
+
const dir = resolveArchiveFolder(folder.substring('archive:'.length));
|
|
201
|
+
return path.join(dir, file);
|
|
202
|
+
} else if (folder.startsWith('app:')) {
|
|
203
|
+
if (!hasPermission(`apps/write`, req)) return false;
|
|
204
|
+
const app = folder.substring('app:'.length);
|
|
205
|
+
return path.join(appdir(), app, file);
|
|
206
|
+
} else {
|
|
207
|
+
if (!hasPermission(`files/${folder}/write`, req)) return false;
|
|
208
|
+
const dir = path.join(filesdir(), folder);
|
|
209
|
+
if (!(await fs.exists(dir))) {
|
|
210
|
+
await fs.mkdir(dir);
|
|
211
|
+
}
|
|
212
|
+
return path.join(dir, file);
|
|
213
|
+
}
|
|
214
|
+
},
|
|
180
215
|
};
|
|
@@ -162,6 +162,7 @@ module.exports = {
|
|
|
162
162
|
authTypes_meta: true,
|
|
163
163
|
async authTypes({ engine }) {
|
|
164
164
|
const packageName = extractPackageName(engine);
|
|
165
|
+
if (!packageName) return null;
|
|
165
166
|
const content = requirePlugin(packageName);
|
|
166
167
|
const driver = content.drivers.find(x => x.engine == engine);
|
|
167
168
|
if (!driver || !driver.getAuthTypes) return null;
|
package/src/currentVersion.js
CHANGED
package/src/main.js
CHANGED
|
@@ -155,8 +155,8 @@ function useAllControllers(app, electron) {
|
|
|
155
155
|
useController(app, electron, '/apps', apps);
|
|
156
156
|
}
|
|
157
157
|
|
|
158
|
-
function
|
|
158
|
+
function setElectronSender(electronSender) {
|
|
159
159
|
socket.setElectronSender(electronSender);
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
module.exports = { start, useAllControllers,
|
|
162
|
+
module.exports = { start, useAllControllers, setElectronSender, configController: config };
|
|
@@ -5,10 +5,11 @@ const { driverBase } = require('dbgate-tools');
|
|
|
5
5
|
const requireEngineDriver = require('../utility/requireEngineDriver');
|
|
6
6
|
|
|
7
7
|
class SqlizeStream extends stream.Transform {
|
|
8
|
-
constructor({ fileName }) {
|
|
8
|
+
constructor({ fileName, dataName }) {
|
|
9
9
|
super({ objectMode: true });
|
|
10
10
|
this.wasHeader = false;
|
|
11
11
|
this.tableName = path.parse(fileName).name;
|
|
12
|
+
this.dataName = dataName;
|
|
12
13
|
this.driver = driverBase;
|
|
13
14
|
}
|
|
14
15
|
_transform(chunk, encoding, done) {
|
|
@@ -28,7 +29,7 @@ class SqlizeStream extends stream.Transform {
|
|
|
28
29
|
const dmp = this.driver.createDumper();
|
|
29
30
|
dmp.put(
|
|
30
31
|
'^insert ^into %f (%,i) ^values (%,v);\n',
|
|
31
|
-
{ pureName: this.tableName },
|
|
32
|
+
{ pureName: this.dataName || this.tableName },
|
|
32
33
|
Object.keys(chunk),
|
|
33
34
|
Object.values(chunk)
|
|
34
35
|
);
|
|
@@ -38,9 +39,9 @@ class SqlizeStream extends stream.Transform {
|
|
|
38
39
|
}
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
async function sqlDataWriter({ fileName, driver, encoding = 'utf-8' }) {
|
|
42
|
+
async function sqlDataWriter({ fileName, dataName, driver, encoding = 'utf-8' }) {
|
|
42
43
|
console.log(`Writing file ${fileName}`);
|
|
43
|
-
const stringify = new SqlizeStream({ fileName });
|
|
44
|
+
const stringify = new SqlizeStream({ fileName, dataName });
|
|
44
45
|
const fileStream = fs.createWriteStream(fileName, encoding);
|
|
45
46
|
stringify.pipe(fileStream);
|
|
46
47
|
stringify['finisher'] = fileStream;
|
|
@@ -4,6 +4,7 @@ const fs = require('fs');
|
|
|
4
4
|
const cleanDirectory = require('./cleanDirectory');
|
|
5
5
|
const platformInfo = require('./platformInfo');
|
|
6
6
|
const processArgs = require('./processArgs');
|
|
7
|
+
const consoleObjectWriter = require('../shell/consoleObjectWriter');
|
|
7
8
|
|
|
8
9
|
const createDirectories = {};
|
|
9
10
|
const ensureDirectory = (dir, clean) => {
|
|
@@ -27,7 +28,7 @@ function datadirCore() {
|
|
|
27
28
|
if (processArgs.workspaceDir) {
|
|
28
29
|
return processArgs.workspaceDir;
|
|
29
30
|
}
|
|
30
|
-
return path.join(os.homedir(), 'dbgate
|
|
31
|
+
return path.join(os.homedir(), '.dbgate');
|
|
31
32
|
}
|
|
32
33
|
|
|
33
34
|
function datadir() {
|
|
@@ -112,6 +113,27 @@ function clearArchiveLinksCache() {
|
|
|
112
113
|
archiveLinksCache = {};
|
|
113
114
|
}
|
|
114
115
|
|
|
116
|
+
function migrateDataDir() {
|
|
117
|
+
if (process.env.WORKSPACE_DIR) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
if (processArgs.workspaceDir) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
const oldDir = path.join(os.homedir(), 'dbgate-data');
|
|
126
|
+
const newDir = path.join(os.homedir(), '.dbgate');
|
|
127
|
+
if (fs.existsSync(oldDir) && !fs.existsSync(newDir)) {
|
|
128
|
+
fs.renameSync(oldDir, newDir);
|
|
129
|
+
}
|
|
130
|
+
} catch (e) {
|
|
131
|
+
console.log('Error migrating data dir:', e.message);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
migrateDataDir();
|
|
136
|
+
|
|
115
137
|
module.exports = {
|
|
116
138
|
datadir,
|
|
117
139
|
jsldir,
|
package/src/utility/socket.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
let sseResponse = null;
|
|
2
2
|
let electronSender = null;
|
|
3
|
-
let init =
|
|
3
|
+
let init = [];
|
|
4
4
|
|
|
5
5
|
module.exports = {
|
|
6
6
|
setSseResponse(value) {
|
|
@@ -12,15 +12,25 @@ module.exports = {
|
|
|
12
12
|
},
|
|
13
13
|
emit(message, data) {
|
|
14
14
|
if (electronSender) {
|
|
15
|
+
if (init.length > 0) {
|
|
16
|
+
for (const item of init) {
|
|
17
|
+
electronSender.send(item.message, item.data == null ? null : item.data);
|
|
18
|
+
}
|
|
19
|
+
init = [];
|
|
20
|
+
}
|
|
15
21
|
electronSender.send(message, data == null ? null : data);
|
|
16
22
|
} else if (sseResponse) {
|
|
17
|
-
if (init) {
|
|
18
|
-
|
|
19
|
-
|
|
23
|
+
if (init.length > 0) {
|
|
24
|
+
for (const item of init) {
|
|
25
|
+
sseResponse.write(
|
|
26
|
+
`event: ${item.message}\ndata: ${JSON.stringify(item.data == null ? null : item.data)}\n\n`
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
init = [];
|
|
20
30
|
}
|
|
21
31
|
sseResponse.write(`event: ${message}\ndata: ${JSON.stringify(data == null ? null : data)}\n\n`);
|
|
22
32
|
} else {
|
|
23
|
-
init
|
|
33
|
+
init.push([{ message, data }]);
|
|
24
34
|
}
|
|
25
35
|
},
|
|
26
36
|
emitChanged(key) {
|