create-questpie-app
Version:
Bootstrap a new QUESTPIE Studio application with your choice of template and packages
5 lines ⢠3.33 kB
JavaScript
import{generateNpmrcContent as e,getAvailablePackages as t,resolveDependencies as n}from"../utils/package-manager.js";import{confirmProjectCreation as r,promptPackages as i,promptProjectName as a,promptProjectType as o,promptRegistryToken as s,promptSkipGit as c,promptSkipInstall as l,promptTemplate as u}from"../utils/prompts.js";import{createProjectFromTemplateDirectory as d,createVariableResolver as f}from"../utils/template-processor.js";import{accumulateMetadata as p,generateAdditionalImports as m,generateAdditionalModules as h,generateDockerfileInstructions as g,generateEnvDocumentation as _,generateServerExternalPackages as v}from"../utils/metadata-accumulator.js";import y from"node:path";import b from"fs-extra";import x from"chalk";import S from"ora";import{execa as C}from"execa";async function w(e,t={}){try{let n=await T(e,t);t.autoConfirm||await r(n.name,n.projectType,n.template,n.packages,n.skipGit,n.skipInstall)||process.exit(0),await E(n),n.projectType===`monorepo`||n.projectType,t.skipInstall}catch(e){console.error(x.red(`
ā Error creating project:`)),console.error(e instanceof Error?e.message:String(e)),process.exit(1)}}async function T(e,t={}){let n=e?y.basename(y.resolve(e)):await a(),r=e?y.resolve(e):y.resolve(process.cwd(),n);if(await b.pathExists(r)&&(await b.readdir(r)).length!==0)throw Error(`Directory "${r}" is not empty. Please choose a different directory.`);let d=t.projectType?t.projectType:await o(),f=`web`;d!==`single-module`&&(f=t.template?t.template:await u());let p=t.token&&t.token.length>0?t.token:await s(),m=[];d!==`single-module`&&(m=t.packages&&t.packages.length>0?t.packages.split(`,`).map(e=>e.trim()):await i(f,p));let h=t.skipGit||await c(),g=t.skipInstall||await l();return{name:n,directory:r,projectType:d,template:f,packages:m,registryToken:p,skipInstall:g,skipGit:h}}async function E(r){let i=S(`Creating project...`).start();try{let a={registry_token:r.registryToken||``,package_list:``,additional_imports:``,additional_modules:``,additional_dependencies:``};if(r.projectType!==`single-module`){let e=await t(r.registryToken),i=n(r.packages,e),o=e.filter(e=>r.packages.includes(e.name)),s=p(o);r.accumulatedMetadata=s;let c=r.packages.map(e=>`- @questpie/${e}`).join(`
`),l=m(o),u=h(o),d=D(r.packages,i),f=_(s),y=v(s),b=g(s);a.package_list=c,a.additional_imports=l,a.additional_modules=u,a.additional_dependencies=d,a.env_documentation=f,a.server_external_packages=y,a.dockerfile_instructions=b}i.text=`Generating project files...`;let o=f(r.name,a);if(await d(r.directory,r.projectType,r.template,o),r.projectType!==`single-module`){i.text=`Setting up package registry...`;let t=y.join(r.directory,`.npmrc`);await b.writeFile(t,e(r.registryToken))}r.skipGit||(i.text=`Initializing git repository...`,await C(`git`,[`init`],{cwd:r.directory}),await C(`git`,[`add`,`.`],{cwd:r.directory}),await C(`git`,[`commit`,`-m`,`Initial commit from create-questpie-app`],{cwd:r.directory})),r.skipInstall||(i.text=`Installing dependencies...`,await C(`bun`,[`install`],{cwd:r.directory})),i.succeed(`Project created successfully!`)}catch(e){throw i.fail(`Failed to create project`),e}}function D(e,t){return e.filter(e=>![`core`,`auth`,`web`].includes(e)).map(e=>` "@questpie/${e}": "latest",`).join(`
`)}export{w as createApp};
//# sourceMappingURL=create.js.map