UNPKG

vivo-hap-toolkit

Version:

A command line toolkit for developing Quick Apps.

3 lines (2 loc) 3.23 kB
"use strict";var _path=_interopRequireDefault(require("path")),_fsExtra=_interopRequireDefault(require("fs-extra")),_glob=_interopRequireDefault(require("glob")),_inquirer=_interopRequireDefault(require("inquirer")),_chalk=_interopRequireDefault(require("chalk")),_sharedUtils=require("@vivo-hap-toolkit/shared-utils"),_cardTemplates=_interopRequireDefault(require("@vivo-hap-toolkit/card-templates")),_template=_interopRequireDefault(require("@vivo-hap-toolkit/dsl-vue/lib/template")),_template2=_interopRequireDefault(require("@vivo-hap-toolkit/dsl-xvm/lib/template"));function _interopRequireDefault(e){return e&&e.__esModule?e:{default:e}}const allSupportedDeviceArray=["phone","tv","car","watch"],allSupportedDevicesString=allSupportedDeviceArray.join(",");async function generate(e,t){""===e&&(e="HelloWorld");const a=await _inquirer.default.prompt([{type:"input",name:"name",message:"Init your project",default:e}]),r=_path.default.join(process.cwd(),a.name);try{await createProject(a.name,r,t)}catch(a){_sharedUtils.colorconsole.error(a.message),a.message.match(/Please pick a new name/)&&await generate(e,t)}}async function createProject(e,t,a={}){if(_fsExtra.default.existsSync(t))throw new Error(`"${t}" exists! Please pick a new name.`);if(!(0,_sharedUtils.mkdirsSync)(t))throw new Error('failed to created folder "'+t+'"!.');const{dsl:r,deviceType:l}=a;let i=["phone"];if(l&&l.length>0){const e=l.split(",");let t=new Set,a=new Set;e.map(e=>{e=e.toLowerCase(),allSupportedDeviceArray.includes(e)||a.add(e),t.add(e)}),i=Array.from(t),a.size>0&&(_sharedUtils.colorconsole.warn(`这些设备类型还没有得到快应用的官方支持: "${Array.from(a).join(",")}"`),_sharedUtils.colorconsole.warn(`现在快应用官方支持的设备类型有: "${allSupportedDevicesString}"`))}let o=null,n=null;switch(r){case"vue":o=_template.default.app.demo,n=_template.default.app.deviceJsonTemplate;break;default:o=_cardTemplates.default,n=_template2.default.app.deviceJsonTemplate}const s=_path.default.resolve(__dirname,o);await copyFiles(t,s,{_gitignore:".gitignore"});const u={appName:e,toolkitVersion:require("../../package.json").version};["src/manifest.json","package.json"].map(e=>_path.default.join(t,e)).forEach(e=>{let t=_fsExtra.default.readFileSync(e,"utf-8");if(t=(0,_sharedUtils.renderString)(t,u),e.includes("manifest.json")){let e=JSON.parse(t.toString());e.deviceTypeList=i,t=JSON.stringify(e,null,2)}_fsExtra.default.writeFileSync(e,t)}),i.map(a=>{const r=`config-${a}.json`,l=_path.default.join(n,r);let i="{}";_fsExtra.default.existsSync(l)&&(i=_fsExtra.default.readFileSync(l,"utf-8")),console.log(`${e}/src/${r} created`),_fsExtra.default.writeFileSync(_path.default.join(t,`src/config-${a}.json`),i)})}function copyFiles(e,t,a){const r=_path.default.join(t,"**/{*,.*}"),l=_glob.default.sync(r,{nodir:!0}).map(r=>new Promise(l=>{const i=_path.default.relative(t,r),o=_path.default.join(e,a[i]||i);_fsExtra.default.existsSync(o)?l(_chalk.default.yellow((0,_sharedUtils.relateCwd)(o)+" already existed.")):(l((0,_sharedUtils.relateCwd)(o)+" created."),_fsExtra.default.copySync(r,o))}));return Promise.all(l).then(e=>{console.log(e.join("\n"))})}module.exports=generate; //# sourceMappingURL=init.js.map