derived-cli 0.0.39 → 0.0.40

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/bundle.js +1 -1
  2. package/package.json +2 -2
package/dist/bundle.js CHANGED
@@ -87,7 +87,7 @@ ${c.default.gray(j)} ${r}
87
87
  `):process.stdout.write(`${O} ${o}
88
88
  `),x(),s()};return{start:lu,stop:it,message:(E="")=>{o=pe(E??o)}}};var R=require("child_process"),w=require("fs"),ru=require("os"),et=require("path");var G=v(require("fs")),Je=v(require("path")),Jt=(r,e=[],t=!1)=>{let i=[],s=[],n=[];for(let u of r){let o=Je.default.join(process.cwd(),u.resolvedPath);if(!u.isNotEnabled)try{if(G.default.mkdirSync(Je.default.dirname(o),{recursive:!0}),u.templateType==="add"){let D=G.default.existsSync(o)&&G.default.lstatSync(o).isFile(),h=t||e.includes(u.resolvedPath);if(D&&!h){n.push(`File already exists: ${o}`);continue}else{if(u.pathError||u.templateError){n.push(`Failed to create file: ${o} because of error: ${u.templateError}`);continue}G.default.writeFileSync(o,u.resolvedTemplate),i.push(o)}}else u.templateType==="modify"&&(u.modifiedFileContent?(G.default.writeFileSync(o,u.modifiedFileContent),s.push(o)):n.push(`Failed to modify file: ${o} because of error: ${u.templateError}`))}catch(D){n.push(D instanceof Error?D.message:String(D))}}return{addResults:i,modifyResults:s,errors:n}};var nu=v(Yt());var ze=v(ue());function Zt(r){let e={name:"root",type:"directory",children:[],path:""},t=r.map(i=>i.replace(/^\//,"").replace(/\\/g,"/")).sort();for(let i of t){let s=i.split("/").filter(Boolean),n=e;s.forEach((u,o)=>{let D=o===s.length-1,h=n.children?.find(a=>a.name===u);if(h)n=h;else{let a={name:u,type:D?"file":"directory",children:D?void 0:[],path:s.slice(0,o+1).join("/")};n.children||(n.children=[]),n.children.push(a),n=a}})}return e}function ce(r,e="",t=!0,i=!0){if(i&&r.children)return r.children.map((D,h)=>ce(D,"",h===r.children.length-1,!1)).join(`
89
89
  `);let s=t?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ",n=r.type==="directory"?"\u{1F4C1} ":"\u{1F4C4} ",u=r.type==="directory"?ze.default.cyan(r.name+"/"):ze.default.green(r.name),o=e+s+n+u+`
