@budibase/server 3.23.27 → 3.23.28
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/builder/assets/{easymde-d7eb70c5.js → easymde-17470746.js} +1 -1
- package/builder/assets/{index-a639220d.js → index-68bd954d.js} +2 -2
- package/builder/index.html +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/query.js +1 -1
- package/dist/query.js.map +2 -2
- package/package.json +2 -2
- package/src/api/controllers/query/import/sources/openapi3.ts +1 -1
- package/src/api/controllers/query/import/sources/tests/openapi3/openapi3.spec.js +2 -2
- package/src/api/routes/tests/queries/rest.spec.ts +2 -2
- package/src/threads/query.ts +1 -2
package/dist/query.js
CHANGED
|
@@ -991,7 +991,7 @@ Generate the content based on these instructions. Format appropriately for a ${e
|
|
|
991
991
|
FROM
|
|
992
992
|
all_triggers
|
|
993
993
|
WHERE status = 'ENABLED'
|
|
994
|
-
`}getBindingIdentifier(){return`:${this.index++}`}getStringConcat(r){return r.join(" || ")}mapColumns(r){let n={};return r.rows&&r.rows.forEach(i=>{let o=i.TABLE_NAME,s=i.COLUMN_NAME,u=i.DATA_TYPE,c=i.DATA_DEFAULT,l=i.COLUMN_ID,f=i.CONSTRAINT_NAME,p=i.CONSTRAINT_TYPE,d=i.R_CONSTRAINT_NAME,h=i.SEARCH_CONDITION,m=n[o];m||(m={name:o,columns:{}},n[o]=m);let g=m.columns[s];if(g||(g={name:s,type:u,default:c,id:l,constraints:{}},m.columns[s]=g),f&&p){let y=g.constraints[f];y||(y={name:f,type:p,relatedConstraintName:d,searchCondition:h}),g.constraints[f]=y}}),n}getTriggersFor(r,n,i){let o=[];for(let s of n.rows||[])s.TABLE_NAME===r&&(i?.event&&i.event!==s.TRIGGERING_EVENT||i?.type&&i.type!==s.TRIGGER_TYPE||o.push(s));return o}markAutoIncrementColumns(r,n){for(let i of Object.values(n)){let o=this.getTriggersFor(i.name,r,{type:"BEFORE EACH ROW",event:"INSERT"});for(let[s,u]of Object.entries(i.schema))o.filter(l=>l.TRIGGER_BODY.includes(`"${s}"`)&&l.TRIGGER_BODY.includes(".nextval")).length>0&&(u.autocolumn=!0)}}static isSupportedColumn(r){return!LPr.includes(r.type)}static isAutoColumn(r){return!!(r.default&&r.default.toLowerCase().includes("nextval"))}isBooleanType(r){return r.type.toLowerCase()==="number"&&Object.values(r.constraints).filter(n=>{if(n.type===dse.NOT_NULL_OR_CHECK&&n.searchCondition){let i=n.searchCondition.replace(/\s/g,"").replace(/[']+/g,"");if(i.includes("in(0,1)")||i.includes("in(1,0)"))return!0}return!1}).length>0}async buildSchema(r,n){let i=await this.internalQuery({sql:e.COLUMNS_SQL}),o=await this.internalQuery({sql:e.TRIGGERS_SQL}),s=this.mapColumns(i),u={};Object.values(s).forEach(f=>{let p=u[f.name];p||(p={type:"table",_id:ws(r,f.name),primary:[],name:f.name,schema:{},sourceId:r,sourceType:"external"},u[f.name]=p),Object.values(f.columns).filter(d=>e.isSupportedColumn(d)).sort((d,h)=>d.id-h.id).forEach(d=>{let h=d.name,m=p.schema[h];m||(m=fm({autocolumn:e.isAutoColumn(d),name:h,presence:!1,externalType:d.type}),this.isBooleanType(d)&&(m.type="boolean"),p.schema[h]=m),Object.values(d.constraints).forEach(g=>{g.type===dse.PRIMARY?p.primary.push(h):g.type===dse.NOT_NULL_OR_CHECK&&g.searchCondition?.endsWith("IS NOT NULL")&&(p.schema[h].constraints={presence:!0})})})}),this.markAutoIncrementColumns(o,u);let c=vf(u,n),l=wf(c);return{tables:c,errors:l}}async getTableNames(){let r=await this.internalQuery({sql:e.COLUMNS_SQL}),n=new Set;for(let i of r.rows||[])n.add(i.TABLE_NAME);return Array.from(n)}async testConnection(){let r={connected:!1},n;try{n=await this.getConnection(),r.connected=!0}catch(i){r.connected=!1,r.error=i.message}finally{if(n)try{await n.close()}catch(i){r.connected=!1,r.error=i.message}}return r}async internalQuery(r){let n;try{this.index=1,n=await this.getConnection();let i={autoCommit:!0,fetchTypeHandler:function(u){if(u.dbType===Am.default.CLOB)return{type:Am.default.STRING};if(u.dbType===Am.default.NUMBER&&u.precision===20&&u.scale===0)return{type:Am.default.STRING}}},o=r.bindings||[];return this.log(r.sql,o),await n.execute(r.sql,o,i)}finally{if(n)try{await n.close()}catch(i){console.error("Error connecting to Oracle",i)}}}async create(r){let n=await this.internalQuery(Pi(r));return n.rows&&n.rows.length?n.rows:[{created:!0}]}async read(r){let n=await this.internalQuery(Pi(r));return n.rows?n.rows:[]}async update(r){let n=await this.internalQuery(Pi(r));return n.rows&&n.rows.length?n.rows:[{updated:!0}]}async delete(r){let n=await this.internalQuery(Pi(r));return n.rows&&n.rows.length?n.rows:[{deleted:!0}]}async query(r){let n=this._operation(r),i=this._query(r,{disableReturning:!0});if(Array.isArray(i)){let o=[];for(let s of i)o.push(await this.internalQuery(s));return o}else{let o;if(n==="DELETE"){let u=a(c=>this.internalQuery(c),"queryFn");o=await this.getReturningRow(u,r)}let s=await this.internalQuery(i);return o?.rows?.length?o.rows:s.rows?.length?s.rows:s.lastRowid&&n!=="DELETE"?(await this.internalQuery({sql:`SELECT * FROM "${r.table.name}" WHERE ROWID = '${s.lastRowid}'`})).rows:[{[n.toLowerCase()]:!0}]}}},mse={schema:NPr,integration:hse};var Pot=ne(require("lodash/cloneDeep"));var Not={POSTGRES:$te.schema,DYNAMODB:Wte.schema,MONGODB:Vte.schema,ELASTICSEARCH:Kte.schema,COUCHDB:Yte.schema,SQL_SERVER:Xte.schema,S3:ere.schema,MYSQL:ire.schema,REST:ase.schema,FIRESTORE:sse.schema,GOOGLE_SHEETS:rae.schema,REDIS:cse.schema,SNOWFLAKE:pse.schema,ORACLE:mse.schema,ARANGODB:ore.schema,AIRTABLE:rre.schema,BUDIBASE:void 0};function Frt(e){return!!e.prototype.query}a(Frt,"isDatasourcePlusConstructor");var Dot={POSTGRES:$te.integration,DYNAMODB:Wte.integration,MONGODB:Vte.integration,ELASTICSEARCH:Kte.integration,COUCHDB:Yte.integration,SQL_SERVER:Xte.integration,S3:ere.integration,MYSQL:ire.integration,REST:ase.integration,FIRESTORE:sse.integration,GOOGLE_SHEETS:rae.integration,REDIS:cse.integration,SNOWFLAKE:pse.integration,ORACLE:mse.integration,ARANGODB:ore.integration,AIRTABLE:rre.integration,BUDIBASE:void 0};async function Prt(e){let t=Not[e];return t||(await aae())[e]}a(Prt,"getDefinition");async function aae(){let e={};if(Re.SELF_HOSTED){let t=await G.plugins.fetch("datasource");for(let r of t){let n=r.name;e[n]={...r.schema.schema,custom:!0},r.iconUrl&&(e[n].iconUrl=r.iconUrl)}}return{...(0,Pot.default)(Not),...e}}a(aae,"getDefinitions");async function Em(e){if(Dot[e])return Dot[e];if(Re.SELF_HOSTED){let t=await G.plugins.fetch("datasource");for(let r of t)if(r.name===e){let n=await iXe(r);return n.integration?n.integration:n}}throw new Error(`No datasource implementation found called: "${e}"`)}a(Em,"getIntegration");var FPr=new RegExp(`"[^"]*"|'[^']*'`,"g"),UPr=new RegExp("'[^']*'","g");function MPr(e){return e==="MYSQL"?FPr:UPr}a(MPr,"getConstCharRegex");function jPr(e,t){return e==="MYSQL"?new RegExp(`[^']*${t}[^']*'|"[^"]*${t}[^"]*"`,"g"):new RegExp(`'[^']*${t}[^']*'`)}a(jPr,"getBindingWithinConstCharRegex");async function Lot(e,t,r,n,i){let o=t.sql;if(!o||typeof o!="string")return t;let s=Vo(o),u=[],c=[];for(let f of s){let p=o.match(new RegExp(`(in|IN|In|iN)( )+[(]?${f}[)]?`)),h=(o.match(MPr(e))||[]).find(m=>m.match(jPr(e,f)));if(h){let[m,g]=h.split(f);m=`'${m.substring(1)}'`,g=`'${g.substring(0,g.length-1)}'`,o=o.replace(h,n.getStringConcat([m,n.getBindingIdentifier(),g]))}else if(p){c.push(f);let m=(await G.queries.enrichContext([f],r))[0].split(",").map(y=>y.trim()),g=`${Array.apply(null,Array(m.length)).map(()=>n.getBindingIdentifier()).join(",")}`;p[0].includes(`(${f})`)||(g=`(${g})`),o=o.replace(f,g)}else o=o.replace(f,n.getBindingIdentifier());u.push(f)}if(t.sql=o,t.bindings=await G.queries.enrichArrayContext(u,r),i.nullDefaultSupport)for(let f in t.bindings)t.bindings[f]===""&&(t.bindings[f]=null);let l=[];for(let f=0;f<u.length;f++)c.includes(u[f])?l=l.concat(t.bindings[f].split(",").map(p=>p.trim())):l.push(t.bindings[f]);return t.bindings=l,t}a(Lot,"interpolateSQL");ld.threadSetup();var yse=class e{static{a(this,"QueryRunner")}constructor(t,r={noRecursiveQuery:!1}){this.datasource=t.datasource,this.queryVerb=t.queryVerb,this.fields=t.fields,this.parameters=t.parameters,this.pagination=t.pagination,this.transformer=t.transformer,this.queryId=t.queryId,this.schema=t.schema,this.nullDefaultSupport=!!t.nullDefaultSupport,this.noRecursiveQuery=r.noRecursiveQuery,this.cachedVariables=[],this.ctx=t.ctx,this.queryResponse={},this.hasRerun=!1,this.hasRefreshedOAuth=!1,this.hasDynamicVariables=!1}async execute(){let{datasource:t,fields:r,queryVerb:n,transformer:i,schema:o,nullDefaultSupport:s}=this,u=(0,gse.cloneDeep)(t),c=(0,gse.cloneDeep)(r),l=await Em(u.source);if(!l)throw"Integration type does not exist.";if(u.config?.authConfigs){let C=[];for(let k of u.config.authConfigs)C.push(await G.queries.enrichContext(k,this.ctx));u.config.authConfigs=C}let f=new l(u.config);f.defineTypeCastingFromSchema?.(o);let p=await this.addDatasourceVariables(),d=await G.queries.enrichContext(p,this.ctx),h={...d,...this.ctx};u.config?.defaultHeaders&&(u.config.defaultHeaders=await G.queries.enrichContext(u.config.defaultHeaders,h));let m;bf(u)?m=await Lot(t.source,c,h,f,{nullDefaultSupport:s}):m=await G.queries.enrichContext(c,h),this.pagination&&(m.paginationValues=this.pagination);let g=f[n];if(!g)throw new Error(`Datasource integration does not support verb: ${n}`);let y=ld.formatResponse(await g.bind(f)(m)),b=y,v,w,x;ld.hasExtraData(y)&&(b=y.data,v=y.info,w=y.extra,x=y.pagination);let T=i!=null&&i.length>0&&i.trim()!=="return data"&&i.trim()!=="return data;";if(i&&T){i=gf(i);let C=new _m;t.source==="MONGODB"&&(C=C.withParsingBson(b));let k={data:b,params:d};b=C.withContext(k,()=>C.execute(i))}if(v&&v.code>=400&&!this.hasRerun)return this.ctx?.user?.provider&&v.code===401&&!this.hasRefreshedOAuth?(await this.refreshOAuth2(this.ctx),this.hasRefreshedOAuth=!0):this.hasRerun=!0,await ld.invalidateCachedVariable(this.cachedVariables),this.execute();b===null?b=[]:Array.isArray(b)||(b=[b]),b.find(C=>typeof C!="object")&&(b=b.map(C=>({value:C})));let I=new Set;b.forEach(C=>{Object.keys(C).forEach(F=>I.add(F))});let R=[...I];return"end"in f&&typeof f.end=="function"&&f.end(),{rows:b,keys:R,info:v,extra:w,pagination:x}}async runAnotherQuery(t,r){let i=await $.getWorkspaceDB().get(t),o=await G.datasources.get(i.datasourceId,{enriched:!0}),s=i.parameters||[];for(let u of s)r[u.name]||(r[u.name]=u.default);return new e({schema:i.schema,queryVerb:i.queryVerb,fields:i.fields,transformer:i.transformer,nullDefaultSupport:i.nullDefaultSupport,ctx:this.ctx,parameters:r,datasource:o,queryId:t},{noRecursiveQuery:!0}).execute()}async refreshOAuth2(t){let{oauth2:r,providerType:n,_id:i}=t.user,{configId:o}=t.auth;if(!n||!r?.refreshToken)throw new Error("No refresh token found for authenticated user");let s=await tr.refreshOAuthToken(r.refreshToken,n,o);if(s.err){let u=s.err.data?s.err.data:s.err.toString();throw new Error("OAuth2 access token could not be refreshed: "+u)}else{let u=om(i);await tr.updateUserOAuth(u,s),this.ctx||(this.ctx={}),this.ctx.user=await jt.user.getUser({userId:u})}return s}async getDynamicVariable(t){let{parameters:r}=this,n=t.queryId,i=t.name,o=await ld.getCachedVariable(n,i);return o?this.cachedVariables.push({queryId:n,name:i}):(o=this.queryResponse[n]?this.queryResponse[n]:await this.runAnotherQuery(n,r),this.queryResponse[n]=o,await ld.storeDynamicVariable(n,i,o)),o}async addDatasourceVariables(){let{datasource:t,parameters:r,fields:n}=this;if(!t||!t.config)return r;let i=t.config.staticVariables||{},o=t.config.dynamicVariables||[];for(let[s,u]of Object.entries(i)){let c=r[s];(c==null||c===""||this.doesStaticBindingMatchLocal(c,s))&&(r[s]=u);for(let[f,p]of Object.entries(r))f!==s&&this.doesStaticBindingMatchLocal(p,s)&&(r[f]=u)}if(!this.noRecursiveQuery){let s=JSON.stringify(n),u=o.filter(f=>f.queryId===this.queryId?!1:new RegExp(`{{[ ]*${f.name}[ ]*}}`).test(s)),c=u.map(f=>this.getDynamicVariable(f)),l=await Promise.all(c);for(let f=0;f<u.length;f++){let p=u[f];r[p.name]=An(p.value,{data:l[f].rows,info:l[f].extra},{escapeNewlines:!0}),this.hasDynamicVariables=!0}}return r}doesStaticBindingMatchLocal(t,r){if(typeof t!="string")return!1;let n=t.trim(),[i]=Vo(n);if(!i||i!==n)return!1;let s=i.startsWith("{{{")&&i.endsWith("}}}")?3:2;if(i.length<=s*2)return!1;let c=i.slice(s,-s).replace(/\s+/g,"").replace(/^Datasource\.Static\./i,""),l=r.replace(/\s+/g,"");return c===l}};function BPr(e,t){let r=a(async()=>{let n=new yse(e);try{let i=await n.execute();t(null,i)}catch(i){t(i)}},"run");$.doInWorkspaceContext(e.appId,async()=>e.environmentVariables?$.doInEnvironmentContext(e.environmentVariables,()=>r()):r())}a(BPr,"execute");0&&(module.exports={execute});
|
|
994
|
+
`}getBindingIdentifier(){return`:${this.index++}`}getStringConcat(r){return r.join(" || ")}mapColumns(r){let n={};return r.rows&&r.rows.forEach(i=>{let o=i.TABLE_NAME,s=i.COLUMN_NAME,u=i.DATA_TYPE,c=i.DATA_DEFAULT,l=i.COLUMN_ID,f=i.CONSTRAINT_NAME,p=i.CONSTRAINT_TYPE,d=i.R_CONSTRAINT_NAME,h=i.SEARCH_CONDITION,m=n[o];m||(m={name:o,columns:{}},n[o]=m);let g=m.columns[s];if(g||(g={name:s,type:u,default:c,id:l,constraints:{}},m.columns[s]=g),f&&p){let y=g.constraints[f];y||(y={name:f,type:p,relatedConstraintName:d,searchCondition:h}),g.constraints[f]=y}}),n}getTriggersFor(r,n,i){let o=[];for(let s of n.rows||[])s.TABLE_NAME===r&&(i?.event&&i.event!==s.TRIGGERING_EVENT||i?.type&&i.type!==s.TRIGGER_TYPE||o.push(s));return o}markAutoIncrementColumns(r,n){for(let i of Object.values(n)){let o=this.getTriggersFor(i.name,r,{type:"BEFORE EACH ROW",event:"INSERT"});for(let[s,u]of Object.entries(i.schema))o.filter(l=>l.TRIGGER_BODY.includes(`"${s}"`)&&l.TRIGGER_BODY.includes(".nextval")).length>0&&(u.autocolumn=!0)}}static isSupportedColumn(r){return!LPr.includes(r.type)}static isAutoColumn(r){return!!(r.default&&r.default.toLowerCase().includes("nextval"))}isBooleanType(r){return r.type.toLowerCase()==="number"&&Object.values(r.constraints).filter(n=>{if(n.type===dse.NOT_NULL_OR_CHECK&&n.searchCondition){let i=n.searchCondition.replace(/\s/g,"").replace(/[']+/g,"");if(i.includes("in(0,1)")||i.includes("in(1,0)"))return!0}return!1}).length>0}async buildSchema(r,n){let i=await this.internalQuery({sql:e.COLUMNS_SQL}),o=await this.internalQuery({sql:e.TRIGGERS_SQL}),s=this.mapColumns(i),u={};Object.values(s).forEach(f=>{let p=u[f.name];p||(p={type:"table",_id:ws(r,f.name),primary:[],name:f.name,schema:{},sourceId:r,sourceType:"external"},u[f.name]=p),Object.values(f.columns).filter(d=>e.isSupportedColumn(d)).sort((d,h)=>d.id-h.id).forEach(d=>{let h=d.name,m=p.schema[h];m||(m=fm({autocolumn:e.isAutoColumn(d),name:h,presence:!1,externalType:d.type}),this.isBooleanType(d)&&(m.type="boolean"),p.schema[h]=m),Object.values(d.constraints).forEach(g=>{g.type===dse.PRIMARY?p.primary.push(h):g.type===dse.NOT_NULL_OR_CHECK&&g.searchCondition?.endsWith("IS NOT NULL")&&(p.schema[h].constraints={presence:!0})})})}),this.markAutoIncrementColumns(o,u);let c=vf(u,n),l=wf(c);return{tables:c,errors:l}}async getTableNames(){let r=await this.internalQuery({sql:e.COLUMNS_SQL}),n=new Set;for(let i of r.rows||[])n.add(i.TABLE_NAME);return Array.from(n)}async testConnection(){let r={connected:!1},n;try{n=await this.getConnection(),r.connected=!0}catch(i){r.connected=!1,r.error=i.message}finally{if(n)try{await n.close()}catch(i){r.connected=!1,r.error=i.message}}return r}async internalQuery(r){let n;try{this.index=1,n=await this.getConnection();let i={autoCommit:!0,fetchTypeHandler:function(u){if(u.dbType===Am.default.CLOB)return{type:Am.default.STRING};if(u.dbType===Am.default.NUMBER&&u.precision===20&&u.scale===0)return{type:Am.default.STRING}}},o=r.bindings||[];return this.log(r.sql,o),await n.execute(r.sql,o,i)}finally{if(n)try{await n.close()}catch(i){console.error("Error connecting to Oracle",i)}}}async create(r){let n=await this.internalQuery(Pi(r));return n.rows&&n.rows.length?n.rows:[{created:!0}]}async read(r){let n=await this.internalQuery(Pi(r));return n.rows?n.rows:[]}async update(r){let n=await this.internalQuery(Pi(r));return n.rows&&n.rows.length?n.rows:[{updated:!0}]}async delete(r){let n=await this.internalQuery(Pi(r));return n.rows&&n.rows.length?n.rows:[{deleted:!0}]}async query(r){let n=this._operation(r),i=this._query(r,{disableReturning:!0});if(Array.isArray(i)){let o=[];for(let s of i)o.push(await this.internalQuery(s));return o}else{let o;if(n==="DELETE"){let u=a(c=>this.internalQuery(c),"queryFn");o=await this.getReturningRow(u,r)}let s=await this.internalQuery(i);return o?.rows?.length?o.rows:s.rows?.length?s.rows:s.lastRowid&&n!=="DELETE"?(await this.internalQuery({sql:`SELECT * FROM "${r.table.name}" WHERE ROWID = '${s.lastRowid}'`})).rows:[{[n.toLowerCase()]:!0}]}}},mse={schema:NPr,integration:hse};var Pot=ne(require("lodash/cloneDeep"));var Not={POSTGRES:$te.schema,DYNAMODB:Wte.schema,MONGODB:Vte.schema,ELASTICSEARCH:Kte.schema,COUCHDB:Yte.schema,SQL_SERVER:Xte.schema,S3:ere.schema,MYSQL:ire.schema,REST:ase.schema,FIRESTORE:sse.schema,GOOGLE_SHEETS:rae.schema,REDIS:cse.schema,SNOWFLAKE:pse.schema,ORACLE:mse.schema,ARANGODB:ore.schema,AIRTABLE:rre.schema,BUDIBASE:void 0};function Frt(e){return!!e.prototype.query}a(Frt,"isDatasourcePlusConstructor");var Dot={POSTGRES:$te.integration,DYNAMODB:Wte.integration,MONGODB:Vte.integration,ELASTICSEARCH:Kte.integration,COUCHDB:Yte.integration,SQL_SERVER:Xte.integration,S3:ere.integration,MYSQL:ire.integration,REST:ase.integration,FIRESTORE:sse.integration,GOOGLE_SHEETS:rae.integration,REDIS:cse.integration,SNOWFLAKE:pse.integration,ORACLE:mse.integration,ARANGODB:ore.integration,AIRTABLE:rre.integration,BUDIBASE:void 0};async function Prt(e){let t=Not[e];return t||(await aae())[e]}a(Prt,"getDefinition");async function aae(){let e={};if(Re.SELF_HOSTED){let t=await G.plugins.fetch("datasource");for(let r of t){let n=r.name;e[n]={...r.schema.schema,custom:!0},r.iconUrl&&(e[n].iconUrl=r.iconUrl)}}return{...(0,Pot.default)(Not),...e}}a(aae,"getDefinitions");async function Em(e){if(Dot[e])return Dot[e];if(Re.SELF_HOSTED){let t=await G.plugins.fetch("datasource");for(let r of t)if(r.name===e){let n=await iXe(r);return n.integration?n.integration:n}}throw new Error(`No datasource implementation found called: "${e}"`)}a(Em,"getIntegration");var FPr=new RegExp(`"[^"]*"|'[^']*'`,"g"),UPr=new RegExp("'[^']*'","g");function MPr(e){return e==="MYSQL"?FPr:UPr}a(MPr,"getConstCharRegex");function jPr(e,t){return e==="MYSQL"?new RegExp(`[^']*${t}[^']*'|"[^"]*${t}[^"]*"`,"g"):new RegExp(`'[^']*${t}[^']*'`)}a(jPr,"getBindingWithinConstCharRegex");async function Lot(e,t,r,n,i){let o=t.sql;if(!o||typeof o!="string")return t;let s=Vo(o),u=[],c=[];for(let f of s){let p=o.match(new RegExp(`(in|IN|In|iN)( )+[(]?${f}[)]?`)),h=(o.match(MPr(e))||[]).find(m=>m.match(jPr(e,f)));if(h){let[m,g]=h.split(f);m=`'${m.substring(1)}'`,g=`'${g.substring(0,g.length-1)}'`,o=o.replace(h,n.getStringConcat([m,n.getBindingIdentifier(),g]))}else if(p){c.push(f);let m=(await G.queries.enrichContext([f],r))[0].split(",").map(y=>y.trim()),g=`${Array.apply(null,Array(m.length)).map(()=>n.getBindingIdentifier()).join(",")}`;p[0].includes(`(${f})`)||(g=`(${g})`),o=o.replace(f,g)}else o=o.replace(f,n.getBindingIdentifier());u.push(f)}if(t.sql=o,t.bindings=await G.queries.enrichArrayContext(u,r),i.nullDefaultSupport)for(let f in t.bindings)t.bindings[f]===""&&(t.bindings[f]=null);let l=[];for(let f=0;f<u.length;f++)c.includes(u[f])?l=l.concat(t.bindings[f].split(",").map(p=>p.trim())):l.push(t.bindings[f]);return t.bindings=l,t}a(Lot,"interpolateSQL");ld.threadSetup();var yse=class e{static{a(this,"QueryRunner")}constructor(t,r={noRecursiveQuery:!1}){this.datasource=t.datasource,this.queryVerb=t.queryVerb,this.fields=t.fields,this.parameters=t.parameters,this.pagination=t.pagination,this.transformer=t.transformer,this.queryId=t.queryId,this.schema=t.schema,this.nullDefaultSupport=!!t.nullDefaultSupport,this.noRecursiveQuery=r.noRecursiveQuery,this.cachedVariables=[],this.ctx=t.ctx,this.queryResponse={},this.hasRerun=!1,this.hasRefreshedOAuth=!1,this.hasDynamicVariables=!1}async execute(){let{datasource:t,fields:r,queryVerb:n,transformer:i,schema:o,nullDefaultSupport:s}=this,u=(0,gse.cloneDeep)(t),c=(0,gse.cloneDeep)(r),l=await Em(u.source);if(!l)throw"Integration type does not exist.";if(u.config?.authConfigs){let C=[];for(let k of u.config.authConfigs)C.push(await G.queries.enrichContext(k,this.ctx));u.config.authConfigs=C}let f=new l(u.config);f.defineTypeCastingFromSchema?.(o);let p=await this.addDatasourceVariables(),d=await G.queries.enrichContext(p,this.ctx),h={...d,...this.ctx};u.config?.defaultHeaders&&(u.config.defaultHeaders=await G.queries.enrichContext(u.config.defaultHeaders,h));let m;bf(u)?m=await Lot(t.source,c,h,f,{nullDefaultSupport:s}):m=await G.queries.enrichContext(c,h),this.pagination&&(m.paginationValues=this.pagination);let g=f[n];if(!g)throw new Error(`Datasource integration does not support verb: ${n}`);let y=ld.formatResponse(await g.bind(f)(m)),b=y,v,w,x;ld.hasExtraData(y)&&(b=y.data,v=y.info,w=y.extra,x=y.pagination);let T=i!=null&&i.length>0&&i.trim()!=="return data"&&i.trim()!=="return data;";if(i&&T){i=gf(i);let C=new _m;t.source==="MONGODB"&&(C=C.withParsingBson(b));let k={data:b,params:d};b=C.withContext(k,()=>C.execute(i))}if(v&&v.code>=400&&!this.hasRerun)return this.ctx?.user?.provider&&v.code===401&&!this.hasRefreshedOAuth?(await this.refreshOAuth2(this.ctx),this.hasRefreshedOAuth=!0):this.hasRerun=!0,await ld.invalidateCachedVariable(this.cachedVariables),this.execute();b===null?b=[]:Array.isArray(b)||(b=[b]),b.find(C=>typeof C!="object")&&(b=b.map(C=>({value:C})));let I=new Set;b.forEach(C=>{Object.keys(C).forEach(F=>I.add(F))});let R=[...I];return"end"in f&&typeof f.end=="function"&&f.end(),{rows:b,keys:R,info:v,extra:w,pagination:x}}async runAnotherQuery(t,r){let i=await $.getWorkspaceDB().get(t),o=await G.datasources.get(i.datasourceId,{enriched:!0}),s=i.parameters||[];for(let u of s)r[u.name]||(r[u.name]=u.default);return new e({schema:i.schema,queryVerb:i.queryVerb,fields:i.fields,transformer:i.transformer,nullDefaultSupport:i.nullDefaultSupport,ctx:this.ctx,parameters:r,datasource:o,queryId:t},{noRecursiveQuery:!0}).execute()}async refreshOAuth2(t){let{oauth2:r,providerType:n,_id:i}=t.user,{configId:o}=t.auth;if(!n||!r?.refreshToken)throw new Error("No refresh token found for authenticated user");let s=await tr.refreshOAuthToken(r.refreshToken,n,o);if(s.err){let u=s.err.data?s.err.data:s.err.toString();throw new Error("OAuth2 access token could not be refreshed: "+u)}else{let u=om(i);await tr.updateUserOAuth(u,s),this.ctx||(this.ctx={}),this.ctx.user=await jt.user.getUser({userId:u})}return s}async getDynamicVariable(t){let{parameters:r}=this,n=t.queryId,i=t.name,o=await ld.getCachedVariable(n,i);return o?this.cachedVariables.push({queryId:n,name:i}):(o=this.queryResponse[n]?this.queryResponse[n]:await this.runAnotherQuery(n,r),this.queryResponse[n]=o,await ld.storeDynamicVariable(n,i,o)),o}async addDatasourceVariables(){let{datasource:t,parameters:r,fields:n}=this;if(!t||!t.config)return r;let i=t.config.staticVariables||{},o=t.config.dynamicVariables||[];for(let[s,u]of Object.entries(i)){let c=r[s];(c==null||c===""||this.doesStaticBindingMatchLocal(c,s))&&(r[s]=u);for(let[f,p]of Object.entries(r))f!==s&&this.doesStaticBindingMatchLocal(p,s)&&(r[f]=u)}if(!this.noRecursiveQuery){let s=JSON.stringify(n),u=o.filter(f=>f.queryId===this.queryId?!1:new RegExp(`{{[ ]*${f.name}[ ]*}}`).test(s)),c=u.map(f=>this.getDynamicVariable(f)),l=await Promise.all(c);for(let f=0;f<u.length;f++){let p=u[f];r[p.name]=An(p.value,{data:l[f].rows,info:l[f].extra},{escapeNewlines:!0}),this.hasDynamicVariables=!0}}return r}doesStaticBindingMatchLocal(t,r){if(typeof t!="string")return!1;let n=t.trim(),[i]=Vo(n);if(!i||i!==n)return!1;let s=i.startsWith("{{{")&&i.endsWith("}}}")?3:2;if(i.length<=s*2)return!1;let u=i.slice(s,-s).replace(/\s+/g,""),c=r.replace(/\s+/g,"");return u===c}};function BPr(e,t){let r=a(async()=>{let n=new yse(e);try{let i=await n.execute();t(null,i)}catch(i){t(i)}},"run");$.doInWorkspaceContext(e.appId,async()=>e.environmentVariables?$.doInEnvironmentContext(e.environmentVariables,()=>r()):r())}a(BPr,"execute");0&&(module.exports={execute});
|
|
995
995
|
/*! Bundled license information:
|
|
996
996
|
|
|
997
997
|
safe-buffer/index.js:
|