@dataramen/cli 0.0.26 → 0.0.27
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/bin/run.js +2 -2
- package/dist/code/cli.js +2 -2
- package/dist/code/proxy.js +1 -1
- package/dist/code/web/assets/{index-D1q3n6vT.js → index-D0T4eZNm.js} +2 -2
- package/dist/code/web/index.html +1 -1
- package/dist/package.json +1 -1
- package/package.json +1 -1
- package/dist/code/web/assets/index-DCPl6DZe.js +0 -310
package/bin/run.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var B=Object.create;var P=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var Q=(t,
|
|
3
|
-
`);for(let s of
|
|
2
|
+
var B=Object.create;var P=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var Q=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of q(t))!z.call(e,s)&&s!==n&&P(e,s,{get:()=>t[s],enumerable:!(o=U(t,s))||o.enumerable});return e};var f=(e,t,n)=>(n=e!=null?B(G(e)):{},Q(t||!e||!e.__esModule?P(n,"default",{value:e,enumerable:!0}):n,e));var D=f(require("yargs")),J=require("yargs/helpers");var x=require("node:os"),b=require("node:path"),X=(0,x.homedir)();var a="@dataramen/local-server",r=(0,b.join)(X,".dataramen",".runtime","server");var H=require("node:path"),L=f(require("fs-extra")),W=require("node:child_process");var R=f(require("fs-extra")),h=require("node:path");function _(e){let t;function n(){try{return t||(t=R.readJsonSync(e)),t}catch{return}}return n}var A=_((0,h.join)(__dirname,"..","package.json")),v=_((0,h.join)(r,"package.json"));var m=f(require("fs-extra")),c=require("node:path"),k=require("node:child_process"),C=require("node:util"),d=f(require("yocto-spinner")),p=(0,C.promisify)(k.exec);function T(){try{let e=v();if(!e)return!0;let t=m.readJsonSync((0,c.join)(__dirname,"..","dist","package.json"));return e.version!==t.version}catch{return!0}}async function V(){let e=(0,d.default)({text:"Checking if PM2 is installed"}).start();try{return await p("pm2 -v"),e.success("PM2 already installed"),!0}catch{return e.warning("PM2 not installed"),!1}}async function N(){let e=(0,d.default)({text:"Installing PM2"}).start();try{await p("npm i -g pm2"),e.success("Installed PM2")}catch{e.error("Failed to install PM2"),process.exit(1)}}async function y(){let e=(0,d.default)({text:"Stop running instances of "+a}).start();try{await p(`pm2 stop "${a}"`),e.warning("Stopped "+a)}catch{e.success("No running instances of "+a+" found")}}async function j(){let e=(0,d.default)({text:"Create local server"}).start();m.removeSync((0,c.join)(r,"code")),m.copySync((0,c.join)(__dirname,"..","dist","code"),(0,c.join)(r,"code")),m.copySync((0,c.join)(__dirname,"..","dist","env",".env.default"),(0,c.join)(r,"env",".env.default")),m.copySync((0,c.join)(__dirname,"..","dist","package.json"),(0,c.join)(r,"package.json")),e.text="Install local server dependencies",await p("npm i",{cwd:r}),e.success("Local server installed")}var S=f(require("yocto-spinner")),w=f(require("open"));var O=require("node:net");async function I(e){return new Promise(t=>{let n=(0,O.createServer)().once("error",()=>{t(!1)}).once("listening",()=>{n.close()}).once("close",()=>t(!0)).listen(e,"127.0.0.1")})}var M=require("fs-extra");var $=require("node:path");function Y(...e){let t={};for(let n of e){let o=n.split(`
|
|
3
|
+
`);for(let s of o){let i=s.trim();if(!i||i.startsWith("#"))continue;let g=i.indexOf("=");if(g===-1)continue;let K=i.slice(0,g).trim(),l=i.slice(g+1).trim();(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))&&(l=l.slice(1,-1)),t[K]=l}}return{getNumber:n=>te(t[n]),getString:n=>ne(t[n]),getBoolean:n=>re(t[n])}}function Z(e){let t=[];for(let n of e){let o=ee(n);o&&t.push(o)}return Y(...t)}var E=Z([".env.default",".env"]);function ee(e){try{return(0,M.readFileSync)((0,$.join)(r,"env",e),"utf-8")}catch{return}}function te(e){if(!e)return;let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;throw new Error("Wrong env value type")}function ne(e){if(e){if(typeof e=="string")return e;throw new Error("Wrong env value type")}}function re(e){if(!e)return;let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1;throw new Error("Wrong env value type")}var oe=async e=>{try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(5e3)})).status===200}catch{return!1}},F=async(e,t,n)=>{let o=Date.now();for(;Date.now()-o<t;){if(await oe(e))return!0;await new Promise(i=>setTimeout(i,n))}return!1};async function ae(){await V()||await N(),await y();try{T()&&await j();let t=E.getNumber("PORT");if(!t)throw new Error("PORT env variable not found");if(!await I(t))throw new Error(`Port ${t} is occupied by another process`);let o=(0,S.default)({text:"Starting new instance of "+a}).start(),s=L.readJsonSync((0,H.join)(r,"package.json"));await p(`pm2 start "${s.main}" --name "${a}" --no-autorestart`,{cwd:r}),o.success("Local server will be available in a couple of seconds");let i=(0,S.default)({text:"Waiting for the server to become available"}).start();await F(`http://localhost:${t}/api/status`,3e4,1e3)?(await(0,w.default)(`http://localhost:${t}`),i.success(`App is running at http://localhost:${t}`)):i.error("Server failed to become available in time")}catch(t){console.error("Failed to start local server",t)}}async function ce(){(0,W.execSync)(`pm2 logs ${a}`,{stdio:"inherit"})}async function me(){await y()}function le(){console.log(`DataRamen CLI version: ${A().version}`),console.log(`DataRamen local server version: ${v().version}`)}async function fe(){let e=E.getNumber("PORT");await(0,w.default)(`http://localhost:${e}`)}var u={start:ae,logs:ce,stop:me,version:le,open:fe};(0,D.default)((0,J.hideBin)(process.argv)).command("start","Default command, start/restart the server",u.start).command(["logs"],"Listen for logs",u.logs).command("stop","Stop the server",u.stop).command("open","Stop the server",u.open).command(["version"],"Show version",u.version).parse();
|
package/dist/code/cli.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var B=Object.create;var P=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var Q=(t,
|
|
3
|
-
`);for(let s of
|
|
2
|
+
var B=Object.create;var P=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var G=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var Q=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of q(t))!z.call(e,s)&&s!==n&&P(e,s,{get:()=>t[s],enumerable:!(o=U(t,s))||o.enumerable});return e};var f=(e,t,n)=>(n=e!=null?B(G(e)):{},Q(t||!e||!e.__esModule?P(n,"default",{value:e,enumerable:!0}):n,e));var D=f(require("yargs")),J=require("yargs/helpers");var x=require("node:os"),b=require("node:path"),X=(0,x.homedir)();var a="@dataramen/local-server",r=(0,b.join)(X,".dataramen",".runtime","server");var H=require("node:path"),L=f(require("fs-extra")),W=require("node:child_process");var R=f(require("fs-extra")),h=require("node:path");function _(e){let t;function n(){try{return t||(t=R.readJsonSync(e)),t}catch{return}}return n}var A=_((0,h.join)(__dirname,"..","package.json")),v=_((0,h.join)(r,"package.json"));var m=f(require("fs-extra")),c=require("node:path"),k=require("node:child_process"),C=require("node:util"),d=f(require("yocto-spinner")),p=(0,C.promisify)(k.exec);function T(){try{let e=v();if(!e)return!0;let t=m.readJsonSync((0,c.join)(__dirname,"..","dist","package.json"));return e.version!==t.version}catch{return!0}}async function V(){let e=(0,d.default)({text:"Checking if PM2 is installed"}).start();try{return await p("pm2 -v"),e.success("PM2 already installed"),!0}catch{return e.warning("PM2 not installed"),!1}}async function N(){let e=(0,d.default)({text:"Installing PM2"}).start();try{await p("npm i -g pm2"),e.success("Installed PM2")}catch{e.error("Failed to install PM2"),process.exit(1)}}async function y(){let e=(0,d.default)({text:"Stop running instances of "+a}).start();try{await p(`pm2 stop "${a}"`),e.warning("Stopped "+a)}catch{e.success("No running instances of "+a+" found")}}async function j(){let e=(0,d.default)({text:"Create local server"}).start();m.removeSync((0,c.join)(r,"code")),m.copySync((0,c.join)(__dirname,"..","dist","code"),(0,c.join)(r,"code")),m.copySync((0,c.join)(__dirname,"..","dist","env",".env.default"),(0,c.join)(r,"env",".env.default")),m.copySync((0,c.join)(__dirname,"..","dist","package.json"),(0,c.join)(r,"package.json")),e.text="Install local server dependencies",await p("npm i",{cwd:r}),e.success("Local server installed")}var S=f(require("yocto-spinner")),w=f(require("open"));var O=require("node:net");async function I(e){return new Promise(t=>{let n=(0,O.createServer)().once("error",()=>{t(!1)}).once("listening",()=>{n.close()}).once("close",()=>t(!0)).listen(e,"127.0.0.1")})}var M=require("fs-extra");var $=require("node:path");function Y(...e){let t={};for(let n of e){let o=n.split(`
|
|
3
|
+
`);for(let s of o){let i=s.trim();if(!i||i.startsWith("#"))continue;let g=i.indexOf("=");if(g===-1)continue;let K=i.slice(0,g).trim(),l=i.slice(g+1).trim();(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))&&(l=l.slice(1,-1)),t[K]=l}}return{getNumber:n=>te(t[n]),getString:n=>ne(t[n]),getBoolean:n=>re(t[n])}}function Z(e){let t=[];for(let n of e){let o=ee(n);o&&t.push(o)}return Y(...t)}var E=Z([".env.default",".env"]);function ee(e){try{return(0,M.readFileSync)((0,$.join)(r,"env",e),"utf-8")}catch{return}}function te(e){if(!e)return;let t=Number(e);if(!isNaN(t)&&e.trim()!=="")return t;throw new Error("Wrong env value type")}function ne(e){if(e){if(typeof e=="string")return e;throw new Error("Wrong env value type")}}function re(e){if(!e)return;let t=e.toLowerCase();if(t==="true")return!0;if(t==="false")return!1;throw new Error("Wrong env value type")}var oe=async e=>{try{return(await fetch(e,{method:"GET",signal:AbortSignal.timeout(5e3)})).status===200}catch{return!1}},F=async(e,t,n)=>{let o=Date.now();for(;Date.now()-o<t;){if(await oe(e))return!0;await new Promise(i=>setTimeout(i,n))}return!1};async function ae(){await V()||await N(),await y();try{T()&&await j();let t=E.getNumber("PORT");if(!t)throw new Error("PORT env variable not found");if(!await I(t))throw new Error(`Port ${t} is occupied by another process`);let o=(0,S.default)({text:"Starting new instance of "+a}).start(),s=L.readJsonSync((0,H.join)(r,"package.json"));await p(`pm2 start "${s.main}" --name "${a}" --no-autorestart`,{cwd:r}),o.success("Local server will be available in a couple of seconds");let i=(0,S.default)({text:"Waiting for the server to become available"}).start();await F(`http://localhost:${t}/api/status`,3e4,1e3)?(await(0,w.default)(`http://localhost:${t}`),i.success(`App is running at http://localhost:${t}`)):i.error("Server failed to become available in time")}catch(t){console.error("Failed to start local server",t)}}async function ce(){(0,W.execSync)(`pm2 logs ${a}`,{stdio:"inherit"})}async function me(){await y()}function le(){console.log(`DataRamen CLI version: ${A().version}`),console.log(`DataRamen local server version: ${v().version}`)}async function fe(){let e=E.getNumber("PORT");await(0,w.default)(`http://localhost:${e}`)}var u={start:ae,logs:ce,stop:me,version:le,open:fe};(0,D.default)((0,J.hideBin)(process.argv)).command("start","Default command, start/restart the server",u.start).command(["logs"],"Listen for logs",u.logs).command("stop","Stop the server",u.stop).command("open","Stop the server",u.open).command(["version"],"Show version",u.version).parse();
|
package/dist/code/proxy.js
CHANGED
|
@@ -60,4 +60,4 @@
|
|
|
60
60
|
where teamId = '${r}' AND (isTrash = true OR isTrash IS NULL)
|
|
61
61
|
order by name asc
|
|
62
62
|
limit 100;
|
|
63
|
-
`)}}),t.get("/team/:teamId/query",async e=>{let{teamId:r}=S(e),{search:a,size:o}=v(e),n=(parseInt(o)||20)/2,[s,i]=await Promise.all([R.find({where:{tableName:(0,J.Like)(`%${a}%`),datasource:{team:{id:r}}},relations:{datasource:!0},select:{id:!0,tableName:!0,datasource:{name:!0,id:!0}},order:{tableName:"ASC"},take:n}),E.find({where:{name:(0,J.Like)(`%${a}%`),isTrash:!1,dataSource:{team:{id:r}}},relations:{dataSource:!0},select:{id:!0,name:!0,dataSource:{name:!0,id:!0}},order:{name:"ASC"},take:n})]),l=[];return s.forEach(c=>{l.push({name:c.tableName,id:c.id,dataSourceName:c.datasource?.name||"--",dataSourceId:c.datasource?.id||"--",type:"table"})}),i.forEach(c=>{l.push({name:c.name,id:c.id,dataSourceName:c.dataSource?.name||"--",dataSourceId:c.dataSource?.id||"--",type:"query"})}),{data:l}})});function Ae(t,e=void 0){try{if(t){let r=t.split("&"),a={};for(let o of r){let n=o.split(":");a[n[0]]=n[1]}return a}}catch{}return e}var De=require("typeorm"),Pe=g(t=>{t.get("/",async e=>{let{dataSourceId:r,teamId:a,limit:o,orderBy:n,name:s}=v(e);if(!r&&!a)throw new u(400,"Either dsId or teamId is required");let i={isTrash:!1};return r&&(i.dataSource={id:r}),a&&(i.team={id:a}),s&&(i.name=(0,De.Like)(`%${s}%`)),{data:await E.find({where:i,take:o,order:Ae(n,{createdAt:"DESC"})})}}),t.get("/:id",async e=>{let{id:r}=S(e),a=await E.findOne({where:{id:r},select:{dataSource:{id:!0}},relations:{dataSource:!0}});return a?{data:a}:{status:404,data:"Query not found"}}),t.post("/",async e=>{let r=y(e),a=await m.findOne({where:{id:r.dataSourceId},relations:{team:!0}});return{data:await E.save(E.create({name:r.name,isTrash:!1,opts:r.opts,team:{id:a?.team.id},dataSource:{id:r.dataSourceId}}))}}),t.patch("/:id",async e=>{let{id:r}=S(e),a=y(e);if(!(await E.update(r,a)).affected)throw new u(404,"Workbook not found");return{data:await E.findOneBy({id:r})}}),t.delete("/:id",async e=>T.transaction(async()=>{let{id:r}=S(e);if(!(await E.delete({id:r})).affected)return{status:404,data:"Workbook not found"}}))});var F=_(xe()),$e=require("typeorm");var ke=[{value:"=",label:"equals"},{value:"<>",label:"not equal"},{value:">",label:"greater than"},{value:">=",label:"greater than or equal"},{value:"<",label:"less than"},{value:"<=",label:"less than or equal"},{value:"LIKE",label:"contains"},{value:"NOT LIKE",label:"not contains"},{value:"ILIKE",label:"case-insensitive contains"},{value:"NOT ILIKE",label:"case-insensitive not contains"},{value:"IN",label:"in list"},{value:"NOT IN",label:"not in list"},{value:"IS NULL",label:"is null"},{value:"IS NOT NULL",label:"is not null"}],Ct=ke.reduce((t,e)=>(t[e.value]=e.label,t),{}),Qr=ke.reduce((t,e)=>(t[e.label]=e.value,t),{}),x=t=>t.map(e=>({label:Ct[e],value:e})),Br=x(["=","<>",">",">=","<","<=","IN","NOT IN","IS NULL","IS NOT NULL"]),Fr=x(["=","<>","LIKE","NOT LIKE","ILIKE","NOT ILIKE","IN","NOT IN","IS NULL","IS NOT NULL"]),Wr=x(["=","<>","IS NULL","IS NOT NULL"]),jr=x(["=","<>",">",">=","<","<=","IS NULL","IS NOT NULL"]),Yr=x(["IS NULL","IS NOT NULL"]),Hr=x(["IN","NOT IN"]);var qe=["char","varchar","binary","varbinary","blob","text","enum","set","character","character varying","text","citext","uuid","xml","json","jsonb"];var te=t=>t.distinct===!0?`${t.fn} distinct ${t.value}`:`${t.fn} ${t.value}`;var re=async(t,{table:e,datasourceId:r,filters:a,joins:o,orderBy:n,size:s,page:i,columns:l,groupBy:c,searchAll:I})=>{let b=await m.findOneBy({id:r}),p=[e],f=[];if(!b)throw new u(404,"Data source not found");let h=new F.SelectQueryBuilder(b.dbType);h.setTable(e),h.setLimit(s||20),h.setOffset(s*i),a?.forEach(d=>{h.addWhere(At(d))}),o&&(h.addJoin(...o),o.forEach(d=>{p.push(d.table)})),n&&h.addOrderBy(...n.map(d=>({...d,column:Pt(d.column,b.dbType)}))),c&&c.length>0&&c.forEach(d=>h.addGroupBy(d.value));let et=await R.find({where:{tableName:(0,$e.In)(p),datasource:{id:r}}});for(let d of et)if(d.columns)for(let A of d.columns)f.push({column:A.name,table:d.tableName||"",full:`${d.tableName}.${A.name}`,type:A.type});let k;if(l&&l.length>0?k=l.map(Dt):k=f.map(d=>`${d.full} as "${d.full}"`),h.selectColumns(k),I){let d=f.filter(A=>qe.includes(A.type)&&k.includes(A.full));if(d.length>0){let A=d.map(tt=>`LOWER(${tt.full}) LIKE '%${I.toLowerCase()}%'`);h.addWhereRaw(`(${A.join(" OR ")})`,"AND")}}return{...await(await L(b,t)).executeQuery(h.toSQL(),{type:"SELECT",allowBulkUpdate:!1}),tables:p,allColumns:f}},Qe=async(t,e)=>{let r=await m.findOneBy({id:e.datasourceId});if(!r)throw new u(404,"Data source not found");let a=e.values.map(({value:i,column:l})=>typeof i=="string"?i&&i.startsWith("=")?`${l}=${i.substring(1)}`:`${l}='${i}'`:`${l}='${i}'`).join(", "),o=e.filters.map(F.buildWhereCondition).join(" AND "),n=`UPDATE ${e.table} SET ${a} WHERE ${o}`;return(await L(r,t)).executeQuery(n,{type:"UPDATE",allowBulkUpdate:!1})},Be=async(t,e)=>{let r=await m.findOneBy({id:e.datasourceId});if(!r)throw new u(404,"Data source not found");let{keys:a,values:o}=Ot(e.values),n=`INSERT INTO ${e.table} (${a}) VALUES (${o})`;return(await L(r,t)).executeQuery(n,{type:"INSERT",allowBulkUpdate:!1})},Ot=t=>{let e=t.map(({column:a})=>a).join(", "),r=t.map(({value:a})=>typeof a=="string"?a&&a.startsWith("=")?a.substring(1):`'${a}'`:a).join(", ");return{keys:e,values:r}},At=t=>{let e={...t};switch(e.operator){case"IS NULL":case"IS NOT NULL":e.value=void 0;break;case"LIKE":case"ILIKE":case"NOT LIKE":case"NOT ILIKE":e.value=e.value?.map(r=>({isColumn:r?.isColumn,value:`%${r?.value}%`}));break}return e},Dt=t=>{if(t.fn){let e=t.distinct===!0?"distinct ":"";return t.fn==="sum"?`coalesce(${t.fn}(${e}${t.value}), 0) as "${te(t)}"`:`${t.fn}(${e}${t.value}) as "${te(t)}"`}return`${t.value} as "${t.value}"`},Pt=(t,e)=>e==="postgres"?`"${t}"`:e==="mysql"?`\`${t}\``:t;var Fe=g(t=>{t.post("/sql",async e=>{let r=y(e);return{data:await re(e,r)}}),t.post("/select",async e=>{let r=y(e);return{data:await re(e,r)}}),t.post("/insert",async e=>{let r=y(e);return{data:await Be(e,r)}}),t.post("/update",async e=>{let r=y(e);return{data:await Qe(e,r)}})});var We=require("node:child_process"),je=g(t=>{t.get("/",async(e,r)=>({data:{active:!0,version:process.env.SERVER_VERSION}})),t.get("/logs",async()=>{(0,We.spawn)(`echo "${process.env.SERVER_VERSION}"`)})});var Ye=g(t=>{t.get("/",async(e,r)=>{let a=D(e);return{data:await U.find({where:{users:{id:a}}})}}),t.post("/",async(e,r)=>T.transaction(async()=>{let a=D(e),o=y(e),n=w.create();n.id=a;let s=U.create(o);return s.users=[n],await U.save(s),{data:s}}))});async function Ut(){let t=U.create({name:"Personal"}),e=await w.save(w.create({}));return t.users=[e],await U.save(t),await w.update(e.id,{currentTeam:{id:t.id}}),w.findOne({where:{},relations:{currentTeam:!0}})}var He=g(t=>{t.get("/",async(e,r)=>{let a=await w.findOne({where:{},relations:{currentTeam:!0}});return a?{data:a}:{data:await Ut()}}),t.put("/",async(e,r)=>{let a=D(e),o=y(e);if(!(await w.update(a,o)).affected)throw new u(404,"User not found");return{data:w.findOneBy({id:a})}}),t.put("/team",async(e,r)=>{let a=D(e),o=y(e);return await w.update(a,{currentTeam:{id:o.teamId}}),{data:await w.findOne({where:{id:a},relations:{currentTeam:!0}})}})});var Mt="********************************************",Ge=t=>t.slice(0,4)+Mt+t.slice(t.length-4);function Lt(t){let e=M.create(t);return t.openAiToken&&(e.openAiToken=Ge(t.openAiToken)),e}var Ke=g(t=>{t.get("/",async e=>{let r=D(e),a=await M.findOneBy({user:{id:r}});return a||(a=await M.save(M.create({user:{id:r},model:"gpt-4o"}))),{data:Lt(a)}}),t.patch("/",async e=>{let{settings:r}=y(e);if(!r.id)throw new u(400,"Settings id is required!");if(!(await M.update(r.id,r)).affected)throw new u(404,"You do not own these settings!");return{data:await M.findOneBy({id:r.id})}})});var Ze=require("node:path"),O=(0,ze.default)(),Xe=process.env.PORT?parseInt(process.env.PORT):4466,vt=["https://app.dataramen.xyz","https://dataramen.xyz","http://localhost:3000",`http://localhost:${Xe}`];function P(t,e){O.register(t,{prefix:e}),console.log("Registered "+e)}async function
|
|
63
|
+
`)}}),t.get("/team/:teamId/query",async e=>{let{teamId:r}=S(e),{search:a,size:o}=v(e),n=(parseInt(o)||20)/2,[s,i]=await Promise.all([R.find({where:{tableName:(0,J.Like)(`%${a}%`),datasource:{team:{id:r}}},relations:{datasource:!0},select:{id:!0,tableName:!0,datasource:{name:!0,id:!0}},order:{tableName:"ASC"},take:n}),E.find({where:{name:(0,J.Like)(`%${a}%`),isTrash:!1,dataSource:{team:{id:r}}},relations:{dataSource:!0},select:{id:!0,name:!0,dataSource:{name:!0,id:!0}},order:{name:"ASC"},take:n})]),l=[];return s.forEach(c=>{l.push({name:c.tableName,id:c.id,dataSourceName:c.datasource?.name||"--",dataSourceId:c.datasource?.id||"--",type:"table"})}),i.forEach(c=>{l.push({name:c.name,id:c.id,dataSourceName:c.dataSource?.name||"--",dataSourceId:c.dataSource?.id||"--",type:"query"})}),{data:l}})});function Ae(t,e=void 0){try{if(t){let r=t.split("&"),a={};for(let o of r){let n=o.split(":");a[n[0]]=n[1]}return a}}catch{}return e}var De=require("typeorm"),Pe=g(t=>{t.get("/",async e=>{let{dataSourceId:r,teamId:a,limit:o,orderBy:n,name:s}=v(e);if(!r&&!a)throw new u(400,"Either dsId or teamId is required");let i={isTrash:!1};return r&&(i.dataSource={id:r}),a&&(i.team={id:a}),s&&(i.name=(0,De.Like)(`%${s}%`)),{data:await E.find({where:i,take:o,order:Ae(n,{createdAt:"DESC"})})}}),t.get("/:id",async e=>{let{id:r}=S(e),a=await E.findOne({where:{id:r},select:{dataSource:{id:!0}},relations:{dataSource:!0}});return a?{data:a}:{status:404,data:"Query not found"}}),t.post("/",async e=>{let r=y(e),a=await m.findOne({where:{id:r.dataSourceId},relations:{team:!0}});return{data:await E.save(E.create({name:r.name,isTrash:!1,opts:r.opts,team:{id:a?.team.id},dataSource:{id:r.dataSourceId}}))}}),t.patch("/:id",async e=>{let{id:r}=S(e),a=y(e);if(!(await E.update(r,a)).affected)throw new u(404,"Workbook not found");return{data:await E.findOneBy({id:r})}}),t.delete("/:id",async e=>T.transaction(async()=>{let{id:r}=S(e);if(!(await E.delete({id:r})).affected)return{status:404,data:"Workbook not found"}}))});var F=_(xe()),$e=require("typeorm");var ke=[{value:"=",label:"equals"},{value:"<>",label:"not equal"},{value:">",label:"greater than"},{value:">=",label:"greater than or equal"},{value:"<",label:"less than"},{value:"<=",label:"less than or equal"},{value:"LIKE",label:"contains"},{value:"NOT LIKE",label:"not contains"},{value:"ILIKE",label:"case-insensitive contains"},{value:"NOT ILIKE",label:"case-insensitive not contains"},{value:"IN",label:"in list"},{value:"NOT IN",label:"not in list"},{value:"IS NULL",label:"is null"},{value:"IS NOT NULL",label:"is not null"}],Ct=ke.reduce((t,e)=>(t[e.value]=e.label,t),{}),Qr=ke.reduce((t,e)=>(t[e.label]=e.value,t),{}),x=t=>t.map(e=>({label:Ct[e],value:e})),Br=x(["=","<>",">",">=","<","<=","IN","NOT IN","IS NULL","IS NOT NULL"]),Fr=x(["=","<>","LIKE","NOT LIKE","ILIKE","NOT ILIKE","IN","NOT IN","IS NULL","IS NOT NULL"]),Wr=x(["=","<>","IS NULL","IS NOT NULL"]),jr=x(["=","<>",">",">=","<","<=","IS NULL","IS NOT NULL"]),Yr=x(["IS NULL","IS NOT NULL"]),Hr=x(["IN","NOT IN"]);var qe=["char","varchar","binary","varbinary","blob","text","enum","set","character","character varying","text","citext","uuid","xml","json","jsonb"];var te=t=>t.distinct===!0?`${t.fn} distinct ${t.value}`:`${t.fn} ${t.value}`;var re=async(t,{table:e,datasourceId:r,filters:a,joins:o,orderBy:n,size:s,page:i,columns:l,groupBy:c,searchAll:I})=>{let b=await m.findOneBy({id:r}),p=[e],f=[];if(!b)throw new u(404,"Data source not found");let h=new F.SelectQueryBuilder(b.dbType);h.setTable(e),h.setLimit(s||20),h.setOffset(s*i),a?.forEach(d=>{h.addWhere(At(d))}),o&&(h.addJoin(...o),o.forEach(d=>{p.push(d.table)})),n&&h.addOrderBy(...n.map(d=>({...d,column:Pt(d.column,b.dbType)}))),c&&c.length>0&&c.forEach(d=>h.addGroupBy(d.value));let et=await R.find({where:{tableName:(0,$e.In)(p),datasource:{id:r}}});for(let d of et)if(d.columns)for(let A of d.columns)f.push({column:A.name,table:d.tableName||"",full:`${d.tableName}.${A.name}`,type:A.type});let k;if(l&&l.length>0?k=l.map(Dt):k=f.map(d=>`${d.full} as "${d.full}"`),h.selectColumns(k),I){let d=f.filter(A=>qe.includes(A.type)&&k.includes(A.full));if(d.length>0){let A=d.map(tt=>`LOWER(${tt.full}) LIKE '%${I.toLowerCase()}%'`);h.addWhereRaw(`(${A.join(" OR ")})`,"AND")}}return{...await(await L(b,t)).executeQuery(h.toSQL(),{type:"SELECT",allowBulkUpdate:!1}),tables:p,allColumns:f}},Qe=async(t,e)=>{let r=await m.findOneBy({id:e.datasourceId});if(!r)throw new u(404,"Data source not found");let a=e.values.map(({value:i,column:l})=>typeof i=="string"?i&&i.startsWith("=")?`${l}=${i.substring(1)}`:`${l}='${i}'`:`${l}='${i}'`).join(", "),o=e.filters.map(F.buildWhereCondition).join(" AND "),n=`UPDATE ${e.table} SET ${a} WHERE ${o}`;return(await L(r,t)).executeQuery(n,{type:"UPDATE",allowBulkUpdate:!1})},Be=async(t,e)=>{let r=await m.findOneBy({id:e.datasourceId});if(!r)throw new u(404,"Data source not found");let{keys:a,values:o}=Ot(e.values),n=`INSERT INTO ${e.table} (${a}) VALUES (${o})`;return(await L(r,t)).executeQuery(n,{type:"INSERT",allowBulkUpdate:!1})},Ot=t=>{let e=t.map(({column:a})=>a).join(", "),r=t.map(({value:a})=>typeof a=="string"?a&&a.startsWith("=")?a.substring(1):`'${a}'`:a).join(", ");return{keys:e,values:r}},At=t=>{let e={...t};switch(e.operator){case"IS NULL":case"IS NOT NULL":e.value=void 0;break;case"LIKE":case"ILIKE":case"NOT LIKE":case"NOT ILIKE":e.value=e.value?.map(r=>({isColumn:r?.isColumn,value:`%${r?.value}%`}));break}return e},Dt=t=>{if(t.fn){let e=t.distinct===!0?"distinct ":"";return t.fn==="sum"?`coalesce(${t.fn}(${e}${t.value}), 0) as "${te(t)}"`:`${t.fn}(${e}${t.value}) as "${te(t)}"`}return`${t.value} as "${t.value}"`},Pt=(t,e)=>e==="postgres"?`"${t}"`:e==="mysql"?`\`${t}\``:t;var Fe=g(t=>{t.post("/sql",async e=>{let r=y(e);return{data:await re(e,r)}}),t.post("/select",async e=>{let r=y(e);return{data:await re(e,r)}}),t.post("/insert",async e=>{let r=y(e);return{data:await Be(e,r)}}),t.post("/update",async e=>{let r=y(e);return{data:await Qe(e,r)}})});var We=require("node:child_process"),je=g(t=>{t.get("/",async(e,r)=>({data:{active:!0,version:process.env.SERVER_VERSION}})),t.get("/logs",async()=>{(0,We.spawn)(`echo "${process.env.SERVER_VERSION}"`)})});var Ye=g(t=>{t.get("/",async(e,r)=>{let a=D(e);return{data:await U.find({where:{users:{id:a}}})}}),t.post("/",async(e,r)=>T.transaction(async()=>{let a=D(e),o=y(e),n=w.create();n.id=a;let s=U.create(o);return s.users=[n],await U.save(s),{data:s}}))});async function Ut(){let t=U.create({name:"Personal"}),e=await w.save(w.create({}));return t.users=[e],await U.save(t),await w.update(e.id,{currentTeam:{id:t.id}}),w.findOne({where:{},relations:{currentTeam:!0}})}var He=g(t=>{t.get("/",async(e,r)=>{let a=await w.findOne({where:{},relations:{currentTeam:!0}});return a?{data:a}:{data:await Ut()}}),t.put("/",async(e,r)=>{let a=D(e),o=y(e);if(!(await w.update(a,o)).affected)throw new u(404,"User not found");return{data:w.findOneBy({id:a})}}),t.put("/team",async(e,r)=>{let a=D(e),o=y(e);return await w.update(a,{currentTeam:{id:o.teamId}}),{data:await w.findOne({where:{id:a},relations:{currentTeam:!0}})}})});var Mt="********************************************",Ge=t=>t.slice(0,4)+Mt+t.slice(t.length-4);function Lt(t){let e=M.create(t);return t.openAiToken&&(e.openAiToken=Ge(t.openAiToken)),e}var Ke=g(t=>{t.get("/",async e=>{let r=D(e),a=await M.findOneBy({user:{id:r}});return a||(a=await M.save(M.create({user:{id:r},model:"gpt-4o"}))),{data:Lt(a)}}),t.patch("/",async e=>{let{settings:r}=y(e);if(!r.id)throw new u(400,"Settings id is required!");if(!(await M.update(r.id,r)).affected)throw new u(404,"You do not own these settings!");return{data:await M.findOneBy({id:r.id})}})});var Ze=require("node:path"),O=(0,ze.default)(),Xe=process.env.PORT?parseInt(process.env.PORT):4466,vt=process.env.HOST==="true"?"0.0.0.0":"127.0.0.1",xt=["https://app.dataramen.xyz","https://dataramen.xyz","http://localhost:3000",`http://localhost:${Xe}`];function P(t,e){O.register(t,{prefix:e}),console.log("Registered "+e)}(async function(){await he(),P(Ce,"/api/data-sources"),P(Oe,"/api/project"),P(Pe,"/api/queries"),P(Fe,"/api/runner"),P(je,"/api/status"),P(Ye,"/api/teams"),P(He,"/api/users"),P(Ke,"/api/user-settings"),O.register(Je.default,{root:(0,Ze.join)(__dirname,"web")}),O.get("/",(e,r)=>{r.sendFile("index.html")}),O.register(Ve.default,{origin:(e,r)=>{!e||xt.includes(e)?r(null,!0):r(new Error("Not allowed by CORS"),!1)},methods:"*"}),O.addHook("onResponse",async e=>{e.__connections&&e.__connections.forEach(r=>{r.close()})}),O.setNotFoundHandler((e,r)=>{if(e.raw.url?.startsWith("/api/")){r.code(404).send({error:"API route not found"});return}r.sendFile("index.html")}),O.setErrorHandler((e,r,a)=>{if(e instanceof u){console.error(e),a.status(e.status).send({error:e.message});return}else console.error(e),a.status(500).send({error:"Internal Server Error"})}),await O.after(),await fe(),O.listen({port:Xe,host:vt},(e,r)=>{e&&(console.error(e),process.exit(1)),console.log(`Server listening at ${r}`)})})();
|
|
@@ -290,7 +290,7 @@ dataramen start\r
|
|
|
290
290
|
*/var uv;function l8(){return uv||(uv=1,function(e){(function(){var n={}.hasOwnProperty;function i(){for(var s="",c=0;c<arguments.length;c++){var f=arguments[c];f&&(s=o(s,l(f)))}return s}function l(s){if(typeof s=="string"||typeof s=="number")return s;if(typeof s!="object")return"";if(Array.isArray(s))return i.apply(null,s);if(s.toString!==Object.prototype.toString&&!s.toString.toString().includes("[native code]"))return s.toString();var c="";for(var f in s)n.call(s,f)&&s[f]&&(c=o(c,f));return c}function o(s,c){return c?s?s+" "+c:s+c:s}e.exports?(i.default=i,e.exports=i):window.classNames=i})()}(fh)),fh.exports}var a8=l8();const Gh=ba(a8);var cv={};const o8="react-tooltip-core-styles",s8="react-tooltip-base-styles",fv={core:!1,base:!1};function dv({css:e,id:n=s8,type:i="base",ref:l}){var o,s;if(!e||typeof document>"u"||fv[i]||i==="core"&&typeof process<"u"&&(!((o=process==null?void 0:cv)===null||o===void 0)&&o.REACT_TOOLTIP_DISABLE_CORE_STYLES)||i!=="base"&&typeof process<"u"&&(!((s=process==null?void 0:cv)===null||s===void 0)&&s.REACT_TOOLTIP_DISABLE_BASE_STYLES))return;i==="core"&&(n=o8),l||(l={});const{insertAt:c}=l;if(document.getElementById(n))return;const f=document.head||document.getElementsByTagName("head")[0],h=document.createElement("style");h.id=n,h.type="text/css",c==="top"&&f.firstChild?f.insertBefore(h,f.firstChild):f.appendChild(h),h.styleSheet?h.styleSheet.cssText=e:h.appendChild(document.createTextNode(e)),fv[i]=!0}const hv=async({elementReference:e=null,tooltipReference:n=null,tooltipArrowReference:i=null,place:l="top",offset:o=10,strategy:s="absolute",middlewares:c=[t8(Number(o)),r8({fallbackAxisSideDirection:"start"}),n8({padding:5})],border:f,arrowSize:h=8})=>{if(!e)return{tooltipStyles:{},tooltipArrowStyles:{},place:l};if(n===null)return{tooltipStyles:{},tooltipArrowStyles:{},place:l};const d=c;return i?(d.push(i8({element:i,padding:5})),sv(e,n,{placement:l,strategy:s,middleware:d}).then(({x:y,y:g,placement:x,middlewareData:b})=>{var w,T;const _={left:`${y}px`,top:`${g}px`,border:f},{x:A,y:N}=(w=b.arrow)!==null&&w!==void 0?w:{x:0,y:0},O=(T={top:"bottom",right:"left",bottom:"top",left:"right"}[x.split("-")[0]])!==null&&T!==void 0?T:"bottom",z=f&&{borderBottom:f,borderRight:f};let q=0;if(f){const M=`${f}`.match(/(\d+)px/);q=M!=null&&M[1]?Number(M[1]):1}return{tooltipStyles:_,tooltipArrowStyles:{left:A!=null?`${A}px`:"",top:N!=null?`${N}px`:"",right:"",bottom:"",...z,[O]:`-${h/2+q}px`},place:x}})):sv(e,n,{placement:"bottom",strategy:s,middleware:d}).then(({x:y,y:g,placement:x})=>({tooltipStyles:{left:`${y}px`,top:`${g}px`},tooltipArrowStyles:{},place:x}))},pv=(e,n)=>!("CSS"in window&&"supports"in window.CSS)||window.CSS.supports(e,n),mv=(e,n,i)=>{let l=null;const o=function(...s){const c=()=>{l=null};!l&&(e.apply(this,s),l=setTimeout(c,n))};return o.cancel=()=>{l&&(clearTimeout(l),l=null)},o},yv=e=>e!==null&&!Array.isArray(e)&&typeof e=="object",Xh=(e,n)=>{if(e===n)return!0;if(Array.isArray(e)&&Array.isArray(n))return e.length===n.length&&e.every((o,s)=>Xh(o,n[s]));if(Array.isArray(e)!==Array.isArray(n))return!1;if(!yv(e)||!yv(n))return e===n;const i=Object.keys(e),l=Object.keys(n);return i.length===l.length&&i.every(o=>Xh(e[o],n[o]))},u8=e=>{if(!(e instanceof HTMLElement||e instanceof SVGElement))return!1;const n=getComputedStyle(e);return["overflow","overflow-x","overflow-y"].some(i=>{const l=n.getPropertyValue(i);return l==="auto"||l==="scroll"})},gv=e=>{if(!e)return null;let n=e.parentElement;for(;n;){if(u8(n))return n;n=n.parentElement}return document.scrollingElement||document.documentElement},c8=typeof window<"u"?E.useLayoutEffect:E.useEffect,$n=e=>{e.current&&(clearTimeout(e.current),e.current=null)},f8="DEFAULT_TOOLTIP_ID",d8={anchorRefs:new Set,activeAnchor:{current:null},attach:()=>{},detach:()=>{},setActiveAnchor:()=>{}},h8=E.createContext({getTooltipData:()=>d8});function fw(e=f8){return E.useContext(h8).getTooltipData(e)}var sa={tooltip:"core-styles-module_tooltip__3vRRp",fixed:"core-styles-module_fixed__pcSol",arrow:"core-styles-module_arrow__cvMwQ",noArrow:"core-styles-module_noArrow__xock6",clickable:"core-styles-module_clickable__ZuTTB",show:"core-styles-module_show__Nt9eE",closing:"core-styles-module_closing__sGnxF"},dh={tooltip:"styles-module_tooltip__mnnfp",arrow:"styles-module_arrow__K0L3T",dark:"styles-module_dark__xNqje",light:"styles-module_light__Z6W-X",success:"styles-module_success__A2AKt",warning:"styles-module_warning__SCK0X",error:"styles-module_error__JvumD",info:"styles-module_info__BWdHW"};const p8=({forwardRef:e,id:n,className:i,classNameArrow:l,variant:o="dark",anchorId:s,anchorSelect:c,place:f="top",offset:h=10,events:d=["hover"],openOnClick:y=!1,positionStrategy:g="absolute",middlewares:x,wrapper:b,delayShow:w=0,delayHide:T=0,float:_=!1,hidden:A=!1,noArrow:N=!1,clickable:O=!1,closeOnEsc:z=!1,closeOnScroll:q=!1,closeOnResize:M=!1,openEvents:Y,closeEvents:ee,globalCloseEvents:ie,imperativeModeOnly:L,style:ae,position:te,afterShow:ue,afterHide:J,disableTooltip:se,content:B,contentWrapperRef:X,isOpen:ne,defaultIsOpen:pe=!1,setIsOpen:C,activeAnchor:I,setActiveAnchor:oe,border:R,opacity:fe,arrowColor:ke,arrowSize:ce=8,role:st="tooltip"})=>{var Oe;const Ie=E.useRef(null),Ft=E.useRef(null),bt=E.useRef(null),un=E.useRef(null),Xn=E.useRef(null),[cn,ni]=E.useState({tooltipStyles:{},tooltipArrowStyles:{},place:f}),[Dt,Mt]=E.useState(!1),[Zn,xn]=E.useState(!1),[Ke,Dn]=E.useState(null),Ar=E.useRef(!1),or=E.useRef(null),{anchorRefs:_r,setActiveAnchor:ri}=fw(n),$=E.useRef(!1),[W,me]=E.useState([]),ye=E.useRef(!1),Ue=y||d.includes("click"),Qt=Ue||(Y==null?void 0:Y.click)||(Y==null?void 0:Y.dblclick)||(Y==null?void 0:Y.mousedown),Yt=Y?{...Y}:{mouseover:!0,focus:!0,mouseenter:!1,click:!1,dblclick:!1,mousedown:!1};!Y&&Ue&&Object.assign(Yt,{mouseenter:!1,focus:!1,mouseover:!1,click:!0});const ht=ee?{...ee}:{mouseout:!0,blur:!0,mouseleave:!1,click:!1,dblclick:!1,mouseup:!1};!ee&&Ue&&Object.assign(ht,{mouseleave:!1,blur:!1,mouseout:!1});const pt=ie?{...ie}:{escape:z||!1,scroll:q||!1,resize:M||!1,clickOutsideAnchor:Qt||!1};L&&(Object.assign(Yt,{mouseover:!1,focus:!1,mouseenter:!1,click:!1,dblclick:!1,mousedown:!1}),Object.assign(ht,{mouseout:!1,blur:!1,mouseleave:!1,click:!1,dblclick:!1,mouseup:!1}),Object.assign(pt,{escape:!1,scroll:!1,resize:!1,clickOutsideAnchor:!1})),c8(()=>(ye.current=!0,()=>{ye.current=!1}),[]);const qe=le=>{ye.current&&(le&&xn(!0),setTimeout(()=>{ye.current&&(C==null||C(le),ne===void 0&&Mt(le))},10))};E.useEffect(()=>{if(ne===void 0)return()=>null;ne&&xn(!0);const le=setTimeout(()=>{Mt(ne)},10);return()=>{clearTimeout(le)}},[ne]),E.useEffect(()=>{if(Dt!==Ar.current)if($n(Xn),Ar.current=Dt,Dt)ue==null||ue();else{const le=(he=>{const Se=he.match(/^([\d.]+)(ms|s)$/);if(!Se)return 0;const[,ct,Ut]=Se;return Number(ct)*(Ut==="ms"?1:1e3)})(getComputedStyle(document.body).getPropertyValue("--rt-transition-show-delay"));Xn.current=setTimeout(()=>{xn(!1),Dn(null),J==null||J()},le+25)}},[Dt]);const ut=le=>{ni(he=>Xh(he,le)?he:le)},zt=(le=w)=>{$n(bt),Zn?qe(!0):bt.current=setTimeout(()=>{qe(!0)},le)},Lt=(le=T)=>{$n(un),un.current=setTimeout(()=>{$.current||qe(!1)},le)},ii=le=>{var he;if(!le)return;const Se=(he=le.currentTarget)!==null&&he!==void 0?he:le.target;if(!(Se!=null&&Se.isConnected))return oe(null),void ri({current:null});w?zt():qe(!0),oe(Se),ri({current:Se}),$n(un)},Or=()=>{O?Lt(T||100):T?Lt():qe(!1),$n(bt)},sr=({x:le,y:he})=>{var Se;const ct={getBoundingClientRect:()=>({x:le,y:he,width:0,height:0,top:he,left:le,right:le,bottom:he})};hv({place:(Se=Ke==null?void 0:Ke.place)!==null&&Se!==void 0?Se:f,offset:h,elementReference:ct,tooltipReference:Ie.current,tooltipArrowReference:Ft.current,strategy:g,middlewares:x,border:R,arrowSize:ce}).then(Ut=>{ut(Ut)})},Mn=le=>{if(!le)return;const he=le,Se={x:he.clientX,y:he.clientY};sr(Se),or.current=Se},Hi=le=>{var he;if(!Dt)return;const Se=le.target;Se.isConnected&&(!((he=Ie.current)===null||he===void 0)&&he.contains(Se)||[document.querySelector(`[id='${s}']`),...W].some(ct=>ct==null?void 0:ct.contains(Se))||(qe(!1),$n(bt)))},Fi=mv(ii,50),xt=mv(Or,50),Kt=le=>{xt.cancel(),Fi(le)},be=()=>{Fi.cancel(),xt()},De=E.useCallback(()=>{var le,he;const Se=(le=Ke==null?void 0:Ke.position)!==null&&le!==void 0?le:te;Se?sr(Se):_?or.current&&sr(or.current):I!=null&&I.isConnected&&hv({place:(he=Ke==null?void 0:Ke.place)!==null&&he!==void 0?he:f,offset:h,elementReference:I,tooltipReference:Ie.current,tooltipArrowReference:Ft.current,strategy:g,middlewares:x,border:R,arrowSize:ce}).then(ct=>{ye.current&&ut(ct)})},[Dt,I,B,ae,f,Ke==null?void 0:Ke.place,h,g,te,Ke==null?void 0:Ke.position,_,ce]);E.useEffect(()=>{var le,he;const Se=new Set(_r);W.forEach($e=>{se!=null&&se($e)||Se.add({current:$e})});const ct=document.querySelector(`[id='${s}']`);ct&&!(se!=null&&se(ct))&&Se.add({current:ct});const Ut=()=>{qe(!1)},zn=gv(I),wn=gv(Ie.current);pt.scroll&&(window.addEventListener("scroll",Ut),zn==null||zn.addEventListener("scroll",Ut),wn==null||wn.addEventListener("scroll",Ut));let wt=null;pt.resize?window.addEventListener("resize",Ut):I&&Ie.current&&(wt=e8(I,Ie.current,De,{ancestorResize:!0,elementResize:!0,layoutShift:!0}));const Xt=$e=>{$e.key==="Escape"&&qe(!1)};pt.escape&&window.addEventListener("keydown",Xt),pt.clickOutsideAnchor&&window.addEventListener("click",Hi);const Ve=[],Sn=$e=>!!($e!=null&&$e.target&&(I!=null&&I.contains($e.target))),Qi=$e=>{Dt&&Sn($e)||ii($e)},li=$e=>{Dt&&Sn($e)&&Or()},St=["mouseover","mouseout","mouseenter","mouseleave","focus","blur"],ja=["click","dblclick","mousedown","mouseup"];Object.entries(Yt).forEach(([$e,Ln])=>{Ln&&(St.includes($e)?Ve.push({event:$e,listener:Kt}):ja.includes($e)&&Ve.push({event:$e,listener:Qi}))}),Object.entries(ht).forEach(([$e,Ln])=>{Ln&&(St.includes($e)?Ve.push({event:$e,listener:be}):ja.includes($e)&&Ve.push({event:$e,listener:li}))}),_&&Ve.push({event:"pointermove",listener:Mn});const Da=()=>{$.current=!0},ur=()=>{$.current=!1,Or()},Rr=O&&(ht.mouseout||ht.mouseleave);return Rr&&((le=Ie.current)===null||le===void 0||le.addEventListener("mouseover",Da),(he=Ie.current)===null||he===void 0||he.addEventListener("mouseout",ur)),Ve.forEach(({event:$e,listener:Ln})=>{Se.forEach(wl=>{var Pi;(Pi=wl.current)===null||Pi===void 0||Pi.addEventListener($e,Ln)})}),()=>{var $e,Ln;pt.scroll&&(window.removeEventListener("scroll",Ut),zn==null||zn.removeEventListener("scroll",Ut),wn==null||wn.removeEventListener("scroll",Ut)),pt.resize?window.removeEventListener("resize",Ut):wt==null||wt(),pt.clickOutsideAnchor&&window.removeEventListener("click",Hi),pt.escape&&window.removeEventListener("keydown",Xt),Rr&&(($e=Ie.current)===null||$e===void 0||$e.removeEventListener("mouseover",Da),(Ln=Ie.current)===null||Ln===void 0||Ln.removeEventListener("mouseout",ur)),Ve.forEach(({event:wl,listener:Pi})=>{Se.forEach(Sl=>{var ai;(ai=Sl.current)===null||ai===void 0||ai.removeEventListener(wl,Pi)})})}},[I,De,Zn,_r,W,Y,ee,ie,Ue,w,T]),E.useEffect(()=>{var le,he;let Se=(he=(le=Ke==null?void 0:Ke.anchorSelect)!==null&&le!==void 0?le:c)!==null&&he!==void 0?he:"";!Se&&n&&(Se=`[data-tooltip-id='${n.replace(/'/g,"\\'")}']`);const ct=new MutationObserver(Ut=>{const zn=[],wn=[];Ut.forEach(wt=>{if(wt.type==="attributes"&&wt.attributeName==="data-tooltip-id"&&(wt.target.getAttribute("data-tooltip-id")===n?zn.push(wt.target):wt.oldValue===n&&wn.push(wt.target)),wt.type==="childList"){if(I){const Xt=[...wt.removedNodes].filter(Ve=>Ve.nodeType===1);if(Se)try{wn.push(...Xt.filter(Ve=>Ve.matches(Se))),wn.push(...Xt.flatMap(Ve=>[...Ve.querySelectorAll(Se)]))}catch{}Xt.some(Ve=>{var Sn;return!!(!((Sn=Ve==null?void 0:Ve.contains)===null||Sn===void 0)&&Sn.call(Ve,I))&&(xn(!1),qe(!1),oe(null),$n(bt),$n(un),!0)})}if(Se)try{const Xt=[...wt.addedNodes].filter(Ve=>Ve.nodeType===1);zn.push(...Xt.filter(Ve=>Ve.matches(Se))),zn.push(...Xt.flatMap(Ve=>[...Ve.querySelectorAll(Se)]))}catch{}}}),(zn.length||wn.length)&&me(wt=>[...wt.filter(Xt=>!wn.includes(Xt)),...zn])});return ct.observe(document.body,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["data-tooltip-id"],attributeOldValue:!0}),()=>{ct.disconnect()}},[n,c,Ke==null?void 0:Ke.anchorSelect,I]),E.useEffect(()=>{De()},[De]),E.useEffect(()=>{if(!(X!=null&&X.current))return()=>null;const le=new ResizeObserver(()=>{setTimeout(()=>De())});return le.observe(X.current),()=>{le.disconnect()}},[B,X==null?void 0:X.current]),E.useEffect(()=>{var le;const he=document.querySelector(`[id='${s}']`),Se=[...W,he];I&&Se.includes(I)||oe((le=W[0])!==null&&le!==void 0?le:he)},[s,W,I]),E.useEffect(()=>(pe&&qe(!0),()=>{$n(bt),$n(un)}),[]),E.useEffect(()=>{var le;let he=(le=Ke==null?void 0:Ke.anchorSelect)!==null&&le!==void 0?le:c;if(!he&&n&&(he=`[data-tooltip-id='${n.replace(/'/g,"\\'")}']`),he)try{const Se=Array.from(document.querySelectorAll(he));me(Se)}catch{me([])}},[n,c,Ke==null?void 0:Ke.anchorSelect]),E.useEffect(()=>{bt.current&&($n(bt),zt(w))},[w]);const ln=(Oe=Ke==null?void 0:Ke.content)!==null&&Oe!==void 0?Oe:B,Gt=Dt&&Object.keys(cn.tooltipStyles).length>0;return E.useImperativeHandle(e,()=>({open:le=>{if(le!=null&&le.anchorSelect)try{document.querySelector(le.anchorSelect)}catch{return void console.warn(`[react-tooltip] "${le.anchorSelect}" is not a valid CSS selector`)}Dn(le??null),le!=null&&le.delay?zt(le.delay):qe(!0)},close:le=>{le!=null&&le.delay?Lt(le.delay):qe(!1)},activeAnchor:I,place:cn.place,isOpen:!!(Zn&&!A&&ln&&Gt)})),Zn&&!A&&ln?tt.createElement(b,{id:n,role:st,className:Gh("react-tooltip",sa.tooltip,dh.tooltip,dh[o],i,`react-tooltip__place-${cn.place}`,sa[Gt?"show":"closing"],Gt?"react-tooltip__show":"react-tooltip__closing",g==="fixed"&&sa.fixed,O&&sa.clickable),onTransitionEnd:le=>{$n(Xn),Dt||le.propertyName!=="opacity"||(xn(!1),Dn(null),J==null||J())},style:{...ae,...cn.tooltipStyles,opacity:fe!==void 0&&Gt?fe:void 0},ref:Ie},ln,tt.createElement(b,{className:Gh("react-tooltip-arrow",sa.arrow,dh.arrow,l,N&&sa.noArrow),style:{...cn.tooltipArrowStyles,background:ke?`linear-gradient(to right bottom, transparent 50%, ${ke} 50%)`:void 0,"--rt-arrow-size":`${ce}px`},ref:Ft})):null},m8=({content:e})=>tt.createElement("span",{dangerouslySetInnerHTML:{__html:e}}),dw=tt.forwardRef(({id:e,anchorId:n,anchorSelect:i,content:l,html:o,render:s,className:c,classNameArrow:f,variant:h="dark",place:d="top",offset:y=10,wrapper:g="div",children:x=null,events:b=["hover"],openOnClick:w=!1,positionStrategy:T="absolute",middlewares:_,delayShow:A=0,delayHide:N=0,float:O=!1,hidden:z=!1,noArrow:q=!1,clickable:M=!1,closeOnEsc:Y=!1,closeOnScroll:ee=!1,closeOnResize:ie=!1,openEvents:L,closeEvents:ae,globalCloseEvents:te,imperativeModeOnly:ue=!1,style:J,position:se,isOpen:B,defaultIsOpen:X=!1,disableStyleInjection:ne=!1,border:pe,opacity:C,arrowColor:I,arrowSize:oe,setIsOpen:R,afterShow:fe,afterHide:ke,disableTooltip:ce,role:st="tooltip"},Oe)=>{const[Ie,Ft]=E.useState(l),[bt,un]=E.useState(o),[Xn,cn]=E.useState(d),[ni,Dt]=E.useState(h),[Mt,Zn]=E.useState(y),[xn,Ke]=E.useState(A),[Dn,Ar]=E.useState(N),[or,_r]=E.useState(O),[ri,$]=E.useState(z),[W,me]=E.useState(g),[ye,Ue]=E.useState(b),[Qt,Yt]=E.useState(T),[ht,pt]=E.useState(null),[qe,ut]=E.useState(null),zt=E.useRef(ne),{anchorRefs:Lt,activeAnchor:ii}=fw(e),Or=xt=>xt==null?void 0:xt.getAttributeNames().reduce((Kt,be)=>{var De;return be.startsWith("data-tooltip-")&&(Kt[be.replace(/^data-tooltip-/,"")]=(De=xt==null?void 0:xt.getAttribute(be))!==null&&De!==void 0?De:null),Kt},{}),sr=xt=>{const Kt={place:be=>{var De;cn((De=be)!==null&&De!==void 0?De:d)},content:be=>{Ft(be??l)},html:be=>{un(be??o)},variant:be=>{var De;Dt((De=be)!==null&&De!==void 0?De:h)},offset:be=>{Zn(be===null?y:Number(be))},wrapper:be=>{var De;me((De=be)!==null&&De!==void 0?De:g)},events:be=>{const De=be==null?void 0:be.split(" ");Ue(De??b)},"position-strategy":be=>{var De;Yt((De=be)!==null&&De!==void 0?De:T)},"delay-show":be=>{Ke(be===null?A:Number(be))},"delay-hide":be=>{Ar(be===null?N:Number(be))},float:be=>{_r(be===null?O:be==="true")},hidden:be=>{$(be===null?z:be==="true")},"class-name":be=>{pt(be)}};Object.values(Kt).forEach(be=>be(null)),Object.entries(xt).forEach(([be,De])=>{var ln;(ln=Kt[be])===null||ln===void 0||ln.call(Kt,De)})};E.useEffect(()=>{Ft(l)},[l]),E.useEffect(()=>{un(o)},[o]),E.useEffect(()=>{cn(d)},[d]),E.useEffect(()=>{Dt(h)},[h]),E.useEffect(()=>{Zn(y)},[y]),E.useEffect(()=>{Ke(A)},[A]),E.useEffect(()=>{Ar(N)},[N]),E.useEffect(()=>{_r(O)},[O]),E.useEffect(()=>{$(z)},[z]),E.useEffect(()=>{Yt(T)},[T]),E.useEffect(()=>{zt.current!==ne&&console.warn("[react-tooltip] Do not change `disableStyleInjection` dynamically.")},[ne]),E.useEffect(()=>{typeof window<"u"&&window.dispatchEvent(new CustomEvent("react-tooltip-inject-styles",{detail:{disableCore:ne==="core",disableBase:ne}}))},[]),E.useEffect(()=>{var xt;const Kt=new Set(Lt);let be=i;if(!be&&e&&(be=`[data-tooltip-id='${e.replace(/'/g,"\\'")}']`),be)try{document.querySelectorAll(be).forEach(he=>{Kt.add({current:he})})}catch{console.warn(`[react-tooltip] "${be}" is not a valid CSS selector`)}const De=document.querySelector(`[id='${n}']`);if(De&&Kt.add({current:De}),!Kt.size)return()=>null;const ln=(xt=qe??De)!==null&&xt!==void 0?xt:ii.current,Gt=new MutationObserver(he=>{he.forEach(Se=>{var ct;if(!ln||Se.type!=="attributes"||!(!((ct=Se.attributeName)===null||ct===void 0)&&ct.startsWith("data-tooltip-")))return;const Ut=Or(ln);sr(Ut)})}),le={attributes:!0,childList:!1,subtree:!1};if(ln){const he=Or(ln);sr(he),Gt.observe(ln,le)}return()=>{Gt.disconnect()}},[Lt,ii,qe,n,i]),E.useEffect(()=>{J!=null&&J.border&&console.warn("[react-tooltip] Do not set `style.border`. Use `border` prop instead."),pe&&!pv("border",`${pe}`)&&console.warn(`[react-tooltip] "${pe}" is not a valid \`border\`.`),J!=null&&J.opacity&&console.warn("[react-tooltip] Do not set `style.opacity`. Use `opacity` prop instead."),C&&!pv("opacity",`${C}`)&&console.warn(`[react-tooltip] "${C}" is not a valid \`opacity\`.`)},[]);let Mn=x;const Hi=E.useRef(null);if(s){const xt=s({content:(qe==null?void 0:qe.getAttribute("data-tooltip-content"))||Ie||null,activeAnchor:qe});Mn=xt?tt.createElement("div",{ref:Hi,className:"react-tooltip-content-wrapper"},xt):null}else Ie&&(Mn=Ie);bt&&(Mn=tt.createElement(m8,{content:bt}));const Fi={forwardRef:Oe,id:e,anchorId:n,anchorSelect:i,className:Gh(c,ht),classNameArrow:f,content:Mn,contentWrapperRef:Hi,place:Xn,variant:ni,offset:Mt,wrapper:W,events:ye,openOnClick:w,positionStrategy:Qt,middlewares:_,delayShow:xn,delayHide:Dn,float:or,hidden:ri,noArrow:q,clickable:M,closeOnEsc:Y,closeOnScroll:ee,closeOnResize:ie,openEvents:L,closeEvents:ae,globalCloseEvents:te,imperativeModeOnly:ue,style:J,position:se,isOpen:B,defaultIsOpen:X,border:pe,opacity:C,arrowColor:I,arrowSize:oe,setIsOpen:R,afterShow:fe,afterHide:ke,disableTooltip:ce,activeAnchor:qe,setActiveAnchor:xt=>ut(xt),role:st};return tt.createElement(p8,{...Fi})});typeof window<"u"&&window.addEventListener("react-tooltip-inject-styles",e=>{e.detail.disableCore||dv({css:":root{--rt-color-white:#fff;--rt-color-dark:#222;--rt-color-success:#8dc572;--rt-color-error:#be6464;--rt-color-warning:#f0ad4e;--rt-color-info:#337ab7;--rt-opacity:0.9;--rt-transition-show-delay:0.15s;--rt-transition-closing-delay:0.15s;--rt-arrow-size:8px}.core-styles-module_tooltip__3vRRp{position:absolute;top:0;left:0;pointer-events:none;opacity:0;will-change:opacity}.core-styles-module_fixed__pcSol{position:fixed}.core-styles-module_arrow__cvMwQ{position:absolute;background:inherit;z-index:-1}.core-styles-module_noArrow__xock6{display:none}.core-styles-module_clickable__ZuTTB{pointer-events:auto}.core-styles-module_show__Nt9eE{opacity:var(--rt-opacity);transition:opacity var(--rt-transition-show-delay)ease-out}.core-styles-module_closing__sGnxF{opacity:0;transition:opacity var(--rt-transition-closing-delay)ease-in}",type:"core"}),e.detail.disableBase||dv({css:`
|
|
291
291
|
.styles-module_tooltip__mnnfp{padding:8px 16px;border-radius:3px;font-size:90%;width:max-content}.styles-module_arrow__K0L3T{width:var(--rt-arrow-size);height:var(--rt-arrow-size)}[class*='react-tooltip__place-top']>.styles-module_arrow__K0L3T{transform:rotate(45deg)}[class*='react-tooltip__place-right']>.styles-module_arrow__K0L3T{transform:rotate(135deg)}[class*='react-tooltip__place-bottom']>.styles-module_arrow__K0L3T{transform:rotate(225deg)}[class*='react-tooltip__place-left']>.styles-module_arrow__K0L3T{transform:rotate(315deg)}.styles-module_dark__xNqje{background:var(--rt-color-dark);color:var(--rt-color-white)}.styles-module_light__Z6W-X{background-color:var(--rt-color-white);color:var(--rt-color-dark)}.styles-module_success__A2AKt{background-color:var(--rt-color-success);color:var(--rt-color-white)}.styles-module_warning__SCK0X{background-color:var(--rt-color-warning);color:var(--rt-color-white)}.styles-module_error__JvumD{background-color:var(--rt-color-error);color:var(--rt-color-white)}.styles-module_info__BWdHW{background-color:var(--rt-color-info);color:var(--rt-color-white)}`,type:"base"})});const y8=e=>{if(!e)return;const n=Ot.getQueryData([Di]);if(!n)return;const i=Ot.getQueryData([Jr,n.currentTeam.id]);return i==null?void 0:i.find(l=>l.id===e)},g8=({content:e,activeAnchor:n})=>{if(!n)return null;const i=n.getAttribute("data-tab-id"),l=mc.get().find(c=>c.id===i),o=y8(l==null?void 0:l.options.dataSourceId);if(!l)return e;const s=()=>{xl("New tab name",l.label).then(c=>{c&&Nb(l.id,c)})};return v.jsxs("div",{children:[v.jsxs("button",{className:gr.tooltipLabel,onClick:s,children:[v.jsxs("div",{className:"max-w-full",children:[v.jsx("p",{className:"text-xs",children:"label"}),v.jsx("p",{className:"truncate font-semibold",children:l.label})]}),v.jsx("span",{children:"✏️"})]}),v.jsxs("div",{className:gr.tooltipInfoEntry,children:[v.jsx("p",{className:"text-sm",children:"table"}),v.jsx("p",{className:"truncate font-semibold",children:l.options.table})]}),o&&v.jsxs("div",{className:gr.tooltipInfoEntry,children:[v.jsxs("p",{className:"text-sm",children:["data source [",o.dbType,"]"]}),v.jsx("p",{className:"truncate font-semibold",children:o.name})]}),l.options.joins.length>0&&v.jsxs("div",{className:gr.tooltipInfoEntry,children:[v.jsx("p",{className:"text-sm",children:"joins"}),v.jsx("p",{className:"font-semibold",children:l.options.joins.map(c=>c.table).join(", ")})]}),l.options.filters.length>0&&v.jsxs("div",{className:gr.tooltipInfoEntry,children:[v.jsx("p",{className:"text-sm",children:"filters"}),l.options.filters.map(c=>v.jsx("p",{className:"truncate font-semibold",children:q6(c)}))]})]})},v8=()=>{const e=vk(),n=hc(),i=E.useMemo(()=>{if(!n)return;const f=n.find(h=>h.id===e);return f||n[0]},[e,n]),l=f=>Oh(f),o=f=>{f.button===1&&Oh(f.currentTarget.dataset.tabId)},s=f=>{const h=n.find(d=>d.id===f);xl("New tab name",h==null?void 0:h.label).then(d=>{d&&Nb(f,d)})},c=E.useCallback(f=>{pc(h=>h.map(d=>d.id!==i.id?d:{...d,options:f(d.options)}))},[i]);return n.length<1?v.jsx(vC,{to:"/"}):v.jsxs("div",{className:"h-screen max-h-screen bg-gray-50 flex flex-col",children:[v.jsx(dw,{id:"tab",render:g8,className:"z-10 shadow-md",offset:0,noArrow:!0,opacity:1,variant:"light",clickable:!0,delayShow:500}),v.jsx("div",{className:gr.tabs,children:n==null?void 0:n.map(f=>v.jsxs("div",{className:Be(gr.tab,f.id===(i==null?void 0:i.id)&&gr.active),"data-tab-id":f.id,"data-tooltip-id":"tab","data-tooltip-content":f.label,onAuxClick:o,onContextMenu:h=>{h.preventDefault(),s(f.id)},children:[v.jsxs("button",{className:"cursor-pointer truncate w-full",onClick:()=>cp(f.id),children:["📄 ",f.label]}),v.jsx("button",{className:gr.closeButton,onClick:()=>l(f.id),children:v.jsx(Bi,{width:20,height:20})}),f.id===(i==null?void 0:i.id)&&v.jsx("span",{className:gr.activeTab})]},f.id))}),i&&v.jsx(Wx,{updater:c,options:i.options,name:i.label})]})},b8=()=>{const e=y5(),n=E.useCallback(i=>{Up(l=>l?{...l,options:i(l.options)}:(Zr.error("Something went wrong."),l))},[]);return e?v.jsxs(nn,{isVisible:!0,onClose:Vh,children:[v.jsx(Gn,{onClick:Vh}),v.jsx(Wx,{className:"border border-gray-200 bg-gray-50",name:e.label,options:e.options,updater:n})]}):null},[x8,Go]=Er(void 0),w8="_root_3objn_2",S8="_down_3objn_2",C8="_chevron_3objn_2",E8="_table-name-container_3objn_2",k8="_link_3objn_2",T8="_table-name_3objn_2",A8="_ul_3objn_2",_8="_column-type_3objn_2",Yr={root:w8,down:S8,chevron:C8,tableNameContainer:E8,link:k8,tableName:T8,ul:A8,columnType:_8},O8=new Intl.DateTimeFormat("en",{dateStyle:"full",timeStyle:"long"});function R8(e,n){if(n&&e.toLowerCase().includes(n))return"bg-yellow-200"}const N8=({insp:e,filter:n,expanded:i})=>{const l=E.useMemo(()=>i||n.length<1?e.columns:e.columns.filter(o=>o.name.toLowerCase().includes(n)),[e,n,i]);return v.jsx("ul",{className:Yr.ul,children:l.map(o=>v.jsxs(v.Fragment,{children:[v.jsxs("li",{children:[o.isPrimary?"🔐":"🏷️"," ",v.jsx("span",{className:R8(o.name,n),children:o.name})," ",v.jsxs("span",{className:Yr.columnType,children:["[",o.type,"]"]})]},o.name+o.type),o.ref&&v.jsxs("li",{className:"pl-4",children:["🔗 ",v.jsxs("span",{className:Yr.columnType,children:[o.ref.table,".",o.ref.field]})]},o.name+o.ref.field+o.ref.table)]}))},e.id)};function j8({id:e}){const{data:n}=Cb(e),{data:i}=Aa(e),l=zi(),{pathname:o}=vn(),s=b4(),c=Eb(),f=x4(),h=E.useMemo(()=>n!=null&&n.lastInspected?O8.format(new Date(n.lastInspected)):"--",[n]),[d,y]=E.useState({}),[g,x]=E.useState(""),b=g.toLowerCase(),w=E.useMemo(()=>{if(!b||!i)return i||[];const z=[];for(const q of i){if(q.tableName.toLowerCase().includes(b)){z.push(q);continue}q.columns.findIndex(M=>M.name.toLowerCase().includes(b))>=0&&z.push(q)}return z},[b,i]),T=z=>{y(q=>({...q,[z]:!q[z]}))},_=z=>{Vo(z,{table:z,dataSourceId:e},!0),Go(void 0),o!==_t.workbench.path&&l(_t.workbench.path),dt.event("On open table [Datasource modal]")},A=()=>{c.mutate(e),dt.event("On inspect [Datasource modal]")},N=async()=>{const z=await xl("Enter name",n==null?void 0:n.name);z&&s.mutate({id:e,dataSource:{name:z}})},O=async()=>{await sj("Are you sure you want to delete this data source?")&&(f.mutate(e),Go(void 0),dt.event("On delete [Datasource modal]"))};return v.jsxs("div",{className:Yr.root,children:[v.jsxs("h1",{className:"page-head flex gap-2 items-center",children:[n&&v.jsx(jh,{size:32,type:n.dbType}),v.jsx("span",{children:n==null?void 0:n.name})]}),v.jsx("p",{className:"mt-1 text-sm font-semibold",children:h}),v.jsxs("div",{className:"mt-2 flex gap-2",children:[v.jsx("button",{disabled:c.isLoading,onClick:A,className:"button tertiary flex items-center gap-1",children:"Refresh schema"}),v.jsx("button",{disabled:c.isLoading,onClick:N,className:"button tertiary",children:"Rename"}),v.jsx("button",{disabled:c.isLoading,onClick:O,className:"button tertiary",children:"Delete"})]}),v.jsx("input",{className:"input w-full mb-2 mt-4 bg-gray-50",placeholder:"Search table/column",value:g,onChange:z=>x(z.target.value),autoFocus:!0}),v.jsx("div",{className:"overflow-y-auto",children:w==null?void 0:w.map(z=>v.jsxs("div",{children:[v.jsxs("div",{className:Yr.tableNameContainer,children:[v.jsx("button",{className:Be(Yr.chevron,d[z.id]&&Yr.down),onClick:()=>T(z.id),children:v.jsx(Zx,{width:16,height:16})}),v.jsx("button",{className:Be(Yr.tableName,"flex-1"),onClick:()=>T(z.id),children:z.tableName}),v.jsx("button",{className:Yr.link,onClick:()=>_(z.tableName),children:"open"})]}),(d[z.id]||g.length>0)&&v.jsx(N8,{insp:z,filter:b,expanded:d[z.id]})]},z.id))})]})}const D8=()=>{const e=x8(),[n,i]=E.useState(void 0);E.useEffect(()=>{e&&i(e)},[e]);const l=()=>Go(void 0);return v.jsxs(nn,{isVisible:e!=null,onClose:l,onClosed:()=>i(void 0),backdropClose:!0,children:[v.jsx(Gn,{onClick:l}),n&&v.jsx(j8,{id:n})]})},M8="_root_l15sg_1",z8={root:M8};function L8(e,n=500){const[i,l]=E.useState(e);return E.useEffect(()=>{const o=setTimeout(()=>l(e),n);return()=>clearTimeout(o)},[e,n]),i}const U8="_search_tx9rw_2",B8="_entry_tx9rw_2",vv={search:U8,entry:B8},q8={table:"📄",query:"📖"},H8=({onTable:e,onQuery:n,autoFocus:i})=>{const[l,o]=E.useState(""),[s,c]=E.useState(-1),f=L8(l),{data:h}=Li(),{data:d}=p4(f,h==null?void 0:h.currentTeam.id),y=b=>{b.type==="table"?e(b.name,b.dataSourceId):b.type==="query"&&n(b.id,b.dataSourceId)},g=b=>{var w;d&&(b.key==="ArrowDown"?(b.preventDefault(),c(T=>(T+1)%d.length)):b.key==="ArrowUp"?(b.preventDefault(),c(T=>(T-1+d.length)%d.length)):b.key==="Enter"&&s>=0&&(w=d[s])!=null&&w.name&&(b.preventDefault(),y(d[s])))},x=b=>{const w=b.currentTarget.dataset.tableId,T=d==null?void 0:d.find(_=>_.id===w);T&&y(T)};return v.jsxs(v.Fragment,{children:[v.jsx("input",{className:vv.search,placeholder:"Search table or saved query to start from",value:l,onChange:b=>o(b.target.value),onKeyDown:g,autoFocus:i}),Yx(d==null?void 0:d.length,0)&&v.jsx("div",{className:"overflow-y-auto max-h-full mt-2",children:d.map((b,w)=>v.jsxs("button",{className:vv.entry,"data-is-active":s===w,"data-table-id":b.id,onClick:x,children:[v.jsxs("p",{className:"font-semibold",children:[q8[b.type]," ",b.name]}),v.jsxs("p",{className:"text-xs text-blue-600",children:["📦 ",b.dataSourceName]})]},b.id))})]})},F8=()=>{const e=Nk(),n=(o,s)=>{e==null||e.onConfirm("table",o,s)},i=(o,s)=>{e==null||e.onConfirm("query",o,s)},l=()=>{e==null||e.onCancel()};return v.jsxs(nn,{isVisible:!!e,onClose:l,children:[v.jsx(Gn,{onClick:l}),v.jsx("div",{className:z8.root,children:v.jsx(H8,{autoFocus:!0,onTable:n,onQuery:i})})]})},Q8=()=>{const e=vn();E.useEffect(()=>{dt.pageView()},[e.pathname])},bv=e=>{const[n]=e.split("-");return n.split(".").map(Number)},P8=(e,n)=>{const i=bv(e),l=bv(n);for(let o=0;o<3;o++){const s=i[o]||0,c=l[o]||0;if(s>c)return 1;if(s<c)return-1}return 0},I8=`### ⚠️ You are running an outdated local server version.
|
|
292
292
|
|
|
293
|
-
Please update your local server version to **0.0.
|
|
293
|
+
Please update your local server version to **0.0.50**
|
|
294
294
|
|
|
295
295
|
### 🔧 Update Command
|
|
296
296
|
|
|
@@ -307,4 +307,4 @@ dataramen start
|
|
|
307
307
|
\`\`\`
|
|
308
308
|
|
|
309
309
|
Once done, click on the "Check again" button below or refresh the page.
|
|
310
|
-
`,V8=()=>{const{data:e,refetch:n}=jp();return!(e!=null&&e.active)||P8(e.version,"0.0.
|
|
310
|
+
`,V8=()=>{const{data:e,refetch:n}=jp();return!(e!=null&&e.active)||P8(e.version,"0.0.50")===0?null:v.jsx(nn,{isVisible:!0,onClose:()=>null,children:v.jsxs("div",{children:[v.jsx(Ju,{content:I8}),v.jsx("div",{className:"flex justify-end mt-2",children:v.jsx("button",{className:"button primary",onClick:()=>n(),children:"Check again"})})]})})};function $8(){return oD(),Q8(),v.jsxs(v.Fragment,{children:[v.jsxs(xC,{children:[v.jsx(ph,{path:_t.home.path,element:v.jsx(N6,{})}),v.jsx(ph,{path:_t.workbench.path,element:v.jsx(v8,{})})]}),v.jsx(Ik,{target:Nh.settings.path,children:v.jsx(L6,{})}),v.jsx(b8,{}),v.jsx(X6,{}),v.jsx(aj,{}),v.jsx(xj,{}),v.jsx(Ej,{}),v.jsx(D8,{}),v.jsx(F8,{}),v.jsx(mj,{}),v.jsx(cj,{}),v.jsx(V8,{})]})}const Y8="_layout_1605n_2",K8="_nav_1605n_2",G8="_main_1605n_2",X8="_footer_1605n_2",nc={layout:Y8,nav:K8,main:G8,footer:X8},Z8="_container_1ri7t_2",J8="_file_1ri7t_2",W8="_menu_1ri7t_2",da={container:Z8,file:J8,menu:W8},e9=({name:e,id:n,onRename:i,onDelete:l,onOpen:o})=>{const s=Qx();return v.jsxs("button",{className:da.file,onContextMenu:s.open,onClick:()=>o(n),children:[v.jsx(Vx,{handler:s,children:v.jsxs("div",{className:"context-menu-container",children:[v.jsx("button",{onClick:()=>{s.close(),i(n)},className:"context-menu-item",children:"✏️ Rename"}),v.jsx("button",{onClick:()=>{s.close(),l(n)},className:"context-menu-item",children:"🗑️ Delete"})]})}),v.jsxs("span",{children:["📖 ",e]})]})},t9=({name:e,id:n,index:i})=>{const l=`📦 ${e}`,o=()=>{Go(n),dt.event("On open datasource [Sidebar]")};return br(i.toString(),()=>{Go(s=>{if(s!==n)return n}),dt.event("On open datasource [Hotkey]")},l),v.jsxs("button",{className:da.menu,onClick:o,children:[v.jsx("span",{children:l}),v.jsx("span",{className:"hotkey",children:i})]})},n9=()=>{const e=hc(x=>x.length>0),n=zi(),i=vn(),l=fp("Sidebar"),{data:o}=Li(),{data:s}=d4(o==null?void 0:o.currentTeam.id),c=iD(),f=x=>{Db(x).then(b=>{Vo(b.name,ma(b.opts),!0),i.pathname!==_t.workbench.path&&n(_t.workbench.path)}),dt.event("On open query [Sidebar]")},h=async x=>{const b=s==null?void 0:s.find(T=>T.id===x),w=await xl("New name?",b==null?void 0:b.name);w&&c.mutate({id:x,payload:{name:w}})},d=x=>{c.mutate({id:x,payload:{isTrash:!0}})},y=()=>{e?i.pathname!==_t.workbench.path&&n(_t.workbench.path):l(),dt.event("On open workbench [Sidebar]")};let g=1;return v.jsxs("div",{className:da.container,children:[v.jsxs("div",{className:"mb-4",children:[v.jsxs("button",{onClick:()=>n(_t.home.path),className:da.menu,children:[v.jsx("span",{children:_t.home.name}),v.jsx("span",{className:"hotkey",children:"H"})]}),v.jsxs("button",{disabled:!o,onClick:l,className:da.menu,children:[v.jsx("span",{children:"🔎 Start new query"}),v.jsx("span",{className:"hotkey",children:"N"})]}),v.jsxs("button",{disabled:!o,onClick:y,className:da.menu,children:[v.jsx("span",{children:"🛠️ Workbench"}),v.jsx("span",{className:"hotkey",children:"W"})]})]}),v.jsx("div",{className:"flex-1 overflow-y-auto",children:s==null?void 0:s.map(x=>{switch(x.type){case"query":return v.jsx(e9,{onDelete:d,onRename:h,onOpen:f,name:x.name,id:x.id},x.id);case"dataSource":return v.jsx(t9,{name:x.name,id:x.id,index:g++},x.id);default:return null}})})]})},r9=({resizeDirection:e,onSizeChange:n})=>{const i=E.useRef(null),l=E.useRef(null);return E.useEffect(()=>{var s;function o(c){const f=i.current.getBoundingClientRect(),h={x:c.pageX,y:c.pageY};function d(g){{let x;x=g.pageX-h.x,i.current.style.width=`${f.width+x}px`}n&&i.current&&n(i.current)}function y(){document.body.removeEventListener("mousemove",d),document.body.removeEventListener("mouseleave",d)}document.body.addEventListener("mousemove",d),document.body.addEventListener("mouseup",y),document.body.addEventListener("mouseleave",y)}(s=l==null?void 0:l.current)==null||s.addEventListener("mousedown",o),n&&i.current&&n(i.current)}),{elementRef:i,handleRef:l}},i9=()=>{const{open:e}=dp(),{data:n}=Li(),{elementRef:i,handleRef:l}=r9({resizeDirection:"horizontal-r"}),o=()=>{qx(!0),dt.event("Open contacts")},s=()=>{e(Nh.settings.path),dt.event("Open settings")};return v.jsxs("nav",{className:nc.nav,ref:i,children:[v.jsx("div",{ref:l,className:"hr-slide"}),v.jsx(n9,{}),v.jsxs("div",{className:nc.footer,children:[v.jsx("button",{onClick:o,children:"💬 Contacts"}),v.jsx("button",{onClick:s,disabled:!n,children:Nh.settings.name})]})]})},xv=e=>window.matchMedia(e).matches;function l9(e,{defaultValue:n=!1,initializeWithValue:i=!0}={}){const[l,o]=E.useState(()=>i?xv(e):n);return E.useLayoutEffect(()=>{const s=window.matchMedia(e);function c(){o(()=>xv(e))}return c(),s.addListener?s.addListener(c):s.addEventListener("change",c),()=>{s.removeListener?s.removeListener(c):s.removeEventListener("change",c)}},[e]),l}const a9=({children:e})=>{const n=l9("(min-width: 768px)");return v.jsxs("div",{className:nc.layout,children:[n&&v.jsx(i9,{}),v.jsx("main",{className:nc.main,children:e})]})};_2.createRoot(document.getElementById("root")).render(v.jsxs(tt.StrictMode,{children:[v.jsx(gk,{}),v.jsx(dw,{id:"default",className:"z-100"}),v.jsx(TE,{client:Ot,children:v.jsx(IC,{children:v.jsx(a9,{children:v.jsx($8,{})})})})]}));
|
package/dist/code/web/index.html
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
<meta name="description" content="Designed for speed, DataRamen makes navigating MySQL and PostgreSQL data effortless with a clean, high-performance interface." />
|
|
9
9
|
<script defer data-domain="dataramen.xyz" src="https://plausible.io/js/script.hash.local.pageview-props.tagged-events.js"></script>
|
|
10
10
|
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
|
11
|
-
<script type="module" crossorigin src="/assets/index-
|
|
11
|
+
<script type="module" crossorigin src="/assets/index-D0T4eZNm.js"></script>
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/assets/index-DqfnnDma.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
package/dist/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@dataramen/local-server","version":"0.0.
|
|
1
|
+
{"name":"@dataramen/local-server","version":"0.0.50","license":"MIT","main":"code/proxy.js","dependencies":{"@fastify/cors":"^11.0.1","@fastify/static":"^8.2.0","dotenv":"^16.5.0","fast-glob":"^3.3.3","fastify":"^5.3.2","mysql2":"^3.14.1","pg":"^8.15.6","sqlite3":"^5.1.7","typeorm":"^0.3.23"},"devDependencies":{"fs-extra":"^11.3.0","open":"^10.2.0","yargs":"^18.0.0","yocto-spinner":"^1.0.0"}}
|