90
- `;if(r.children&&r.children.length>0){let D=e+(t?" ":"\u2502 ");r.children.forEach((h,a)=>{o+=ce(h,D,a===r.children.length-1,!1)})}return o}var $=require("fs"),Ye=require("path"),Vi=".derived",ji="blocks.json";function Qt(){return(0,Ye.join)(process.cwd(),Vi)}function Ze(){return(0,Ye.join)(Qt(),ji)}function Qe(r){let e=Ze();if(!(0,$.existsSync)(e))return!1;try{let t=(0,$.readFileSync)(e,"utf-8"),i=JSON.parse(t);return Array.isArray(i.addedBlocks)&&i.addedBlocks.includes(r)}catch{return!1}}function Xt(r){let e=Qt(),t=Ze();(0,$.existsSync)(e)||(0,$.mkdirSync)(e,{recursive:!0});let i=[];if((0,$.existsSync)(t))try{let s=(0,$.readFileSync)(t,"utf-8"),n=JSON.parse(s);Array.isArray(n.addedBlocks)&&(i=n.addedBlocks)}catch{}i.includes(r)||(i.push(r),(0,$.writeFileSync)(t,JSON.stringify({addedBlocks:i},null,2)))}function eu(r){let e=Ze();if((0,$.existsSync)(e))try{let t=(0,$.readFileSync)(e,"utf-8"),i=JSON.parse(t);if(Array.isArray(i.addedBlocks)){let s=i.addedBlocks.indexOf(r);s!==-1&&(i.addedBlocks.splice(s,1),(0,$.writeFileSync)(e,JSON.stringify(i,null,2)))}}catch{}}var z=new Ft,he=new nu.default;async function Mi(r){let e=(0,et.join)((0,ru.tmpdir)(),`cli-edit-${Date.now()}.json`);(0,w.writeFileSync)(e,JSON.stringify(r,null,2));let t=process.env.VISUAL||process.env.EDITOR||"nano";return new Promise((i,s)=>{(0,R.spawn)(t,[e],{stdio:"inherit"}).on("exit",u=>{if(u===0)try{let o=(0,w.readFileSync)(e,"utf-8"),D=JSON.parse(o);(0,w.unlinkSync)(e),i(D)}catch{(0,w.unlinkSync)(e),s(new Error("Invalid JSON format"))}else(0,w.unlinkSync)(e),s(new Error("Editor closed without saving"))})})}async function su(r,e){let t=H();t.start(`Modifying block input for ${e}`);let i=await he.getBlockInputFromUserQuery(JSON.stringify(r),e);return t.stop("Block input modified"),ou(i.result,"Refined Block Input"),i.result}function ou(r,e="Block Input"){J(JSON.stringify(r,null,2),e)}function Du(r,e){return he.resolveMultipleTemplates(r,e)}async function au(r,e){let t=await Du(r,e),i=t.result.files.map(u=>u.resolvedPath),s=Zt(i),n=ce(s);J(n,`\u{1F4E6} Files to be created (${t.result.files.length}):`)}async function Xe(r,e,t=!1,i){let s=H();s.start("Resolving Files...");let n=await Du(r,e),u=n.result.files.filter(a=>{let l=(0,et.join)(process.cwd(),a.resolvedPath);return(0,w.existsSync)(l)&&(0,w.lstatSync)(l).isFile()&&a.templateType==="add"}),o=[],D=t;if(u.length>0&&!t){s.stop(`${u.length} conflicting files detected`);let a=await Le({message:"Some files already exist. How would you like to proceed?",options:[{value:"overwrite-all",label:"Overwrite all"},{value:"select",label:"Select files to overwrite"},{value:"skip-all",label:"Skip all"}]});if(N(a)&&(T("Operation cancelled."),process.exit(0)),a==="overwrite-all")D=!0;else if(a==="select"){let l=await Lt({message:"Select files to overwrite",options:u.map(p=>({value:p.resolvedPath,label:p.resolvedPath}))});N(l)&&(T("Operation cancelled."),process.exit(0)),o=l}s.start("Generating files...")}let h=Jt(n.result.files,o,D);if(h.errors?.length&&console.log(h.errors,"errors"),s.stop(`${h.addResults.length} files added, ${h.modifyResults.length} files modified, ${h.errors.length} errors`),(h.addResults.length>0||h.modifyResults.length>0)&&(Xt(r),i&&i.trim())){let a=i.split(",").map(p=>p.trim()),l=H();for(let p of a)if(p){l.start(`Running setup command: ${p}`);try{(0,R.execSync)(p,{stdio:"inherit",cwd:process.cwd()}),l.stop(`\u2705 Completed: ${p}`)}catch(F){l.stop(`\u26A0\uFE0F Warning: Setup command failed: ${p}`),console.warn(` ${F.message}`)}}}}async function Wi(r,e,t,i=!1){Ue(`Add block: ${r}`);let s=!1,n=!1,u=H();u.start("Fetching block...");let o=await he.fetchBlock(r);if(o?.result?.id)u.stop(`Block Found '${o.result.name}' ${o.result.input?"with input":""}`);else{u.stop("Block Not Found");return}let D=t||o.result.input;for(t&&(await Xe(r,t,i,o.result.setupCommands),s=!0),D||(await Xe(r,{},i,o.result.setupCommands),s=!0),D&&e&&!t&&(D=su(D,e),n=!0);!s&&D&&!e;){ou(D);let a=await Le({message:"What would you like to do?",options:[{value:"refine",label:"Edit (AI)"},{value:"edit",label:"Edit (Editor)"},{value:"showFiles",label:"Show files to be created"},{value:"done",label:"Insert Files \u2705"}]});if(N(a)&&(T("Operation cancelled."),process.exit(0)),a==="refine"){let l=await qt({message:"Describe what to refine:"});D=await su(D,l),n=!0}a==="edit"&&(D=await Mi(D)),a==="done"&&(await Xe(r,D,i,o.result.setupCommands),s=!0),a==="showFiles"&&au(r,D)}}z.command("help").description("List all commands and usage").action(()=>{console.log(`
90
+ `;if(r.children&&r.children.length>0){let D=e+(t?" ":"\u2502 ");r.children.forEach((h,a)=>{o+=ce(h,D,a===r.children.length-1,!1)})}return o}var $=require("fs"),Ye=require("path"),Vi=".derived",ji="blocks.json";function Qt(){return(0,Ye.join)(process.cwd(),Vi)}function Ze(){return(0,Ye.join)(Qt(),ji)}function Qe(r){let e=Ze();if(!(0,$.existsSync)(e))return!1;try{let t=(0,$.readFileSync)(e,"utf-8"),i=JSON.parse(t);return Array.isArray(i.addedBlocks)&&i.addedBlocks.includes(r)}catch{return!1}}function Xt(r){let e=Qt(),t=Ze();(0,$.existsSync)(e)||(0,$.mkdirSync)(e,{recursive:!0});let i=[];if((0,$.existsSync)(t))try{let s=(0,$.readFileSync)(t,"utf-8"),n=JSON.parse(s);Array.isArray(n.addedBlocks)&&(i=n.addedBlocks)}catch{}i.includes(r)||(i.push(r),(0,$.writeFileSync)(t,JSON.stringify({addedBlocks:i},null,2)))}function eu(r){let e=Ze();if((0,$.existsSync)(e))try{let t=(0,$.readFileSync)(e,"utf-8"),i=JSON.parse(t);if(Array.isArray(i.addedBlocks)){let s=i.addedBlocks.indexOf(r);s!==-1&&(i.addedBlocks.splice(s,1),(0,$.writeFileSync)(e,JSON.stringify(i,null,2)))}}catch{}}var z=new Ft,he=new nu.default;async function Mi(r){let e=(0,et.join)((0,ru.tmpdir)(),`cli-edit-${Date.now()}.json`);(0,w.writeFileSync)(e,JSON.stringify(r,null,2));let t=process.env.VISUAL||process.env.EDITOR||"nano";return new Promise((i,s)=>{(0,R.spawn)(t,[e],{stdio:"inherit"}).on("exit",u=>{if(u===0)try{let o=(0,w.readFileSync)(e,"utf-8"),D=JSON.parse(o);(0,w.unlinkSync)(e),i(D)}catch{(0,w.unlinkSync)(e),s(new Error("Invalid JSON format"))}else(0,w.unlinkSync)(e),s(new Error("Editor closed without saving"))})})}async function su(r,e){let t=H();t.start(`Modifying block input for ${e}`);let i=await he.getBlockInputFromUserQuery(JSON.stringify(r),e);return t.stop("Block input modified"),ou(i.result,"Refined Block Input"),i.result}function ou(r,e="Block Input"){J(JSON.stringify(r,null,2),e)}function Du(r,e){return he.resolveMultipleTemplates(r,e)}async function au(r,e){let t=await Du(r,e),i=t.result.files.map(u=>u.resolvedPath),s=Zt(i),n=ce(s);J(n,`\u{1F4E6} Files to be created (${t.result.files.length}):`)}async function Xe(r,e,t=!1,i){let s=H();s.start("Resolving Files...");let n=await Du(r,e),u=n.result.files.filter(a=>{let l=(0,et.join)(process.cwd(),a.resolvedPath);return(0,w.existsSync)(l)&&(0,w.lstatSync)(l).isFile()&&a.templateType==="add"}),o=[],D=t;if(u.length>0&&!t){s.stop(`${u.length} conflicting files detected`);let a=await Le({message:"Some files already exist. How would you like to proceed?",options:[{value:"overwrite-all",label:"Overwrite all"},{value:"select",label:"Select files to overwrite"},{value:"skip-all",label:"Skip all"}]});if(N(a)&&(T("Operation cancelled."),process.exit(0)),a==="overwrite-all")D=!0;else if(a==="select"){let l=await Lt({message:"Select files to overwrite",options:u.map(p=>({value:p.resolvedPath,label:p.resolvedPath}))});N(l)&&(T("Operation cancelled."),process.exit(0)),o=l}s.start("Generating files...")}let h=Jt(n.result.files,o,D);if(h.errors?.length&&console.log(h.errors,"errors"),s.stop(`${h.addResults.length} files added, ${h.modifyResults.length} files modified, ${h.errors.length} errors`),h.addResults.length>0||h.modifyResults.length>0){if(Xt(r),i?.setupCommands&&i.setupCommands.trim()){let a=i.setupCommands.split(",").map(p=>p.trim()),l=H();for(let p of a)if(p){l.start(`Running setup command: ${p}`);try{(0,R.execSync)(p,{stdio:"inherit",cwd:process.cwd()}),l.stop(`Completed: ${p}`)}catch(F){l.stop(`Warning: Setup command failed: ${p}`),console.warn(` ${F.message}`)}}}i?.aiInstruction&&console.log("Instructions to be followed after file generation:",i.aiInstruction)}}async function Wi(r,e,t,i=!1){Ue(`Add block: ${r}`);let s=!1,n=!1,u=H();u.start("Fetching block...");let o=await he.fetchBlock(r);if(o?.result?.id)u.stop(`Block Found '${o.result.name}' ${o.result.input?"with input":""}`);else{u.stop("Block Not Found");return}let D=t||o.result.input;for(t&&(Xe(r,t,i,o.result),s=!0),D||(Xe(r,{},i,o.result),s=!0),D&&e&&!t&&(D=su(D,e),n=!0);!s&&D&&!e;){ou(D);let a=await Le({message:"What would you like to do?",options:[{value:"refine",label:"Edit (AI)"},{value:"edit",label:"Edit (Editor)"},{value:"showFiles",label:"Show files to be created"},{value:"done",label:"Insert Files \u2705"}]});if(N(a)&&(T("Operation cancelled."),process.exit(0)),a==="refine"){let l=await qt({message:"Describe what to refine:"});D=await su(D,l),n=!0}a==="edit"&&(D=await Mi(D)),a==="done"&&(await Xe(r,D,i,o.result),s=!0),a==="showFiles"&&au(r,D)}}z.command("help").description("List all commands and usage").action(()=>{console.log(`
91
91
  Available commands:
92
92
 
93
93
  add <block-id>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "derived-cli",
3
- "version": "0.0.39",
3
+ "version": "0.0.40",
4
4
  "description": "CLI for Derived",
5
5
  "author": "Derived",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  "dependencies": {
25
25
  "@clack/prompts": "^0.11.0",
26
26
  "commander": "^14.0.2",
27
- "derived-sdk": "^0.0.10",
27
+ "derived-sdk": "^0.0.11",
28
28
  "dotenv": "16.4.5",
29
29
  "inquirer": "^12.6.0",
30
30
  "keytar": "^7.9.0",