@npflared/cli 0.0.1 → 0.0.2
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.
- package/.turbo/turbo-lint.log +29 -0
- package/CHANGELOG.md +6 -0
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/commands/install.ts +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
> @npflared/cli@0.0.1 lint /Users/thomascogez--allix/Developer/npflared/apps/cli
|
|
4
|
+
> biome check
|
|
5
|
+
|
|
6
|
+
[0m/Users/thomascogez--allix/Developer/npflared/apps/cli/package.json[0m[0m [0m[0mformat[0m[0m [0m[0m━━━━━━━━━━━━━━━━━━━━━━━━━━[0m[0m
|
|
7
|
+
|
|
8
|
+
[0m[0m [0m[0m[1m[31m✖[0m[0m [0m[0m[31mFormatter would have printed the following content:[0m[0m
|
|
9
|
+
[0m[0m [0m[0m
|
|
10
|
+
[0m[0m [0m[0m [0m[0m[1m11[0m[0m [0m[0m[1m11[0m[0m[1m │ [0m[0m [0m[0m [0m[0m [0m[0m [0m[0m"[0m[0mn[0m[0mp[0m[0mf[0m[0ml[0m[0ma[0m[0mr[0m[0me[0m[0md[0m[0m"[0m[0m:[0m[0m [0m[0m"[0m[0m.[0m[0m/[0m[0md[0m[0mi[0m[0ms[0m[0mt[0m[0m/[0m[0mi[0m[0mn[0m[0md[0m[0me[0m[0mx[0m[0m.[0m[0mj[0m[0ms[0m[0m"[0m[0m
|
|
11
|
+
[0m[0m [0m[0m [0m[0m[1m12[0m[0m [0m[0m[1m12[0m[0m[1m │ [0m[0m [0m[0m [0m[0m [0m[0m}[0m[0m,[0m[0m
|
|
12
|
+
[0m[0m [0m[0m [0m[0m[1m13[0m[0m [0m[0m [0m[0m [0m[0m[1m │ [0m[0m[31m-[0m[0m [0m[0m[2m[31m→ [0m[0m[31m"[0m[0m[31mk[0m[0m[31me[0m[0m[31my[0m[0m[31mw[0m[0m[31mo[0m[0m[31mr[0m[0m[31md[0m[0m[31ms[0m[0m[31m"[0m[0m[31m:[0m[0m[2m[31m·[0m[0m[31m[[0m[0m
|
|
13
|
+
[0m[0m [0m[0m [0m[0m[1m14[0m[0m [0m[0m [0m[0m [0m[0m[1m │ [0m[0m[31m-[0m[0m [0m[0m[1m[2m[31m→ [0m[0m[1m[2m[31m→ [0m[0m[31m"[0m[0m[31mn[0m[0m[31mp[0m[0m[31mm[0m[0m[31m"[0m[0m[31m,[0m[0m
|
|
14
|
+
[0m[0m [0m[0m [0m[0m[1m15[0m[0m [0m[0m [0m[0m [0m[0m[1m │ [0m[0m[31m-[0m[0m [0m[0m[1m[2m[31m→ [0m[0m[1m[2m[31m→ [0m[0m[31m"[0m[0m[31mr[0m[0m[31me[0m[0m[31mg[0m[0m[31mi[0m[0m[31ms[0m[0m[31mt[0m[0m[31mr[0m[0m[31my[0m[0m[31m"[0m[0m[31m,[0m[0m
|
|
15
|
+
[0m[0m [0m[0m [0m[0m[1m16[0m[0m [0m[0m [0m[0m [0m[0m[1m │ [0m[0m[31m-[0m[0m [0m[0m[1m[2m[31m→ [0m[0m[1m[2m[31m→ [0m[0m[31m"[0m[0m[31mn[0m[0m[31mp[0m[0m[31mf[0m[0m[31ml[0m[0m[31ma[0m[0m[31mr[0m[0m[31me[0m[0m[31md[0m[0m[31m"[0m[0m
|
|
16
|
+
[0m[0m [0m[0m [0m[0m[1m17[0m[0m [0m[0m [0m[0m [0m[0m[1m │ [0m[0m[31m-[0m[0m [0m[0m[1m[2m[31m→ [0m[0m[31m][0m[0m[31m,[0m[0m
|
|
17
|
+
[0m[0m [0m[0m [0m[0m [0m[0m [0m[0m [0m[0m[1m13[0m[0m[1m │ [0m[0m[32m+[0m[0m [0m[0m[2m[32m→ [0m[0m[32m"[0m[0m[32mk[0m[0m[32me[0m[0m[32my[0m[0m[32mw[0m[0m[32mo[0m[0m[32mr[0m[0m[32md[0m[0m[32ms[0m[0m[32m"[0m[0m[32m:[0m[0m[2m[32m·[0m[0m[32m[[0m[0m[32m"[0m[0m[32mn[0m[0m[32mp[0m[0m[32mm[0m[0m[32m"[0m[0m[32m,[0m[0m[1m[2m[32m·[0m[0m[32m"[0m[0m[32mr[0m[0m[32me[0m[0m[32mg[0m[0m[32mi[0m[0m[32ms[0m[0m[32mt[0m[0m[32mr[0m[0m[32my[0m[0m[32m"[0m[0m[32m,[0m[0m[1m[2m[32m·[0m[0m[32m"[0m[0m[32mn[0m[0m[32mp[0m[0m[32mf[0m[0m[32ml[0m[0m[32ma[0m[0m[32mr[0m[0m[32me[0m[0m[32md[0m[0m[32m"[0m[0m[32m][0m[0m[32m,[0m[0m
|
|
18
|
+
[0m[0m [0m[0m [0m[0m[1m18[0m[0m [0m[0m[1m14[0m[0m[1m │ [0m[0m [0m[0m [0m[0m [0m[0m"[0m[0ml[0m[0mi[0m[0mc[0m[0me[0m[0mn[0m[0ms[0m[0me[0m[0m"[0m[0m:[0m[0m [0m[0m"[0m[0mI[0m[0mS[0m[0mC[0m[0m"[0m[0m,[0m[0m
|
|
19
|
+
[0m[0m [0m[0m [0m[0m[1m19[0m[0m [0m[0m[1m15[0m[0m[1m │ [0m[0m [0m[0m [0m[0m [0m[0m"[0m[0md[0m[0me[0m[0mv[0m[0mD[0m[0me[0m[0mp[0m[0me[0m[0mn[0m[0md[0m[0me[0m[0mn[0m[0mc[0m[0mi[0m[0me[0m[0ms[0m[0m"[0m[0m:[0m[0m [0m[0m{[0m[0m
|
|
20
|
+
[0m[0m [0m[0m
|
|
21
|
+
[0m
|
|
22
|
+
[0m[34mChecked [0m[0m[34m9[0m[0m[34m [0m[0m[34mfiles[0m[0m[34m in [0m[0m[34m33[0m[0m[2m[34mms[0m[0m[34m.[0m[0m[34m No fixes applied.[0m[0m
|
|
23
|
+
[0m[0m[31mFound [0m[0m[31m1[0m[0m[31m error.[0m
|
|
24
|
+
[0mcheck[0m[0m [0m[0m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━[0m[0m
|
|
25
|
+
|
|
26
|
+
[0m[0m [0m[0m[1m[31m✖[0m[0m [0m[0m[31mSome [0m[0m[1m[31merrors[0m[0m[31m were emitted while [0m[0m[1m[31mrunning checks[0m[0m[31m.[0m[0m
|
|
27
|
+
[0m[0m [0m[0m
|
|
28
|
+
[0m
|
|
29
|
+
[41m[30m ELIFECYCLE [39m[49m [31mCommand failed with exit code 1.[39m
|
package/CHANGELOG.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{hideBin as lt}from"yargs/helpers";import mt from"yargs/yargs";import{randomUUID as q}from"node:crypto";import{rmSync as z}from"node:fs";import{mkdir as G,mkdtemp as L,readFile as C,rename as W,writeFile as T}from"node:fs/promises";import{homedir as K,tmpdir as X}from"node:os";import{join as l}from"node:path";import{confirm as A,intro as Y,isCancel as m,log as y,outro as H,select as x,spinner as Q,text as D}from"@clack/prompts";import d from"chalk";import Z from"dedent";import tt from"degit";import{encode as et}from"uuid-b32";import{$ as at}from"zx";import{z as c}from"zod";import{$ as p,ProcessOutput as u}from"zx";var J=c.object({d1_databases:c.array(c.object({binding:c.string(),database_name:c.string(),database_id:c.string()})).min(1)}),U=c.object({r2_buckets:c.array(c.object({binding:c.string(),bucket_name:c.string()})).min(1)}),$=async()=>{try{let e=(await p({quiet:!0})`npx -y wrangler whoami`).stdout.match(/([0-9a-f]{32})/),[a]=e??[];return a}catch(t){throw t instanceof u?new Error(t.stderr||t.stdout):t}},v=async()=>{try{let t=[],a=(await p({quiet:!0})`npx -y wrangler d1 list`).stdout.matchAll(/│(.*)│(.*)│(.*)│(.*)│(.*)│(.*)│/gm);for(let o of a){let[,i,s,r,g,w,f]=o;(i||s||r||g||w||f)&&t.push({id:i.trim(),name:s.trim(),createdAt:r.trim(),version:g.trim(),numberOfTables:Number.parseInt(w),size:Number.parseInt(f)})}return t}catch(t){throw t instanceof u?new Error(t.stderr||t.stdout):t}},N=async()=>{try{let e=(await p({quiet:!0})`npx -y wrangler r2 bucket list`).stdout.matchAll(/name:(.*)\ncreation_date:(.*)/gim),a=[];for(let o of e){let[,i,s]=o;(i||s)&&a.push({name:i.trim(),createdAt:s.trim()})}return a}catch(t){throw t instanceof u?new Error(t.stderr||t.stdout):t}},_=async t=>{try{let a=(await p({quiet:!0})`npx -y wrangler r2 bucket create ${t}`).stdout.match(/\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\}/gim),o=U.safeParse(JSON.parse(a?.[0]??""));if(!o.success)throw new Error("Could not properly retrieve R2 bucket binding");return o.data}catch(e){throw e instanceof u?new Error(e.stderr||e.stdout):e}},R=async t=>{try{let a=(await p({quiet:!0})`npx -y wrangler d1 create ${t}`).stdout.match(/\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\}/gim),o=J.safeParse(JSON.parse(a?.[0]??""));if(!o.success)throw new Error("Could not properly retrieve D1 database binding");return o.data}catch(e){throw e instanceof u?new Error(e.stderr||e.stdout):e}},S=async(t,e={})=>{try{await p({cwd:e.cwd})`npx -y wrangler d1 migrations apply ${t} --remote --config wrangler.json`}catch(a){throw a instanceof u?new Error(a.stderr||a.stdout):a}},B=async(t={})=>{try{let a=(await p({quiet:!0,cwd:t.cwd})`npx -y wrangler deploy --config wrangler.json`).stdout.match(/([a-z0-9-]+\.[a-z0-9-]+\.workers\.dev)/i);return a?`https://${a[0]}`:"<unknown>"}catch(e){throw e instanceof u?new Error(e.stderr||e.stdout):e}};import{access as V}from"node:fs/promises";var b=async t=>{try{return await V(t),!0}catch(e){if(e?.code==="ENOENT")return!1;throw e}};var rt=".npflared",k=l(K(),rt),n=Q(),nt=async()=>{try{await G(k,{recursive:!0})}catch(t){if(t?.code!=="EEXIST")throw t}},ot=async()=>{let t=await A({message:"Use an existing D1 database?"});if(m(t)&&process.exit(1),t){n.start("Retrieving D1 databases...");let i=await v();n.stop();let s=await x({message:"Select a D1 database:",options:i.map(r=>({value:{name:r.name,id:r.id},label:`${r.name.padEnd(30)} (${r.id}) - Created at: ${r.createdAt}`}))});return m(s)&&process.exit(1),{name:s.name,id:s.id}}let e=await D({initialValue:"npflared",message:"Enter a name for your D1 database:",validate(i){if(i.length===0)return"Please enter a name for your D1 database"}});m(e)&&process.exit(1),n.start(`Creating D1 database ${e}...`);let a=await R(e);n.stop();let[o]=a.d1_databases;return o||(console.log(d.red(`Could not create D1 database ${e}`)),process.exit(1)),{name:o.
|
|
2
|
+
import{hideBin as lt}from"yargs/helpers";import mt from"yargs/yargs";import{randomUUID as q}from"node:crypto";import{rmSync as z}from"node:fs";import{mkdir as G,mkdtemp as L,readFile as C,rename as W,writeFile as T}from"node:fs/promises";import{homedir as K,tmpdir as X}from"node:os";import{join as l}from"node:path";import{confirm as A,intro as Y,isCancel as m,log as y,outro as H,select as x,spinner as Q,text as D}from"@clack/prompts";import d from"chalk";import Z from"dedent";import tt from"degit";import{encode as et}from"uuid-b32";import{$ as at}from"zx";import{z as c}from"zod";import{$ as p,ProcessOutput as u}from"zx";var J=c.object({d1_databases:c.array(c.object({binding:c.string(),database_name:c.string(),database_id:c.string()})).min(1)}),U=c.object({r2_buckets:c.array(c.object({binding:c.string(),bucket_name:c.string()})).min(1)}),$=async()=>{try{let e=(await p({quiet:!0})`npx -y wrangler whoami`).stdout.match(/([0-9a-f]{32})/),[a]=e??[];return a}catch(t){throw t instanceof u?new Error(t.stderr||t.stdout):t}},v=async()=>{try{let t=[],a=(await p({quiet:!0})`npx -y wrangler d1 list`).stdout.matchAll(/│(.*)│(.*)│(.*)│(.*)│(.*)│(.*)│/gm);for(let o of a){let[,i,s,r,g,w,f]=o;(i||s||r||g||w||f)&&t.push({id:i.trim(),name:s.trim(),createdAt:r.trim(),version:g.trim(),numberOfTables:Number.parseInt(w),size:Number.parseInt(f)})}return t}catch(t){throw t instanceof u?new Error(t.stderr||t.stdout):t}},N=async()=>{try{let e=(await p({quiet:!0})`npx -y wrangler r2 bucket list`).stdout.matchAll(/name:(.*)\ncreation_date:(.*)/gim),a=[];for(let o of e){let[,i,s]=o;(i||s)&&a.push({name:i.trim(),createdAt:s.trim()})}return a}catch(t){throw t instanceof u?new Error(t.stderr||t.stdout):t}},_=async t=>{try{let a=(await p({quiet:!0})`npx -y wrangler r2 bucket create ${t}`).stdout.match(/\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\}/gim),o=U.safeParse(JSON.parse(a?.[0]??""));if(!o.success)throw new Error("Could not properly retrieve R2 bucket binding");return o.data}catch(e){throw e instanceof u?new Error(e.stderr||e.stdout):e}},R=async t=>{try{let a=(await p({quiet:!0})`npx -y wrangler d1 create ${t}`).stdout.match(/\{(?:[^{}]*|\{(?:[^{}]*|\{[^{}]*\})*\})*\}/gim),o=J.safeParse(JSON.parse(a?.[0]??""));if(!o.success)throw new Error("Could not properly retrieve D1 database binding");return o.data}catch(e){throw e instanceof u?new Error(e.stderr||e.stdout):e}},S=async(t,e={})=>{try{await p({cwd:e.cwd})`npx -y wrangler d1 migrations apply ${t} --remote --config wrangler.json`}catch(a){throw a instanceof u?new Error(a.stderr||a.stdout):a}},B=async(t={})=>{try{let a=(await p({quiet:!0,cwd:t.cwd})`npx -y wrangler deploy --config wrangler.json`).stdout.match(/([a-z0-9-]+\.[a-z0-9-]+\.workers\.dev)/i);return a?`https://${a[0]}`:"<unknown>"}catch(e){throw e instanceof u?new Error(e.stderr||e.stdout):e}};import{access as V}from"node:fs/promises";var b=async t=>{try{return await V(t),!0}catch(e){if(e?.code==="ENOENT")return!1;throw e}};var rt=".npflared",k=l(K(),rt),n=Q(),nt=async()=>{try{await G(k,{recursive:!0})}catch(t){if(t?.code!=="EEXIST")throw t}},ot=async()=>{let t=await A({message:"Use an existing D1 database?"});if(m(t)&&process.exit(1),t){n.start("Retrieving D1 databases...");let i=await v();n.stop();let s=await x({message:"Select a D1 database:",options:i.map(r=>({value:{name:r.name,id:r.id},label:`${r.name.padEnd(30)} (${r.id}) - Created at: ${r.createdAt}`}))});return m(s)&&process.exit(1),{name:s.name,id:s.id}}let e=await D({initialValue:"npflared",message:"Enter a name for your D1 database:",validate(i){if(i.length===0)return"Please enter a name for your D1 database"}});m(e)&&process.exit(1),n.start(`Creating D1 database ${e}...`);let a=await R(e);n.stop();let[o]=a.d1_databases;return o||(console.log(d.red(`Could not create D1 database ${e}`)),process.exit(1)),{name:o.database_name,id:o.database_id}},st=async()=>{let t=await A({message:"Use an existing R2 bucket?"});if(m(t)&&process.exit(1),t){n.start("Retrieving R2 buckets...");let i=await N();n.stop();let s=await x({message:"Select a R2 bucket:",options:i.map(r=>({value:{name:r.name},label:`${r.name.padEnd(30)} - Created at: ${r.createdAt}`}))});return m(s)&&process.exit(1),{name:s.name}}let e=await D({initialValue:"npflared",message:"Enter a name for your R2 bucket:",validate(i){if(i.length===0)return"Please enter a name for your R2 bucket"}});m(e)&&process.exit(1),n.start(`Creating R2 bucket ${e}...`);let a=await _(e);n.stop();let[o]=a.r2_buckets;return o||(console.log(d.red(`Could not create R2 bucket ${e}`)),process.exit(1)),{name:o.bucket_name}},it=async()=>{let t=await x({message:"Install dependencies with:",options:[{value:"npm",label:"npm"},{value:"pnpm",label:"pnpm"},{value:"yarn",label:"yarn"},{value:"bun",label:"bun"}]});return m(t)&&process.exit(1),t},ct=async()=>{let t=await D({initialValue:"npflared",message:"Enter a name for your worker:",validate(e){if(e.length===0)return"Please enter a name for your worker"}});return m(t)&&process.exit(1),t},dt=async t=>{n.start("Generating admin token...");let a=l(t,"migrations","9999_admin-token.sql");if(!await b(a)){let r=et(q()),g=Date.now();return await T(a,`INSERT INTO token (token, name, scopes, created_at, updated_at) VALUES ('${r}', 'admin-token', '[{"type": "token:read+write", "values": ["*"]}, {"type": "user:read+write", "values": ["*"]}, {"type": "package:read+write", "values": ["*"]}]', ${g}, ${g});`),n.stop(`Admin token migration file generated at ${a}`),r}let i=await C(a,"utf-8");return n.stop(`Admin token migration file already exists at ${a}`),i.match(/INSERT INTO token \(token, name, scopes, created_at, updated_at\) VALUES \('([^']+)'/)?.[0]??""},I=async()=>{let t=await L(l(X(),"npflared-")),e=()=>{t&&z(t,{recursive:!0,force:!0})};process.on("exit",e),process.on("SIGINT",e),process.on("SIGTERM",e);try{Y("npflared");let a=tt("Thomascogez/npflared/apps/api");n.start("Cloning npflared..."),await a.clone(t);let o=l(t,"package.json"),s=JSON.parse(await C(o,"utf-8")).version;await nt();let r=l(k,s);await b(r)||await W(t,l(k,s)),n.stop(`Successfully cloned npflared (v${s})`);let w=await ct(),f=await it();n.start(`Installing dependencies using ${f}...`),await at({quiet:!0,cwd:r})`npx -y ${f} install`,n.stop(`Successfully installed dependencies using ${f}`),n.start("Retrieving Cloudflare account id...");let E=await $();n.stop(),E?y.info(d.green(`Using cloudflare account id: ${d.bold.white(E)}`)):(y.error(d.red(`Could not retrieve Cloudflare account id, please login with ${d.bold.white("wrangler login")}`)),process.exit(1));let h=await ot(),P=await st();n.start("Generating wrangler configuration...");let O={name:w,main:"src/index.ts",compatibility_date:"2024-11-24",compatibility_flags:["nodejs_compat"],d1_databases:[{binding:"DB",database_name:h.name,database_id:h.id}],r2_buckets:[{binding:"BUCKET",bucket_name:P.name}]},j=l(r,"wrangler.json");await T(l(r,"wrangler.json"),JSON.stringify(O,null,2)),n.stop(`Wrangler configuration generated at ${j}`);let M=await dt(r);n.start("Applying D1 migrations..."),await S(h.name,{cwd:r}),n.stop("Successfully applied D1 migrations"),n.start("Deploying...");let F=await B({cwd:r});n.stop(),y.info(d.green(Z`
|
|
3
3
|
🔥 npflared is now ready to use!
|
|
4
4
|
🔗 Deployed to: ${d.bold.white(F)}
|
|
5
5
|
👮 Admin token: ${d.bold.white(M)}
|
package/package.json
CHANGED
package/src/commands/install.ts
CHANGED
|
@@ -88,7 +88,7 @@ const promptD1Database = async (): Promise<{ name: string; id: string }> => {
|
|
|
88
88
|
process.exit(1);
|
|
89
89
|
}
|
|
90
90
|
|
|
91
|
-
return { name: d1Binding.
|
|
91
|
+
return { name: d1Binding.database_name, id: d1Binding.database_id };
|
|
92
92
|
};
|
|
93
93
|
|
|
94
94
|
const promptR2Bucket = async (): Promise<{ name: string }> => {
|