@datadog/create-apps 0.0.10 → 0.0.11

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/bin.js +1 -1
  2. package/package.json +1 -1
package/dist/bin.js CHANGED
@@ -783,4 +783,4 @@ export default defineConfig({
783
783
  `};var Yr={name:"Vite & React",description:"A basic React application bundled with Vite.",requiresRumConfig:!0,postScaffoldCommands:{setup:["npm install"],gitInit:["git init","git add .",'git commit -m "Initial commit"']}};var qr={metadata:Yr,files:[Sn,Hn,jn,In,Tn,Nn,Rn,Mn,Ln,Gn,Un,Qn,zn,Yn,qn,Kn,Wn,Vn]};var Ze={"vite-react":qr};function Ca(e,t){let n=[];return typeof e!="object"||e===null?(n.push(`[${t}] metadata.json must be a valid JSON object`),n):(!("name"in e)||typeof e.name!="string"?n.push(`[${t}] metadata.json is missing required "name" field (string)`):e.name.trim()===""&&n.push(`[${t}] metadata.json "name" field cannot be empty`),!("description"in e)||typeof e.description!="string"?n.push(`[${t}] metadata.json is missing required "description" field (string)`):e.description.trim()===""&&n.push(`[${t}] metadata.json "description" field cannot be empty`),n)}function ya(e,t){let n=[];return typeof e!="object"||e===null?(n.push(`[${t}] must export an object`),n):("filepath"in e?typeof e.filepath!="string"&&n.push(`[${t}] "filepath" must be a string, got ${typeof e.filepath}`):n.push(`[${t}] missing required export "filepath"`),"contents"in e?typeof e.contents!="function"&&n.push(`[${t}] "contents" must be a function, got ${typeof e.contents}`):n.push(`[${t}] missing required export "contents"`),n)}var Kr=["npm","yarn","git"],Wr=["|",">","<","$(","`","&&","||",";"];function ba(e){let t=e.trim(),r=t.split(/\s+/)[0];if(!r||!Kr.includes(r))return!1;for(let o of Wr)if(t.includes(o))return!1;return!0}function va(e,t){let n=[];if(!e.postScaffoldCommands)return n;let r=[...e.postScaffoldCommands.setup??[],...e.postScaffoldCommands.gitInit??[]];for(let o of r)if(!ba(o)){let i=Kr.join(", "),u=Wr.join(", ");n.push(`[${t}] Unsafe post-scaffold command: "${o}".
784
784
  Only ${i} commands without dangerous patterns (${u}) are allowed.`)}return n}function Vr(){let e=[];for(let[t,n]of Object.entries(Ze)){e.push(...Ca(n.metadata,t)),e.push(...va(n.metadata,t));for(let r of n.files)e.push(...ya(r,n.metadata.name))}if(e.length>0){let t=["Template validation errors:",...e.map(n=>` - ${n}`)].join(`
785
785
  `);return console.log(t),1}return 0}function Zr(e){let t=Ze[e];if(!t){let n=Object.keys(Ze).join(", ");throw new Error(pe(`Unknown template "${e}". Available templates: ${n}`))}return t}async function Xr(){let e=Object.values(Ze).map(t=>({name:t.metadata.name,value:t,description:t.metadata.description}));if(e.length===0)throw new Error(pe("No templates found."));return Pn({message:"Select a template",choices:e.map(({name:t,value:n,description:r})=>({name:`${Yo(t)}
786
- ${T(r)}`,value:n}))})}async function Jr(e,t){let n=t.map(async({filepath:r,contents:o})=>{let i=Xn.default.join(e,r);await Zn.default.mkdir(Xn.default.dirname(i),{recursive:!0}),await Zn.default.writeFile(i,o,Buffer.isBuffer(o)?void 0:{encoding:"utf-8"})});await Promise.all(n)}var Ot=class extends W.Command{static paths=[W.Command.Default];static usage=W.Command.Usage({description:"Create a new Datadog App",examples:[["Create a new app interactively","npm init @datadog/apps my-app"],["Create a new app non-interactively","npm init @datadog/apps my-app --template vite-react -y"]]});directory=W.Option.String({required:!1});template=W.Option.String("--template",{required:!1,description:"Template to use (e.g., vite-react)"});yes=W.Option.Boolean("--yes,-y",{description:"Accept all defaults without prompting"});overwrite=W.Option.Boolean("--overwrite",{description:"Overwrite existing directory without prompting"});validate=W.Option.Boolean("--validate",{description:"Validate templates and exit"});skipPostScaffold=W.Option.Boolean("--skip-post-scaffold",{description:"Skip post-scaffold commands"});async execute(){if(console.log(qo),console.log(),console.log(),this.validate)return Vr();try{let t=await zr(this.directory,this.overwrite),n=_r.default.resolve(process.cwd(),t.directory),r=this.template?Zr(this.template):await Xr(),o=r.metadata;console.log(),console.log(),console.log(`Creating ${M(t.name)} in ${M(n)}...`),console.log(),console.log();let i=r.files.map(u=>({filepath:u.filepath,contents:u.contents({name:t.name})}));return await Jr(n,i),await Gr(n,o,this.skipPostScaffold,this.yes),console.log(Vo(t)),0}catch(t){if(t instanceof Error&&t.name==="ExitPromptError")console.log(Wo());else throw t;return 1}}};var $r="0.0.10";var Pt=new Xe.Cli({binaryLabel:"create-apps",binaryName:"npm init @datadog/apps",binaryVersion:$r});Pt.register(Ot);Pt.register(Xe.Builtins.HelpCommand);Pt.register(Xe.Builtins.VersionCommand);Pt.runExit(process.argv.slice(2));
786
+ ${T(r)}`,value:n}))})}async function Jr(e,t){let n=t.map(async({filepath:r,contents:o})=>{let i=Xn.default.join(e,r);await Zn.default.mkdir(Xn.default.dirname(i),{recursive:!0}),await Zn.default.writeFile(i,o,Buffer.isBuffer(o)?void 0:{encoding:"utf-8"})});await Promise.all(n)}var Ot=class extends W.Command{static paths=[W.Command.Default];static usage=W.Command.Usage({description:"Create a new Datadog App",examples:[["Create a new app interactively","npm init @datadog/apps my-app"],["Create a new app non-interactively","npm init @datadog/apps my-app --template vite-react -y"]]});directory=W.Option.String({required:!1});template=W.Option.String("--template",{required:!1,description:"Template to use (e.g., vite-react)"});yes=W.Option.Boolean("--yes,-y",{description:"Accept all defaults without prompting"});overwrite=W.Option.Boolean("--overwrite",{description:"Overwrite existing directory without prompting"});validate=W.Option.Boolean("--validate",{description:"Validate templates and exit"});skipPostScaffold=W.Option.Boolean("--skip-post-scaffold",{description:"Skip post-scaffold commands"});async execute(){if(console.log(qo),console.log(),console.log(),this.validate)return Vr();try{let t=await zr(this.directory,this.overwrite),n=_r.default.resolve(process.cwd(),t.directory),r=this.template?Zr(this.template):await Xr(),o=r.metadata;console.log(),console.log(),console.log(`Creating ${M(t.name)} in ${M(n)}...`),console.log(),console.log();let i=r.files.map(u=>({filepath:u.filepath,contents:u.contents({name:t.name})}));return await Jr(n,i),await Gr(n,o,this.skipPostScaffold,this.yes),console.log(Vo(t)),0}catch(t){if(t instanceof Error&&t.name==="ExitPromptError")console.log(Wo());else throw t;return 1}}};var $r="0.0.11";var Pt=new Xe.Cli({binaryLabel:"create-apps",binaryName:"npm init @datadog/apps",binaryVersion:$r});Pt.register(Ot);Pt.register(Xe.Builtins.HelpCommand);Pt.register(Xe.Builtins.VersionCommand);Pt.runExit(process.argv.slice(2));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datadog/create-apps",
3
- "version": "0.0.10",
3
+ "version": "0.0.11",
4
4
  "private": false,
5
5
  "description": "Create Datadog Apps",
6
6
  "homepage": "https://datadoghq.com",