@doubao-apps/create 0.0.21 → 0.0.24-canary-19342fba-20260417034456

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/36.js CHANGED
@@ -1,3 +1,5 @@
1
- import"node:module";import e from"node:path";import t,{promises as r}from"node:fs";import{fileURLToPath as a}from"node:url";let i=e.join("src","app.ts");function o(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}async function n(t,a,c=""){let l,s=e.join(t,i);try{l=await r.readFile(s,"utf8")}catch(e){if(e?.code==="ENOENT")return;throw e}let p=l.replace("<%= appId %>",o(a)).replace("<%= name %>",o(c));p!==l&&await r.writeFile(s,p,"utf8")}let c=new Set(["node_modules","dist",".git"]);async function l(t,a,i={}){let{includeAI:o=!0}=i,n=async(t,a)=>{for(let i of(await r.mkdir(a,{recursive:!0}),await r.readdir(t,{withFileTypes:!0}))){let l=e.join(t,i.name),s=e.join(a,i.name);if(i.isDirectory()){if(c.has(i.name)||".ai"===i.name&&!o)continue;await n(l,s)}else{if("AGENTS.md"===i.name&&!o)continue;await r.copyFile(l,s)}}};await n(t,a)}function s(e){return e?/[<>:"|?*\x00-\x1F]/.test(e)?{valid:!1,error:"Project name contains invalid characters"}:[".",".."].includes(e)?{valid:!1,error:"Project name is reserved"}:{valid:!0}:{valid:!1,error:"Project name is required"}}function p(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/^[._]/,"").replace(/[^a-z0-9-~._]+/g,"-")}async function d(r,a){let i=e.join(r,"package.json");if(!t.existsSync(i))throw Error("package.json not found in template");let o=JSON.parse(t.readFileSync(i,"utf-8"));o.name=a,t.writeFileSync(i,`${JSON.stringify(o,null,2)}
2
- `)}let m=["starter","empty"],u=[{value:"starter",label:"Starter (default)",hint:"Starter template with example pages"},{value:"empty",label:"Empty",hint:"Minimal template without example pages"}];function f(e){return m.includes(e)}let w=a(import.meta.url),h=e.dirname(w);async function y({template:t,projectDir:a,includeAI:i,appId:o,name:c,packageName:s,overwrite:u}){if(!e.isAbsolute(a))throw Error(`Project directory must be an absolute path: ${a}`);if(!f(t))throw Error(`Invalid template: ${t}. Valid options: ${m.join(", ")}`);let w=e.resolve(h,`template-${t}`);try{if(!(await r.stat(w)).isDirectory())throw Error(`Template path is not a directory: ${w}`)}catch(e){if(e?.code==="ENOENT")throw Error(`Template directory not found: ${w}`,{cause:e});throw Error(`Unable to access template directory: ${w}`,{cause:e})}if(await r.stat(a).then(e=>{if(!e.isDirectory())throw Error(`Project path is not a directory: ${a}`);return!0}).catch(e=>{if(e?.code==="ENOENT")return!1;throw Error(`Unable to access project directory: ${a}`,{cause:e})})){if((await r.readdir(a)).length>0&&!u)throw Error(`Project directory is not empty: ${a}`)}else await r.mkdir(a,{recursive:!0});await l(w,a,{includeAI:i});let y=s??p(e.basename(a));await d(a,y),await n(a,o??`com.doubao.${y}`,c??"")}export{m as TEMPLATES,u as TEMPLATE_CHOICES,y as create,p as formatProjectName,f as isValidTemplate,t as node_fs,e as node_path,s as validateProjectName};
1
+ import"node:module";import e from"node:path";import t,{promises as r}from"node:fs";import{execFileSync as a}from"node:child_process";import{fileURLToPath as o}from"node:url";let i=e.join("src","app.ts");function n(e){return e.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}async function s(t,a,o=""){let c,l=e.join(t,i);try{c=await r.readFile(l,"utf8")}catch(e){if(e?.code==="ENOENT")return;throw e}let p=c.replace("<%= appId %>",n(a)).replace("<%= name %>",n(o));p!==c&&await r.writeFile(l,p,"utf8")}let c=new Set(["node_modules","dist",".git"]);async function l(t,a,o={}){let{includeAI:i=!0}=o,n=async(t,a)=>{for(let o of(await r.mkdir(a,{recursive:!0}),await r.readdir(t,{withFileTypes:!0}))){let s=e.join(t,o.name),l=e.join(a,o.name);if(o.isDirectory()){if(c.has(o.name)||".ai"===o.name&&!i)continue;await n(s,l)}else{if("AGENTS.md"===o.name&&!i)continue;await r.copyFile(s,l)}}};await n(t,a)}let p=new Set([".js",".cjs",".mjs",".ts",".tsx",".jsx",".json",".md",".txt",".scss",".css",".less",".html",".yml",".yaml"]),d=[["@byted-doubao-apps/framework","@doubao-apps/framework"],["@byted-doubao-apps/kit","@doubao-apps/kit"],["@byted-doubao-apps/ai","@doubao-apps/ai"],["@byted-doubao-apps/create","@doubao-apps/create"],["@byted-doubao-apps/taro-runtime","@doubao-apps/taro-runtime"]],u=["doubao.config.ts"],f=["@byted-doubao-apps/deploy","@doubao-apps/deploy"],m=["deploy"],y=["pnpm run deploy","doubao.config.ts","部署到豆包平台"];function w(e){let t=e;for(let[e,r]of d)t=t.replace(RegExp(e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),r);return t}async function h(t,a){for(let i of(await r.readdir(t,{withFileTypes:!0}))){var o;let n=e.join(t,i.name);if(function(e){return u.some(t=>t===e)}(i.name)){await r.rm(n,{recursive:!0,force:!0});continue}if(i.isDirectory()){await h(n,a);continue}if(o=i.name,!p.has(e.extname(o))&&"package.json"!==o&&"tsconfig.json"!==o)continue;let s=await r.readFile(n,"utf-8");await r.writeFile(n,function(e,t,r){if("package.json"===e){let e=JSON.parse(w(t));if(e.scripts&&"object"==typeof e.scripts){for(let t of m)delete e.scripts[t];0===Object.keys(e.scripts).length&&delete e.scripts}for(let t of["dependencies","devDependencies","peerDependencies"])if(e[t]&&"object"==typeof e[t]){for(let a of Object.keys(e[t]))f.some(e=>e===a)?delete e[t][a]:a.startsWith("@doubao-apps/")&&(e[t][a]=`^${r}`);0===Object.keys(e[t]).length&&delete e[t]}return`${JSON.stringify(e,null,2)}
2
+ `}return"README.md"===e||"AGENTS.md"===e?w(t).split("\n").filter(e=>!y.some(t=>e.includes(t))).join("\n"):w(t)}(i.name,s,a))}}function b(e){return e?/[<>:"|?*\x00-\x1F]/.test(e)?{valid:!1,error:"Project name contains invalid characters"}:[".",".."].includes(e)?{valid:!1,error:"Project name is reserved"}:{valid:!0}:{valid:!1,error:"Project name is required"}}function j(e){return e.trim().toLowerCase().replace(/\s+/g,"-").replace(/^[._]/,"").replace(/[^a-z0-9-~._]+/g,"-")}async function g(r,a){let o=e.join(r,"package.json");if(!t.existsSync(o))throw Error("package.json not found in template");let i=JSON.parse(t.readFileSync(o,"utf-8"));i.name=a,t.writeFileSync(o,`${JSON.stringify(i,null,2)}
3
+ `)}let E=["starter","empty"],N=[{value:"starter",label:"Starter (default)",hint:"Starter template with example pages"},{value:"empty",label:"Empty",hint:"Minimal template without example pages"}];function v(e){return E.includes(e)}let S=o(import.meta.url),$=e.dirname(S),T={".gitignore":["dist","node_modules",".DS_Store"]};async function O(t){for(let[a,o]of Object.entries(T))await r.writeFile(e.join(t,a),`${o.join("\n")}
4
+ `)}async function k(){let t=e.resolve($,"..","package.json");return JSON.parse(await r.readFile(t,"utf-8")).version??"0.0.1"}async function F(t){let o=e.join(t,".git");if(!await r.stat(o).then(e=>e.isDirectory()).catch(e=>{if(e?.code==="ENOENT")return!1;throw e}))try{a("git",["init"],{cwd:t,stdio:"ignore"})}catch(e){if(e?.code==="ENOENT")return;throw Error(`Failed to initialize git repository: ${t}`,{cause:e})}}async function x({template:t,projectDir:a,public:o=!0,includeAI:i,appId:n,name:c,packageName:p,overwrite:d}){if(!e.isAbsolute(a))throw Error(`Project directory must be an absolute path: ${a}`);if(!v(t))throw Error(`Invalid template: ${t}. Valid options: ${E.join(", ")}`);let u=e.resolve($,`template-${t}`);try{if(!(await r.stat(u)).isDirectory())throw Error(`Template path is not a directory: ${u}`)}catch(e){if(e?.code==="ENOENT")throw Error(`Template directory not found: ${u}`,{cause:e});throw Error(`Unable to access template directory: ${u}`,{cause:e})}if(await r.stat(a).then(e=>{if(!e.isDirectory())throw Error(`Project path is not a directory: ${a}`);return!0}).catch(e=>{if(e?.code==="ENOENT")return!1;throw Error(`Unable to access project directory: ${a}`,{cause:e})})){if((await r.readdir(a)).length>0&&!d)throw Error(`Project directory is not empty: ${a}`)}else await r.mkdir(a,{recursive:!0});await l(u,a,{includeAI:i}),o&&await h(a,await k()),await O(a),await F(a);let f=p??j(e.basename(a));await g(a,f),await s(a,n??`com.doubao.${f}`,c??"")}export{E as TEMPLATES,N as TEMPLATE_CHOICES,x as create,j as formatProjectName,v as isValidTemplate,t as node_fs,e as node_path,b as validateProjectName};
3
5
  //# sourceMappingURL=36.js.map
package/dist/cli.js CHANGED
@@ -37,11 +37,11 @@ ${b.gray(Dc+Dl.repeat(s+2)+Dh)}
37
37
  `)},Df={message:(D="",{symbol:u=b.gray(DC)}={})=>{let e=[`${b.gray(DC)}`];if(D){let[t,...r]=D.split(`
38
38
  `);e.push(`${u} ${t}`,...r.map(D=>`${b.gray(DC)} ${D}`))}process.stdout.write(`${e.join(`
39
39
  `)}
40
- `)},info:D=>{Df.message(D,{symbol:b.blue(Dp)})},success:D=>{Df.message(D,{symbol:b.green(DB)})},step:D=>{Df.message(D,{symbol:b.green(DF)})},warn:D=>{Df.message(D,{symbol:b.yellow(Dm)})},warning:D=>{Df.warn(D)},error:D=>{Df.message(D,{symbol:b.red(Dd)})}};async function Dv({packageScope:D}){var e,t,F,a;let A=process.stdout.isTTY;A&&(console.clear(),((D="")=>{process.stdout.write(`${b.gray(Di)} ${D}
41
- `)})(b.bgCyan(b.black(" create-doubao-apps "))));let{values:x,positionals:$}=u({args:process.argv.slice(2),options:{template:{type:"string",short:"t"},name:{type:"string"},help:{type:"boolean",short:"h"},yes:{type:"boolean",short:"y"}},allowPositionals:!0}),f=!0===x.yes;x.help&&(e=D,console.log(`
40
+ `)},info:D=>{Df.message(D,{symbol:b.blue(Dp)})},success:D=>{Df.message(D,{symbol:b.green(DB)})},step:D=>{Df.message(D,{symbol:b.green(DF)})},warn:D=>{Df.message(D,{symbol:b.yellow(Dm)})},warning:D=>{Df.warn(D)},error:D=>{Df.message(D,{symbol:b.red(Dd)})}};async function Dv({packageScope:D,public:e}){var t,F,a,A;let x=process.stdout.isTTY;x&&(console.clear(),((D="")=>{process.stdout.write(`${b.gray(Di)} ${D}
41
+ `)})(b.bgCyan(b.black(" create-doubao-apps "))));let{values:$,positionals:f}=u({args:process.argv.slice(2),options:{template:{type:"string",short:"t"},name:{type:"string"},help:{type:"boolean",short:"h"},yes:{type:"boolean",short:"y"}},allowPositionals:!0}),v=!0===$.yes;$.help&&(t=D,console.log(`
42
42
  ${b.bold("Usage:")}
43
- npm create ${e} [project-directory] [options]
44
- pnpm create ${e} [project-directory] [options]
43
+ npm create ${t} [project-directory] [options]
44
+ pnpm create ${t} [project-directory] [options]
45
45
 
46
46
  ${b.bold("Options:")}
47
47
  -t, --template <name> Template to use (starter, empty) [default: starter]
@@ -50,32 +50,32 @@ ${b.bold("Options:")}
50
50
  -h, --help Show this help message
51
51
 
52
52
  ${b.bold("Examples:")}
53
- npm create ${e} my-app
54
- npm create ${e} my-app --name "My App"
55
- npm create ${e} my-app --template empty
56
- npm create ${e} my-app --template empty -y
57
- pnpm create ${e}
58
- `),process.exit(0));let v=$[0];if(v){let D=c(v);D.valid||(Df.error(D.error||"Invalid project directory"),process.exit(1))}else{f&&(Df.error("Project directory is required in quick mode. Use: create-doubao-apps <project-directory> [options]"),process.exit(1));let D=await Db({message:"Project directory:",placeholder:"my-doubao-app",validate:D=>{if(!D)return"Project directory is required";let u=c(D);if(!u.valid)return u.error||"Invalid project name"}});D===K&&(D$("Operation cancelled"),process.exit(0)),v=D}let y=E.resolve(process.cwd(),v),w=!1;if(m.existsSync(y)&&m.readdirSync(y).length>0){f&&(Df.error(`Directory ${b.cyan(v)} is not empty. Aborting.`),process.exit(1));let D=await DA({message:`Directory ${b.cyan(v)} is not empty. Continue?`});D!==K&&D||(D$("Operation cancelled"),process.exit(0)),w=!0}let _="starter";if(x.template)h(x.template)||(Df.error(`Invalid template: ${x.template}. Valid options: ${p.join(", ")}`),process.exit(1)),_=x.template;else if(!f){let D,u=await (t={message:"Select a template:",options:[...B],initialValue:"starter"},D=(D,u)=>{let e=D.label??String(D.value);switch(u){case"selected":return`${b.dim(e)}`;case"active":return`${b.green(Dn)} ${e} ${D.hint?b.dim(`(${D.hint})`):""}`;case"cancelled":return`${b.strikethrough(b.dim(e))}`;default:return`${b.dim(Da)} ${b.dim(e)}`}},new X({options:t.options,initialValue:t.initialValue,render(){let u=`${b.gray(DC)}
59
- ${Dg(this.state)} ${t.message}
53
+ npm create ${t} my-app
54
+ npm create ${t} my-app --name "My App"
55
+ npm create ${t} my-app --template empty
56
+ npm create ${t} my-app --template empty -y
57
+ pnpm create ${t}
58
+ `),process.exit(0));let y=f[0];if(y){let D=c(y);D.valid||(Df.error(D.error||"Invalid project directory"),process.exit(1))}else{v&&(Df.error("Project directory is required in quick mode. Use: create-doubao-apps <project-directory> [options]"),process.exit(1));let D=await Db({message:"Project directory:",placeholder:"my-doubao-app",validate:D=>{if(!D)return"Project directory is required";let u=c(D);if(!u.valid)return u.error||"Invalid project name"}});D===K&&(D$("Operation cancelled"),process.exit(0)),y=D}let w=E.resolve(process.cwd(),y),_=!1;if(m.existsSync(w)&&m.readdirSync(w).length>0){v&&(Df.error(`Directory ${b.cyan(y)} is not empty. Aborting.`),process.exit(1));let D=await DA({message:`Directory ${b.cyan(y)} is not empty. Continue?`});D!==K&&D||(D$("Operation cancelled"),process.exit(0)),_=!0}let M="starter";if($.template)h($.template)||(Df.error(`Invalid template: ${$.template}. Valid options: ${p.join(", ")}`),process.exit(1)),M=$.template;else if(!v){let D,u=await (F={message:"Select a template:",options:[...B],initialValue:"starter"},D=(D,u)=>{let e=D.label??String(D.value);switch(u){case"selected":return`${b.dim(e)}`;case"active":return`${b.green(Dn)} ${e} ${D.hint?b.dim(`(${D.hint})`):""}`;case"cancelled":return`${b.strikethrough(b.dim(e))}`;default:return`${b.dim(Da)} ${b.dim(e)}`}},new X({options:F.options,initialValue:F.initialValue,render(){let u=`${b.gray(DC)}
59
+ ${Dg(this.state)} ${F.message}
60
60
  `;switch(this.state){case"submit":return`${u}${b.gray(DC)} ${D(this.options[this.cursor],"selected")}`;case"cancel":return`${u}${b.gray(DC)} ${D(this.options[this.cursor],"cancelled")}
61
- ${b.gray(DC)}`;default:return`${u}${b.cyan(DC)} ${(D=>{let{cursor:u,options:e,style:t}=D,r=D.maxItems??1/0,s=Math.min(Math.max(process.stdout.rows-4,0),Math.max(r,5)),F=0;u>=0+s-3?F=Math.max(Math.min(u-s+3,e.length-s),0):u<F+2&&(F=Math.max(u-2,0));let i=s<e.length&&F>0,C=s<e.length&&F+s<e.length;return e.slice(F,F+s).map((D,e,r)=>{let s=e===r.length-1&&C;return 0===e&&i||s?b.dim("..."):t(D,e+F===u)})})({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(u,e)=>D(u,e?"active":"inactive")}).join(`
61
+ ${b.gray(DC)}`;default:return`${u}${b.cyan(DC)} ${(D=>{let{cursor:u,options:e,style:t}=D,r=D.maxItems??1/0,s=Math.min(Math.max(process.stdout.rows-4,0),Math.max(r,5)),F=0;u>=0+s-3?F=Math.max(Math.min(u-s+3,e.length-s),0):u<F+2&&(F=Math.max(u-2,0));let i=s<e.length&&F>0,C=s<e.length&&F+s<e.length;return e.slice(F,F+s).map((D,e,r)=>{let s=e===r.length-1&&C;return 0===e&&i||s?b.dim("..."):t(D,e+F===u)})})({cursor:this.cursor,options:this.options,maxItems:F.maxItems,style:(u,e)=>D(u,e?"active":"inactive")}).join(`
62
62
  ${b.cyan(DC)} `)}
63
63
  ${b.cyan(Do)}
64
- `}}}).prompt());u===K&&(D$("Operation cancelled"),process.exit(0)),_=u}let M=l(E.basename(y)),S=M;if(!f&&A){let D=await Db({message:`Package name: ${b.dim(`(${M})`)}`,placeholder:M,defaultValue:M,validate:D=>{let u=D||M;if(!/^[@a-z0-9-~][a-z0-9-._~]*$/.test(u))return"Invalid package name"}});D===K&&(D$("Operation cancelled"),process.exit(0)),S=D||M}let T=`com.doubao.${M}`,j=T;if(!f&&A){let D=await Db({message:`appId: ${b.dim(`(${T})`)}`,placeholder:T,defaultValue:T,validate:D=>{let u=D||T;if(!/^[a-z0-9][a-z0-9._-]*$/i.test(u))return"Invalid appId"}});D===K&&(D$("Operation cancelled"),process.exit(0)),j=D||T}let k=!1;if(!f&&A){let D=await DA({message:"Include AI development knowledge base?",initialValue:!1});D===K&&(D$("Operation cancelled"),process.exit(0)),k=D}let I=null;try{A?(I=(({indicator:D="dots"}={})=>{let u=Du?["◒","◐","◓","◑"]:["•","o","O","0"],e=Du?80:120,t="true"===process.env.CI,F,a,l=!1,E="",c,h=performance.now(),p=D=>{l&&x(D>1?"Something went wrong":"Canceled",D)},B=()=>p(2),m=()=>p(1),d=()=>{if(void 0===c)return;t&&process.stdout.write(`
64
+ `}}}).prompt());u===K&&(D$("Operation cancelled"),process.exit(0)),M=u}let S=l(E.basename(w)),T=S;if(!v&&x){let D=await Db({message:`Package name: ${b.dim(`(${S})`)}`,placeholder:S,defaultValue:S,validate:D=>{let u=D||S;if(!/^[@a-z0-9-~][a-z0-9-._~]*$/.test(u))return"Invalid package name"}});D===K&&(D$("Operation cancelled"),process.exit(0)),T=D||S}let j=`com.doubao.${S}`,k=j;if(!v&&x){let D=await Db({message:`appId: ${b.dim(`(${j})`)}`,placeholder:j,defaultValue:j,validate:D=>{let u=D||j;if(!/^[a-z0-9][a-z0-9._-]*$/i.test(u))return"Invalid appId"}});D===K&&(D$("Operation cancelled"),process.exit(0)),k=D||j}let I=!1;if(!v&&x){let D=await DA({message:"Include AI development knowledge base?",initialValue:!1});D===K&&(D$("Operation cancelled"),process.exit(0)),I=D}let R=null;try{x?(R=(({indicator:D="dots"}={})=>{let u=Du?["◒","◐","◓","◑"]:["•","o","O","0"],e=Du?80:120,t="true"===process.env.CI,F,a,l=!1,E="",c,h=performance.now(),p=D=>{l&&x(D>1?"Something went wrong":"Canceled",D)},B=()=>p(2),m=()=>p(1),d=()=>{if(void 0===c)return;t&&process.stdout.write(`
65
65
  `);let D=c.split(`
66
66
  `);process.stdout.write(g.cursor.move(-999,D.length-1)),process.stdout.write(g.erase.down(D.length))},A=D=>{let u=(performance.now()-D)/1e3,e=Math.floor(u/60),t=Math.floor(u%60);return e>0?`[${e}m ${t}s]`:`[${t}s]`},x=(u="",e=0)=>{l=!1,clearInterval(a),d();let t=0===e?b.green(DF):1===e?b.red(Dr):b.red(Ds);E=(u??E).replace(/\.+$/,""),"timer"===D?process.stdout.write(`${t} ${E} ${A(h)}
67
67
  `):process.stdout.write(`${t} ${E}
68
68
  `),process.removeListener("uncaughtExceptionMonitor",B),process.removeListener("unhandledRejection",B),process.removeListener("SIGINT",m),process.removeListener("SIGTERM",m),process.removeListener("exit",p),F()};return{start:(x="")=>{l=!0,F=function({input:D=r,output:u=s,overwrite:e=!0,hideCursor:t=!0}={}){let F=C({input:D,output:u,prompt:"",tabSize:1});o(D,F),D.isTTY&&D.setRawMode(!0);let a=(r,{name:s,sequence:F})=>{if(G([String(r),s,F],"cancel")){t&&u.write(g.cursor.show),process.exit(0);return}e&&n(u,"return"===s?0:-1,"return"===s?-1:0,()=>{i(u,1,()=>{D.once("keypress",a)})})};return t&&u.write(g.cursor.hide),D.once("keypress",a),()=>{D.off("keypress",a),t&&u.write(g.cursor.show),D.isTTY&&!z&&D.setRawMode(!1),F.terminal=!1,F.close()}}(),E=x.replace(/\.+$/,""),h=performance.now(),process.stdout.write(`${b.gray(DC)}
69
- `);let $=0,f=0;process.on("uncaughtExceptionMonitor",B),process.on("unhandledRejection",B),process.on("SIGINT",m),process.on("SIGTERM",m),process.on("exit",p),a=setInterval(()=>{if(t&&E===c)return;d(),c=E;let e=b.magenta(u[$]);if(t)process.stdout.write(`${e} ${E}...`);else if("timer"===D)process.stdout.write(`${e} ${E} ${A(h)}`);else{let D=".".repeat(Math.floor(f)).slice(0,3);process.stdout.write(`${e} ${E}${D}`)}$=$+1<u.length?$+1:0,f=f<u.length?f+.125:0},e)},stop:x,message:(D="")=>{E=(D??E).replace(/\.+$/,"")}}})()).start("Creating project..."):console.log("Creating project..."),await d({template:_,projectDir:y,includeAI:k,appId:j,name:x.name??"",packageName:S,overwrite:w}),A&&I?(I.stop("Project created successfully!"),Dx(`cd ${v}
69
+ `);let $=0,f=0;process.on("uncaughtExceptionMonitor",B),process.on("unhandledRejection",B),process.on("SIGINT",m),process.on("SIGTERM",m),process.on("exit",p),a=setInterval(()=>{if(t&&E===c)return;d(),c=E;let e=b.magenta(u[$]);if(t)process.stdout.write(`${e} ${E}...`);else if("timer"===D)process.stdout.write(`${e} ${E} ${A(h)}`);else{let D=".".repeat(Math.floor(f)).slice(0,3);process.stdout.write(`${e} ${E}${D}`)}$=$+1<u.length?$+1:0,f=f<u.length?f+.125:0},e)},stop:x,message:(D="")=>{E=(D??E).replace(/\.+$/,"")}}})()).start("Creating project..."):console.log("Creating project..."),await d({template:M,projectDir:w,public:e,includeAI:I,appId:k,name:$.name??"",packageName:T,overwrite:_}),x&&R?(R.stop("Project created successfully!"),Dx(`cd ${y}
70
70
  pnpm install
71
- pnpm dev`,"Next steps"),k&&Dx(`📚 AI knowledge base included!
71
+ pnpm dev`,"Next steps"),I&&Dx(`📚 AI knowledge base included!
72
72
  • Main guide: ${b.cyan("AGENTS.md")}
73
73
  • Documentation: ${b.cyan(".ai/")}`,"AI Development Support"),((D="")=>{process.stdout.write(`${b.gray(DC)}
74
74
  ${b.gray(Do)} ${D}
75
75
 
76
- `)})(b.green("Done! Happy coding!"))):(F=v,a=k,console.log(b.green("✓ Project created successfully!")),console.log(`
76
+ `)})(b.green("Done! Happy coding!"))):(a=y,A=I,console.log(b.green("✓ Project created successfully!")),console.log(`
77
77
  Next steps:
78
- cd ${F}
78
+ cd ${a}
79
79
  pnpm install
80
- pnpm dev`),a&&console.log("\nAI Development Support:\n \uD83D\uDCDA Main guide: AGENTS.md\n \uD83D\uDCDA Documentation: .ai/"))}catch(D){A&&I?(I.stop("Failed to create project"),Df.error(D instanceof Error?D.message:String(D))):(console.error(b.red("✗ Failed to create project")),console.error(D instanceof Error?D.message:String(D))),process.exit(1)}}b.gray(DC),Dv({packageScope:"@doubao-apps"}).catch(D=>{console.error(D),process.exit(1)});
80
+ pnpm dev`),A&&console.log("\nAI Development Support:\n \uD83D\uDCDA Main guide: AGENTS.md\n \uD83D\uDCDA Documentation: .ai/"))}catch(D){x&&R?(R.stop("Failed to create project"),Df.error(D instanceof Error?D.message:String(D))):(console.error(b.red("✗ Failed to create project")),console.error(D instanceof Error?D.message:String(D))),process.exit(1)}}b.gray(DC),Dv({packageScope:"@doubao-apps",public:!0}).catch(D=>{console.error(D),process.exit(1)});
81
81
  //# sourceMappingURL=cli.js.map
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- export declare function create({ template, projectDir, includeAI, appId, name, packageName, overwrite }: CreateOptions): Promise<void>;
1
+ export declare function create({ template, projectDir, public: isPublic, includeAI, appId, name, packageName, overwrite }: CreateOptions): Promise<void>;
2
2
 
3
3
  declare interface CreateOptions {
4
4
  template: Template;
5
5
  projectDir: string;
6
+ public?: boolean;
6
7
  includeAI?: boolean;
7
8
  appId?: string;
8
9
  name?: string;
@@ -26,6 +26,20 @@ Promise 对象,授权成功时会返回授权结果
26
26
 
27
27
  ***
28
28
 
29
+ ### canIUse()
30
+
31
+ > **canIUse**(`params`): `Promise`\<[`CanIUseResult`](doubao-apps-sdk-open-api.md#caniuseresult)\>
32
+
33
+ #### Parameters
34
+
35
+ • **params**: [`CanIUseParams`](doubao-apps-sdk-open-api.md#caniuseparams)
36
+
37
+ #### Returns
38
+
39
+ `Promise`\<[`CanIUseResult`](doubao-apps-sdk-open-api.md#caniuseresult)\>
40
+
41
+ ***
42
+
29
43
  ### clearStorage()
30
44
 
31
45
  > **clearStorage**(`params`?): `Promise`\<`object`\>
@@ -265,7 +279,7 @@ console.log(result.host?.appId, result.enableDebug);
265
279
  #### Example
266
280
 
267
281
  ```typescript
268
- import { getLocation } from '@byted-doubao-apps/framework';
282
+ import { getLocation } from '@doubao-apps/framework';
269
283
 
270
284
  async function fetchLocation() {
271
285
  try {
@@ -305,7 +319,7 @@ fetchLocation();
305
319
  #### Example
306
320
 
307
321
  ```ts
308
- import { getNetworkType } from '@byted-doubao-apps/framework/api';
322
+ import { getNetworkType } from '@doubao-apps/framework/api';
309
323
 
310
324
  const result = await getNetworkType();
311
325
  console.log(result.networkType);
@@ -1038,7 +1052,7 @@ setStorageSync({
1038
1052
  #### Example
1039
1053
 
1040
1054
  ```typescript
1041
- import { showToast } from '@byted-doubao-apps/framework';
1055
+ import { showToast } from '@doubao-apps/framework';
1042
1056
 
1043
1057
  // 显示一个成功的 Toast
1044
1058
  showToast({
@@ -1100,6 +1114,26 @@ showToast({
1100
1114
 
1101
1115
  ***
1102
1116
 
1117
+ ### CanIUseParams
1118
+
1119
+ #### Properties
1120
+
1121
+ ##### schema
1122
+
1123
+ > **schema**: `string`
1124
+
1125
+ ***
1126
+
1127
+ ### CanIUseResult
1128
+
1129
+ #### Properties
1130
+
1131
+ ##### result
1132
+
1133
+ > **result**: `boolean`
1134
+
1135
+ ***
1136
+
1103
1137
  ### CloseParams
1104
1138
 
1105
1139
  #### Properties
@@ -44,7 +44,6 @@ pnpm dev
44
44
 
45
45
  ```
46
46
  my-doubao-app/
47
- ├── doubao.config.ts # 项目配置
48
47
  ├── package.json # 依赖管理
49
48
  ├── pnpm-lock.yaml # 依赖锁定
50
49
  └── src/
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "private": true,
3
- "name": "@byted-doubao-apps/empty-example",
3
+ "name": "doubao-apps-empty-example",
4
4
  "scripts": {
5
5
  "dev": "doubao dev",
6
6
  "build": "doubao build"
7
7
  },
8
8
  "dependencies": {
9
- "@doubao-apps/framework": "^0.0.21"
9
+ "@doubao-apps/framework": "^0.0.24-canary-19342fba-20260417034456"
10
10
  },
11
11
  "devDependencies": {
12
- "@doubao-apps/kit": "^0.0.21",
12
+ "@doubao-apps/kit": "^0.0.24-canary-19342fba-20260417034456",
13
13
  "typescript": "5.5.3"
14
14
  },
15
15
  "version": "0.0.16"
@@ -26,6 +26,20 @@ Promise 对象,授权成功时会返回授权结果
26
26
 
27
27
  ***
28
28
 
29
+ ### canIUse()
30
+
31
+ > **canIUse**(`params`): `Promise`\<[`CanIUseResult`](doubao-apps-sdk-open-api.md#caniuseresult)\>
32
+
33
+ #### Parameters
34
+
35
+ • **params**: [`CanIUseParams`](doubao-apps-sdk-open-api.md#caniuseparams)
36
+
37
+ #### Returns
38
+
39
+ `Promise`\<[`CanIUseResult`](doubao-apps-sdk-open-api.md#caniuseresult)\>
40
+
41
+ ***
42
+
29
43
  ### clearStorage()
30
44
 
31
45
  > **clearStorage**(`params`?): `Promise`\<`object`\>
@@ -265,7 +279,7 @@ console.log(result.host?.appId, result.enableDebug);
265
279
  #### Example
266
280
 
267
281
  ```typescript
268
- import { getLocation } from '@byted-doubao-apps/framework';
282
+ import { getLocation } from '@doubao-apps/framework';
269
283
 
270
284
  async function fetchLocation() {
271
285
  try {
@@ -305,7 +319,7 @@ fetchLocation();
305
319
  #### Example
306
320
 
307
321
  ```ts
308
- import { getNetworkType } from '@byted-doubao-apps/framework/api';
322
+ import { getNetworkType } from '@doubao-apps/framework/api';
309
323
 
310
324
  const result = await getNetworkType();
311
325
  console.log(result.networkType);
@@ -1038,7 +1052,7 @@ setStorageSync({
1038
1052
  #### Example
1039
1053
 
1040
1054
  ```typescript
1041
- import { showToast } from '@byted-doubao-apps/framework';
1055
+ import { showToast } from '@doubao-apps/framework';
1042
1056
 
1043
1057
  // 显示一个成功的 Toast
1044
1058
  showToast({
@@ -1100,6 +1114,26 @@ showToast({
1100
1114
 
1101
1115
  ***
1102
1116
 
1117
+ ### CanIUseParams
1118
+
1119
+ #### Properties
1120
+
1121
+ ##### schema
1122
+
1123
+ > **schema**: `string`
1124
+
1125
+ ***
1126
+
1127
+ ### CanIUseResult
1128
+
1129
+ #### Properties
1130
+
1131
+ ##### result
1132
+
1133
+ > **result**: `boolean`
1134
+
1135
+ ***
1136
+
1103
1137
  ### CloseParams
1104
1138
 
1105
1139
  #### Properties
@@ -44,7 +44,6 @@ pnpm dev
44
44
 
45
45
  ```
46
46
  my-doubao-app/
47
- ├── doubao.config.ts # 项目配置
48
47
  ├── package.json # 依赖管理
49
48
  ├── pnpm-lock.yaml # 依赖锁定
50
49
  └── src/
@@ -31,8 +31,6 @@ pnpm run dev
31
31
  # 构建项目
32
32
  pnpm run build
33
33
 
34
- # 部署到豆包平台
35
- pnpm run deploy
36
34
 
37
35
  # 分析构建产物
38
36
  pnpm run analyze
@@ -44,7 +42,6 @@ pnpm run analyze
44
42
 
45
43
  ```
46
44
  .
47
- ├── doubao.config.ts # 项目配置文件
48
45
  ├── package.json # 依赖管理
49
46
  ├── tsconfig.json # TypeScript 配置
50
47
  ├── src/
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "private": true,
3
- "name": "@byted-doubao-apps/lynx-example",
3
+ "name": "doubao-apps-example",
4
4
  "scripts": {
5
5
  "dev": "doubao dev",
6
6
  "build": "doubao build"
7
7
  },
8
8
  "dependencies": {
9
- "@doubao-apps/framework": "^0.0.21"
9
+ "@doubao-apps/framework": "^0.0.24-canary-19342fba-20260417034456"
10
10
  },
11
11
  "devDependencies": {
12
- "@doubao-apps/kit": "^0.0.21",
12
+ "@doubao-apps/kit": "^0.0.24-canary-19342fba-20260417034456",
13
13
  "typescript": "5.5.3"
14
14
  },
15
15
  "version": "0.0.16"
@@ -0,0 +1,11 @@
1
+ import { definePrivacyApi, type PrivacyAgreeResult } from '@doubao-apps/framework';
2
+
3
+ export default definePrivacyApi({
4
+ onAgreePrivacy: async (_res: PrivacyAgreeResult) => {
5
+ console.log('onAgreePrivacy', _res);
6
+ },
7
+
8
+ onRefusePrivacy: async () => {
9
+ console.log('onRefusePrivacy');
10
+ }
11
+ });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@doubao-apps/create",
3
- "version": "0.0.21",
3
+ "version": "0.0.24-canary-19342fba-20260417034456",
4
4
  "description": "Create Doubao Apps projects with a single command",
5
5
  "type": "module",
6
6
  "bin": {