1*6dbdd20aSAndroid Build Coastguard Worker// Copyright (C) 2018 The Android Open Source Project 2*6dbdd20aSAndroid Build Coastguard Worker// 3*6dbdd20aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*6dbdd20aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*6dbdd20aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*6dbdd20aSAndroid Build Coastguard Worker// 7*6dbdd20aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*6dbdd20aSAndroid Build Coastguard Worker// 9*6dbdd20aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*6dbdd20aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*6dbdd20aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6dbdd20aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*6dbdd20aSAndroid Build Coastguard Worker// limitations under the License. 14*6dbdd20aSAndroid Build Coastguard Worker 15*6dbdd20aSAndroid Build Coastguard Workerconst {uglify} = require('rollup-plugin-uglify'); 16*6dbdd20aSAndroid Build Coastguard Workerconst commonjs = require('@rollup/plugin-commonjs'); 17*6dbdd20aSAndroid Build Coastguard Workerconst nodeResolve = require('@rollup/plugin-node-resolve'); 18*6dbdd20aSAndroid Build Coastguard Workerconst path = require('path'); 19*6dbdd20aSAndroid Build Coastguard Workerconst replace = require('rollup-plugin-re'); 20*6dbdd20aSAndroid Build Coastguard Workerconst sourcemaps = require('rollup-plugin-sourcemaps'); 21*6dbdd20aSAndroid Build Coastguard Worker 22*6dbdd20aSAndroid Build Coastguard Workerconst ROOT_DIR = path.dirname(path.dirname(__dirname)); // The repo root. 23*6dbdd20aSAndroid Build Coastguard Workerconst OUT_SYMLINK = path.join(ROOT_DIR, 'ui/out'); 24*6dbdd20aSAndroid Build Coastguard Worker 25*6dbdd20aSAndroid Build Coastguard Workerfunction defBundle(tsRoot, bundle, distDir) { 26*6dbdd20aSAndroid Build Coastguard Worker return { 27*6dbdd20aSAndroid Build Coastguard Worker input: `${OUT_SYMLINK}/${tsRoot}/${bundle}/index.js`, 28*6dbdd20aSAndroid Build Coastguard Worker output: { 29*6dbdd20aSAndroid Build Coastguard Worker name: bundle, 30*6dbdd20aSAndroid Build Coastguard Worker format: 'iife', 31*6dbdd20aSAndroid Build Coastguard Worker esModule: false, 32*6dbdd20aSAndroid Build Coastguard Worker file: `${OUT_SYMLINK}/${distDir}/${bundle}_bundle.js`, 33*6dbdd20aSAndroid Build Coastguard Worker sourcemap: true, 34*6dbdd20aSAndroid Build Coastguard Worker }, 35*6dbdd20aSAndroid Build Coastguard Worker plugins: [ 36*6dbdd20aSAndroid Build Coastguard Worker nodeResolve({ 37*6dbdd20aSAndroid Build Coastguard Worker mainFields: ['browser'], 38*6dbdd20aSAndroid Build Coastguard Worker browser: true, 39*6dbdd20aSAndroid Build Coastguard Worker preferBuiltins: false, 40*6dbdd20aSAndroid Build Coastguard Worker }), 41*6dbdd20aSAndroid Build Coastguard Worker 42*6dbdd20aSAndroid Build Coastguard Worker commonjs({ 43*6dbdd20aSAndroid Build Coastguard Worker strictRequires: true, 44*6dbdd20aSAndroid Build Coastguard Worker }), 45*6dbdd20aSAndroid Build Coastguard Worker 46*6dbdd20aSAndroid Build Coastguard Worker replace({ 47*6dbdd20aSAndroid Build Coastguard Worker patterns: [ 48*6dbdd20aSAndroid Build Coastguard Worker // Protobufjs's inquire() uses eval but that's not really needed in 49*6dbdd20aSAndroid Build Coastguard Worker // the browser. https://github.com/protobufjs/protobuf.js/issues/593 50*6dbdd20aSAndroid Build Coastguard Worker {test: /eval\(.*\(moduleName\);/g, replace: 'undefined;'}, 51*6dbdd20aSAndroid Build Coastguard Worker 52*6dbdd20aSAndroid Build Coastguard Worker // Immer entry point has a if (process.env.NODE_ENV === 'production') 53*6dbdd20aSAndroid Build Coastguard Worker // but |process| is not defined in the browser. Bypass. 54*6dbdd20aSAndroid Build Coastguard Worker // https://github.com/immerjs/immer/issues/557 55*6dbdd20aSAndroid Build Coastguard Worker {test: /process\.env\.NODE_ENV/g, replace: "'production'"}, 56*6dbdd20aSAndroid Build Coastguard Worker ], 57*6dbdd20aSAndroid Build Coastguard Worker }), 58*6dbdd20aSAndroid Build Coastguard Worker 59*6dbdd20aSAndroid Build Coastguard Worker // Translate source maps to point back to the .ts sources. 60*6dbdd20aSAndroid Build Coastguard Worker sourcemaps(), 61*6dbdd20aSAndroid Build Coastguard Worker ].concat(maybeUglify()), 62*6dbdd20aSAndroid Build Coastguard Worker onwarn: function (warning, warn) { 63*6dbdd20aSAndroid Build Coastguard Worker if (warning.code === 'CIRCULAR_DEPENDENCY') { 64*6dbdd20aSAndroid Build Coastguard Worker // Ignore circular dependency warnings coming from third party code. 65*6dbdd20aSAndroid Build Coastguard Worker if (warning.message.includes('node_modules')) { 66*6dbdd20aSAndroid Build Coastguard Worker return; 67*6dbdd20aSAndroid Build Coastguard Worker } 68*6dbdd20aSAndroid Build Coastguard Worker 69*6dbdd20aSAndroid Build Coastguard Worker // Treat all other circular dependency warnings as errors. 70*6dbdd20aSAndroid Build Coastguard Worker throw new Error( 71*6dbdd20aSAndroid Build Coastguard Worker `Circular dependency detected in ${warning.importer}:\n\n ${warning.cycle.join('\n ')}`, 72*6dbdd20aSAndroid Build Coastguard Worker ); 73*6dbdd20aSAndroid Build Coastguard Worker } 74*6dbdd20aSAndroid Build Coastguard Worker 75*6dbdd20aSAndroid Build Coastguard Worker // Call the default warning handler for all remaining warnings. 76*6dbdd20aSAndroid Build Coastguard Worker warn(warning); 77*6dbdd20aSAndroid Build Coastguard Worker }, 78*6dbdd20aSAndroid Build Coastguard Worker }; 79*6dbdd20aSAndroid Build Coastguard Worker} 80*6dbdd20aSAndroid Build Coastguard Worker 81*6dbdd20aSAndroid Build Coastguard Workerfunction defServiceWorkerBundle() { 82*6dbdd20aSAndroid Build Coastguard Worker return { 83*6dbdd20aSAndroid Build Coastguard Worker input: `${OUT_SYMLINK}/tsc/service_worker/service_worker.js`, 84*6dbdd20aSAndroid Build Coastguard Worker output: { 85*6dbdd20aSAndroid Build Coastguard Worker name: 'service_worker', 86*6dbdd20aSAndroid Build Coastguard Worker format: 'iife', 87*6dbdd20aSAndroid Build Coastguard Worker esModule: false, 88*6dbdd20aSAndroid Build Coastguard Worker file: `${OUT_SYMLINK}/dist/service_worker.js`, 89*6dbdd20aSAndroid Build Coastguard Worker sourcemap: true, 90*6dbdd20aSAndroid Build Coastguard Worker }, 91*6dbdd20aSAndroid Build Coastguard Worker plugins: [ 92*6dbdd20aSAndroid Build Coastguard Worker nodeResolve({ 93*6dbdd20aSAndroid Build Coastguard Worker mainFields: ['browser'], 94*6dbdd20aSAndroid Build Coastguard Worker browser: true, 95*6dbdd20aSAndroid Build Coastguard Worker preferBuiltins: false, 96*6dbdd20aSAndroid Build Coastguard Worker }), 97*6dbdd20aSAndroid Build Coastguard Worker commonjs(), 98*6dbdd20aSAndroid Build Coastguard Worker sourcemaps(), 99*6dbdd20aSAndroid Build Coastguard Worker ], 100*6dbdd20aSAndroid Build Coastguard Worker }; 101*6dbdd20aSAndroid Build Coastguard Worker} 102*6dbdd20aSAndroid Build Coastguard Worker 103*6dbdd20aSAndroid Build Coastguard Workerfunction maybeUglify() { 104*6dbdd20aSAndroid Build Coastguard Worker const minifyEnv = process.env['MINIFY_JS']; 105*6dbdd20aSAndroid Build Coastguard Worker if (!minifyEnv) return []; 106*6dbdd20aSAndroid Build Coastguard Worker const opts = 107*6dbdd20aSAndroid Build Coastguard Worker minifyEnv === 'preserve_comments' ? {output: {comments: 'all'}} : undefined; 108*6dbdd20aSAndroid Build Coastguard Worker return [uglify(opts)]; 109*6dbdd20aSAndroid Build Coastguard Worker} 110*6dbdd20aSAndroid Build Coastguard Worker 111*6dbdd20aSAndroid Build Coastguard Workerconst maybeBigtrace = process.env['ENABLE_BIGTRACE'] 112*6dbdd20aSAndroid Build Coastguard Worker ? [defBundle('tsc/bigtrace', 'bigtrace', 'dist_version/bigtrace')] 113*6dbdd20aSAndroid Build Coastguard Worker : []; 114*6dbdd20aSAndroid Build Coastguard Worker 115*6dbdd20aSAndroid Build Coastguard Workerconst maybeOpenPerfettoTrace = process.env['ENABLE_OPEN_PERFETTO_TRACE'] 116*6dbdd20aSAndroid Build Coastguard Worker ? [defBundle('tsc', 'open_perfetto_trace', 'dist/open_perfetto_trace')] 117*6dbdd20aSAndroid Build Coastguard Worker : []; 118*6dbdd20aSAndroid Build Coastguard Worker 119*6dbdd20aSAndroid Build Coastguard Workermodule.exports = [ 120*6dbdd20aSAndroid Build Coastguard Worker defBundle('tsc', 'frontend', 'dist_version'), 121*6dbdd20aSAndroid Build Coastguard Worker defBundle('tsc', 'engine', 'dist_version'), 122*6dbdd20aSAndroid Build Coastguard Worker defBundle('tsc', 'traceconv', 'dist_version'), 123*6dbdd20aSAndroid Build Coastguard Worker defBundle('tsc', 'chrome_extension', 'chrome_extension'), 124*6dbdd20aSAndroid Build Coastguard Worker defServiceWorkerBundle(), 125*6dbdd20aSAndroid Build Coastguard Worker] 126*6dbdd20aSAndroid Build Coastguard Worker .concat(maybeBigtrace) 127*6dbdd20aSAndroid Build Coastguard Worker .concat(maybeOpenPerfettoTrace); 128