107ac75b1Sopenharmony_ci/* 207ac75b1Sopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 307ac75b1Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 407ac75b1Sopenharmony_ci * you may not use this file except in compliance with the License. 507ac75b1Sopenharmony_ci * You may obtain a copy of the License at 607ac75b1Sopenharmony_ci * 707ac75b1Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 807ac75b1Sopenharmony_ci * 907ac75b1Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1007ac75b1Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1107ac75b1Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1207ac75b1Sopenharmony_ci * See the License for the specific language governing permissions and 1307ac75b1Sopenharmony_ci * limitations under the License. 1407ac75b1Sopenharmony_ci */ 1507ac75b1Sopenharmony_ci 1607ac75b1Sopenharmony_ciconst fs = require('fs'); 1707ac75b1Sopenharmony_ciconst program = require('commander'); 1807ac75b1Sopenharmony_ci 1907ac75b1Sopenharmony_ciprogram.parse(process.argv); 2007ac75b1Sopenharmony_cilet name:string = 'HelloAce'; 2107ac75b1Sopenharmony_cilet appID:string = 'ace.helloworld'; 2207ac75b1Sopenharmony_cilet appName:string = 'HelloAce'; 2307ac75b1Sopenharmony_ciif (program.args && program.args[0]) { 2407ac75b1Sopenharmony_ci name = program.args[0]; 2507ac75b1Sopenharmony_ci appID = program.args[0]; 2607ac75b1Sopenharmony_ci appName = program.args[0]; 2707ac75b1Sopenharmony_ci} 2807ac75b1Sopenharmony_ci 2907ac75b1Sopenharmony_ciconst regPath: RegExp = /[`~!@#$%^&*()_+<>?:"{},./;'[\]]/im; 3007ac75b1Sopenharmony_ci 3107ac75b1Sopenharmony_ci/* 3207ac75b1Sopenharmony_ci * Create sample project and files. 3307ac75b1Sopenharmony_ci * @param dist {String} 3407ac75b1Sopenharmony_ci */ 3507ac75b1Sopenharmony_cifunction createProject(dist: string) { 3607ac75b1Sopenharmony_ci const dist_ = dist.trim().split('/'); 3707ac75b1Sopenharmony_ci if (dist_.length > 1 || regPath.test(dist)) { 3807ac75b1Sopenharmony_ci return console.error( 3907ac75b1Sopenharmony_ci 'ERROR: The project name cannot be a path nor contain any special symbol.\n' + 4007ac75b1Sopenharmony_ci "NOTE: To create the template project, run 'npm run create' in the root directory.\n" + 4107ac75b1Sopenharmony_ci "NOTE: To customize the project name, run 'npm run create <projectName>'."); 4207ac75b1Sopenharmony_ci } 4307ac75b1Sopenharmony_ci const appPath:string = dist + '/app.ets'; 4407ac75b1Sopenharmony_ci const manifestPath:string = dist + '/manifest.json'; 4507ac75b1Sopenharmony_ci const indexPath:string = dist + '/pages/index.ets'; 4607ac75b1Sopenharmony_ci 4707ac75b1Sopenharmony_ci const app:string = `export default { 4807ac75b1Sopenharmony_ci onCreate() { 4907ac75b1Sopenharmony_ci console.info('Application onCreate') 5007ac75b1Sopenharmony_ci }, 5107ac75b1Sopenharmony_ci onDestroy() { 5207ac75b1Sopenharmony_ci console.info('Application onDestroy') 5307ac75b1Sopenharmony_ci }, 5407ac75b1Sopenharmony_ci}`; 5507ac75b1Sopenharmony_ci 5607ac75b1Sopenharmony_ci const manifest:string = `{ 5707ac75b1Sopenharmony_ci "appID": "com.example.` + appID + `", 5807ac75b1Sopenharmony_ci "appName": "` + appName + `", 5907ac75b1Sopenharmony_ci "versionName": "1.0.0", 6007ac75b1Sopenharmony_ci "versionCode": 1, 6107ac75b1Sopenharmony_ci "minPlatformVersion": "1.0.1", 6207ac75b1Sopenharmony_ci "pages": [ 6307ac75b1Sopenharmony_ci "pages/index" 6407ac75b1Sopenharmony_ci ], 6507ac75b1Sopenharmony_ci "window": { 6607ac75b1Sopenharmony_ci "designWidth": 750, 6707ac75b1Sopenharmony_ci "autoDesignWidth": false 6807ac75b1Sopenharmony_ci } 6907ac75b1Sopenharmony_ci}`; 7007ac75b1Sopenharmony_ci 7107ac75b1Sopenharmony_ci const index:string = `@Entry 7207ac75b1Sopenharmony_ci@Component 7307ac75b1Sopenharmony_cistruct MyComponent { 7407ac75b1Sopenharmony_ci private value1: string = "hello world 1"; 7507ac75b1Sopenharmony_ci private value2: string = "hello world 2"; 7607ac75b1Sopenharmony_ci private value3: string = "hello world 3"; 7707ac75b1Sopenharmony_ci 7807ac75b1Sopenharmony_ci build() { 7907ac75b1Sopenharmony_ci Column() { 8007ac75b1Sopenharmony_ci Text(this.value1); 8107ac75b1Sopenharmony_ci Text(this.value2); 8207ac75b1Sopenharmony_ci Text(this.value3); 8307ac75b1Sopenharmony_ci } 8407ac75b1Sopenharmony_ci } 8507ac75b1Sopenharmony_ci}`; 8607ac75b1Sopenharmony_ci 8707ac75b1Sopenharmony_ci fs.mkdir(dist + '/pages', { recursive: true }, (err) => { 8807ac75b1Sopenharmony_ci if (err) { 8907ac75b1Sopenharmony_ci return console.error('ERROR: Failed to create project directory.'); 9007ac75b1Sopenharmony_ci } 9107ac75b1Sopenharmony_ci fs.writeFile(appPath, app, (err) => { 9207ac75b1Sopenharmony_ci if (err) { 9307ac75b1Sopenharmony_ci return console.error('ERROR: Failed to write app.ets.'); 9407ac75b1Sopenharmony_ci } 9507ac75b1Sopenharmony_ci return undefined; 9607ac75b1Sopenharmony_ci }); 9707ac75b1Sopenharmony_ci fs.writeFile(manifestPath, manifest, (err) => { 9807ac75b1Sopenharmony_ci if (err) { 9907ac75b1Sopenharmony_ci return console.error('ERROR: Failed to write manifest.json.'); 10007ac75b1Sopenharmony_ci } 10107ac75b1Sopenharmony_ci return undefined; 10207ac75b1Sopenharmony_ci }); 10307ac75b1Sopenharmony_ci fs.writeFile(indexPath, index, (err) => { 10407ac75b1Sopenharmony_ci if (err) { 10507ac75b1Sopenharmony_ci return console.error('ERROR: Failed to write index.ets.'); 10607ac75b1Sopenharmony_ci } 10707ac75b1Sopenharmony_ci return undefined; 10807ac75b1Sopenharmony_ci }); 10907ac75b1Sopenharmony_ci return undefined; 11007ac75b1Sopenharmony_ci }); 11107ac75b1Sopenharmony_ci return undefined; 11207ac75b1Sopenharmony_ci} 11307ac75b1Sopenharmony_ci 11407ac75b1Sopenharmony_cicreateProject(name); 115