xref: /aosp_15_r20/external/perfetto/ui/config/rollup.config.js (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
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