@budibase/cli 3.20.13 → 3.20.14

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.
Files changed (2) hide show
  1. package/dist/index.js +1 -1
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1527,7 +1527,7 @@ $1`)};cpe.parseAttributes=s(function(t){return Object.keys(t).map(function(r){va
1527
1527
  `}s(mGe,"frontendWrapJS");var bes=ut(FWt()),ves=ut(m7()),Ses=ut(qWt()),wes=ut(GWt()),Tes=ut(jWt()),Ces=ut(_Wt()),xes=ut(J4e()),Ies=ut(QWt()),Res=ut(XWt());var rXu={math:bes.default,array:ves.default,number:Ses.default,url:wes.default,string:Tes.default,comparison:Ces.default,object:xes.default,regex:Ies.default,uuid:Res.default},Oes=["sortBy"],nXu={date:dGe,duration:Epe},Pk;function vpe(){if(Pk)return Pk;Pk={};for(let e of Object.values(rXu))for(let[t,r]of Object.entries(e))Pk[t]=(...n)=>r(...n,{});Pk={...Pk,...nXu};for(let e of Oes)delete Pk[e];return Object.freeze(Pk),Pk}s(vpe,"getJsHelperList");var gGe=s(e=>`(function(){
1528
1528
  ${e}
1529
1529
  })();`,"iifeWrapper");var b7=class e extends Error{constructor(){super(e.message);this.code=e.code}static{s(this,"JsTimeoutError")}static{this.message="Timed out while executing JS"}static{this.code="JS_TIMEOUT_ERROR"}},pH=class e extends Error{constructor(r){super(`error while running user-supplied JavaScript: ${r.toString()}`);this.userScriptError=r;this.code=e.code}static{s(this,"UserScriptError")}static{this.code="USER_SCRIPT_ERROR"}};var kes=ut(QMe());var AGe,TYt=s(e=>AGe=e,"setJSRunner"),Nes=s(()=>{AGe=void 0},"removeJSRunner"),wYt,iXu=s(e=>wYt=e,"setOnErrorLog"),sXu=s(e=>{if(!e||typeof e!="string")return e;let t=/\[+(.+)]+/,r=e.match(t);return r&&r[1]?r[1]:e},"removeSquareBrackets"),oXu=s(e=>e==="snippets"||e==="helpers"||e.startsWith("snippets.")||e.startsWith("helpers."),"isReservedKey"),aXu=s((e,t)=>{if(oXu(e))return;let r=/^(["'`]).*\1$/,n=t;return r.test(e)?e.substring(1,e.length-1):(e.split(".").forEach(i=>{if(n==null||typeof n!="object")return null;n=n[sXu(i)]}),n)},"getContextValue");function Des(handlebars,context){if(!Aes()||!AGe)throw new Error("JS disabled in environment.");try{let js=gGe(SYt(handlebars)),snippetMap={},snippetCache={};for(let e of context.snippets||[])snippetMap[e.name]=e.code;let clonedContext;bpe()?clonedContext=context:clonedContext=(0,kes.default)(context);let sandboxContext={$:e=>aXu(e,clonedContext),helpers:vpe(),snippets:new Proxy({},{get:function(_,name){return name in snippetCache||(snippetCache[name]=eval(gGe(snippetMap[name]))),snippetCache[name]}})},logs=[];if(!bpe()){let e=mGe(js).split(js)[0].split(`
1530
- `).length,t=s(r=>(...n)=>{dH()||console[r](...n),n.forEach((o,a)=>{typeof o=="object"&&(n[a]=JSON.stringify(o))});let i=new Error().stack?.match(/<anonymous>:(\d+):\d+/)?.[1];logs.push({log:n,line:i?parseInt(i)-e:void 0,type:r})},"buildLogResponse");sandboxContext.console={log:t("log"),info:t("info"),debug:t("debug"),warn:t("warn"),error:t("error"),table:t("table")}}let res={data:AGe(js,sandboxContext),logs};return`{{${E7} js_result-${JSON.stringify(res)}}}`}catch(e){wYt&&wYt(e);let{noThrow:t=!0}=context.__opts||{};if(e.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")return"Timed out while executing JS";if(e.code==="JS_REQUEST_TIMEOUT_ERROR")return e.message;if(e.code===b7.code)return b7.message;if(e.code===pH.code){if(t)return e.userScriptError.toString();throw e}if(e.name==="SyntaxError"){if(t)return e.toString();throw e}return"Error while executing JS"}}s(Des,"processJS");var cXu={"<":"&lt;",">":"&gt;"};function uXu(e){return e==null||typeof e!="object"?!1:e.toString()==="[object Object]"||e.length>0&&typeof e[0]=="object"}s(uXu,"isObject");var lXu=[new Rk(fH.OBJECT,e=>new yGe.default.SafeString(JSON.stringify(e))),new Rk(fH.JS,Des,!1),new Rk(fH.DECODE_ID,e=>{if(!e)return[];let t=typeof e=="string"?e:e._id,r=decodeURIComponent(t).replace(/'/g,'"');try{let n=JSON.parse(r);return Array.isArray(n)?n:[n]}catch{return[e]}}),new Rk(fH.ALL,(e,t)=>{let{__opts:r}=t;if(uXu(e))return new yGe.default.SafeString(JSON.stringify(e));if(r&&r.onlyFound&&e==null)return r.input;if(e==null||typeof e!="string")return e??"";e&&e.string&&(e=e.string);let n=e;return r&&r.escapeNewlines&&(n=e.replace(/\n/g,"\\n")),n=new yGe.default.SafeString(n.replace(/&amp;/g,"&")),n==null||typeof n!="string"?n:n.replace(/[<>]/g,i=>cXu[i]||i)}),new Rk(fH.LITERAL,e=>{if(e===void 0)return"";let t=typeof e,r=t==="object"?JSON.stringify(e):e;return`{{${E7} ${t}-${r}}}`})];function Pes(){return Object.values(fH).concat(pGe,EYt)}s(Pes,"HelperNames");function CYt(e){for(let t of lXu)t.register(e)}s(CYt,"registerMinimum");function Bes(e){CYt(e),mes(e)}s(Bes,"registerAll");var Mes=["#","else","/"];var v7=class{static{s(this,"Preprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t,r,n){let i=this.fn(r,n),o=t.indexOf(r);return vYt(t,o,r.length,i)}},Les=[new v7("swap-to-dot-notation",e=>{let t=e.indexOf("["),r=0;for(;t!==-1;){_es(e.charAt(t-1))&&(e=vYt(e,t+r,1,".[")),r=t+1;let n=e.substring(r+1).indexOf("[");t=n>0?r+1+n:-1}return e}),new v7("fix-functions",e=>{for(let t of Mes){let r=`{ ${t}`,n=`{${t}`;e=e.replace(new RegExp(r,"g"),n)}return e}),new v7("normalize-spaces",e=>e.replace(/{{(\s{2,})/g,"{{ ")),new v7("finalise",(e,t)=>{let n=!t?.noHelpers,i=e.slice(2,e.length-2);i.charAt(0)===" "&&(i=i.slice(1)),i.charAt(i.length-1)===" "&&(i=i.slice(0,i.length-1));let o=i.split(" ")[0];for(let c of Mes)if(o.includes(c))return e;let a=o.trim().toLowerCase();return n&&!t?.disabledHelpers?.includes(a)&&Pes().some(c=>a===c.toLowerCase())&&(i=`(${i})`),`{{ all ${i} }}`})];var xYt=class{static{s(this,"Postprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t){return this.fn(t)}},IYt=[new xYt("convert-literals",e=>{if(typeof e!="string"||!e.includes(E7))return{result:e};let t=e.indexOf("-"),r=e.substring(12,t),n=e.substring(t+1,e.length-2);switch(r){case"string":return{result:n};case"number":return{result:parseFloat(n)};case"boolean":return{result:n==="true"};case"object":return{result:JSON.parse(n)};case"js_result":{let i=JSON.parse(n);return{result:i.data,logs:i.logs}}}return{result:n}})];function RYt(e,t,r){let n=[];for(let i of t){if(typeof e!="string")break;let o=new RegExp(hGe),a=e.match(o);if(a!=null)for(let c of a){let u=i.process(e,c,r||{});typeof u=="object"?("logs"in u&&u.logs&&(n=n.concat(u.logs)),e=u.result):e=u}}return{result:e,logs:n}}s(RYt,"process");function Ues(e,t){let r=Les;return t.noFinalise&&(r=r.filter(n=>n.name!=="finalise")),RYt(e,r,t).result}s(Ues,"preprocess");function Fes(e){return RYt(e,IYt).result}s(Fes,"postprocess");function qes(e){return RYt(e,IYt)}s(qes,"postprocessWithLogs");var NYt=(0,kYt.create)();Bes(NYt);var pXu=Object.keys(NYt.helpers),Hes=(0,kYt.create)();CYt(Hes);var hXu={noHelpers:!1,cacheTemplates:!1,noEscaping:!1,escapeNewlines:!1,noFinalise:!1};function mXu(e){return e?Object.keys(e).filter(r=>pXu.includes(r)):[]}s(mXu,"findOverlappingHelpers");var OYt={};function gXu(e,t,r){t={...hXu,...t};let n=!t?.noHelpers,i=`${e}-${JSON.stringify(t)}`;if(t.cacheTemplates&&OYt[i])return OYt[i];let o=n?mXu(r):[];if(e=Ues(e,{...t,disabledHelpers:o}),r&&n&&o.length>0)for(let u of Ves(e))e=e.replace(u,Ees(u,o,"./"));t.noEscaping&&(e=yXu(e));let c=(t.noHelpers?Hes:NYt).compile(e,{strict:!1});return OYt[i]=c,c}s(gXu,"createTemplate");function AXu(e,t,r){let n=e;if(typeof e!="string")throw new Error("Cannot process non-string types.");function i(o){let a=gXu(o,r,t),c=Math.floor(Date.now()/1e3)*1e3,u=a({now:new Date(c).toISOString(),__opts:{...r,input:o},...t});return r?.logging?qes(u):Fes(u)}s(i,"process");try{if(r&&r.onlyFound){let o=[],a=Ves(e);for(let c of a){let u=i(c);typeof u=="object"&&"result"in u?(o=o.concat(u.logs||[]),e=e.replace(c,u.result)):e=e.replace(c,u)}return r?.logging?{result:e,logs:o}:e}else return i(e)}catch(o){let{noThrow:a=!0}=r||{};if(a)return n;throw o}}s(AXu,"processStringSyncInternal");function Ges(e,t,r){return AXu(e,t,{...r,logging:!1})}s(Ges,"processStringSync");function yXu(e){let t=yes(e);if(t==null)return e;let r=[...new Set(t)];for(let n of r){let i=new RegExp(`${n}(?!})`,"g");e=e.replace(i,`{${n}}`)}return e}s(yXu,"disableEscaping");function Ves(e){if(!e||typeof e!="string")return[];let t=new RegExp(bYt),r=e.match(t);return r??[]}s(Ves,"findHBSBlocks");function _Xu(){let e=dH()?jes.default:Qes.default;TYt((t,r)=>{e.createContext(r);let n=mGe(t),i=e.runInNewContext(n,r);if(i.error)throw new pH(i.error);return i.result})}s(_Xu,"browserJSSetup");function EXu(){bpe()?Nes():_Xu()}s(EXu,"defaultJSSetup");EXu();var bXu=require("download"),vXu=require("tar"),SXu=["package.json.hbs","schema.json.hbs","README.md.hbs"];async function wXu(e){let t=await(0,$es.default)("https://api.github.com/repos/budibase/budibase-skeleton/releases/latest");if(t.status>=300)throw new Error("Failed to retrieve skeleton metadata");let r=await t.json();for(let n of r.assets)if(n.name&&n.name.includes(e))return n.browser_download_url;throw new Error("No skeleton found in latest release.")}s(wXu,"getSkeletonUrl");async function Wes(e,t){let r=await wXu(e),n=(0,_Ge.join)(zes.default.tmpdir(),"skeleton.tar.gz");hH.default.writeFileSync(n,await bXu(r)),hH.default.mkdirSync(t),await vXu.extract({file:n,C:t}),hH.default.rmSync(n)}s(Wes,"getSkeleton");async function Yes(e,t,r,n){for(let i of SXu){let o=(0,_Ge.join)(t,i),a=(0,_Ge.join)(t,i.substring(0,i.length-4)),c=hH.default.readFileSync(o,"utf8");if(!c)continue;let u=Ges(c,{name:t,description:r,version:n});hH.default.writeFileSync(a,u),hH.default.rmSync(o)}}s(Yes,"fleshOutSkeleton");iL();var mH=ut(require("fs"));Nr();var Jes=ut(require("util")),Xes=ut(require("child_process"));var TXu=Jes.default.promisify(Xes.default.exec);async function Zes(e,t="./"){let{stdout:r}=await TXu(e,{cwd:t});return r}s(Zes,"exec");async function Kes(e){try{return await Zes(`${e} --version`),!0}catch{return!1}}s(Kes,"utilityInstalled");async function EGe(e,t="./"){let r=await Kes("yarn"),n=await Kes("npm");if(!r&&!n)throw new Error("Must have yarn or npm installed to run build.");let i=e==="install"?`npm ${e}`:`npm run ${e}`,o=r?`yarn ${e} --ignore-engines`:i;await Zes(o,t)}s(EGe,"runPkgCommand");var bGe=require("path");Ld();var CXu=require("find-free-port");function xXu(){if(!mH.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!mH.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(xXu,"checkInPlugin");async function IXu(e){return mH.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(au(`By default the plugin will be created in the directory "${e}"`)),console.log(au("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),Wk("Create top level directory?"))}s(IXu,"askAboutTopLevel");async function RXu(e){let t=e.init||e;if(!t||!DZt.includes(t)){console.log(Cu("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(au("Lets get some details about your new plugin:"));let r=await nL("Name",`budibase-${t}`);if(mH.default.existsSync(r)){console.log(Cu("Directory by plugin name already exists, pick a new name."));return}let n=await nL("Description",`An amazing Budibase ${t}!`),i=await nL("Version","1.0.0"),o=await IXu(r);console.log(au("Retrieving project...")),await Wes(t,r),await Yes(t,r,n,i),console.log(au("Installing dependencies...")),await EGe("install",(0,bGe.join)(process.cwd(),r)),o?console.log(au(`Plugin created in directory "${r}"`)):(wVe(r,process.cwd()),console.log(au("Plugin created in current directory."))),dhe(Sx.PluginInit,{type:t,name:r,description:n,version:i})}s(RXu,"init");async function ets(){xXu(),console.log(au("Verifying plugin..."));let e=mH.default.readFileSync("schema.json","utf8"),t=mH.default.readFileSync("package.json","utf8"),r,n;try{let i=JSON.parse(e),o=JSON.parse(t);if(!o.name||!o.version||!o.description)throw new Error("package.json is missing one of 'name', 'version' or 'description'.");return r=o.name,n=o.version,x2e.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(Cu(`schema.json is not valid JSON: ${i.message}`)):console.log(Cu(`Invalid schema/package.json: ${i.message}`))}}s(ets,"verify");async function OXu(){let e=await ets();if(!e?.name)return;console.log(ou("Verified!")),console.log(au("Building plugin...")),await EGe("build");let t=(0,bGe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(ou(`Build complete - output in: ${t}`))}s(OXu,"build");async function kXu(){let e=await ets();if(!e?.name)return;let t=(0,bGe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(au(`Watching - build in: ${t}`));try{await EGe("watch")}catch{console.log(ou("Watch exited."))}}s(kXu,"watch");async function NXu(){let e=await nL("Directory to watch","./"),[t]=await CXu(1e4),r="admin";await Ahe({init:"quick",single:!0,watchPluginDir:e,genUser:r,port:t,silent:!0}),await NH(),console.log(ou("Configuration has been written to docker-compose.yaml")),console.log(ou("Development environment started successfully - connect at: ")+au(`http://localhost:${t}`)),console.log(ou("Use the following credentials to login:")),console.log(ou("Email: ")+au(qVe)),console.log(ou("Password: ")+au(r))}s(NXu,"dev");var tts=new WS("plugins").addHelp("Custom plugins for Budibase, init, build and verify your components and datasources with this tool.").addSubOption("--init [type]","Init a new plugin project, with a type of either component or datasource.",RXu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",OXu).addSubOption("--watch","Automatically build any changes to your plugin.",kXu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",NXu);function rts(){return[qtr,mtr,vYi,tts]}s(rts,"getCommands");var its=require("commander");Ld();var nts="3.20.13";async function PXu(){let e=new its.Command().addHelpCommand("help",F7("Help with Budibase commands.")).helpOption(!1).version(nts);for(let t of rts())t.configure(e);await e.parseAsync(process.argv)}s(PXu,"init");var BXu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];BXu.forEach(e=>{process.on(e,t=>{t&&!isNaN(t)||t&&(console.error(Cu("Failed to run CLI command - please report with the following message:")),console.error(Cu(t)))})});PXu().catch(e=>{console.error("Unexpected error - ",e)});
1530
+ `).length,t=s(r=>(...n)=>{dH()||console[r](...n),n.forEach((o,a)=>{typeof o=="object"&&(n[a]=JSON.stringify(o))});let i=new Error().stack?.match(/<anonymous>:(\d+):\d+/)?.[1];logs.push({log:n,line:i?parseInt(i)-e:void 0,type:r})},"buildLogResponse");sandboxContext.console={log:t("log"),info:t("info"),debug:t("debug"),warn:t("warn"),error:t("error"),table:t("table")}}let res={data:AGe(js,sandboxContext),logs};return`{{${E7} js_result-${JSON.stringify(res)}}}`}catch(e){wYt&&wYt(e);let{noThrow:t=!0}=context.__opts||{};if(e.code==="ERR_SCRIPT_EXECUTION_TIMEOUT")return"Timed out while executing JS";if(e.code==="JS_REQUEST_TIMEOUT_ERROR")return e.message;if(e.code===b7.code)return b7.message;if(e.code===pH.code){if(t)return e.userScriptError.toString();throw e}if(e.name==="SyntaxError"){if(t)return e.toString();throw e}return"Error while executing JS"}}s(Des,"processJS");var cXu={"<":"&lt;",">":"&gt;"};function uXu(e){return e==null||typeof e!="object"?!1:e.toString()==="[object Object]"||e.length>0&&typeof e[0]=="object"}s(uXu,"isObject");var lXu=[new Rk(fH.OBJECT,e=>new yGe.default.SafeString(JSON.stringify(e))),new Rk(fH.JS,Des,!1),new Rk(fH.DECODE_ID,e=>{if(!e)return[];let t=typeof e=="string"?e:e._id,r=decodeURIComponent(t).replace(/'/g,'"');try{let n=JSON.parse(r);return Array.isArray(n)?n:[n]}catch{return[e]}}),new Rk(fH.ALL,(e,t)=>{let{__opts:r}=t;if(uXu(e))return new yGe.default.SafeString(JSON.stringify(e));if(r&&r.onlyFound&&e==null)return r.input;if(e==null||typeof e!="string")return e??"";e&&e.string&&(e=e.string);let n=e;return r&&r.escapeNewlines&&(n=e.replace(/\n/g,"\\n")),n=new yGe.default.SafeString(n.replace(/&amp;/g,"&")),n==null||typeof n!="string"?n:n.replace(/[<>]/g,i=>cXu[i]||i)}),new Rk(fH.LITERAL,e=>{if(e===void 0)return"";let t=typeof e,r=t==="object"?JSON.stringify(e):e;return`{{${E7} ${t}-${r}}}`})];function Pes(){return Object.values(fH).concat(pGe,EYt)}s(Pes,"HelperNames");function CYt(e){for(let t of lXu)t.register(e)}s(CYt,"registerMinimum");function Bes(e){CYt(e),mes(e)}s(Bes,"registerAll");var Mes=["#","else","/"];var v7=class{static{s(this,"Preprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t,r,n){let i=this.fn(r,n),o=t.indexOf(r);return vYt(t,o,r.length,i)}},Les=[new v7("swap-to-dot-notation",e=>{let t=e.indexOf("["),r=0;for(;t!==-1;){_es(e.charAt(t-1))&&(e=vYt(e,t+r,1,".[")),r=t+1;let n=e.substring(r+1).indexOf("[");t=n>0?r+1+n:-1}return e}),new v7("fix-functions",e=>{for(let t of Mes){let r=`{ ${t}`,n=`{${t}`;e=e.replace(new RegExp(r,"g"),n)}return e}),new v7("normalize-spaces",e=>e.replace(/{{(\s{2,})/g,"{{ ")),new v7("finalise",(e,t)=>{let n=!t?.noHelpers,i=e.slice(2,e.length-2);i.charAt(0)===" "&&(i=i.slice(1)),i.charAt(i.length-1)===" "&&(i=i.slice(0,i.length-1));let o=i.split(" ")[0];for(let c of Mes)if(o.includes(c))return e;let a=o.trim().toLowerCase();return n&&!t?.disabledHelpers?.includes(a)&&Pes().some(c=>a===c.toLowerCase())&&(i=`(${i})`),`{{ all ${i} }}`})];var xYt=class{static{s(this,"Postprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t){return this.fn(t)}},IYt=[new xYt("convert-literals",e=>{if(typeof e!="string"||!e.includes(E7))return{result:e};let t=e.indexOf("-"),r=e.substring(12,t),n=e.substring(t+1,e.length-2);switch(r){case"string":return{result:n};case"number":return{result:parseFloat(n)};case"boolean":return{result:n==="true"};case"object":return{result:JSON.parse(n)};case"js_result":{let i=JSON.parse(n);return{result:i.data,logs:i.logs}}}return{result:n}})];function RYt(e,t,r){let n=[];for(let i of t){if(typeof e!="string")break;let o=new RegExp(hGe),a=e.match(o);if(a!=null)for(let c of a){let u=i.process(e,c,r||{});typeof u=="object"?("logs"in u&&u.logs&&(n=n.concat(u.logs)),e=u.result):e=u}}return{result:e,logs:n}}s(RYt,"process");function Ues(e,t){let r=Les;return t.noFinalise&&(r=r.filter(n=>n.name!=="finalise")),RYt(e,r,t).result}s(Ues,"preprocess");function Fes(e){return RYt(e,IYt).result}s(Fes,"postprocess");function qes(e){return RYt(e,IYt)}s(qes,"postprocessWithLogs");var NYt=(0,kYt.create)();Bes(NYt);var pXu=Object.keys(NYt.helpers),Hes=(0,kYt.create)();CYt(Hes);var hXu={noHelpers:!1,cacheTemplates:!1,noEscaping:!1,escapeNewlines:!1,noFinalise:!1};function mXu(e){return e?Object.keys(e).filter(r=>pXu.includes(r)):[]}s(mXu,"findOverlappingHelpers");var OYt={};function gXu(e,t,r){t={...hXu,...t};let n=!t?.noHelpers,i=`${e}-${JSON.stringify(t)}`;if(t.cacheTemplates&&OYt[i])return OYt[i];let o=n?mXu(r):[];if(e=Ues(e,{...t,disabledHelpers:o}),r&&n&&o.length>0)for(let u of Ves(e))e=e.replace(u,Ees(u,o,"./"));t.noEscaping&&(e=yXu(e));let c=(t.noHelpers?Hes:NYt).compile(e,{strict:!1});return OYt[i]=c,c}s(gXu,"createTemplate");function AXu(e,t,r){let n=e;if(typeof e!="string")throw new Error("Cannot process non-string types.");function i(o){let a=gXu(o,r,t),c=Math.floor(Date.now()/1e3)*1e3,u=a({now:new Date(c).toISOString(),__opts:{...r,input:o},...t});return r?.logging?qes(u):Fes(u)}s(i,"process");try{if(r&&r.onlyFound){let o=[],a=Ves(e);for(let c of a){let u=i(c);typeof u=="object"&&"result"in u?(o=o.concat(u.logs||[]),e=e.replace(c,u.result)):e=e.replace(c,u)}return r?.logging?{result:e,logs:o}:e}else return i(e)}catch(o){let{noThrow:a=!0}=r||{};if(a)return n;throw o}}s(AXu,"processStringSyncInternal");function Ges(e,t,r){return AXu(e,t,{...r,logging:!1})}s(Ges,"processStringSync");function yXu(e){let t=yes(e);if(t==null)return e;let r=[...new Set(t)];for(let n of r){let i=new RegExp(`${n}(?!})`,"g");e=e.replace(i,`{${n}}`)}return e}s(yXu,"disableEscaping");function Ves(e){if(!e||typeof e!="string")return[];let t=new RegExp(bYt),r=e.match(t);return r??[]}s(Ves,"findHBSBlocks");function _Xu(){let e=dH()?jes.default:Qes.default;TYt((t,r)=>{e.createContext(r);let n=mGe(t),i=e.runInNewContext(n,r);if(i.error)throw new pH(i.error);return i.result})}s(_Xu,"browserJSSetup");function EXu(){bpe()?Nes():_Xu()}s(EXu,"defaultJSSetup");EXu();var bXu=require("download"),vXu=require("tar"),SXu=["package.json.hbs","schema.json.hbs","README.md.hbs"];async function wXu(e){let t=await(0,$es.default)("https://api.github.com/repos/budibase/budibase-skeleton/releases/latest");if(t.status>=300)throw new Error("Failed to retrieve skeleton metadata");let r=await t.json();for(let n of r.assets)if(n.name&&n.name.includes(e))return n.browser_download_url;throw new Error("No skeleton found in latest release.")}s(wXu,"getSkeletonUrl");async function Wes(e,t){let r=await wXu(e),n=(0,_Ge.join)(zes.default.tmpdir(),"skeleton.tar.gz");hH.default.writeFileSync(n,await bXu(r)),hH.default.mkdirSync(t),await vXu.extract({file:n,C:t}),hH.default.rmSync(n)}s(Wes,"getSkeleton");async function Yes(e,t,r,n){for(let i of SXu){let o=(0,_Ge.join)(t,i),a=(0,_Ge.join)(t,i.substring(0,i.length-4)),c=hH.default.readFileSync(o,"utf8");if(!c)continue;let u=Ges(c,{name:t,description:r,version:n});hH.default.writeFileSync(a,u),hH.default.rmSync(o)}}s(Yes,"fleshOutSkeleton");iL();var mH=ut(require("fs"));Nr();var Jes=ut(require("util")),Xes=ut(require("child_process"));var TXu=Jes.default.promisify(Xes.default.exec);async function Zes(e,t="./"){let{stdout:r}=await TXu(e,{cwd:t});return r}s(Zes,"exec");async function Kes(e){try{return await Zes(`${e} --version`),!0}catch{return!1}}s(Kes,"utilityInstalled");async function EGe(e,t="./"){let r=await Kes("yarn"),n=await Kes("npm");if(!r&&!n)throw new Error("Must have yarn or npm installed to run build.");let i=e==="install"?`npm ${e}`:`npm run ${e}`,o=r?`yarn ${e} --ignore-engines`:i;await Zes(o,t)}s(EGe,"runPkgCommand");var bGe=require("path");Ld();var CXu=require("find-free-port");function xXu(){if(!mH.default.existsSync("package.json"))throw new Error("Please run in a plugin directory - must contain package.json");if(!mH.default.existsSync("schema.json"))throw new Error("Please run in a plugin directory - must contain schema.json")}s(xXu,"checkInPlugin");async function IXu(e){return mH.default.readdirSync(process.cwd()).find(r=>r===".git")?!1:(console.log(au(`By default the plugin will be created in the directory "${e}"`)),console.log(au("if you are already in an empty directory, such as a new Git repo, you can disable this functionality.")),Wk("Create top level directory?"))}s(IXu,"askAboutTopLevel");async function RXu(e){let t=e.init||e;if(!t||!DZt.includes(t)){console.log(Cu("Please provide a type to init, either 'component', 'datasource' or 'automation'."));return}console.log(au("Lets get some details about your new plugin:"));let r=await nL("Name",`budibase-${t}`);if(mH.default.existsSync(r)){console.log(Cu("Directory by plugin name already exists, pick a new name."));return}let n=await nL("Description",`An amazing Budibase ${t}!`),i=await nL("Version","1.0.0"),o=await IXu(r);console.log(au("Retrieving project...")),await Wes(t,r),await Yes(t,r,n,i),console.log(au("Installing dependencies...")),await EGe("install",(0,bGe.join)(process.cwd(),r)),o?console.log(au(`Plugin created in directory "${r}"`)):(wVe(r,process.cwd()),console.log(au("Plugin created in current directory."))),dhe(Sx.PluginInit,{type:t,name:r,description:n,version:i})}s(RXu,"init");async function ets(){xXu(),console.log(au("Verifying plugin..."));let e=mH.default.readFileSync("schema.json","utf8"),t=mH.default.readFileSync("package.json","utf8"),r,n;try{let i=JSON.parse(e),o=JSON.parse(t);if(!o.name||!o.version||!o.description)throw new Error("package.json is missing one of 'name', 'version' or 'description'.");return r=o.name,n=o.version,x2e.validate(i),{name:r,version:n}}catch(i){i&&i.message&&i.message.includes("not valid JSON")?console.log(Cu(`schema.json is not valid JSON: ${i.message}`)):console.log(Cu(`Invalid schema/package.json: ${i.message}`))}}s(ets,"verify");async function OXu(){let e=await ets();if(!e?.name)return;console.log(ou("Verified!")),console.log(au("Building plugin...")),await EGe("build");let t=(0,bGe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(ou(`Build complete - output in: ${t}`))}s(OXu,"build");async function kXu(){let e=await ets();if(!e?.name)return;let t=(0,bGe.join)("dist",`${e.name}-${e.version}.tar.gz`);console.log(au(`Watching - build in: ${t}`));try{await EGe("watch")}catch{console.log(ou("Watch exited."))}}s(kXu,"watch");async function NXu(){let e=await nL("Directory to watch","./"),[t]=await CXu(1e4),r="admin";await Ahe({init:"quick",single:!0,watchPluginDir:e,genUser:r,port:t,silent:!0}),await NH(),console.log(ou("Configuration has been written to docker-compose.yaml")),console.log(ou("Development environment started successfully - connect at: ")+au(`http://localhost:${t}`)),console.log(ou("Use the following credentials to login:")),console.log(ou("Email: ")+au(qVe)),console.log(ou("Password: ")+au(r))}s(NXu,"dev");var tts=new WS("plugins").addHelp("Custom plugins for Budibase, init, build and verify your components and datasources with this tool.").addSubOption("--init [type]","Init a new plugin project, with a type of either component or datasource.",RXu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",OXu).addSubOption("--watch","Automatically build any changes to your plugin.",kXu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",NXu);function rts(){return[qtr,mtr,vYi,tts]}s(rts,"getCommands");var its=require("commander");Ld();var nts="3.20.14";async function PXu(){let e=new its.Command().addHelpCommand("help",F7("Help with Budibase commands.")).helpOption(!1).version(nts);for(let t of rts())t.configure(e);await e.parseAsync(process.argv)}s(PXu,"init");var BXu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];BXu.forEach(e=>{process.on(e,t=>{t&&!isNaN(t)||t&&(console.error(Cu("Failed to run CLI command - please report with the following message:")),console.error(Cu(t)))})});PXu().catch(e=>{console.error("Unexpected error - ",e)});
1531
1531
  /*! Bundled license information:
1532
1532
 
1533
1533
  lodash/lodash.js:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@budibase/cli",
3
- "version": "3.20.13",
3
+ "version": "3.20.14",
4
4
  "description": "Budibase CLI, for developers, self hosting and migrations.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -41,5 +41,5 @@
41
41
  "@types/pouchdb": "^6.4.0",
42
42
  "ts-node": "10.8.1"
43
43
  },
44
- "gitHead": "104666064bccf2667772e62ec951ad390de5000e"
44
+ "gitHead": "722993643f9b1df9b424e04b8e4bc2a8705b3849"
45
45
  }