@dataramen/cli 0.0.4 → 0.0.5-4.beta-2
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 +75 -0
- package/bin/run.js +5 -135
- package/dist/README.md +75 -0
- package/dist/code/cli.js +5 -135
- package/dist/code/migrations/1754425464078-InitialMigration.js +1 -0
- package/dist/code/migrations/1755358316764-usersManagement.js +1 -0
- package/dist/code/migrations/1758316062697-queriesHistory.js +1 -0
- package/dist/code/migrations/1760039807820-multipleWorkbenches.js +1 -0
- package/dist/code/migrations/1760816916693-workbenchTabs.js +1 -0
- package/dist/code/migrations/1762376647080-link-tab-to-datasource.js +1 -0
- package/dist/code/migrations/1762683837767-addSearchIndexes.js +1 -0
- package/dist/code/server.js +57 -0
- package/dist/code/web/assets/index-D70wG5MQ.css +1 -0
- package/dist/code/web/assets/index-DUxATqfw.js +237 -0
- package/dist/code/web/dataramen.png +0 -0
- package/dist/code/web/dataramen.svg +85 -0
- package/dist/code/web/index.html +16 -0
- package/dist/code/web/robots.txt +2 -0
- package/dist/package.json +1 -1
- package/package.json +30 -4
- package/dist/code/proxy.js +0 -63
- package/dist/code/register.windows.js +0 -44
- package/dist/env/.env.default +0 -5
package/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 🍜 DataRamen CLI
|
|
2
|
+
|
|
3
|
+
Your cozy corner for exploring and working with SQL databases - no query writing required.
|
|
4
|
+
|
|
5
|
+
DataRamen CLI lets you launch a powerful, local database exploration app that connects effortlessly to MySQL and PostgreSQL databases. Browse schemas, follow relationships, and insert/update data - all from your browser.
|
|
6
|
+
|
|
7
|
+
## ✨ Features
|
|
8
|
+
|
|
9
|
+
- 🔌 **Connect to PostgreSQL & MySQL**
|
|
10
|
+
Securely plug in your credentials - you're ready to explore.
|
|
11
|
+
|
|
12
|
+
- 🧭 **Visual Schema Explorer**
|
|
13
|
+
Instantly browse tables, columns, types, primary/foreign keys, and relationships.
|
|
14
|
+
|
|
15
|
+
- 🧙 **No-SQL Querying**
|
|
16
|
+
Filter, sort, join, and summarize data using a beautiful, intuitive interface.
|
|
17
|
+
|
|
18
|
+
- 🔗 **Follow Relationships Easily**
|
|
19
|
+
Click to expand related records.
|
|
20
|
+
|
|
21
|
+
- ✏️ **Insert & Update Visually**
|
|
22
|
+
Add or modify rows with a visual editor - no SQL errors.
|
|
23
|
+
|
|
24
|
+
- 💾 **Save Queries**
|
|
25
|
+
Save your favorite views for quick access later.
|
|
26
|
+
|
|
27
|
+
## 🛠️ Installation
|
|
28
|
+
|
|
29
|
+
### 1. Install Node.js
|
|
30
|
+
|
|
31
|
+
DataRamen requires Node.js **v22 or above**.
|
|
32
|
+
👉 [Download Node.js](https://nodejs.org/)
|
|
33
|
+
|
|
34
|
+
### 2. Install DataRamen CLI
|
|
35
|
+
|
|
36
|
+
Open your terminal and run:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm i -g @dataramen/cli
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 🖥️ Usage
|
|
43
|
+
|
|
44
|
+
### Start the Local Server
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
dataramen start
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Open the App
|
|
51
|
+
|
|
52
|
+
Go to `localhost:4466` in your browser. Your local server will connect automatically.
|
|
53
|
+
|
|
54
|
+
### Update the App
|
|
55
|
+
|
|
56
|
+
You can update DataRamen CLI using `NPM` install command:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm i -g @dataramen/cli
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The above command will install latest stable version.
|
|
63
|
+
|
|
64
|
+
## 🔧 Additional CLI Commands
|
|
65
|
+
|
|
66
|
+
| Command | Description |
|
|
67
|
+
|-------------------|----------------------------------|
|
|
68
|
+
| `dataramen start` | Start the local DataRamen server |
|
|
69
|
+
| `dataramen stop` | Stop the local server |
|
|
70
|
+
| `dataramen open` | Open local webapp |
|
|
71
|
+
| `dataramen logs` | Show logs from the running server|
|
|
72
|
+
|
|
73
|
+
## ❤️ Made with love by [Oleksandr Demian](https://github.com/OleksandrDemian)
|
|
74
|
+
|
|
75
|
+
Visit [dataramen.xyz](https://dataramen.xyz) for more info.
|
package/bin/run.js
CHANGED
|
@@ -1,135 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const os = require('node:os');
|
|
7
|
-
const fs = require("fs-extra");
|
|
8
|
-
|
|
9
|
-
const processName = "@dataramen/local-server";
|
|
10
|
-
|
|
11
|
-
const homeDir = os.homedir();
|
|
12
|
-
const filesPath = path.join(homeDir, ".dataramen", ".runtime", "server");
|
|
13
|
-
|
|
14
|
-
const scriptPkg = fs.readJsonSync(path.join(__dirname, "..", "package.json"));
|
|
15
|
-
const protocol = "dataramen://";
|
|
16
|
-
|
|
17
|
-
yargs()
|
|
18
|
-
.command("start", 'Default command, start/restart the server', () => {
|
|
19
|
-
const hasPm2 = checkPm2();
|
|
20
|
-
if (!hasPm2) {
|
|
21
|
-
installPm2();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
start();
|
|
25
|
-
})
|
|
26
|
-
.command("logs", 'Listen for logs', () => {
|
|
27
|
-
execSync(`pm2 logs ${processName}`, {
|
|
28
|
-
stdio: "inherit",
|
|
29
|
-
});
|
|
30
|
-
})
|
|
31
|
-
.command("stop", 'Stop the server', () => {
|
|
32
|
-
execSync(`pm2 stop ${processName}`, {
|
|
33
|
-
stdio: "inherit",
|
|
34
|
-
})
|
|
35
|
-
})
|
|
36
|
-
.command("unregister", "Unregister custom protocol handler", () => {
|
|
37
|
-
if (os.platform() === "win32") {
|
|
38
|
-
require(path.join(__dirname, "..", "dist", "code", "register.windows.js")).unregister();
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
|
-
.parse(isBrowserStart() ? getBrowserArgs() : yargsHelpers.hideBin(process.argv));
|
|
42
|
-
|
|
43
|
-
function isInstallation () {
|
|
44
|
-
return scriptPkg.name === "@dataramen/cli";
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function isBrowserStart () {
|
|
48
|
-
return !!process.argv[2]?.startsWith(protocol);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function getBrowserArgs () {
|
|
52
|
-
const str = (process.argv[2] || '').replace(protocol, ''); // remove protocol
|
|
53
|
-
console.log("Browser args", str.split("/"));
|
|
54
|
-
return str.split("/");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function checkPm2 () {
|
|
58
|
-
try {
|
|
59
|
-
execSync(`pm2 -v`, {
|
|
60
|
-
stdio: "inherit"
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
return true;
|
|
64
|
-
} catch (e) {
|
|
65
|
-
console.error("Library does not exist");
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function installPm2 () {
|
|
71
|
-
console.log("Install Pm2");
|
|
72
|
-
execSync(`npm i -g pm2`, {
|
|
73
|
-
stdio: "inherit"
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function stopExisting () {
|
|
78
|
-
try {
|
|
79
|
-
execSync(`pm2 stop "${processName}"`);
|
|
80
|
-
} catch (e) {}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function registerServer () {
|
|
84
|
-
try {
|
|
85
|
-
if (os.platform() === "win32") {
|
|
86
|
-
require(path.join(__dirname, "..", "dist", "code", "register.windows.js")).register();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
console.log("Custom protocol handler registered");
|
|
90
|
-
} catch (e) {
|
|
91
|
-
console.log("Failed to register server", e);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function installServer () {
|
|
96
|
-
console.log("Installing Server");
|
|
97
|
-
// copy code
|
|
98
|
-
fs.copySync(path.join(__dirname, '..', 'dist', "code"), path.join(filesPath, "code"));
|
|
99
|
-
// copy default env (do not override existing .env)
|
|
100
|
-
fs.copySync(path.join(__dirname, '..', 'dist', "env", ".env.default"), path.join(filesPath, "env", ".env.default"));
|
|
101
|
-
// copy package.json
|
|
102
|
-
fs.copySync(path.join(__dirname, '..', 'dist', "package.json"), path.join(filesPath, "package.json"));
|
|
103
|
-
|
|
104
|
-
execSync(`npm i`, {
|
|
105
|
-
stdio: "inherit",
|
|
106
|
-
cwd: filesPath,
|
|
107
|
-
});
|
|
108
|
-
console.log("Server installed");
|
|
109
|
-
|
|
110
|
-
registerServer();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function start () {
|
|
114
|
-
stopExisting();
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
if (isInstallation()) {
|
|
118
|
-
// only install if script is running from @dataramen/cli package
|
|
119
|
-
// if not, it means it was already installed, and the script is running from within the server folder
|
|
120
|
-
installServer();
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
console.log("Starting local server");
|
|
124
|
-
const appPkg = fs.readJsonSync(path.join(filesPath, "package.json"));
|
|
125
|
-
execSync(`pm2 start "${appPkg.main}" --name "${processName}" --no-autorestart`, {
|
|
126
|
-
stdio: "inherit",
|
|
127
|
-
cwd: filesPath,
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
console.log(`Local server will be available in a couple of seconds`);
|
|
131
|
-
console.log(`You can close this window`);
|
|
132
|
-
} catch (e) {
|
|
133
|
-
console.error(`Failed to start local server`, e);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var G=Object.create;var x=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var X=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of q(t))!Q.call(e,n)&&n!==r&&x(e,n,{get:()=>t[n],enumerable:!(a=U(t,n))||a.enumerable});return e};var l=(e,t,r)=>(r=e!=null?G(z(e)):{},X(t||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e));var D=l(require("yargs")),B=require("yargs/helpers");var T=require("node:os"),V=require("node:path"),Z=(0,T.homedir)(),c="@dataramen/server",i=(0,V.join)(Z,".dataramen",".runtime","server");var Y=require("node:path"),K=l(require("fs-extra")),L=require("node:child_process");var C=l(require("fs-extra")),w=require("node:path");function A(e){let t;function r(){try{return t||(t=C.readJsonSync(e)),t}catch{return}}return r}var N=A((0,w.join)(__dirname,"..","package.json")),v=A((0,w.join)(i,"package.json"));var f=l(require("fs-extra")),p=require("node:path"),k=require("node:child_process"),M=require("node:util"),E=l(require("yocto-spinner")),g=(0,M.promisify)(k.exec);function $(){try{let e=v();if(!e)return!0;let t=f.readJsonSync((0,p.join)(__dirname,"..","dist","package.json"));return e.version!==t.version}catch{return!0}}async function W(){let e=(0,E.default)({text:"Checking if PM2 is installed"}).start();try{return await g("pm2 -v"),e.success("PM2 already installed"),!0}catch{return e.warning("PM2 not installed"),!1}}async function j(){let e=(0,E.default)({text:"Installing PM2"}).start();try{await g("npm i -g pm2"),e.success("Installed PM2")}catch{e.error("Failed to install PM2"),process.exit(1)}}async function R(){let e=(0,E.default)({text:"Stop running instances of "+c}).start();try{await g(`pm2 stop "${c}"`),e.warning("Stopped "+c)}catch{e.success("No running instances of "+c+" found")}}async function I(){let e=(0,E.default)({text:"Create local server"}).start();f.removeSync((0,p.join)(i,"code")),f.copySync((0,p.join)(__dirname,"..","dist","code"),(0,p.join)(i,"code")),f.copySync((0,p.join)(__dirname,"..","dist","package.json"),(0,p.join)(i,"package.json")),e.text="Install local server dependencies",await g("npm i",{cwd:i}),e.success("Local server installed")}var P=l(require("yocto-spinner")),_=l(require("open"));var J=require("node:net");async function H(e){return new Promise(t=>{let r=(0,J.createServer)().once("error",()=>{t(!1)}).once("listening",()=>{r.close()}).once("close",()=>t(!0)).listen(e,"127.0.0.1")})}var h=l(require("node:crypto"));var S=require("fs-extra"),b=require("node:path");function ee(e){try{return(0,S.readFileSync)((0,b.join)(i,e),"utf-8")}catch{return}}function te(e){let t={},r=ee(e);if(r){let a=r.split(`
|
|
3
|
+
`);for(let n of a){let s=n.trim();if(!s||s.startsWith("#"))continue;let d=s.indexOf("=");if(d===-1)continue;let y=s.slice(0,d).trim(),u=s.slice(d+1).trim();(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t[y]=u}}return t}function ne(){let e={customValues:{},fileName:".env"};function t(){e.customValues=te(e.fileName)}function r(){let s=Object.entries(e.customValues).map(([d,y])=>`${d}=${y}`).join(`
|
|
4
|
+
`)+`
|
|
5
|
+
`;(0,S.writeFileSync)((0,b.join)(i,e.fileName),s,{encoding:"utf8"})}function a(n){if(e.customValues[n])return e.customValues[n]}return t(),{getNumber:n=>re(a(n)),getString:n=>oe(a(n)),getBoolean:n=>se(a(n)),flush:r,set:(n,s)=>{e.customValues[n]=s},unset:n=>{delete e.customValues[n]}}}function re(e){if(!e)return;let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;throw new Error("Wrong env value type")}function oe(e){if(e){if(typeof e=="string")return e;throw new Error("Wrong env value type")}}function se(e){if(!e)return;let t=e.toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1;throw new Error("Wrong env value type")}var o=ne();function O(){let e=!1;if(!o.getString("SYMM_ENCRYPTION_KEY")){let t=h.randomBytes(32).toString("hex");o.set("SYMM_ENCRYPTION_KEY",t),console.log("Generated random SYMM_ENCRYPTION_KEY"),e=!0}if(!o.getString("JWT_SECRET")){let t=h.randomBytes(32).toString("hex");o.set("JWT_SECRET",t),console.log("Generated random JWT_SECRET"),e=!0}if(!o.getString("JWT_REFRESH_SECRET")){let t=h.randomBytes(32).toString("hex");o.set("JWT_REFRESH_SECRET",t),console.log("Generated random JWT_REFRESH_SECRET"),e=!0}e&&o.flush()}var ie=async e=>{try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(5e3)})).status===200}catch{return!1}},F=async(e,t,r)=>{let a=Date.now();for(;Date.now()-a<t;){if(await ie(e))return!0;await new Promise(s=>setTimeout(s,r))}return!1};async function le(){await W()||await j(),await R();try{$()&&await I(),O();let t=o.getNumber("PORT")||4466;if(!t)throw new Error("PORT env variable not found");if(!await H(t))throw new Error(`Port ${t} is occupied by another process`);let a=(0,P.default)({text:"Starting new instance of "+c}).start(),n=K.readJsonSync((0,Y.join)(i,"package.json"));await g(`pm2 start "${n.main}" --name "${c}" --no-autorestart -- "${i}/.env"`,{cwd:i}),a.success("Local server will be available in a couple of seconds");let s=(0,P.default)({text:"Waiting for the server to become available"}).start();await F(`http://localhost:${t}/api/status`,3e4,1e3)?(await(0,_.default)(`http://localhost:${t}`),s.success(`App is running at http://localhost:${t}`)):s.error("Server failed to become available in time")}catch(t){console.error("Failed to start local server",t)}}async function me(){(0,L.execSync)(`pm2 logs ${c}`,{stdio:"inherit"})}async function ue(){await R()}function pe(){console.log(`DataRamen CLI version: ${N().version}`),console.log(`DataRamen local server version: ${v().version}`)}async function fe(){let e=o.getNumber("PORT");await(0,_.default)(`http://localhost:${e}`)}function de(e){o.set(e.prop,e.value),o.flush(),console.log(`Environment property set: ${e.prop}`)}function ge(e){o.unset(e.prop),o.flush(),console.log(`Environment property unset: ${e.prop}`)}var m={start:le,logs:me,stop:ue,version:pe,open:fe,setEnvVariable:de,unsetEnvVariable:ge};(0,D.default)((0,B.hideBin)(process.argv)).command({command:"start",describe:"Start local server, restarts if already running",handler:m.start}).command({command:"logs",describe:"Listen for logs",handler:m.logs}).command({command:"stop",describe:"Stop the server",handler:m.stop}).command({command:"open",describe:"Stop the server",handler:m.open}).command({command:"set [prop] [value]",describe:"Set env value",handler:m.setEnvVariable}).command({command:"unset [prop]",describe:"Remove env value",handler:m.unsetEnvVariable}).command({command:"version",describe:"Show version",handler:m.version}).parse();
|
package/dist/README.md
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 🍜 DataRamen CLI
|
|
2
|
+
|
|
3
|
+
Your cozy corner for exploring and working with SQL databases - no query writing required.
|
|
4
|
+
|
|
5
|
+
DataRamen CLI lets you launch a powerful, local database exploration app that connects effortlessly to MySQL and PostgreSQL databases. Browse schemas, follow relationships, and insert/update data - all from your browser.
|
|
6
|
+
|
|
7
|
+
## ✨ Features
|
|
8
|
+
|
|
9
|
+
- 🔌 **Connect to PostgreSQL & MySQL**
|
|
10
|
+
Securely plug in your credentials - you're ready to explore.
|
|
11
|
+
|
|
12
|
+
- 🧭 **Visual Schema Explorer**
|
|
13
|
+
Instantly browse tables, columns, types, primary/foreign keys, and relationships.
|
|
14
|
+
|
|
15
|
+
- 🧙 **No-SQL Querying**
|
|
16
|
+
Filter, sort, join, and summarize data using a beautiful, intuitive interface.
|
|
17
|
+
|
|
18
|
+
- 🔗 **Follow Relationships Easily**
|
|
19
|
+
Click to expand related records.
|
|
20
|
+
|
|
21
|
+
- ✏️ **Insert & Update Visually**
|
|
22
|
+
Add or modify rows with a visual editor - no SQL errors.
|
|
23
|
+
|
|
24
|
+
- 💾 **Save Queries**
|
|
25
|
+
Save your favorite views for quick access later.
|
|
26
|
+
|
|
27
|
+
## 🛠️ Installation
|
|
28
|
+
|
|
29
|
+
### 1. Install Node.js
|
|
30
|
+
|
|
31
|
+
DataRamen requires Node.js **v22 or above**.
|
|
32
|
+
👉 [Download Node.js](https://nodejs.org/)
|
|
33
|
+
|
|
34
|
+
### 2. Install DataRamen CLI
|
|
35
|
+
|
|
36
|
+
Open your terminal and run:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm i -g @dataramen/cli
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## 🖥️ Usage
|
|
43
|
+
|
|
44
|
+
### Start the Local Server
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
dataramen start
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Open the App
|
|
51
|
+
|
|
52
|
+
Go to `localhost:4466` in your browser. Your local server will connect automatically.
|
|
53
|
+
|
|
54
|
+
### Update the App
|
|
55
|
+
|
|
56
|
+
You can update DataRamen CLI using `NPM` install command:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
npm i -g @dataramen/cli
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The above command will install latest stable version.
|
|
63
|
+
|
|
64
|
+
## 🔧 Additional CLI Commands
|
|
65
|
+
|
|
66
|
+
| Command | Description |
|
|
67
|
+
|-------------------|----------------------------------|
|
|
68
|
+
| `dataramen start` | Start the local DataRamen server |
|
|
69
|
+
| `dataramen stop` | Stop the local server |
|
|
70
|
+
| `dataramen open` | Open local webapp |
|
|
71
|
+
| `dataramen logs` | Show logs from the running server|
|
|
72
|
+
|
|
73
|
+
## ❤️ Made with love by [Oleksandr Demian](https://github.com/OleksandrDemian)
|
|
74
|
+
|
|
75
|
+
Visit [dataramen.xyz](https://dataramen.xyz) for more info.
|
package/dist/code/cli.js
CHANGED
|
@@ -1,135 +1,5 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const os = require('node:os');
|
|
7
|
-
const fs = require("fs-extra");
|
|
8
|
-
|
|
9
|
-
const processName = "@dataramen/local-server";
|
|
10
|
-
|
|
11
|
-
const homeDir = os.homedir();
|
|
12
|
-
const filesPath = path.join(homeDir, ".dataramen", ".runtime", "server");
|
|
13
|
-
|
|
14
|
-
const scriptPkg = fs.readJsonSync(path.join(__dirname, "..", "package.json"));
|
|
15
|
-
const protocol = "dataramen://";
|
|
16
|
-
|
|
17
|
-
yargs()
|
|
18
|
-
.command("start", 'Default command, start/restart the server', () => {
|
|
19
|
-
const hasPm2 = checkPm2();
|
|
20
|
-
if (!hasPm2) {
|
|
21
|
-
installPm2();
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
start();
|
|
25
|
-
})
|
|
26
|
-
.command("logs", 'Listen for logs', () => {
|
|
27
|
-
execSync(`pm2 logs ${processName}`, {
|
|
28
|
-
stdio: "inherit",
|
|
29
|
-
});
|
|
30
|
-
})
|
|
31
|
-
.command("stop", 'Stop the server', () => {
|
|
32
|
-
execSync(`pm2 stop ${processName}`, {
|
|
33
|
-
stdio: "inherit",
|
|
34
|
-
})
|
|
35
|
-
})
|
|
36
|
-
.command("unregister", "Unregister custom protocol handler", () => {
|
|
37
|
-
if (os.platform() === "win32") {
|
|
38
|
-
require(path.join(__dirname, "..", "dist", "code", "register.windows.js")).unregister();
|
|
39
|
-
}
|
|
40
|
-
})
|
|
41
|
-
.parse(isBrowserStart() ? getBrowserArgs() : yargsHelpers.hideBin(process.argv));
|
|
42
|
-
|
|
43
|
-
function isInstallation () {
|
|
44
|
-
return scriptPkg.name === "@dataramen/cli";
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function isBrowserStart () {
|
|
48
|
-
return !!process.argv[2]?.startsWith(protocol);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
function getBrowserArgs () {
|
|
52
|
-
const str = (process.argv[2] || '').replace(protocol, ''); // remove protocol
|
|
53
|
-
console.log("Browser args", str.split("/"));
|
|
54
|
-
return str.split("/");
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
function checkPm2 () {
|
|
58
|
-
try {
|
|
59
|
-
execSync(`pm2 -v`, {
|
|
60
|
-
stdio: "inherit"
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
return true;
|
|
64
|
-
} catch (e) {
|
|
65
|
-
console.error("Library does not exist");
|
|
66
|
-
return false;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
function installPm2 () {
|
|
71
|
-
console.log("Install Pm2");
|
|
72
|
-
execSync(`npm i -g pm2`, {
|
|
73
|
-
stdio: "inherit"
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function stopExisting () {
|
|
78
|
-
try {
|
|
79
|
-
execSync(`pm2 stop "${processName}"`);
|
|
80
|
-
} catch (e) {}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
function registerServer () {
|
|
84
|
-
try {
|
|
85
|
-
if (os.platform() === "win32") {
|
|
86
|
-
require(path.join(__dirname, "..", "dist", "code", "register.windows.js")).register();
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
console.log("Custom protocol handler registered");
|
|
90
|
-
} catch (e) {
|
|
91
|
-
console.log("Failed to register server", e);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
function installServer () {
|
|
96
|
-
console.log("Installing Server");
|
|
97
|
-
// copy code
|
|
98
|
-
fs.copySync(path.join(__dirname, '..', 'dist', "code"), path.join(filesPath, "code"));
|
|
99
|
-
// copy default env (do not override existing .env)
|
|
100
|
-
fs.copySync(path.join(__dirname, '..', 'dist', "env", ".env.default"), path.join(filesPath, "env", ".env.default"));
|
|
101
|
-
// copy package.json
|
|
102
|
-
fs.copySync(path.join(__dirname, '..', 'dist', "package.json"), path.join(filesPath, "package.json"));
|
|
103
|
-
|
|
104
|
-
execSync(`npm i`, {
|
|
105
|
-
stdio: "inherit",
|
|
106
|
-
cwd: filesPath,
|
|
107
|
-
});
|
|
108
|
-
console.log("Server installed");
|
|
109
|
-
|
|
110
|
-
registerServer();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function start () {
|
|
114
|
-
stopExisting();
|
|
115
|
-
|
|
116
|
-
try {
|
|
117
|
-
if (isInstallation()) {
|
|
118
|
-
// only install if script is running from @dataramen/cli package
|
|
119
|
-
// if not, it means it was already installed, and the script is running from within the server folder
|
|
120
|
-
installServer();
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
console.log("Starting local server");
|
|
124
|
-
const appPkg = fs.readJsonSync(path.join(filesPath, "package.json"));
|
|
125
|
-
execSync(`pm2 start "${appPkg.main}" --name "${processName}" --no-autorestart`, {
|
|
126
|
-
stdio: "inherit",
|
|
127
|
-
cwd: filesPath,
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
console.log(`Local server will be available in a couple of seconds`);
|
|
131
|
-
console.log(`You can close this window`);
|
|
132
|
-
} catch (e) {
|
|
133
|
-
console.error(`Failed to start local server`, e);
|
|
134
|
-
}
|
|
135
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var G=Object.create;var x=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var z=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var X=(e,t,r,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of q(t))!Q.call(e,n)&&n!==r&&x(e,n,{get:()=>t[n],enumerable:!(a=U(t,n))||a.enumerable});return e};var l=(e,t,r)=>(r=e!=null?G(z(e)):{},X(t||!e||!e.__esModule?x(r,"default",{value:e,enumerable:!0}):r,e));var D=l(require("yargs")),B=require("yargs/helpers");var T=require("node:os"),V=require("node:path"),Z=(0,T.homedir)(),c="@dataramen/server",i=(0,V.join)(Z,".dataramen",".runtime","server");var Y=require("node:path"),K=l(require("fs-extra")),L=require("node:child_process");var C=l(require("fs-extra")),w=require("node:path");function A(e){let t;function r(){try{return t||(t=C.readJsonSync(e)),t}catch{return}}return r}var N=A((0,w.join)(__dirname,"..","package.json")),v=A((0,w.join)(i,"package.json"));var f=l(require("fs-extra")),p=require("node:path"),k=require("node:child_process"),M=require("node:util"),E=l(require("yocto-spinner")),g=(0,M.promisify)(k.exec);function $(){try{let e=v();if(!e)return!0;let t=f.readJsonSync((0,p.join)(__dirname,"..","dist","package.json"));return e.version!==t.version}catch{return!0}}async function W(){let e=(0,E.default)({text:"Checking if PM2 is installed"}).start();try{return await g("pm2 -v"),e.success("PM2 already installed"),!0}catch{return e.warning("PM2 not installed"),!1}}async function j(){let e=(0,E.default)({text:"Installing PM2"}).start();try{await g("npm i -g pm2"),e.success("Installed PM2")}catch{e.error("Failed to install PM2"),process.exit(1)}}async function R(){let e=(0,E.default)({text:"Stop running instances of "+c}).start();try{await g(`pm2 stop "${c}"`),e.warning("Stopped "+c)}catch{e.success("No running instances of "+c+" found")}}async function I(){let e=(0,E.default)({text:"Create local server"}).start();f.removeSync((0,p.join)(i,"code")),f.copySync((0,p.join)(__dirname,"..","dist","code"),(0,p.join)(i,"code")),f.copySync((0,p.join)(__dirname,"..","dist","package.json"),(0,p.join)(i,"package.json")),e.text="Install local server dependencies",await g("npm i",{cwd:i}),e.success("Local server installed")}var P=l(require("yocto-spinner")),_=l(require("open"));var J=require("node:net");async function H(e){return new Promise(t=>{let r=(0,J.createServer)().once("error",()=>{t(!1)}).once("listening",()=>{r.close()}).once("close",()=>t(!0)).listen(e,"127.0.0.1")})}var h=l(require("node:crypto"));var S=require("fs-extra"),b=require("node:path");function ee(e){try{return(0,S.readFileSync)((0,b.join)(i,e),"utf-8")}catch{return}}function te(e){let t={},r=ee(e);if(r){let a=r.split(`
|
|
3
|
+
`);for(let n of a){let s=n.trim();if(!s||s.startsWith("#"))continue;let d=s.indexOf("=");if(d===-1)continue;let y=s.slice(0,d).trim(),u=s.slice(d+1).trim();(u.startsWith('"')&&u.endsWith('"')||u.startsWith("'")&&u.endsWith("'"))&&(u=u.slice(1,-1)),t[y]=u}}return t}function ne(){let e={customValues:{},fileName:".env"};function t(){e.customValues=te(e.fileName)}function r(){let s=Object.entries(e.customValues).map(([d,y])=>`${d}=${y}`).join(`
|
|
4
|
+
`)+`
|
|
5
|
+
`;(0,S.writeFileSync)((0,b.join)(i,e.fileName),s,{encoding:"utf8"})}function a(n){if(e.customValues[n])return e.customValues[n]}return t(),{getNumber:n=>re(a(n)),getString:n=>oe(a(n)),getBoolean:n=>se(a(n)),flush:r,set:(n,s)=>{e.customValues[n]=s},unset:n=>{delete e.customValues[n]}}}function re(e){if(!e)return;let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;throw new Error("Wrong env value type")}function oe(e){if(e){if(typeof e=="string")return e;throw new Error("Wrong env value type")}}function se(e){if(!e)return;let t=e.toLowerCase();if(t==="true"||t==="1")return!0;if(t==="false"||t==="0")return!1;throw new Error("Wrong env value type")}var o=ne();function O(){let e=!1;if(!o.getString("SYMM_ENCRYPTION_KEY")){let t=h.randomBytes(32).toString("hex");o.set("SYMM_ENCRYPTION_KEY",t),console.log("Generated random SYMM_ENCRYPTION_KEY"),e=!0}if(!o.getString("JWT_SECRET")){let t=h.randomBytes(32).toString("hex");o.set("JWT_SECRET",t),console.log("Generated random JWT_SECRET"),e=!0}if(!o.getString("JWT_REFRESH_SECRET")){let t=h.randomBytes(32).toString("hex");o.set("JWT_REFRESH_SECRET",t),console.log("Generated random JWT_REFRESH_SECRET"),e=!0}e&&o.flush()}var ie=async e=>{try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(5e3)})).status===200}catch{return!1}},F=async(e,t,r)=>{let a=Date.now();for(;Date.now()-a<t;){if(await ie(e))return!0;await new Promise(s=>setTimeout(s,r))}return!1};async function le(){await W()||await j(),await R();try{$()&&await I(),O();let t=o.getNumber("PORT")||4466;if(!t)throw new Error("PORT env variable not found");if(!await H(t))throw new Error(`Port ${t} is occupied by another process`);let a=(0,P.default)({text:"Starting new instance of "+c}).start(),n=K.readJsonSync((0,Y.join)(i,"package.json"));await g(`pm2 start "${n.main}" --name "${c}" --no-autorestart -- "${i}/.env"`,{cwd:i}),a.success("Local server will be available in a couple of seconds");let s=(0,P.default)({text:"Waiting for the server to become available"}).start();await F(`http://localhost:${t}/api/status`,3e4,1e3)?(await(0,_.default)(`http://localhost:${t}`),s.success(`App is running at http://localhost:${t}`)):s.error("Server failed to become available in time")}catch(t){console.error("Failed to start local server",t)}}async function me(){(0,L.execSync)(`pm2 logs ${c}`,{stdio:"inherit"})}async function ue(){await R()}function pe(){console.log(`DataRamen CLI version: ${N().version}`),console.log(`DataRamen local server version: ${v().version}`)}async function fe(){let e=o.getNumber("PORT");await(0,_.default)(`http://localhost:${e}`)}function de(e){o.set(e.prop,e.value),o.flush(),console.log(`Environment property set: ${e.prop}`)}function ge(e){o.unset(e.prop),o.flush(),console.log(`Environment property unset: ${e.prop}`)}var m={start:le,logs:me,stop:ue,version:pe,open:fe,setEnvVariable:de,unsetEnvVariable:ge};(0,D.default)((0,B.hideBin)(process.argv)).command({command:"start",describe:"Start local server, restarts if already running",handler:m.start}).command({command:"logs",describe:"Listen for logs",handler:m.logs}).command({command:"stop",describe:"Stop the server",handler:m.stop}).command({command:"open",describe:"Stop the server",handler:m.open}).command({command:"set [prop] [value]",describe:"Set env value",handler:m.setEnvVariable}).command({command:"unset [prop]",describe:"Remove env value",handler:m.unsetEnvVariable}).command({command:"version",describe:"Show version",handler:m.version}).parse();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var n=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var c=(r,e)=>{for(var u in e)n(r,u,{get:e[u],enumerable:!0})},p=(r,e,u,m)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!o.call(r,s)&&s!==u&&n(r,s,{get:()=>e[s],enumerable:!(m=i(e,s))||m.enumerable});return r};var T=r=>p(n({},"__esModule",{value:!0}),r);var b={};c(b,{InitialMigration1754425464078:()=>d});module.exports=T(b);var a=require("typeorm");var t=process.env.APP_DB_TYPE==="sqlite"?"datetime":"timestamp";var d=class{name="InitialMigration1754425464078";async up(e){await e.createTable(new a.Table({name:"teams",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"name",type:"varchar",isNullable:!1},{name:"createdAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:t,default:"CURRENT_TIMESTAMP"}]})),await e.createTable(new a.Table({name:"users",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"createdAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"currentTeamId",type:"uuid",isNullable:!0}]})),await e.createTable(new a.Table({name:"users_to_teams",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"role",type:"varchar",isNullable:!1,default:"'admin'"},{name:"teamId",type:"uuid",isNullable:!0},{name:"userId",type:"uuid",isNullable:!0}]})),await e.createTable(new a.Table({name:"user_settings",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"createdAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"userId",type:"uuid",isUnique:!0}]})),await e.createTable(new a.Table({name:"data_sources",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"dbUrl",type:"varchar"},{name:"dbPort",type:"int",isNullable:!0},{name:"dbUser",type:"varchar"},{name:"dbPassword",type:"varchar",isNullable:!0},{name:"dbPasswordIv",type:"varchar",isNullable:!0},{name:"dbPasswordTag",type:"varchar",isNullable:!0},{name:"dbType",type:"varchar"},{name:"createdAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"name",type:"varchar"},{name:"description",type:"varchar",isNullable:!0},{name:"dbDatabase",type:"varchar"},{name:"dbSchema",type:"varchar",isNullable:!0},{name:"allowInsert",type:"boolean",default:!1},{name:"allowUpdate",type:"boolean",default:!1},{name:"lastInspected",type:t,isNullable:!0},{name:"status",type:"varchar",isNullable:!0},{name:"teamId",type:"uuid",isNullable:!0},{name:"ownerId",type:"uuid",isNullable:!0}]})),await e.createTable(new a.Table({name:"query",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"name",type:"varchar"},{name:"opts",type:"json",default:"'{}'"},{name:"isTrash",type:"boolean",isNullable:!0,default:!1},{name:"createdAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"teamId",type:"uuid",isNullable:!0},{name:"dataSourceId",type:"uuid",isNullable:!0}]})),await e.createTable(new a.Table({name:"db_inspection",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"tableName",type:"varchar",isNullable:!0},{name:"columns",type:"json",isNullable:!0},{name:"createdAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:t,default:"CURRENT_TIMESTAMP"},{name:"datasourceId",type:"uuid",isNullable:!0}]})),await e.createForeignKey("users",new a.TableForeignKey({columnNames:["currentTeamId"],referencedTableName:"users_to_teams",referencedColumnNames:["id"]})),await e.createForeignKeys("users_to_teams",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]})]),await e.createForeignKey("user_settings",new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]})),await e.createForeignKeys("data_sources",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["ownerId"],referencedTableName:"users",referencedColumnNames:["id"]})]),await e.createForeignKeys("query",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["dataSourceId"],referencedTableName:"data_sources",referencedColumnNames:["id"]})]),await e.createForeignKey("db_inspection",new a.TableForeignKey({columnNames:["datasourceId"],referencedTableName:"data_sources",referencedColumnNames:["id"]}))}async down(e){await e.dropTable("db_inspection",!0),await e.dropTable("query",!0),await e.dropTable("data_sources",!0),await e.dropTable("user_settings",!0),await e.dropTable("users_to_teams",!0),await e.dropTable("users",!0),await e.dropTable("teams",!0)}};0&&(module.exports={InitialMigration1754425464078});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var t=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(r,e)=>{for(var a in e)s(r,a,{get:e[a],enumerable:!0})},l=(r,e,a,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of t(e))!p.call(r,n)&&n!==a&&s(r,n,{get:()=>e[n],enumerable:!(o=m(e,n))||o.enumerable});return r};var d=r=>l(s({},"__esModule",{value:!0}),r);var w={};c(w,{UsersManagement1755358316764:()=>i});module.exports=d(w);var u=require("typeorm"),i=class{name="UsersManagement1755358316764";async up(e){await e.addColumns("users",[new u.TableColumn({name:"username",type:"varchar",isUnique:!0}),new u.TableColumn({name:"password",type:"varchar"})])}async down(e){await e.dropColumns("users",["username","password"])}};0&&(module.exports={UsersManagement1755358316764});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var m=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var c=(r,e)=>{for(var n in e)m(r,n,{get:e[n],enumerable:!0})},N=(r,e,n,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!o.call(r,s)&&s!==n&&m(r,s,{get:()=>e[s],enumerable:!(d=i(e,s))||d.enumerable});return r};var T=r=>N(m({},"__esModule",{value:!0}),r);var b={};c(b,{QueriesHistory1758316062697:()=>t});module.exports=T(b);var a=require("typeorm");var u=process.env.APP_DB_TYPE==="sqlite"?"datetime":"timestamp";var t=class{name="QueriesHistory1758316062697";async up(e){await e.createTable(new a.Table({name:"saved_queries",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"isPersonal",type:"boolean"},{name:"createdAt",type:u,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:u,default:"CURRENT_TIMESTAMP"},{name:"teamId",type:"uuid",isNullable:!0},{name:"queryId",type:"uuid",isNullable:!1},{name:"userId",type:"uuid",isNullable:!1}]})),await e.createForeignKeys("saved_queries",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["queryId"],referencedTableName:"query",referencedColumnNames:["id"]})]),await e.addColumns("query",[new a.TableColumn({name:"userId",type:"uuid",isNullable:!0})]),await e.createForeignKeys("query",[new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]})])}async down(e){await e.dropForeignKeys("query",[new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]})]),await e.dropColumns("query",["userId"]),await e.dropForeignKeys("saved_queries",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["queryId"],referencedTableName:"query",referencedColumnNames:["id"]})]),await e.dropTable("saved_queries",!0)}};0&&(module.exports={QueriesHistory1758316062697});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var s=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var b=(t,e)=>{for(var n in e)s(t,n,{get:e[n],enumerable:!0})},u=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let a of d(e))!l.call(t,a)&&a!==n&&s(t,a,{get:()=>e[a],enumerable:!(o=m(e,a))||o.enumerable});return t};var T=t=>u(s({},"__esModule",{value:!0}),t);var w={};b(w,{MultipleWorkbenches1760039807820:()=>c});module.exports=T(w);var r=require("typeorm");var i=process.env.APP_DB_TYPE==="sqlite"?"datetime":"timestamp";var c=class{name="MultipleWorkbenches1760039807820";async up(e){await e.createTable(new r.Table({name:"workbenches",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"createdAt",type:i,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:i,default:"CURRENT_TIMESTAMP"},{name:"name",type:"varchar"},{name:"archived",type:"boolean",default:!1},{name:"teamId",type:"uuid",isNullable:!0},{name:"userId",type:"uuid",isNullable:!0}]}),!0),await e.createForeignKey("workbenches",new r.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"],onDelete:"SET NULL"})),await e.createForeignKey("workbenches",new r.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"],onDelete:"SET NULL"})),await e.createTable(new r.Table({name:"workbenchTabs",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"name",type:"varchar"},{name:"createdAt",type:i,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:i,default:"CURRENT_TIMESTAMP"},{name:"workbenchId",type:"uuid",isNullable:!0},{name:"queryId",type:"uuid",isNullable:!0}]}),!0),await e.createForeignKey("workbenchTabs",new r.TableForeignKey({columnNames:["workbenchId"],referencedTableName:"workbenches",referencedColumnNames:["id"]})),await e.createForeignKey("workbenchTabs",new r.TableForeignKey({columnNames:["queryId"],referencedTableName:"queries",referencedColumnNames:["id"]}))}async down(e){let n=await e.getTable("workbenchTabs");if(n){for(let a of n.foreignKeys)await e.dropForeignKey("workbenchTabs",a);await e.dropTable("workbenchTabs")}let o=await e.getTable("workbenches");if(o){for(let a of o.foreignKeys)await e.dropForeignKey("workbenches",a);await e.dropTable("workbenches")}}};0&&(module.exports={MultipleWorkbenches1760039807820});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var t=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var o=Object.prototype.hasOwnProperty;var c=(r,e)=>{for(var n in e)t(r,n,{get:e[n],enumerable:!0})},b=(r,e,n,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!o.call(r,s)&&s!==n&&t(r,s,{get:()=>e[s],enumerable:!(d=i(e,s))||d.enumerable});return r};var T=r=>b(t({},"__esModule",{value:!0}),r);var p={};c(p,{WorkbenchTabs1760816916693:()=>u});module.exports=T(p);var a=require("typeorm");var m=process.env.APP_DB_TYPE==="sqlite"?"datetime":"timestamp";var u=class{name="WorkbenchTabs1760816916693";async up(e){await e.createTable(new a.Table({name:"workbench_tabs",columns:[{name:"id",type:"uuid",isPrimary:!0,isGenerated:!0,generationStrategy:"uuid"},{name:"createdAt",type:m,default:"CURRENT_TIMESTAMP"},{name:"updatedAt",type:m,default:"CURRENT_TIMESTAMP"},{name:"name",type:"varchar"},{name:"archived",type:"boolean",isNullable:!1,default:!1},{name:"teamId",type:"uuid",isNullable:!1},{name:"queryId",type:"uuid",isNullable:!0},{name:"userId",type:"uuid",isNullable:!1},{name:"opts",type:"json",default:"'{}'"}]})),await e.createForeignKeys("saved_queries",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["queryId"],referencedTableName:"query",referencedColumnNames:["id"]})])}async down(e){await e.dropForeignKeys("workbench_tabs",[new a.TableForeignKey({columnNames:["teamId"],referencedTableName:"teams",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["userId"],referencedTableName:"users",referencedColumnNames:["id"]}),new a.TableForeignKey({columnNames:["queryId"],referencedTableName:"query",referencedColumnNames:["id"]})]),await e.dropTable("workbench_tabs",!0)}};0&&(module.exports={WorkbenchTabs1760816916693});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var l=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var T=(a,e)=>{for(var t in e)i(a,t,{get:e[t],enumerable:!0})},_=(a,e,t,u)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of b(e))!p.call(a,r)&&r!==t&&i(a,r,{get:()=>e[r],enumerable:!(u=l(e,r))||u.enumerable});return a};var w=a=>_(i({},"__esModule",{value:!0}),a);var S={};T(S,{LinkTabToDatasource1762376647080:()=>c});module.exports=w(S);var o=require("typeorm");var C=process.env.APP_DB_TYPE==="sqlite"?"datetime":"timestamp",s={WorkbenchTabs:"workbench_tabs",Teams:"teams",Users:"users",UsersToTeams:"users_to_teams",UserSettings:"user_settings",DataSources:"data_sources",Query:"query",DbInspection:"db_inspection",SavedQueries:"saved_queries"};var m=new o.TableForeignKey({columnNames:["dataSourceId"],referencedTableName:"data_sources",referencedColumnNames:["id"]}),d=new o.TableColumn({name:"dataSourceId",type:"uuid",isNullable:!0}),n=new o.TableColumn({name:"searchString",type:"varchar",isNullable:!0}),c=class{name="LinkTabToDatasource1762376647080";async up(e){await e.addColumns(s.WorkbenchTabs,[d,n]),await e.addColumns(s.SavedQueries,[n]),await e.createForeignKeys(s.WorkbenchTabs,[m])}async down(e){await e.dropForeignKeys(s.WorkbenchTabs,[m]),await e.dropColumns(s.WorkbenchTabs,[d,n]),await e.dropColumns(s.SavedQueries,[n])}};0&&(module.exports={LinkTabToDatasource1762376647080});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var i=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var S=(s,e)=>{for(var t in e)i(s,t,{get:e[t],enumerable:!0})},T=(s,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of _(e))!p.call(s,n)&&n!==t&&i(s,n,{get:()=>e[n],enumerable:!(o=b(e,n))||o.enumerable});return s};var u=s=>T(i({},"__esModule",{value:!0}),s);var l={};S(l,{AddSearchIndexes1762683837767:()=>c});module.exports=u(l);var r=require("typeorm");var E=process.env.APP_DB_TYPE==="sqlite"?"datetime":"timestamp",a={WorkbenchTabs:"workbench_tabs",Teams:"teams",Users:"users",UsersToTeams:"users_to_teams",UserSettings:"user_settings",DataSources:"data_sources",Query:"query",DbInspection:"db_inspection",SavedQueries:"saved_queries"};var m=new r.TableIndex({name:"IDX_WORKBENCH_SEARCH_STRING",columnNames:["searchString"]}),d=new r.TableIndex({name:"IDX_SAVED_QUERY_SEARCH_STRING",columnNames:["searchString"]}),I=new r.TableIndex({name:"IDX_TABLE_NAME",columnNames:["tableName"]}),c=class{name="AddSearchIndexes1762683837767";async up(e){await e.createIndices(a.WorkbenchTabs,[m]),await e.createIndices(a.SavedQueries,[d]),await e.createIndices(a.DbInspection,[I])}async down(e){await e.dropIndices(a.DbInspection,[I]),await e.dropIndices(a.SavedQueries,[d]),await e.dropIndices(a.WorkbenchTabs,[m])}};0&&(module.exports={AddSearchIndexes1762683837767});
|