14514f5e3Sopenharmony_ci/* 24514f5e3Sopenharmony_ci * Copyright (C) 2024 Huawei Device Co., Ltd. 34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License. 54514f5e3Sopenharmony_ci * You may obtain a copy of the License at 64514f5e3Sopenharmony_ci * 74514f5e3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84514f5e3Sopenharmony_ci * 94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and 134514f5e3Sopenharmony_ci * limitations under the License. 144514f5e3Sopenharmony_ci */ 154514f5e3Sopenharmony_ci 164514f5e3Sopenharmony_ciconst path = require('path'); 174514f5e3Sopenharmony_ciconst childProcess = require('child_process'); 184514f5e3Sopenharmony_ciconst fs = require('fs'); 194514f5e3Sopenharmony_ci 204514f5e3Sopenharmony_ciconst staticPath = ['/src/img', '/server']; 214514f5e3Sopenharmony_ciconst staticFiles = [ 224514f5e3Sopenharmony_ci '/src/index.html', 234514f5e3Sopenharmony_ci '/src/base-ui/icon.svg' 244514f5e3Sopenharmony_ci]; 254514f5e3Sopenharmony_ci 264514f5e3Sopenharmony_cifunction cpDir(sourcePath, targetPath) { 274514f5e3Sopenharmony_ci fs.readdir(sourcePath, async (err, files) => { 284514f5e3Sopenharmony_ci if (err) { 294514f5e3Sopenharmony_ci console.error('unable read dir', err); 304514f5e3Sopenharmony_ci return; 314514f5e3Sopenharmony_ci } 324514f5e3Sopenharmony_ci for (const file of files) { 334514f5e3Sopenharmony_ci const source = `${sourcePath}/${file}`; 344514f5e3Sopenharmony_ci const target = `${targetPath}/${file}`; 354514f5e3Sopenharmony_ci await cpFile(source, target); 364514f5e3Sopenharmony_ci } 374514f5e3Sopenharmony_ci }); 384514f5e3Sopenharmony_ci} 394514f5e3Sopenharmony_ci 404514f5e3Sopenharmony_ciasync function cpFile(source, target) { 414514f5e3Sopenharmony_ci if (fs.lstatSync(source).isFile()) { 424514f5e3Sopenharmony_ci const dirPath = path.dirname(target); 434514f5e3Sopenharmony_ci if (!fs.existsSync(dirPath)) { 444514f5e3Sopenharmony_ci await fs.promises.mkdir(dirPath, {recursive: true}); 454514f5e3Sopenharmony_ci } 464514f5e3Sopenharmony_ci await fs.promises.copyFile(source, target); 474514f5e3Sopenharmony_ci } 484514f5e3Sopenharmony_ci} 494514f5e3Sopenharmony_ci 504514f5e3Sopenharmony_cifunction clearDirectory(directoryPath) { 514514f5e3Sopenharmony_ci let files = []; 524514f5e3Sopenharmony_ci if (fs.existsSync(directoryPath)) { 534514f5e3Sopenharmony_ci files = fs.readdirSync(directoryPath); 544514f5e3Sopenharmony_ci files.forEach((file, index) => { 554514f5e3Sopenharmony_ci let curPath = directoryPath + '/' + file; 564514f5e3Sopenharmony_ci if (fs.statSync(curPath).isDirectory()) { 574514f5e3Sopenharmony_ci clearDirectory(curPath); 584514f5e3Sopenharmony_ci } else { 594514f5e3Sopenharmony_ci fs.unlinkSync(curPath); 604514f5e3Sopenharmony_ci } 614514f5e3Sopenharmony_ci }); 624514f5e3Sopenharmony_ci fs.rmdirSync(directoryPath); 634514f5e3Sopenharmony_ci } 644514f5e3Sopenharmony_ci} 654514f5e3Sopenharmony_ci 664514f5e3Sopenharmony_ci 674514f5e3Sopenharmony_cimodule.exports = (env, argv) => { 684514f5e3Sopenharmony_ci const outPath = path.normalize(path.join(__dirname, '/', 'dist')); 694514f5e3Sopenharmony_ci clearDirectory(outPath); 704514f5e3Sopenharmony_ci staticPath.forEach((value) => { 714514f5e3Sopenharmony_ci let pa = path.join(__dirname, value); 724514f5e3Sopenharmony_ci let distPath; 734514f5e3Sopenharmony_ci if (value.startsWith('/src')) { 744514f5e3Sopenharmony_ci distPath = path.join(outPath, value.substring(4, value.length + 1)); 754514f5e3Sopenharmony_ci } else if (value.startsWith('/server')) { 764514f5e3Sopenharmony_ci distPath = path.join(outPath, value.substring(7, value.length + 1)); 774514f5e3Sopenharmony_ci } 784514f5e3Sopenharmony_ci cpDir(pa, distPath); 794514f5e3Sopenharmony_ci }); 804514f5e3Sopenharmony_ci staticFiles.forEach((value) => { 814514f5e3Sopenharmony_ci let filePath = path.join(__dirname, value); 824514f5e3Sopenharmony_ci let distFile; 834514f5e3Sopenharmony_ci if (value.startsWith('/src')) { 844514f5e3Sopenharmony_ci distFile = path.join(outPath, value.substring(4, value.length + 1)); 854514f5e3Sopenharmony_ci } else if (value.startsWith('/server')) { 864514f5e3Sopenharmony_ci distFile = path.join(outPath, value.substring(7, value.length + 1)); 874514f5e3Sopenharmony_ci } 884514f5e3Sopenharmony_ci cpFile(filePath, distFile); 894514f5e3Sopenharmony_ci }); 904514f5e3Sopenharmony_ci 914514f5e3Sopenharmony_ci return { 924514f5e3Sopenharmony_ci mode: 'production', 934514f5e3Sopenharmony_ci entry: './src/index.js', 944514f5e3Sopenharmony_ci output: { 954514f5e3Sopenharmony_ci path: path.resolve(__dirname, 'dist'), 964514f5e3Sopenharmony_ci filename: 'index.js', 974514f5e3Sopenharmony_ci } 984514f5e3Sopenharmony_ci }; 994514f5e3Sopenharmony_ci}; 100