@budibase/cli 3.22.1 → 3.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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(UWt()),ves=ut(m7()),Ses=ut(FWt()),wes=ut(HWt()),Tes=ut(QWt()),Ces=ut(yWt()),xes=ut(J4e()),Ies=ut(qWt()),Res=ut(JWt());var uXu={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"],lXu={date:dGe,duration:Epe},Bk;function vpe(){if(Bk)return Bk;Bk={};for(let e of Object.values(uXu))for(let[t,r]of Object.entries(e))Bk[t]=(...n)=>r(...n,{});Bk={...Bk,...lXu};for(let e of Oes)delete Bk[e];return Object.freeze(Bk),Bk}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,wYt=s(e=>AGe=e,"setJSRunner"),Nes=s(()=>{AGe=void 0},"removeJSRunner"),SYt,fXu=s(e=>SYt=e,"setOnErrorLog"),dXu=s(e=>{if(!e||typeof e!="string")return e;let t=/\[+(.+)]+/,r=e.match(t);return r&&r[1]?r[1]:e},"removeSquareBrackets"),pXu=s(e=>e==="snippets"||e==="helpers"||e.startsWith("snippets.")||e.startsWith("helpers."),"isReservedKey"),hXu=s((e,t)=>{if(pXu(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[dXu(i)]}),n)},"getContextValue");function Des(handlebars,context){if(!Aes()||!AGe)throw new Error("JS disabled in environment.");try{let js=gGe(vYt(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=>hXu(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){SYt&&SYt(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 mXu={"<":"&lt;",">":"&gt;"};function gXu(e){return e==null||typeof e!="object"?!1:e.toString()==="[object Object]"||e.length>0&&typeof e[0]=="object"}s(gXu,"isObject");var AXu=[new Ok(fH.OBJECT,e=>new yGe.default.SafeString(JSON.stringify(e))),new Ok(fH.JS,Des,!1),new Ok(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 Ok(fH.ALL,(e,t)=>{let{__opts:r}=t;if(gXu(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=>mXu[i]||i)}),new Ok(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,_Yt)}s(Pes,"HelperNames");function TYt(e){for(let t of AXu)t.register(e)}s(TYt,"registerMinimum");function Bes(e){TYt(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 bYt(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=bYt(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 CYt=class{static{s(this,"Postprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t){return this.fn(t)}},xYt=[new CYt("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 IYt(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(IYt,"process");function Ues(e,t){let r=Les;return t.noFinalise&&(r=r.filter(n=>n.name!=="finalise")),IYt(e,r,t).result}s(Ues,"preprocess");function Fes(e){return IYt(e,xYt).result}s(Fes,"postprocess");function qes(e){return IYt(e,xYt)}s(qes,"postprocessWithLogs");var kYt=(0,OYt.create)();Bes(kYt);var EXu=Object.keys(kYt.helpers),Hes=(0,OYt.create)();TYt(Hes);var bXu={noHelpers:!1,cacheTemplates:!1,noEscaping:!1,escapeNewlines:!1,noFinalise:!1};function vXu(e){return e?Object.keys(e).filter(r=>EXu.includes(r)):[]}s(vXu,"findOverlappingHelpers");var RYt={};function SXu(e,t,r){t={...bXu,...t};let n=!t?.noHelpers,i=`${e}-${JSON.stringify(t)}`;if(t.cacheTemplates&&RYt[i])return RYt[i];let o=n?vXu(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=TXu(e));let c=(t.noHelpers?Hes:kYt).compile(e,{strict:!1});return RYt[i]=c,c}s(SXu,"createTemplate");function wXu(e,t,r){let n=e;if(typeof e!="string")throw new Error("Cannot process non-string types.");function i(o){let a=SXu(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(wXu,"processStringSyncInternal");function Ges(e,t,r){return wXu(e,t,{...r,logging:!1})}s(Ges,"processStringSync");function TXu(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(TXu,"disableEscaping");function Ves(e){if(!e||typeof e!="string")return[];let t=new RegExp(EYt),r=e.match(t);return r??[]}s(Ves,"findHBSBlocks");function CXu(){let e=dH()?jes.default:Qes.default;wYt((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(CXu,"browserJSSetup");function xXu(){bpe()?Nes():CXu()}s(xXu,"defaultJSSetup");xXu();var IXu=require("download"),RXu=require("tar"),OXu=["package.json.hbs","schema.json.hbs","README.md.hbs"];async function kXu(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(kXu,"getSkeletonUrl");async function Wes(e,t){let r=await kXu(e),n=(0,_Ge.join)(zes.default.tmpdir(),"skeleton.tar.gz");hH.default.writeFileSync(n,await IXu(r)),hH.default.mkdirSync(t),await RXu.extract({file:n,C:t}),hH.default.rmSync(n)}s(Wes,"getSkeleton");async function Yes(e,t,r,n){for(let i of OXu){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"));kr();var Jes=ut(require("util")),Xes=ut(require("child_process"));var NXu=Jes.default.promisify(Xes.default.exec);async function Zes(e,t="./"){let{stdout:r}=await NXu(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 DXu=require("find-free-port");function PXu(){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(PXu,"checkInPlugin");async function BXu(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.")),Yk("Create top level directory?"))}s(BXu,"askAboutTopLevel");async function MXu(e){let t=e.init||e;if(!t||!NZt.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 BXu(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(MXu,"init");async function ets(){PXu(),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 LXu(){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(LXu,"build");async function UXu(){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(UXu,"watch");async function FXu(){let e=await nL("Directory to watch","./"),[t]=await DXu(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(FXu,"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.",MXu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",LXu).addSubOption("--watch","Automatically build any changes to your plugin.",UXu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",FXu);function rts(){return[Ftr,htr,vYi,tts]}s(rts,"getCommands");var its=require("commander");Ld();var nts="3.22.1";async function QXu(){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(QXu,"init");var jXu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];jXu.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)))})});QXu().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){SYt&&SYt(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 mXu={"<":"&lt;",">":"&gt;"};function gXu(e){return e==null||typeof e!="object"?!1:e.toString()==="[object Object]"||e.length>0&&typeof e[0]=="object"}s(gXu,"isObject");var AXu=[new Ok(fH.OBJECT,e=>new yGe.default.SafeString(JSON.stringify(e))),new Ok(fH.JS,Des,!1),new Ok(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 Ok(fH.ALL,(e,t)=>{let{__opts:r}=t;if(gXu(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=>mXu[i]||i)}),new Ok(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,_Yt)}s(Pes,"HelperNames");function TYt(e){for(let t of AXu)t.register(e)}s(TYt,"registerMinimum");function Bes(e){TYt(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 bYt(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=bYt(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 CYt=class{static{s(this,"Postprocessor")}constructor(t,r){this.name=t,this.fn=r}process(t){return this.fn(t)}},xYt=[new CYt("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 IYt(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(IYt,"process");function Ues(e,t){let r=Les;return t.noFinalise&&(r=r.filter(n=>n.name!=="finalise")),IYt(e,r,t).result}s(Ues,"preprocess");function Fes(e){return IYt(e,xYt).result}s(Fes,"postprocess");function qes(e){return IYt(e,xYt)}s(qes,"postprocessWithLogs");var kYt=(0,OYt.create)();Bes(kYt);var EXu=Object.keys(kYt.helpers),Hes=(0,OYt.create)();TYt(Hes);var bXu={noHelpers:!1,cacheTemplates:!1,noEscaping:!1,escapeNewlines:!1,noFinalise:!1};function vXu(e){return e?Object.keys(e).filter(r=>EXu.includes(r)):[]}s(vXu,"findOverlappingHelpers");var RYt={};function SXu(e,t,r){t={...bXu,...t};let n=!t?.noHelpers,i=`${e}-${JSON.stringify(t)}`;if(t.cacheTemplates&&RYt[i])return RYt[i];let o=n?vXu(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=TXu(e));let c=(t.noHelpers?Hes:kYt).compile(e,{strict:!1});return RYt[i]=c,c}s(SXu,"createTemplate");function wXu(e,t,r){let n=e;if(typeof e!="string")throw new Error("Cannot process non-string types.");function i(o){let a=SXu(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(wXu,"processStringSyncInternal");function Ges(e,t,r){return wXu(e,t,{...r,logging:!1})}s(Ges,"processStringSync");function TXu(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(TXu,"disableEscaping");function Ves(e){if(!e||typeof e!="string")return[];let t=new RegExp(EYt),r=e.match(t);return r??[]}s(Ves,"findHBSBlocks");function CXu(){let e=dH()?jes.default:Qes.default;wYt((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(CXu,"browserJSSetup");function xXu(){bpe()?Nes():CXu()}s(xXu,"defaultJSSetup");xXu();var IXu=require("download"),RXu=require("tar"),OXu=["package.json.hbs","schema.json.hbs","README.md.hbs"];async function kXu(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(kXu,"getSkeletonUrl");async function Wes(e,t){let r=await kXu(e),n=(0,_Ge.join)(zes.default.tmpdir(),"skeleton.tar.gz");hH.default.writeFileSync(n,await IXu(r)),hH.default.mkdirSync(t),await RXu.extract({file:n,C:t}),hH.default.rmSync(n)}s(Wes,"getSkeleton");async function Yes(e,t,r,n){for(let i of OXu){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"));kr();var Jes=ut(require("util")),Xes=ut(require("child_process"));var NXu=Jes.default.promisify(Xes.default.exec);async function Zes(e,t="./"){let{stdout:r}=await NXu(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 DXu=require("find-free-port");function PXu(){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(PXu,"checkInPlugin");async function BXu(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.")),Yk("Create top level directory?"))}s(BXu,"askAboutTopLevel");async function MXu(e){let t=e.init||e;if(!t||!NZt.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 BXu(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(MXu,"init");async function ets(){PXu(),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 LXu(){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(LXu,"build");async function UXu(){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(UXu,"watch");async function FXu(){let e=await nL("Directory to watch","./"),[t]=await DXu(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(FXu,"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.",MXu).addSubOption("--build","Build your plugin, this will verify and produce a final tarball for your project.",LXu).addSubOption("--watch","Automatically build any changes to your plugin.",UXu).addSubOption("--dev","Run a development environment which automatically watches the current directory.",FXu);function rts(){return[Ftr,htr,vYi,tts]}s(rts,"getCommands");var its=require("commander");Ld();var nts="3.22.2";async function QXu(){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(QXu,"init");var jXu=["exit","SIGINT","SIGUSR1","SIGUSR2","uncaughtException"];jXu.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)))})});QXu().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.22.1",
3
+ "version": "3.22.2",
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": "fc0aa31417a3b68ba89317f5c498b858fb7a4494"
44
+ "gitHead": "2ce2457c2573caf5ff70c8e782e9961a4b48feee"
45
45
  }