create-adoniscommerce 2.0.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.
Files changed (2) hide show
  1. package/dist/index.js +57 -0
  2. package/package.json +60 -0
package/dist/index.js ADDED
@@ -0,0 +1,57 @@
1
+ #!/usr/bin/env node
2
+ import{defineCommand as Ae,runMain as _e}from"citty";import*as f from"@clack/prompts";import ce from"picocolors";import x from"fs-extra";import Ee from"path";import d from"picocolors";var D="2.0.0",M="haliltoma/adonisjs-ecommerce-core/templates/default#main",T=".adoniscommerce-cache";function B(){let e=`
3
+ ${d.magenta(" \u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E")}
4
+ ${d.magenta(" \u2502")} ${d.magenta("\u2502")}
5
+ ${d.magenta(" \u2502")} ${d.bold(d.magenta("\u25C6 AdonisCommerce"))} ${d.dim(`v${D}`)} ${d.magenta("\u2502")}
6
+ ${d.magenta(" \u2502")} ${d.dim("\u2502")} ${d.dim("Modern e-commerce platform")} ${d.magenta("\u2502")}
7
+ ${d.magenta(" \u2502")} ${d.magenta("\u2502")}
8
+ ${d.magenta(" \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F")}
9
+ `;console.log(e)}import*as p from"@clack/prompts";import q from"picocolors";function A(){let e=process.env.npm_config_user_agent||"";return e.startsWith("pnpm")?"pnpm":e.startsWith("yarn")?"yarn":e.startsWith("bun")?"bun":"pnpm"}function I(e){switch(e){case"yarn":return"yarn install";case"bun":return"bun install";case"npm":return"npm install";default:return"pnpm install"}}async function N(e,t){if(t.yes)return{projectName:e||"my-store",template:t.template||"default",packageManager:t.pm||A(),database:t.db||"postgres",docker:t.docker??!0,git:t.git??!0,install:t.install??!0};p.intro(q.bgMagenta(q.black(" AdonisCommerce ")));let a=await p.group({projectName:()=>e?Promise.resolve(e):p.text({message:"Project name",placeholder:"my-store",defaultValue:"my-store",validate(o){if(!o)return"Project name is required";if(!/^[a-z0-9-_]+$/i.test(o))return"Project name can only contain alphanumeric characters, hyphens, and underscores"}}),template:()=>t.template?Promise.resolve(t.template):p.select({message:"Template",options:[{value:"default",label:"Default",hint:"Full-stack with admin panel"}],initialValue:"default"}),database:()=>t.db?Promise.resolve(t.db):p.select({message:"Database",options:[{value:"postgres",label:"PostgreSQL",hint:"recommended"},{value:"mysql",label:"MySQL"},{value:"sqlite",label:"SQLite",hint:"development only"}],initialValue:"postgres"}),packageManager:()=>{if(t.pm)return Promise.resolve(t.pm);let o=A();return p.select({message:"Package manager",options:[{value:"pnpm",label:"pnpm",hint:o==="pnpm"?"detected":"recommended"},{value:"npm",label:"npm",hint:o==="npm"?"detected":void 0},{value:"yarn",label:"yarn",hint:o==="yarn"?"detected":void 0},{value:"bun",label:"bun",hint:o==="bun"?"detected":void 0}],initialValue:o})},docker:()=>t.docker!==void 0?Promise.resolve(t.docker):p.confirm({message:"Include Docker setup?",initialValue:!0}),git:()=>t.git!==void 0?Promise.resolve(t.git):p.confirm({message:"Initialize git repository?",initialValue:!0}),install:()=>t.install!==void 0?Promise.resolve(t.install):p.confirm({message:"Install dependencies?",initialValue:!0})},{onCancel:()=>(p.cancel("Operation cancelled."),null)});return!a||p.isCancel(a)?null:a}import n from"picocolors";function F(e){let t=e.packageManager==="npm"?"npm run":e.packageManager;console.log(),console.log(n.magenta(" \u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E")),console.log(n.magenta(" \u2502")+" "+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+` ${n.green("\u2714")} ${n.bold("Your store is ready!")} `+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+" "+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+` ${n.dim("Next steps:")} `+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+` ${n.cyan(`$ cd ${e.projectName}`)}${" ".repeat(Math.max(0,36-e.projectName.length))}`+n.magenta("\u2502")),e.install||console.log(n.magenta(" \u2502")+` ${n.cyan(`$ ${e.packageManager} install`)} `+n.magenta("\u2502")),e.docker?(console.log(n.magenta(" \u2502")+` ${n.cyan(`$ ${t} docker:dev`)} `+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+` ${n.cyan(`$ ${t} docker:db:reset`)} `+n.magenta("\u2502"))):console.log(n.magenta(" \u2502")+` ${n.cyan(`$ ${t} db:migrate && ${t} db:seed`)} `+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+` ${n.cyan(`$ ${t} dev`)} `+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+" "+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+` ${n.dim("Open:")} ${n.underline("http://localhost:3333")} `+n.magenta("\u2502")),console.log(n.magenta(" \u2502")+" "+n.magenta("\u2502")),console.log(n.magenta(" \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F")),console.log()}function V(e){console.log(),console.log(n.yellow(" \u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E")),console.log(n.yellow(" \u2502")+` ${n.bold(n.yellow("DRY RUN"))} - No changes made `+n.yellow("\u2502")),console.log(n.yellow(" \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F")),console.log(),console.log(n.dim(" Would create project with:")),console.log(),console.log(` ${n.dim("\u2022")} Project name: ${n.cyan(e.projectName)}`),console.log(` ${n.dim("\u2022")} Template: ${n.cyan(e.template)}`),console.log(` ${n.dim("\u2022")} Database: ${n.cyan(e.database)}`),console.log(` ${n.dim("\u2022")} Package manager: ${n.cyan(e.packageManager)}`),console.log(` ${n.dim("\u2022")} Docker: ${e.docker?n.green("yes"):n.yellow("no")}`),console.log(` ${n.dim("\u2022")} Git: ${e.git?n.green("yes"):n.yellow("no")}`),console.log(` ${n.dim("\u2022")} Install deps: ${e.install?n.green("yes"):n.yellow("no")}`),console.log()}function v(e,t){if(console.log(),console.log(n.red(" \u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E")),console.log(n.red(" \u2502")+` ${n.bold(n.red("Error"))} `+n.red("\u2502")),console.log(n.red(" \u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F")),console.log(),console.log(` ${n.red(e)}`),console.log(),t.length>0){console.log(n.dim(" Suggestions:"));for(let a of t)console.log(` ${n.dim("\u2022")} ${a}`);console.log()}}import g from"picocolors";var G=!1;function U(e){G=e}var c={info(e){console.log(` ${g.blue("\u25CF")} ${e}`)},success(e){console.log(` ${g.green("\u2714")} ${e}`)},warn(e){console.log(` ${g.yellow("\u26A0")} ${g.yellow(e)}`)},error(e){console.log(` ${g.red("\u2716")} ${g.red(e)}`)},debug(e){G&&console.log(` ${g.dim("\u25B8")} ${g.dim(e)}`)},step(e){console.log(` ${g.magenta("\u25C7")} ${e}`)},dim(e){console.log(` ${g.dim(e)}`)}};import Je from"fs-extra";function L(e){return!e||e.trim()===""?{valid:!1,error:"Project name is required",suggestions:["Provide a name like: create-adoniscommerce my-store"]}:/^[a-z0-9-_]+$/i.test(e)?e.length>214?{valid:!1,error:"Project name is too long (max 214 characters)"}:["node_modules","favicon.ico","package.json","package-lock.json"].includes(e.toLowerCase())?{valid:!1,error:`"${e}" is a reserved name`,suggestions:["Choose a different project name"]}:{valid:!0}:{valid:!1,error:"Project name can only contain alphanumeric characters, hyphens, and underscores",suggestions:["Use a name like: my-store, my_store, or mystore"]}}function H(e){return["postgres","mysql","sqlite"].includes(e)?{valid:!0}:{valid:!1,error:`Invalid database: ${e}`,suggestions:["Use one of: postgres, mysql, sqlite"]}}function J(e){return["pnpm","npm","yarn","bun"].includes(e)?{valid:!0}:{valid:!1,error:`Invalid package manager: ${e}`,suggestions:["Use one of: pnpm, npm, yarn, bun"]}}function W(e){return["default"].includes(e)?{valid:!0}:{valid:!1,error:`Invalid template: ${e}`,suggestions:['Currently only "default" template is available']}}import pe from"degit";import $ from"fs-extra";import _ from"path";import K from"os";async function z(e,t,a={}){let{offline:o=!1,verbose:r=!1}=a;if(o){let l=_.join(K.homedir(),T,t.template);if(await $.pathExists(l)){r&&c.debug(`Using cached template from ${l}`),await $.copy(l,e);return}c.warn("No cached template found. Downloading from remote...")}let i=pe(M,{cache:!0,force:!0,verbose:r});i.on("info",l=>{r&&c.debug(l.message)}),i.on("warn",l=>{r&&c.warn(l.message)});let s=3,m=null;for(let l=1;l<=s;l++)try{await i.clone(e);return}catch(C){m=C,r&&c.debug(`Clone attempt ${l} failed: ${m.message}`),l<s&&await new Promise(E=>setTimeout(E,1e3*l))}throw new Error(`Failed to clone template after ${s} attempts: ${m?.message}`)}async function Y(e,t){let a=_.join(K.homedir(),T,t);await $.ensureDir(_.dirname(a)),await $.copy(e,a,{overwrite:!0})}import h from"fs-extra";import X from"path";import P from"fs-extra";import R from"path";var b={postgres:{client:"pg",package:"pg",port:5432,dockerImage:"postgres:16",envDefaults:{DB_HOST:"127.0.0.1",DB_PORT:"5432",DB_USER:"postgres",DB_PASSWORD:"postgres",DB_DATABASE:"adoniscommerce"}},mysql:{client:"mysql2",package:"mysql2",port:3306,dockerImage:"mysql:8",envDefaults:{DB_HOST:"127.0.0.1",DB_PORT:"3306",DB_USER:"root",DB_PASSWORD:"root",DB_DATABASE:"adoniscommerce"}},sqlite:{client:"better-sqlite3",package:"better-sqlite3",port:0,envDefaults:{DB_HOST:"",DB_PORT:"",DB_USER:"",DB_PASSWORD:"",DB_DATABASE:"./database.sqlite"}}};import{randomBytes as me}from"crypto";function S(e=32){return me(e).toString("base64").slice(0,e)}function de(e){let t=b[e.database];return{APP_KEY:S(),...t.envDefaults}}async function Q(e,t){let a=R.join(e,".env.example"),o=R.join(e,".env.docker"),r=R.join(e,".env"),i;if(t.docker&&await P.pathExists(o))i=await P.readFile(o,"utf-8");else if(await P.pathExists(a))i=await P.readFile(a,"utf-8");else{let l=de(t);i=Object.entries(l).map(([C,E])=>`${C}=${E}`).join(`
10
+ `)}let s=S();i=i.replace(/APP_KEY=.*/,`APP_KEY=${s}`);let m=b[t.database];i=i.replace(/DB_HOST=.*/,`DB_HOST=${m.envDefaults.DB_HOST}`),i=i.replace(/DB_PORT=.*/,`DB_PORT=${m.envDefaults.DB_PORT}`),i=i.replace(/DB_USER=.*/,`DB_USER=${m.envDefaults.DB_USER}`),i=i.replace(/DB_PASSWORD=.*/,`DB_PASSWORD=${m.envDefaults.DB_PASSWORD}`),i=i.replace(/DB_DATABASE=.*/,`DB_DATABASE=${m.envDefaults.DB_DATABASE}`),await P.writeFile(r,i,"utf-8")}async function Z(e,t){await ge(e,t),await Q(e,t),await fe(e,t)}async function ge(e,t){let a=X.join(e,"package.json");if(!await h.pathExists(a))throw new Error("package.json not found in template");let o=await h.readJson(a);o.name=t.projectName,o.version="0.0.1",o.private=!0,delete o.description,await h.writeJson(a,o,{spaces:2})}async function fe(e,t){let a=X.join(e,"config","database.ts");if(!await h.pathExists(a)){c.debug("database.ts not found, skipping database config update");return}let o=await h.readFile(a,"utf-8");switch(t.database){case"mysql":o=o.replace(/connection: ['"]postgres['"]/,"connection: 'mysql'"),o=o.replace(/client: ['"]pg['"]/,"client: 'mysql2'"),o=ue();break;case"sqlite":o=ye();break;default:break}await h.writeFile(a,o,"utf-8")}function ue(){return`import env from '#start/env'
11
+ import { defineConfig } from '@adonisjs/lucid'
12
+
13
+ const dbConfig = defineConfig({
14
+ connection: 'mysql',
15
+ connections: {
16
+ mysql: {
17
+ client: 'mysql2',
18
+ connection: {
19
+ host: env.get('DB_HOST'),
20
+ port: env.get('DB_PORT'),
21
+ user: env.get('DB_USER'),
22
+ password: env.get('DB_PASSWORD'),
23
+ database: env.get('DB_DATABASE'),
24
+ },
25
+ migrations: {
26
+ naturalSort: true,
27
+ paths: ['database/migrations'],
28
+ },
29
+ },
30
+ },
31
+ })
32
+
33
+ export default dbConfig
34
+ `}function ye(){return`import env from '#start/env'
35
+ import { defineConfig } from '@adonisjs/lucid'
36
+ import app from '@adonisjs/core/services/app'
37
+
38
+ const dbConfig = defineConfig({
39
+ connection: 'sqlite',
40
+ connections: {
41
+ sqlite: {
42
+ client: 'better-sqlite3',
43
+ connection: {
44
+ filename: app.makePath(env.get('DB_DATABASE', 'database.sqlite')),
45
+ },
46
+ useNullAsDefault: true,
47
+ migrations: {
48
+ naturalSort: true,
49
+ paths: ['database/migrations'],
50
+ },
51
+ },
52
+ },
53
+ })
54
+
55
+ export default dbConfig
56
+ `}import k from"fs-extra";import ee from"path";async function te(e,t){t.docker&&await ve(e,t.database),await be(e,t.database)}async function ve(e,t){let a=ee.join(e,"docker-compose.yml");if(!await k.pathExists(a)){c.debug("docker-compose.yml not found, skipping");return}let o=await k.readFile(a,"utf-8"),r=b[t];if(t==="sqlite"){c.debug("SQLite selected, database container may not be needed");return}t==="mysql"&&r.dockerImage&&(o=o.replace(/postgres:\d+/g,r.dockerImage),o=o.replace(/POSTGRES_/g,"MYSQL_")),await k.writeFile(a,o,"utf-8")}async function be(e,t){let a=ee.join(e,"package.json");if(!await k.pathExists(a))return;let o=await k.readJson(a),r=b[t],i=["pg","mysql2","better-sqlite3"];for(let s of i)s!==r.package&&(delete o.dependencies?.[s],delete o.devDependencies?.[s]);o.dependencies?.[r.package]||(o.dependencies=o.dependencies||{},o.dependencies[r.package]=he(r.package)),await k.writeJson(a,o,{spaces:2})}function he(e){return{pg:"^8.18.0",mysql2:"^3.11.0","better-sqlite3":"^11.5.0"}[e]||"*"}import{execa as oe}from"execa";async function ae(e,t,a={}){let{verbose:o=!1}=a,r=I(t.packageManager),[i,...s]=r.split(" ");o&&c.debug(`Running: ${r}`);try{let m=await oe(i,s,{cwd:e,stdio:o?"inherit":"pipe",env:{...process.env,CI:"true"}});o&&m.stdout&&c.debug(m.stdout)}catch(m){let l=m;throw new Error(`Failed to install dependencies: ${l.message}${l.stderr?`
57
+ `+l.stderr:""}`)}}async function ne(e){try{return await oe(e,["--version"],{stdio:"pipe"}),!0}catch{return!1}}import{execa as w}from"execa";async function re(e,t={}){let{verbose:a=!1}=t;try{await w("git",["--version"],{stdio:"pipe"})}catch{c.warn("Git is not installed. Skipping git initialization.");return}try{try{await w("git",["rev-parse","--git-dir"],{cwd:e,stdio:"pipe"}),a&&c.debug("Directory is already a git repository");return}catch{}await w("git",["init"],{cwd:e,stdio:"pipe"}),a&&c.debug("Git repository initialized"),await w("git",["add","-A"],{cwd:e,stdio:"pipe"}),a&&c.debug("Files staged"),await w("git",["commit","-m","Initial commit from create-adoniscommerce"],{cwd:e,stdio:"pipe",env:{...process.env,GIT_AUTHOR_NAME:process.env.GIT_AUTHOR_NAME||"AdonisCommerce",GIT_AUTHOR_EMAIL:process.env.GIT_AUTHOR_EMAIL||"noreply@adoniscommerce.dev",GIT_COMMITTER_NAME:process.env.GIT_COMMITTER_NAME||"AdonisCommerce",GIT_COMMITTER_EMAIL:process.env.GIT_COMMITTER_EMAIL||"noreply@adoniscommerce.dev"}}),a&&c.debug("Initial commit created")}catch(o){let r=o;c.warn(`Git initialization failed: ${r.message}`)}}import u from"fs-extra";import j from"path";var ke=["Dockerfile","Dockerfile.dev","docker-compose.yml","docker-compose.prod.yml",".dockerignore",".env.docker",".env.docker.prod","docker","scripts/docker-start.sh"],Pe=["docker:dev","docker:dev:tools","docker:prod","docker:stop","docker:logs","docker:shell","docker:db:migrate","docker:db:seed","docker:db:reset","docker:clean","docker:status"];async function ie(e,t){t.docker?await we(e):(await De(e),await $e(e))}async function we(e){let t=j.join(e,"scripts");if(await u.pathExists(t))try{let a=await u.readdir(t);for(let o of a)if(o.endsWith(".sh")){let r=j.join(t,o);await u.chmod(r,493)}}catch(a){c.debug(`Failed to make scripts executable: ${a.message}`)}}async function De(e){for(let t of ke){let a=j.join(e,t);await u.pathExists(a)&&await u.remove(a)}}async function $e(e){let t=j.join(e,"package.json");if(!await u.pathExists(t))return;let a=await u.readJson(t);if(a.scripts){for(let o of Pe)delete a.scripts[o];await u.writeJson(t,a,{spaces:2})}}import y from"fs-extra";import O from"path";async function se(e,t,a={}){let{verbose:o=!1}=a;await je(e,o),await xe(e,t,o),await Ce(e,t,o)}async function je(e,t){let a=["template.json",".github/workflows/template-sync.yml"];for(let o of a){let r=O.join(e,o);await y.pathExists(r)&&(await y.remove(r),t&&c.debug(`Removed ${o}`))}}async function xe(e,t,a){let o=O.join(e,"README.md");if(!await y.pathExists(o))return;let r=await y.readFile(o,"utf-8");r=r.replace(/{{PROJECT_NAME}}/g,t.projectName),r=r.replace(/@adoniscommerce\/template/g,t.projectName),await y.writeFile(o,r,"utf-8"),a&&c.debug("Updated README.md")}async function Ce(e,t,a){let r={pnpm:["package-lock.json","yarn.lock","bun.lockb"],npm:["pnpm-lock.yaml","yarn.lock","bun.lockb"],yarn:["package-lock.json","pnpm-lock.yaml","bun.lockb"],bun:["package-lock.json","pnpm-lock.yaml","yarn.lock"]}[t.packageManager]||[];for(let i of r){let s=O.join(e,i);await y.pathExists(s)&&(await y.remove(s),a&&c.debug(`Removed ${i}`))}}async function le(e){let{verbose:t=!1}=e,a=e["dry-run"]||e.dryRun||!1;if(U(t),B(),e.projectName){let s=L(e.projectName);s.valid||(v(s.error,s.suggestions||[]),process.exit(1))}if(e.db){let s=H(e.db);s.valid||(v(s.error,s.suggestions||[]),process.exit(1))}if(e.pm){let s=J(e.pm);s.valid||(v(s.error,s.suggestions||[]),process.exit(1))}if(e.template){let s=W(e.template);s.valid||(v(s.error,s.suggestions||[]),process.exit(1))}let o=await N(e.projectName,e);o||process.exit(0),a&&(V(o),process.exit(0));let r=Ee.resolve(process.cwd(),o.projectName);if(await x.pathExists(r)){let s=await f.confirm({message:`Directory ${ce.cyan(o.projectName)} already exists. Overwrite?`,initialValue:!1});(f.isCancel(s)||!s)&&(f.cancel("Operation cancelled."),process.exit(0)),await x.remove(r)}o.install&&(await ne(o.packageManager)||(c.warn(`${o.packageManager} is not installed. Dependencies will not be installed.`),o.install=!1)),console.log();let i=f.spinner();try{if(i.start("Cloning template..."),await z(r,o,{offline:e.offline,verbose:t}),i.stop("Template cloned"),i.start("Configuring project..."),await Z(r,o),i.stop("Project configured"),i.start("Setting up database..."),await te(r,o),i.stop("Database configured"),i.start("Handling Docker setup..."),await ie(r,o),i.stop(o.docker?"Docker setup complete":"Docker files removed"),o.install&&(i.start("Installing dependencies..."),await ae(r,o,{verbose:t}),i.stop("Dependencies installed")),o.git&&(i.start("Initializing git..."),await re(r,{verbose:t}),i.stop("Git initialized")),i.start("Running post-install tasks..."),await se(r,o,{verbose:t}),i.stop("Post-install complete"),!e.offline)try{await Y(r,o.template)}catch{}f.outro(ce.green("Project created successfully!")),F(o)}catch(s){i.stop("Failed");let m=s;if(v(m.message,Te(m)),await x.pathExists(r))try{await x.remove(r),c.dim("Cleaned up partial project")}catch{}process.exit(1)}}function Te(e){let t=e.message.toLowerCase(),a=[];return(t.includes("network")||t.includes("fetch")||t.includes("clone"))&&(a.push("Check your internet connection"),a.push("Try using --offline flag if you have a cached template"),a.push("Check if GitHub is accessible")),(t.includes("permission")||t.includes("access"))&&(a.push("Check file permissions"),a.push("Try running with elevated privileges")),(t.includes("disk")||t.includes("space"))&&(a.push("Check available disk space"),a.push("Clear temporary files and try again")),(t.includes("npm")||t.includes("pnpm")||t.includes("yarn"))&&(a.push("Check if your package manager is installed correctly"),a.push("Try using a different package manager with --pm flag"),a.push("Clear package manager cache and try again")),a.length===0&&(a.push("Try running with --verbose flag for more details"),a.push("Report this issue at: https://github.com/haliltoma/adonisjs-ecommerce-core/issues")),a}var Se=Ae({meta:{name:"create-adoniscommerce",version:D,description:"Create a new AdonisCommerce e-commerce application"},args:{projectName:{type:"positional",description:"Name of the project",required:!1},template:{type:"string",alias:"t",description:"Template to use (default)",default:"default"},pm:{type:"string",description:"Package manager (pnpm | npm | yarn | bun)"},db:{type:"string",description:"Database type (postgres | mysql | sqlite)"},docker:{type:"boolean",description:"Include Docker setup",default:!0},git:{type:"boolean",description:"Initialize git repository",default:!0},install:{type:"boolean",description:"Install dependencies",default:!0},yes:{type:"boolean",alias:"y",description:"Non-interactive mode with defaults",default:!1},"dry-run":{type:"boolean",description:"Preview without executing",default:!1},verbose:{type:"boolean",alias:"v",description:"Verbose output",default:!1},offline:{type:"boolean",description:"Use cached template",default:!1}},async run({args:e}){await le(e)}});_e(Se);
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "create-adoniscommerce",
3
+ "version": "2.0.0",
4
+ "description": "Create a new AdonisCommerce e-commerce application",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "create-adoniscommerce": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsup",
15
+ "dev": "tsup --watch",
16
+ "test": "vitest",
17
+ "test:e2e": "vitest run --config vitest.e2e.config.ts",
18
+ "prepublishOnly": "pnpm build"
19
+ },
20
+ "keywords": [
21
+ "adonisjs",
22
+ "ecommerce",
23
+ "create",
24
+ "scaffold",
25
+ "react",
26
+ "inertia",
27
+ "typescript",
28
+ "cli"
29
+ ],
30
+ "author": "laserkopf",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/haliltoma/adonisjs-ecommerce-core.git",
35
+ "directory": "packages/create-adoniscommerce"
36
+ },
37
+ "publishConfig": {
38
+ "access": "public"
39
+ },
40
+ "homepage": "https://github.com/haliltoma/adonisjs-ecommerce-core#readme",
41
+ "engines": {
42
+ "node": ">=18.0.0"
43
+ },
44
+ "dependencies": {
45
+ "@clack/prompts": "^0.8.2",
46
+ "citty": "^0.1.6",
47
+ "degit": "^2.8.4",
48
+ "execa": "^9.5.2",
49
+ "fs-extra": "^11.2.0",
50
+ "picocolors": "^1.1.1"
51
+ },
52
+ "devDependencies": {
53
+ "@types/degit": "^2.8.6",
54
+ "@types/fs-extra": "^11.0.4",
55
+ "@types/node": "^22.15.18",
56
+ "tsup": "^8.3.5",
57
+ "typescript": "^5.8.0",
58
+ "vitest": "^2.1.8"
59
+ }
60
+ }