create-questpie-app
Version:
Bootstrap a new QUESTPIE Studio application with your choice of template and packages
5 lines ⢠3.51 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 _,generateMiddlewareArrays as v,generateMiddlewareImports as y,generateServerExternalPackages as b}from"../utils/metadata-accumulator.js";import x from"node:path";import S from"fs-extra";import C from"chalk";import w from"ora";import{execa as T}from"execa";async function E(e,t={}){try{let n=await D(e,t);t.autoConfirm||await r(n.name,n.projectType,n.template,n.packages,n.skipGit,n.skipInstall)||process.exit(0),await O(n),n.projectType===`monorepo`||n.projectType,t.skipInstall}catch(e){console.error(C.red(`
ā Error creating project:`)),console.error(e instanceof Error?e.message:String(e)),process.exit(1)}}async function D(e,t={}){let n=e?x.basename(x.resolve(e)):await a(),r=e?x.resolve(e):x.resolve(process.cwd(),n);if(await S.pathExists(r)&&(await S.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 O(r){let i=w(`Creating project...`).start();try{let a={registry_token:r.registryToken||``,package_list:``,additional_imports:``,additional_modules:``,additional_dependencies:``,middleware_imports:``,middleware_arrays:``};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=k(r.packages,i),f=y(r.template,o),x=v(r.template,o),S=_(s),C=b(s),w=g(s);a.package_list=c,a.additional_imports=l,a.additional_modules=u,a.additional_dependencies=d,a.middleware_imports=f,a.middleware_arrays=x,a.env_documentation=S,a.server_external_packages=C,a.dockerfile_instructions=w}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=x.join(r.directory,`.npmrc`);await S.writeFile(t,e(r.registryToken))}r.skipGit||(i.text=`Initializing git repository...`,await T(`git`,[`init`],{cwd:r.directory}),await T(`git`,[`add`,`.`],{cwd:r.directory}),await T(`git`,[`commit`,`-m`,`Initial commit from create-questpie-app`],{cwd:r.directory})),r.skipInstall||(i.text=`Installing dependencies...`,await T(`bun`,[`install`],{cwd:r.directory})),i.succeed(`Project created successfully!`)}catch(e){throw i.fail(`Failed to create project`),e}}function k(e,t){return e.filter(e=>![`core`,`auth`,`web`].includes(e)).map(e=>` "@questpie/${e}": "latest",`).join(`
`)}export{E as createApp};
//# sourceMappingURL=create.js.map