@junobuild/cli 0.0.87 → 0.1.0
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/dist/index.js +5 -3
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -188,7 +188,7 @@ Done. The ${t} ${(0,Wu.green)(`${r}`)} has been configured for your terminal. \u
|
|
|
188
188
|
1. Open the "${e==="orbiter"?"Settings":"Controllers"}" tab on ${If(r)}`),console.log(`2. Add the controller ${(0,Wu.green)(t.toText())} to your ${e} with the ${(0,Wu.bold)("ADMIN")} scope`),console.log(`3. Copy the ${(0,Wu.green)(`${e} ID`)} to which you added the controller
|
|
189
189
|
`),await ii("Have you completed this step?")};var d7=vt(g0(),1);var Lf=vt(kt(),1);import{createServer as Yge}from"http";import Jge from"node:fs";import Xge,{dirname as Qge}from"node:path";import{fileURLToPath as Zge}from"url";import e1e from"util";var M9=({port:e,nonce:t,principal:r})=>{let n=Jye({port:e,nonce:t}),s=new URL(kb);return s.searchParams.set("redirect_uri",encodeURIComponent(n.toString())),s.searchParams.set("principal",r),s.toString()},R9=({port:e,reqUrl:t})=>`${XA.replace("{port}",`${e}`)}${t}`,Jye=({port:e,nonce:t})=>{let r=new URL(XA.replace("{port}",`${e}`));return r.searchParams.set("state",`${t}`),r.toString()};import Vv from"node:process";import{Buffer as vge}from"node:buffer";import G9 from"node:path";import{fileURLToPath as xge}from"node:url";import Ege from"node:child_process";import fC,{constants as z9}from"node:fs/promises";import U9 from"node:process";import tge from"node:os";import rge from"node:fs";import Zye from"node:fs";import L9 from"node:fs";var aC;function Xye(){try{return L9.statSync("/.dockerenv"),!0}catch{return!1}}function Qye(){try{return L9.readFileSync("/proc/self/cgroup","utf8").includes("docker")}catch{return!1}}function oC(){return aC===void 0&&(aC=Xye()||Qye()),aC}var lC,ege=()=>{try{return Zye.statSync("/run/.containerenv"),!0}catch{return!1}};function Nf(){return lC===void 0&&(lC=ege()||oC()),lC}var $9=()=>{if(U9.platform!=="linux")return!1;if(tge.release().toLowerCase().includes("microsoft"))return!Nf();try{return rge.readFileSync("/proc/version","utf8").toLowerCase().includes("microsoft")?!Nf():!1}catch{return!1}},wy=U9.env.__IS_WSL_TEST__?$9:$9();function Ud(e,t,r){let n=s=>Object.defineProperty(e,t,{value:s,enumerable:!0,writable:!0});return Object.defineProperty(e,t,{configurable:!0,enumerable:!0,get(){let s=r();return n(s),s},set(s){n(s)}}),e}import{promisify as mge}from"node:util";import dC from"node:process";import{execFile as yge}from"node:child_process";import{promisify as nge}from"node:util";import ige from"node:process";import{execFile as sge}from"node:child_process";var age=nge(sge);async function uC(){if(ige.platform!=="darwin")throw new Error("macOS only");let{stdout:e}=await age("defaults",["read","com.apple.LaunchServices/com.apple.launchservices.secure","LSHandlers"]);return/LSHandlerRoleAll = "(?!-)(?<id>[^"]+?)";\s+?LSHandlerURLScheme = (?:http|https);/.exec(e)?.groups.id??"com.apple.Safari"}import oge from"node:process";import{promisify as lge}from"node:util";import{execFile as uge,execFileSync as yke}from"node:child_process";var cge=lge(uge);async function V9(e,{humanReadableOutput:t=!0}={}){if(oge.platform!=="darwin")throw new Error("macOS only");let r=t?[]:["-ss"],{stdout:n}=await cge("osascript",["-e",e,r]);return n.trim()}async function cC(e){return V9(`tell application "Finder" to set app_path to application file id "${e}" as string
|
|
190
190
|
tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as pge}from"node:util";import{execFile as dge}from"node:child_process";var hge=pge(dge),fge={AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},MSEdgeDHTML:{name:"Edge",id:"com.microsoft.edge"},MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"}},Uv=class extends Error{};async function pC(e=hge){let{stdout:t}=await e("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),r=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(t);if(!r)throw new Uv(`Cannot find Windows browser in stdout: ${JSON.stringify(t)}`);let{id:n}=r.groups,s=fge[n];if(!s)throw new Uv(`Unknown browser ID: ${n}`);return s}var gge=mge(yge),bge=e=>e.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,t=>t.toUpperCase());async function hC(){if(dC.platform==="darwin"){let e=await uC();return{name:await cC(e),id:e}}if(dC.platform==="linux"){let{stdout:e}=await gge("xdg-mime",["query","default","x-scheme-handler/http"]),t=e.trim();return{name:bge(t.replace(/.desktop$/,"").replace("-"," ")),id:t}}if(dC.platform==="win32")return pC();throw new Error("Only macOS, Linux, and Windows are supported")}var mC=G9.dirname(xge(import.meta.url)),q9=G9.join(mC,"xdg-open"),{platform:Ff,arch:K9}=Vv,Tge=(()=>{let e="/mnt/",t;return async function(){if(t)return t;let r="/etc/wsl.conf",n=!1;try{await fC.access(r,z9.F_OK),n=!0}catch{}if(!n)return e;let s=await fC.readFile(r,{encoding:"utf8"}),o=/(?<!#.*)root\s*=\s*(?<mountPoint>.*)/g.exec(s);return o?(t=o.groups.mountPoint.trim(),t=t.endsWith("/")?t:`${t}/`,t):e}})(),W9=async(e,t)=>{let r;for(let n of e)try{return await t(n)}catch(s){r=s}throw r},qv=async e=>{if(e={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...e},Array.isArray(e.app))return W9(e.app,c=>qv({...e,app:c}));let{name:t,arguments:r=[]}=e.app??{};if(r=[...r],Array.isArray(t))return W9(t,c=>qv({...e,app:{name:c,arguments:r}}));if(t==="browser"||t==="browserPrivate"){let c={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","microsoft-edge.desktop":"edge"},p={chrome:"--incognito",firefox:"--private-window",edge:"--inPrivate"},d=await hC();if(d.id in c){let l=c[d.id];return t==="browserPrivate"&&r.push(p[l]),qv({...e,app:{name:Mp[l],arguments:r}})}throw new Error(`${d.name} is not supported as a default browser`)}let n,s=[],o={};if(Ff==="darwin")n="open",e.wait&&s.push("--wait-apps"),e.background&&s.push("--background"),e.newInstance&&s.push("--new"),t&&s.push("-a",t);else if(Ff==="win32"||wy&&!Nf()&&!t){let c=await Tge();n=wy?`${c}c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe`:`${Vv.env.SYSTEMROOT||Vv.env.windir||"C:\\Windows"}\\System32\\WindowsPowerShell\\v1.0\\powershell`,s.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),wy||(o.windowsVerbatimArguments=!0);let p=["Start"];e.wait&&p.push("-Wait"),t?(p.push(`"\`"${t}\`""`),e.target&&r.push(e.target)):e.target&&p.push(`"${e.target}"`),r.length>0&&(r=r.map(d=>`"\`"${d}\`""`),p.push("-ArgumentList",r.join(","))),e.target=vge.from(p.join(" "),"utf16le").toString("base64")}else{if(t)n=t;else{let c=!mC||mC==="/",p=!1;try{await fC.access(q9,z9.X_OK),p=!0}catch{}n=Vv.versions.electron??(Ff==="android"||c||!p)?"xdg-open":q9}r.length>0&&s.push(...r),e.wait||(o.stdio="ignore",o.detached=!0)}Ff==="darwin"&&r.length>0&&s.push("--args",...r),e.target&&s.push(e.target);let a=Ege.spawn(n,s,o);return e.wait?new Promise((c,p)=>{a.once("error",p),a.once("close",d=>{if(!e.allowNonzeroExitCode&&d>0){p(new Error(`Exited with code ${d}`));return}c(a)})}):(a.unref(),a)},wge=(e,t)=>{if(typeof e!="string")throw new TypeError("Expected a `target`");return qv({...t,target:e})};function H9(e){if(typeof e=="string"||Array.isArray(e))return e;let{[K9]:t}=e;if(!t)throw new Error(`${K9} is not supported`);return t}function yC({[Ff]:e},{wsl:t}){if(t&&wy)return H9(t);if(!e)throw new Error(`${Ff} is not supported`);return H9(e)}var Mp={};Ud(Mp,"chrome",()=>yC({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));Ud(Mp,"firefox",()=>yC({darwin:"firefox",win32:"C:\\Program Files\\Mozilla Firefox\\firefox.exe",linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));Ud(Mp,"edge",()=>yC({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));Ud(Mp,"browser",()=>"browser");Ud(Mp,"browserPrivate",()=>"browserPrivate");var Y9=wge;var Bf=async({url:e,browser:t})=>{let{chrome:r,firefox:n,edge:s}=Mp,o;switch(t?.toLowerCase()){case"chrome":o=r;break;case"firefox":o=n;break;case"edge":o=s;break;case"safari":o="Safari";break}return await Y9(e,o!==void 0?{app:{name:o}}:void 0)};var Qv=vt(c7(),1);(0,Qv.setBasePort)(9005);var p7=async()=>await(0,Qv.getPortPromise)();var t1e=Zge(import.meta.url),r1e=Qge(t1e),Py=async e=>{let t=await p7(),r=Math.floor(Math.random()*(2<<29)+1),n=d7.Ed25519KeyIdentity.generate(),s=n.getPrincipal().toText(),o=n.toJSON(),a=Lr({args:e,option:"-b"})??Lr({args:e,option:"--browser"});await new Promise((c,p)=>{let d=Yge(async(l,m)=>{let y=new URL(R9({port:t,reqUrl:l.url})),b=y.searchParams.get("state"),f=y.searchParams.get("satellites"),x=y.searchParams.get("orbiters"),w=y.searchParams.get("mission_control"),v=y.searchParams.get("profile");if(b!==`${r}`){await TC(l,m,400,"../templates/login/failure.html"),p(new Error("Unexpected error while logging in.")),d.close();return}try{await n1e({token:o,satellites:f,orbiters:x,missionControl:w,profile:v}),await TC(l,m,200,"../templates/login/success.html"),console.log(`${(0,Lf.green)("Success!")} Logged in. \u2705`),c()}catch(S){console.error(S),await TC(l,m,400,"../templates/login/failure.html"),p(S)}d.close()});d.listen(t,async()=>{console.log(),console.log("Visit this URL on this device to log in:"),console.log((0,Lf.bold)((0,Lf.underline)(kb))),console.log(),console.log("Waiting for authentication..."),await Bf({url:M9({port:t,nonce:r,principal:s}),browser:a})}),d.on("error",l=>{p(l)})})};async function TC(e,t,r,n){let s=await e1e.promisify(Jge.readFile)(Xge.join(r1e,n));t.writeHead(r,{"Content-Length":s.length,"Content-Type":"text/html"}),t.end(s),e.socket.destroy()}var n1e=async({token:e,satellites:t,orbiters:r,missionControl:n,profile:s})=>{await x9({token:e,satellites:JSON.parse(decodeURIComponent(t??"[]")),orbiters:r!==null?JSON.parse(decodeURIComponent(r)):null,missionControl:n,profile:s})};var m7=async()=>{await _9(),console.log(`${(0,wC.green)("Logged out")}`)},y7=async e=>{let t=await Bp();if(Wt(t)){await Py(e);return}let r=h7.Ed25519KeyIdentity.fromParsedJson(t);console.log(`\u{1F510} Your terminal is already a controller: ${(0,wC.green)(r.getPrincipal().toText())}.
|
|
191
|
-
`);let{action:n}=await(0,f7.default)({type:"select",name:"action",message:"What would you like to do?",choices:[{title:"Create a new controller via a login with your browser",value:"login"},{title:"Reuse the existing controller",value:"reuse"}]});if(Zi(n),n==="login"){await Py(e);return}await j9(r.getPrincipal())};var kD=vt(kt(),1);var hl=vt(kt(),1);var g7=vt(kt(),1),qi=`${(0,g7.yellow)("-m, --mode")} Set env mode. For example production or a custom string. Default is production.`,Ln=e=>Rr({args:e,options:["-d","--doc"]})?"doc":"cli";var Ci=vt(kt(),1);var Zv="0.0
|
|
191
|
+
`);let{action:n}=await(0,f7.default)({type:"select",name:"action",message:"What would you like to do?",choices:[{title:"Create a new controller via a login with your browser",value:"login"},{title:"Reuse the existing controller",value:"reuse"}]});if(Zi(n),n==="login"){await Py(e);return}await j9(r.getPrincipal())};var kD=vt(kt(),1);var hl=vt(kt(),1);var g7=vt(kt(),1),qi=`${(0,g7.yellow)("-m, --mode")} Set env mode. For example production or a custom string. Default is production.`,Ln=e=>Rr({args:e,options:["-d","--doc"]})?"doc":"cli";var Ci=vt(kt(),1);var Zv="0.1.0";var Rp=vt(kt(),1);var ex="Clear existing dapp code by removing JavaScript, HTML, CSS, and other files from your satellite.",b7=`Usage: ${(0,Rp.green)("juno")} ${(0,Rp.cyan)("clear")} ${(0,Rp.yellow)("[options]")}
|
|
192
192
|
|
|
193
193
|
Options:
|
|
194
194
|
${(0,Rp.yellow)("-f, --fullPath")} Clear a particular file of your dapp.
|
|
@@ -923,9 +923,11 @@ ${e}`,"utf-8"),await SE(NO,`${PE}
|
|
|
923
923
|
|
|
924
924
|
import service "${MW}";
|
|
925
925
|
|
|
926
|
-
${r}`,"utf-8")},RW=e=>`${SO}/satellite.${e==="ts"?"did.d.ts":"factory.did.js"}`,VPe=async()=>{if(!FO(AE)||(await IO(AE,"utf-8")).trim()==="service : { build_version : () -> (text) query }")return;let r=async s=>{let o=RW(s);await Jo({command:"junobuild-didc",args:["-i",AE,"-t",s,"-o",o]});let a=await IO(o,"utf-8")
|
|
926
|
+
${r}`,"utf-8")},RW=e=>`${SO}/satellite.${e==="ts"?"did.d.ts":"factory.did.js"}`,VPe=async()=>{if(!FO(AE)||(await IO(AE,"utf-8")).trim()==="service : { build_version : () -> (text) query }")return;let r=async s=>{let o=RW(s);await Jo({command:"junobuild-didc",args:["-i",AE,"-t",s,"-o",o]});let a=await IO(o,"utf-8"),p=s==="js"?(d=>d.replace(/export const idlFactory = \({ IDL }\) => {/g,`// @ts-expect-error
|
|
927
|
+
export const idlFactory = ({ IDL }) => {`).replace(/export const init = \({ IDL }\) => {/g,`// @ts-expect-error
|
|
928
|
+
export const init = ({ IDL }) => {`))(a):a;await SE(o,`${PE}
|
|
927
929
|
|
|
928
|
-
${
|
|
930
|
+
${p}`)},n=["js","ts"].map(r);await Promise.all(n)},qPe=async()=>{let e=RW("ts");if(!FO(e))return;let r=EE()?.configType==="ts"?"ts":"js",n=`${SO}/satellite.api.${r}`,o=await(async()=>{try{let a=await IO(Jp(process.cwd(),"package.json"),"utf-8"),{dependencies:c}=JSON.parse(a);return Object.keys(c??{}).includes("@junobuild/core-standalone")?"core-standalone":"core"}catch{return"core"}})();await PW({inputFile:e,outputFile:n,transformerOptions:{outputLanguage:r,coreLib:o}})},KPe=async()=>{await RPe(kW,{recursive:!0}),await Jo({command:"ic-wasm",args:[Jp(BW,"satellite.wasm"),"-o",El,"shrink","--keep-name-section"]}),await Jo({command:"ic-wasm",args:[El,"-o",El,"metadata","candid:service","-f",NO,"-v","public","--keep-name-section"]}),await Jo({command:"ic-wasm",args:[El,"-o",El,"metadata","juno:build","-d","extended","-v","public","--keep-name-section"]}),await Jo({command:"ic-wasm",args:[El,"-o",El,"metadata","supported_certificate_versions","-d",'"1,2"',"-v","public","--keep-name-section"]})},WPe=async e=>{let t=`${El}.gz`,{size:r}=await MPe(t),n=s=>Intl.NumberFormat("en-US",{maximumSignificantDigits:2}).format(s/(1024*1024));e.succeed(`${(0,tu.green)("Success!")}
|
|
929
931
|
|
|
930
932
|
The satellite has been compiled.
|
|
931
933
|
Output file: ${(0,tu.yellow)(`${$Pe(process.cwd(),t)}`)} ${(0,tu.grey)(`(${n(r)}MB)`)}`)},HPe=async()=>{let{valid:e}=await FW();return e===!1?{valid:e}:(e==="error"&&(await ii(`The ${(0,tu.magenta)("ic-wasm")} ${(0,tu.yellow)(`v${lm}`)} tool is required to build a satellite but appears to be not available. Would you like to install it?`),await Pl({command:"cargo",args:["install",`ic-wasm@${lm}`]})),{valid:!0})},GPe=async()=>{let{valid:e}=await OO({command:"candid-extractor",args:["--version"]});return e===!1?{valid:e}:(e==="error"&&(await ii(`The ${(0,tu.magenta)("candid-extractor")} tool is required to generate the API ("did file"). Would you like to install it?`),await Pl({command:"cargo",args:["install","candid-extractor"]})),{valid:!0})},zPe=async()=>{let{valid:e}=await OO({command:"junobuild-didc",args:["--version"]});return e===!1?{valid:e}:(e==="error"&&(await ii(`It seems that ${(0,tu.magenta)("junobuild-didc")} is not installed. This is a useful tool for generating automatically JavaScript or TypeScript bindings. Would you like to install it?`),await Pl({command:"cargo",args:["install","junobuild-didc"]})),{valid:!0})};var LW=vt(kt(),1);import{existsSync as YPe}from"node:fs";import{writeFile as JPe}from"node:fs/promises";import{basename as XPe,join as QPe}from"node:path";var $W="../templates/docker",UW=process.cwd(),VW=async()=>{let{valid:e}=await CO();e==="error"||!e||(await DO(),await ZPe(),await t_e(),await Pl({command:"docker",args:["compose","up"]}))},qW=async()=>{let{valid:e}=await CO();e==="error"||!e||(await DO(),await Pl({command:"docker",args:["compose","stop"]}))},ZPe=async()=>{if(await _W())return;await ii("A config file is required for development. Would you like the CLI to create one for you?");let{configType:e,configPath:t}=await e_e();await Kp({template:`${jb}.${e}`,sourceFolder:$W,destinationFolder:UW,...tr(t)&&{destinationFilename:t}})},e_e=async()=>{let e=EE();return tr(e)?e:{configType:await pE()}},t_e=async()=>{if(YPe("docker-compose.yml"))return;await ii(`The CLI utilizes Docker Compose, which is handy for customizing configurations. Would you like the CLI to generate a default ${(0,LW.magenta)("docker-compose.yml")} file for you?`);let e=await em({template:"docker-compose.yml",sourceFolder:$W}),{configPath:t}=CW(),r=XPe(t),n=e.replaceAll("<JUNO_DEV_CONFIG>",r);await JPe(QPe(UW,"docker-compose.yml"),n,"utf-8")};var Xp=vt(kt(),1);import{mkdir as r_e}from"node:fs/promises";import{join as KW}from"node:path";var WW=async()=>{let{valid:e}=await wE();if(e==="error"||!e)return;await Kp({template:"Cargo.toml",sourceFolder:AO,destinationFolder:"."});let t=KW($c,"src");await r_e(t,{recursive:!0}),await Kp({template:"Cargo.toml",sourceFolder:om,destinationFolder:$c}),await Kp({template:"lib.rs",sourceFolder:KW(om,"src"),destinationFolder:t}),await OW(),console.log(n_e({src:$c}))},n_e=({src:e})=>`
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@junobuild/cli",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "The Juno command-line interface",
|
|
5
5
|
"author": "David Dal Busco (https://daviddalbusco.com)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
"@junobuild/admin": "^0.0.61",
|
|
33
33
|
"@junobuild/cli-tools": "^0.0.16",
|
|
34
34
|
"@junobuild/config-loader": "^0.0.7",
|
|
35
|
-
"@junobuild/core
|
|
36
|
-
"@junobuild/did-tools": "^0.0.
|
|
35
|
+
"@junobuild/core": "^0.1.0",
|
|
36
|
+
"@junobuild/did-tools": "^0.0.5",
|
|
37
37
|
"@junobuild/utils": "^0.0.27",
|
|
38
38
|
"conf": "^13.0.1",
|
|
39
39
|
"open": "^10.1.0",
|