161847f8eSopenharmony_ci/* 261847f8eSopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 361847f8eSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 461847f8eSopenharmony_ci * you may not use this file except in compliance with the License. 561847f8eSopenharmony_ci * You may obtain a copy of the License at 661847f8eSopenharmony_ci * 761847f8eSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 861847f8eSopenharmony_ci * 961847f8eSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1061847f8eSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1161847f8eSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1261847f8eSopenharmony_ci * See the License for the specific language governing permissions and 1361847f8eSopenharmony_ci * limitations under the License. 1461847f8eSopenharmony_ci */ 1561847f8eSopenharmony_ci 1661847f8eSopenharmony_ciconst path = require('path'); 1761847f8eSopenharmony_ciconst fs = require('fs'); 1861847f8eSopenharmony_ciconst TerserPlugin = require('terser-webpack-plugin'); 1961847f8eSopenharmony_ciconst webpack = require('webpack'); 2061847f8eSopenharmony_ciconst packageInfo = require('./package.json'); 2161847f8eSopenharmony_ciconst archiver = require('archiver'); 2261847f8eSopenharmony_ciconst { copyESLibs } = require('./scripts/copylibs'); 2361847f8eSopenharmony_ci 2461847f8eSopenharmony_ciclass PackPlugin { 2561847f8eSopenharmony_ci apply(compiler) { 2661847f8eSopenharmony_ci compiler.hooks.done.tap('PackPlugin', (stats) => { 2761847f8eSopenharmony_ci const bundleName = `${packageInfo.name}.js`; 2861847f8eSopenharmony_ci const bundlejsPath = path.resolve(__dirname, 'package', bundleName); 2961847f8eSopenharmony_ci if (!fs.existsSync(bundlejsPath)) { 3061847f8eSopenharmony_ci console.error(`${bundleName} not found`); 3161847f8eSopenharmony_ci return; 3261847f8eSopenharmony_ci } 3361847f8eSopenharmony_ci copyESLibs(); 3461847f8eSopenharmony_ci const libsPath = path.resolve(__dirname, 'libs'); 3561847f8eSopenharmony_ci const readme = path.resolve(__dirname, 'README_zh.md'); 3661847f8eSopenharmony_ci const outputName = path.resolve(__dirname, 'package', `${packageInfo.name}-${packageInfo.version}.zip`); 3761847f8eSopenharmony_ci const outputZipStream = fs.createWriteStream(outputName); 3861847f8eSopenharmony_ci const archive = archiver('zip'); 3961847f8eSopenharmony_ci archive.pipe(outputZipStream); 4061847f8eSopenharmony_ci archive.file(bundlejsPath, { name: bundleName }); 4161847f8eSopenharmony_ci archive.file(readme, { name: 'README.md' }); 4261847f8eSopenharmony_ci archive.directory(libsPath, 'libs'); 4361847f8eSopenharmony_ci archive.finalize(); 4461847f8eSopenharmony_ci }); 4561847f8eSopenharmony_ci } 4661847f8eSopenharmony_ci} 4761847f8eSopenharmony_ci 4861847f8eSopenharmony_cimodule.exports = (env, argv) => { 4961847f8eSopenharmony_ci const config = { 5061847f8eSopenharmony_ci name: 'JSDoc formatter plugin', 5161847f8eSopenharmony_ci target: 'node', 5261847f8eSopenharmony_ci mode: 'none', 5361847f8eSopenharmony_ci entry: './src/main.ts', 5461847f8eSopenharmony_ci module: { 5561847f8eSopenharmony_ci rules: [ 5661847f8eSopenharmony_ci { 5761847f8eSopenharmony_ci test: /\.ts$/, 5861847f8eSopenharmony_ci include: path.resolve(__dirname, 'src'), 5961847f8eSopenharmony_ci exclude: [/node_modules/, /test/], 6061847f8eSopenharmony_ci loader: 'ts-loader', 6161847f8eSopenharmony_ci options: { 6261847f8eSopenharmony_ci onlyCompileBundledFiles: true, 6361847f8eSopenharmony_ci }, 6461847f8eSopenharmony_ci }, 6561847f8eSopenharmony_ci { 6661847f8eSopenharmony_ci test: /build\.json$/, 6761847f8eSopenharmony_ci use: [ 6861847f8eSopenharmony_ci { 6961847f8eSopenharmony_ci loader: path.resolve(__dirname, 'loader/flavor.js'), 7061847f8eSopenharmony_ci }, 7161847f8eSopenharmony_ci ], 7261847f8eSopenharmony_ci }, 7361847f8eSopenharmony_ci ], 7461847f8eSopenharmony_ci }, 7561847f8eSopenharmony_ci resolve: { 7661847f8eSopenharmony_ci extensions: ['.js', '.ts', '.json'], 7761847f8eSopenharmony_ci }, 7861847f8eSopenharmony_ci output: { 7961847f8eSopenharmony_ci filename: `${packageInfo.name}.js`, 8061847f8eSopenharmony_ci path: path.resolve(__dirname, './package'), 8161847f8eSopenharmony_ci }, 8261847f8eSopenharmony_ci optimization: { 8361847f8eSopenharmony_ci minimize: true, 8461847f8eSopenharmony_ci minimizer: [new TerserPlugin({ extractComments: false })], 8561847f8eSopenharmony_ci }, 8661847f8eSopenharmony_ci plugins: [ 8761847f8eSopenharmony_ci new webpack.BannerPlugin({ 8861847f8eSopenharmony_ci banner: `version:${packageInfo.version}`, 8961847f8eSopenharmony_ci raw: false, 9061847f8eSopenharmony_ci entryOnly: true, 9161847f8eSopenharmony_ci }), 9261847f8eSopenharmony_ci new PackPlugin(), 9361847f8eSopenharmony_ci ], 9461847f8eSopenharmony_ci }; 9561847f8eSopenharmony_ci return config; 9661847f8eSopenharmony_ci}; 97