create-instant-app 0.22.103-experimental.drewh-clief.21012950394.1 → 0.22.103-experimental.reordersignup.21014966529.1
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/dist/index.js +1 -1
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ import{Command as _e,Option as l}from"commander";import*as F from"@clack/prompts
|
|
|
10
10
|
`))};import f from"path";import h from"fs-extra";import Y from"path";import{fileURLToPath as Se}from"url";var Ne=Se(import.meta.url),Ce=Y.dirname(Ne),g=Y.join(Ce,"../");import A from"chalk";var k=()=>{let e=process.env.npm_config_user_agent;return e?e.startsWith("yarn")?"yarn":e.startsWith("pnpm")?"pnpm":e.startsWith("bun")?"bun":"npm":"npm"};import{renderUnwrap as je,UI as b}from"instant-cli/ui";import Oe from"slugify";var X=async(e,t)=>{let n=f.resolve(process.cwd(),t),r=f.join(g,`template/base/${e.base}`);if(h.existsSync(n))if(h.readdirSync(n).length===0)b.log(`${A.cyan.bold(e.appName)} exists but is empty, continuing...`,b.ciaModifier(null));else{let a=await je(new b.Select({promptText:A.redBright(`${A.bold("Warning:")} ${A.bold(e.appName)} already exists and isn't empty. How would you like to proceed?`),options:[{label:"Abort installation",value:"abort"},{label:"Clear the directory and continue installation",value:"clear"}],defaultValue:"abort",modifyOutput:b.ciaModifier()}));a==="abort"&&(b.log("Aborting installation..."),process.exit(1)),a==="clear"&&h.emptyDirSync(n)}if(h.copySync(r,n),h.renameSync(f.join(n,"_gitignore"),f.join(n,".gitignore")),h.renameSync(f.join(n,"_env"),f.join(n,".env")),k()==="pnpm"&&e.base==="expo"&&h.appendFile(f.join(n,".npmrc"),`node-linker=hoisted
|
|
11
11
|
enable-pre-post-scripts=true`),e.base==="expo"){let a=Oe.default(t);G(f.join(n,"app.json"),'"name": "expo-template"',`"name": "${t}"`),G(f.join(n,"app.json"),'"slug": "expo-template"',`"slug": "${a}"`),G(f.join(n,"app/_layout.tsx"),'"My Instant App"',`"${t}"`)}let i=e.appName==="."?"App":A.hex("#EA570B").bold(e.appName);return b.log(A.dim(`${i} scaffolded successfully!`),b.ciaModifier(null)),n},G=(e,t,n)=>{let i=h.readFileSync(e,"utf8").replaceAll(t,n);h.writeFileSync(e,i)};import{execa as Ee}from"execa";import{renderUnwrap as Me,UI as j}from"instant-cli/ui";var q=async(e,t)=>{let n=Ee(e,["install"],{cwd:t}),r=await Me(new j.Spinner({promise:n,workingText:`Installing dependencies with ${e}...`,doneText:"Successfully installed dependencies!",modifyOutput:j.ciaModifier(null)}));r.exitCode!==0&&(j.log(r.stderr,j.ciaModifier(null)),process.exit(1))};import ct from"chalk";import y from"fs-extra";import c from"path";var Z=({projectDir:e,ruleFilesToAdd:t})=>{if(t!==null)switch(t){case"cursor":y.ensureDirSync(c.join(e,".cursor/rules")),y.copyFileSync(c.join(g,"template/rules/cursor-rules.md"),c.join(e,".cursor/rules/instant.mdc"));break;case"claude":y.copyFileSync(c.join(g,"template/rules/AGENTS.md"),c.join(e,"CLAUDE.md"));break;case"codex":y.copyFileSync(c.join(g,"template/rules/AGENTS.md"),c.join(e,"AGENTS.md"));break;case"gemini":y.copyFileSync(c.join(g,"template/rules/AGENTS.md"),c.join(e,"GEMINI.md"));break;case"zed":y.copyFileSync(c.join(g,"template/rules/AGENTS.md"),c.join(e,"AGENTS.md"));break;case"windsurf":y.ensureDirSync(c.join(e,".windsurf/rules")),y.copyFileSync(c.join(g,"template/rules/windsurf-rules.md"),c.join(e,".windsurf/rules/instant.md"));break}};import{execSync as B}from"child_process";import R from"path";import*as te from"@clack/prompts";import Q from"chalk";import{execa as P}from"execa";import ne from"fs-extra";import{renderUnwrap as ee,UI as I}from"instant-cli/ui";var $e=e=>{try{return B("git --version",{cwd:e}),!0}catch{return!1}},Fe=e=>ne.existsSync(R.join(e,".git")),Ge=async e=>{try{return await P("git",["rev-parse","--is-inside-work-tree"],{cwd:e,stdout:"ignore"}),!0}catch{return!1}},Re=()=>{let t=B("git --version").toString().trim().split(" ")[2],n=t?.split(".")[0],r=t?.split(".")[1];return{major:Number(n),minor:Number(r)}},Be=()=>B("git config --global init.defaultBranch || echo main").toString().trim(),oe=async e=>{if(!$e(e)){te.log.warn("Git is not installed. Skipping Git initialization.");return}let t=Fe(e),n=await Ge(e),r=R.parse(e).name;if(n&&t){if(!await ee(new I.Confirmation({promptText:`${Q.redBright.bold("Warning:")} Git is already initialized in "${r}". Initializing a new git repository would delete the previous history. Would you like to continue anyways?`,defaultValue:!1,modifyOutput:I.ciaModifier()})))return;ne.removeSync(R.join(e,".git"))}else if(n&&!t&&!await ee(new I.Confirmation({promptText:`${Q.redBright.bold("Warning:")} "${r}" is already in a git worktree.
|
|
12
12
|
Would you still like to initialize a new git repository in this directory?
|
|
13
|
-
`,defaultValue:!1,modifyOutput:I.ciaModifier()})))return;try{let i=Be(),{major:a,minor:o}=Re();a<2||a==2&&o<28?(await P("git",["init"],{cwd:e}),await P("git",["symbolic-ref","HEAD",`refs/heads/${i}`],{cwd:e})):await P("git",["init",`--initial-branch=${i}`],{cwd:e}),await P("git",["add","."],{cwd:e}),await P("git",["commit","-m","Initial commit (create-instant-app)"],{cwd:e}),I.log("Git repository initialized successfully.",I.ciaModifier(null))}catch{}};import We from"env-paths";import*as De from"@clack/prompts";import{mkdir as Ve,readFile as Le,writeFile as ze}from"node:fs/promises";import He from"open";import{join as Je}from"node:path";import{randomUUID as ae}from"node:crypto";import{version as Ue}from"@instantdb/version";var re=!!process.env.INSTANT_CLI_DEV,ie=re?"http://localhost:3000":"https://instantdb.com",U=process.env.INSTANT_CLI_API_URI||(re?"http://localhost:8888":"https://api.instantdb.com");async function x({path:e,body:t,method:n="GET",authToken:r,metadata:i}){let o={"Content-Type":"application/json","X-Instant-Source":"create-instant-app","X-Instant-Version":Ue,"X-Instant-Command":"create"};r&&(o.Authorization=`Bearer ${r}`),i&&(o["X-Instant-Metadata"]=JSON.stringify(i));let p=await fetch(`${U}${e}`,{method:n??"GET",headers:o,body:t?JSON.stringify(t):void 0,signal:AbortSignal.timeout(3e5)}),s;try{s=await p.json()}catch{s=null}if(!p.ok){let m=s.message||s.hint?.errors?.[0]?.message||"There was an error";throw new Error(m)}return s}import{renderUnwrap as O,UI as d}from"instant-cli/ui";var Ke=!!process.env.INSTANT_CLI_DEV,Ye=!!process.env.INSTANT_CLI_FORCE_EPHEMERAL;function pe(){let e=`instantdb-${Ke?"dev":"prod"}`,{config:t}=We(e);return{authConfigFilePath:Je(t,"a"),appConfigDirPath:t}}var Xe=async(e,t,n,r)=>{let i=ae(),a=ae();return await x({method:"POST",authToken:t,path:"/dash/apps",body:{id:i,title:e,admin_token:a,org_id:n},metadata:r}),{appID:i,adminToken:a,source:"created"}},W=(e,t,n)=>{x({method:"POST",path:`/dash/apps/${e}/track-import`,authToken:t,metadata:n}).catch(()=>{})},le=async e=>await x({method:"GET",path:"/dash",authToken:e}),ce=async(e,t)=>await x({method:"GET",path:`/dash/orgs/${t}`,authToken:e});var qe=async(e,t)=>{try{let n=await le(e),r=n.apps.find(i=>i.id===t);if(r)return{appId:r.id,adminToken:r.admin_token};for(let i of n.orgs){let{apps:a}=await ce(e,i.id),o=a.find(p=>p.id===t);if(o)return{appId:o.id,adminToken:o.admin_token}}return null}catch{return null}},Ze=async(e,t)=>{try{return await x({method:"GET",path:`/dash/apps/${e}/schema/pull`,authToken:t}),!0}catch{return!1}},Qe=async()=>Ye?null:process.env.INSTANT_CLI_AUTH_TOKEN?process.env.INSTANT_CLI_AUTH_TOKEN:await Le(pe().authConfigFilePath,"utf-8").catch(()=>null),se=async(e,t)=>{let n=await x({authToken:null,method:"POST",path:"/dash/apps/ephemeral",body:{title:e,rules:{$users:{view:"true"},$files:{allow:{view:"true",create:"true",delete:"true"}}}},metadata:t});return{appId:n.app.id,adminToken:n.app["admin-token"]}},de=async(e,t)=>{let n=await Qe();if(e?.app){if(e.token){if(!await Ze(e.app,e.token))throw new Error("Invalid app ID and token combination. Please verify both the app ID and token are correct.");return d.log(`Linking to app: ${e.app}`,d.ciaModifier(null)),W(e.app,e.token,t),{appId:e.app,adminToken:e.token,approach:"import"}}if(n){let o=await qe(n,e.app);if(!o)throw new Error(`You don't have access to app "${e.app}". Please check the app ID or use --token to provide a token.`);return d.log(`Linking to app: ${e.app}`,d.ciaModifier(null)),W(o.appId,n,t),{appId:o.appId,adminToken:o.adminToken,approach:"import"}}throw new Error(`You must be logged in or provide --token when using --app. Either run 'npx instant-cli login' first, or use: --app ${e.app} --token <token>`)}if(!n){let o=await O(new d.Select({promptText:"You are not logged in.",options:[{label:"
|
|
13
|
+
`,defaultValue:!1,modifyOutput:I.ciaModifier()})))return;try{let i=Be(),{major:a,minor:o}=Re();a<2||a==2&&o<28?(await P("git",["init"],{cwd:e}),await P("git",["symbolic-ref","HEAD",`refs/heads/${i}`],{cwd:e})):await P("git",["init",`--initial-branch=${i}`],{cwd:e}),await P("git",["add","."],{cwd:e}),await P("git",["commit","-m","Initial commit (create-instant-app)"],{cwd:e}),I.log("Git repository initialized successfully.",I.ciaModifier(null))}catch{}};import We from"env-paths";import*as De from"@clack/prompts";import{mkdir as Ve,readFile as Le,writeFile as ze}from"node:fs/promises";import He from"open";import{join as Je}from"node:path";import{randomUUID as ae}from"node:crypto";import{version as Ue}from"@instantdb/version";var re=!!process.env.INSTANT_CLI_DEV,ie=re?"http://localhost:3000":"https://instantdb.com",U=process.env.INSTANT_CLI_API_URI||(re?"http://localhost:8888":"https://api.instantdb.com");async function x({path:e,body:t,method:n="GET",authToken:r,metadata:i}){let o={"Content-Type":"application/json","X-Instant-Source":"create-instant-app","X-Instant-Version":Ue,"X-Instant-Command":"create"};r&&(o.Authorization=`Bearer ${r}`),i&&(o["X-Instant-Metadata"]=JSON.stringify(i));let p=await fetch(`${U}${e}`,{method:n??"GET",headers:o,body:t?JSON.stringify(t):void 0,signal:AbortSignal.timeout(3e5)}),s;try{s=await p.json()}catch{s=null}if(!p.ok){let m=s.message||s.hint?.errors?.[0]?.message||"There was an error";throw new Error(m)}return s}import{renderUnwrap as O,UI as d}from"instant-cli/ui";var Ke=!!process.env.INSTANT_CLI_DEV,Ye=!!process.env.INSTANT_CLI_FORCE_EPHEMERAL;function pe(){let e=`instantdb-${Ke?"dev":"prod"}`,{config:t}=We(e);return{authConfigFilePath:Je(t,"a"),appConfigDirPath:t}}var Xe=async(e,t,n,r)=>{let i=ae(),a=ae();return await x({method:"POST",authToken:t,path:"/dash/apps",body:{id:i,title:e,admin_token:a,org_id:n},metadata:r}),{appID:i,adminToken:a,source:"created"}},W=(e,t,n)=>{x({method:"POST",path:`/dash/apps/${e}/track-import`,authToken:t,metadata:n}).catch(()=>{})},le=async e=>await x({method:"GET",path:"/dash",authToken:e}),ce=async(e,t)=>await x({method:"GET",path:`/dash/orgs/${t}`,authToken:e});var qe=async(e,t)=>{try{let n=await le(e),r=n.apps.find(i=>i.id===t);if(r)return{appId:r.id,adminToken:r.admin_token};for(let i of n.orgs){let{apps:a}=await ce(e,i.id),o=a.find(p=>p.id===t);if(o)return{appId:o.id,adminToken:o.admin_token}}return null}catch{return null}},Ze=async(e,t)=>{try{return await x({method:"GET",path:`/dash/apps/${e}/schema/pull`,authToken:t}),!0}catch{return!1}},Qe=async()=>Ye?null:process.env.INSTANT_CLI_AUTH_TOKEN?process.env.INSTANT_CLI_AUTH_TOKEN:await Le(pe().authConfigFilePath,"utf-8").catch(()=>null),se=async(e,t)=>{let n=await x({authToken:null,method:"POST",path:"/dash/apps/ephemeral",body:{title:e,rules:{$users:{view:"true"},$files:{allow:{view:"true",create:"true",delete:"true"}}}},metadata:t});return{appId:n.app.id,adminToken:n.app["admin-token"]}},de=async(e,t)=>{let n=await Qe();if(e?.app){if(e.token){if(!await Ze(e.app,e.token))throw new Error("Invalid app ID and token combination. Please verify both the app ID and token are correct.");return d.log(`Linking to app: ${e.app}`,d.ciaModifier(null)),W(e.app,e.token,t),{appId:e.app,adminToken:e.token,approach:"import"}}if(n){let o=await qe(n,e.app);if(!o)throw new Error(`You don't have access to app "${e.app}". Please check the app ID or use --token to provide a token.`);return d.log(`Linking to app: ${e.app}`,d.ciaModifier(null)),W(o.appId,n,t),{appId:o.appId,adminToken:o.adminToken,approach:"import"}}throw new Error(`You must be logged in or provide --token when using --app. Either run 'npx instant-cli login' first, or use: --app ${e.app} --token <token>`)}if(!n){let o=await O(new d.Select({promptText:"You are not logged in.",options:[{label:"Login to your Instant account",value:"login"},{label:"Create a temporary app",value:"ephemeral"},{label:"Create an app later",value:"skip"}],modifyOutput:d.ciaModifier()}));if(o==="login"){let p=await x({authToken:null,method:"POST",path:"/dash/cli/auth/register"}),{secret:s,ticket:m}=p;He(`${ie}/dash?ticket=${m}`);let _=tt({secret:s}),w=await O(new d.Spinner({promise:_,workingText:"Waiting for login in browser",disappearWhenDone:!0,modifyOutput:d.ciaModifier(null)}));await nt(w.token),n=w.token}if(o==="skip")return d.log("Skipping app link step",d.ciaModifier(null)),null;if(o==="ephemeral"){let p=await O(new d.TextInput({defaultValue:"my-cool-app",prompt:"Enter a name for your temporary app:",placeholder:"my-cool-app",modifyOutput:d.ciaModifier()}));return{...await se(p,t),approach:"ephemeral"}}}if(!n)return null;let r=await le(n),i=r.orgs.filter(o=>o.role!=="app-member");r.orgs=i;let a=await O(new d.AppSelector({startingMenuIndex:0,allowCreate:!0,allowEphemeral:!0,api:{getDash(){return r},createEphemeralApp(o){return se(o,t)},getAppsForOrg:async o=>{let{apps:p}=await ce(n,o);return{apps:p}},createApp:async(o,p)=>{let{appID:s,adminToken:m}=await Xe(o,n,p,t);return{appId:s,adminToken:m}}},modifyOutput:d.ciaModifier()}));return a?.approach==="import"&&W(a.appId,n,t),a};function et(e){return new Promise(t=>setTimeout(t,e))}async function tt({secret:e}){for(let t=1;t<=120;t++){await et(1e3);let n=await fetch(`${U}/dash/cli/auth/check`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({secret:e})});if(!(!n.ok&&(await n.json()).hint.errors?.[0]?.issue==="waiting-for-user")&&n.ok)return n.json()}throw new Error("Timed out waiting for login")}async function nt(e){let t=pe();return await Ve(t.appConfigDirPath,{recursive:!0}),ze(t.authConfigFilePath,e,"utf-8")}import ot from"fs-extra";import rt from"path";var it={"next-js-app-dir":"NEXT_PUBLIC_INSTANT_APP_ID","vite-vanilla":"VITE_INSTANT_APP_ID",expo:"EXPO_PUBLIC_INSTANT_APP_ID"},ue=(e,t,n,r)=>{let i=rt.join(t,".env"),o=`${it[e.base]}=${n}
|
|
14
14
|
INSTANT_APP_ADMIN_TOKEN=${r}`;ot.writeFileSync(i,o)};import{stdin as T,stdout as me}from"process";import{setRawModeWindowsFriendly as fe}from"instant-cli/ui";async function at(){return new Promise(e=>{if(!me.isTTY||!T.isTTY){e(null);return}let t=T.isRaw;t||fe(T,!0);let n=setTimeout(()=>{i(),e(null)},100),r="",i=()=>{clearTimeout(n),T.removeListener("data",a),!t&&T.isTTY&&fe(T,!1)},a=o=>{let p=o.toString();r+=p;let s=r.match(/\x1b\]11;rgb:([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)(?:\x1b\\|\x07)/);if(s){i();let[,m,_,w]=s;e(`rgb:${m}/${_}/${w}`)}};T.on("data",a),me.write("\x1B]11;?\x1B\\")})}function st(e){let t=e.match(/rgb:([0-9a-fA-F]+)\/([0-9a-fA-F]+)\/([0-9a-fA-F]+)/);if(!t)return null;let[,n,r,i]=t,a=Math.round(parseInt(n,16)/257),o=Math.round(parseInt(r,16)/257),p=Math.round(parseInt(i,16)/257);return{r:a,g:o,b:p}}function pt(e){return(.299*e.r+.587*e.g+.114*e.b)/255>.5}async function ge(){try{let e=await at();if(!e)return"unknown";let t=st(e);return t?pt(t)?"light":"dark":"unknown"}catch(e){return console.error("Error detecting terminal theme:",e),"unknown"}}import N from"chalk";var v=(e,t)=>e==="light"?N.bgYellowBright(t):N.bgBlackBright(t),he=(e,t=console.log,n=!1)=>{let r=(process.stdout.columns||80)-4,i=e.split(`
|
|
15
15
|
`),a=!0;i.forEach(o=>{if(o.length===0){a?(t(""),a=!1):console.log(N.gray("\u2502"));return}for(let p=0;p<o.length;p+=r){let s=o.slice(p,p+r);p+r<o.length&&s.length===r&&(s=s+"-"),a?(t(s),a=!1):console.log(N.gray("\u2502 ")+s)}}),n&&console.log(N.gray("\u2502"))};var E="\x1B[?25h";import{execa as dt}from"execa";var ut=async()=>{process.argv.some(w=>["-h","--help","--version","-V"].includes(w))||K();let e=await ge(),{project:t,appFlags:n}=await H(),[r,i]=z(t.appName),a=k(),o=await X(t,i);Z({projectDir:o,ruleFilesToAdd:t.ruleFiles});let p={template:t.base,aiTool:t.ruleFiles??"none",usedAiPrompt:!!t.prompt},s=await de(n,p);s&&ue(t,o,s.appId,s.adminToken),await q(k(),o);let m=ye.readJSONSync(we.join(o,"package.json"));if(m.name=r,a!=="bun"){let{stdout:w}=await dt(a,["-v"],{cwd:o});m.packageManager=`${a}@${w.trim()}`}ye.writeJSONSync(we.join(o,"package.json"),m,{spaces:2}),t.createRepo&&await oe(o),t.prompt&&(await D(t.prompt,o),process.stdout.write(E)),lt("Done!");let _=t.base==="expo"?"start":"dev";s?(console.log(`
|
|
16
16
|
\u{1F389} Success! Your project is ready to go!
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-instant-app",
|
|
3
|
-
"version": "0.22.103-experimental.
|
|
3
|
+
"version": "0.22.103-experimental.reordersignup.21014966529.1",
|
|
4
4
|
"description": "Scaffold a new web/mobile app with InstantDB",
|
|
5
5
|
"homepage": "https://github.com/instantdb/instant/tree/main/client/packages/create-instant-app",
|
|
6
6
|
"repository": {
|
|
@@ -33,8 +33,8 @@
|
|
|
33
33
|
"ora": "6.3.1",
|
|
34
34
|
"slugify": "^1.6.6",
|
|
35
35
|
"sort-package-json": "^2.10.0",
|
|
36
|
-
"
|
|
37
|
-
"
|
|
36
|
+
"instant-cli": "0.22.103-experimental.reordersignup.21014966529.1",
|
|
37
|
+
"@instantdb/version": "0.22.103-experimental.reordersignup.21014966529.1"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"@anthropic-ai/sdk": "^0.60.0",
|