// Copyright (C) 2018 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. /** * Configuration file for lite-server. Contains configuration for auto rerunning * ninja on file change. */ 'use strict'; const { spawn } = require('child_process'); const path = require('path'); // Print without added new line. const print = data => process.stdout.write(data); const printErr = data => process.stderr.write(data); const ninjaOutDir = process.env.OUT_DIR; const uiOutDir = path.join(ninjaOutDir, 'ui'); const perfettoRoot = process.env.ROOT_DIR; const ninjaPath = path.join(perfettoRoot, 'tools', 'ninja'); let ninjaRunning = false; function rebasePath(relative_path) { return path.join(perfettoRoot, relative_path); } module.exports = function(bs) { return { files: [ { match: [ "ui/**", "src/trace_processor/**", "protos/**", ].map(rebasePath), fn: function(event, file) { console.log(`Change detected on ${file}`); if (ninjaRunning) { console.log("Already have a ninja build running. Doing nothing."); return; } ninjaRunning = true; console.log(`Executing: ninja -C ${ninjaOutDir} ui`); const ninja = spawn(ninjaPath, ['-C', ninjaOutDir, 'ui']); ninja.stdout.on('data', data => print(data.toString())); ninja.stderr.on('data', data => printErr(data.toString())); // We can be smarter and load just the file we need. Need to // resolve to the dist/location of the file in that case. // For now, we're reloading the whole page. ninja.on('exit', () => { ninjaRunning = false; bs.reload(); }); }, options: { ignored: [ "ui/dist/", "ui/.git/", "ui/node_modules/", ].map(rebasePath), ignoreInitial: true, } } ], server: { baseDir: uiOutDir, }, }; };