/* * Copyright 2020, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ 'use strict'; const path = require('path'); const fs = require('fs'); const VueLoaderPlugin = require('vue-loader/lib/plugin'); const HtmlWebpackPlugin = require('html-webpack-plugin'); const KotlinWebpackPlugin = require('@jetbrains/kotlin-webpack-plugin'); const HtmlWebpackInlineSourcePlugin = require('html-webpack-inline-source-plugin'); const isDev = process.env.NODE_ENV === 'development'; function getWaylandSafePath() { const waylandPath = path.resolve(__dirname, '../../../vendor/google_arc/libs/wayland_service'); if (fs.existsSync(waylandPath)) { return waylandPath; } return path.resolve(__dirname, 'src/stubs'); } const webpackConfig = { entry: { polyfill: '@babel/polyfill', main: './src/main.js', }, externals: { _: 'lodash', }, resolve: { extensions: ['.tsx', '.ts', '.js', '.vue'], alias: { 'vue$': isDev ? 'vue/dist/vue.runtime.js' : 'vue/dist/vue.runtime.min.js', '@': path.resolve(__dirname, 'src'), 'WaylandSafePath': getWaylandSafePath(), }, modules: [ 'node_modules', 'kotlin_build', path.resolve(__dirname, '../../..'), ], }, resolveLoader: { modules: [ 'node_modules', path.resolve(__dirname, 'loaders'), ], }, module: { rules: [ { test: /\.vue$/, loader: 'vue-loader', include: path.resolve(__dirname, './src'), exclude: /node_modules/, }, { test: /\.tsx?$/, use: 'ts-loader', include: path.resolve(__dirname, './src'), exclude: /node_modules/, }, { test: /\.js$/, loader: 'babel-loader', include: path.resolve(__dirname, './src'), exclude: /node_modules/, }, { test: /\.css$/, use: [ 'vue-style-loader', {loader: 'css-loader', options: {sourceMap: isDev}}, ], include: path.resolve(__dirname, './src'), exclude: /node_modules/, }, { test: /\.proto$/, loader: 'proto-loader', options: { paths: [ path.resolve(__dirname, '../../..'), path.resolve(__dirname, '../../../external/protobuf/src'), ], }, }, { test: /\.(png|jpg|gif|svg)$/, loader: 'file-loader', options: { name: '[name].[ext]?[hash]', }, }, { test: /\.(ttf|otf|eot|woff|woff2)$/, use: { loader: 'file-loader', options: { name: 'fonts/[name].[ext]', }, }, }, ], }, plugins: [ new VueLoaderPlugin(), new HtmlWebpackPlugin({ inlineSource: isDev ? false : '.(js|css)', template: 'src/index_template.html', }), new HtmlWebpackInlineSourcePlugin(), new KotlinWebpackPlugin({ src: [ path.join(__dirname, '../../../platform_testing/libraries/flicker/' + 'src/com/android/server/wm/traces/common/'), ], output: 'kotlin_build', moduleName: 'flicker', librariesAutoLookup: true, sourceMaps: true, sourceMapEmbedSources: 'always', verbose: true, optimize: true, }), ], }; module.exports = webpackConfig;