Home | History | Annotate | Download | only in catapult_build
      1 // Copyright 2016 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 'use strict';
      6 
      7 /**
      8  * @fileoverview Lets node import catapult HTML-imports-authored modules.
      9  *
     10  */
     11 var isNode = global.process && global.process.versions.node;
     12 if (!isNode)
     13   throw new Error('Only works inside node');
     14 
     15 var fs = require('fs');
     16 var path = require('path');
     17 var process = require('process');
     18 var child_process = require('child_process');
     19 
     20 var catapultPath = fs.realpathSync(path.join(__dirname, '..'));
     21 var catapultBuildPath = path.join(catapultPath, 'catapult_build');
     22 
     23 var vinnPath = path.join(catapultPath, 'third_party', 'vinn');
     24 
     25 function loadAndEval(fileName) {
     26   var contents = fs.readFileSync(fileName, 'utf8');
     27   (function() {
     28     eval(contents);
     29   }).call(global);
     30 }
     31 
     32 function initialize() {
     33   loadAndEval(path.join(vinnPath, 'vinn', 'base64_compat.js'));
     34 
     35   // First, we need to hand-load the HTML imports loader from Vinn,
     36   // plus a few of its supporting files. These all assume that 'this' is the
     37   // global object, so eval them with 'this' redirected.
     38   loadAndEval(path.join(vinnPath, 'third_party', 'parse5', 'parse5.js'));
     39   loadAndEval(path.join(vinnPath, 'vinn', 'html_to_js_generator.js'));
     40   loadAndEval(path.join(vinnPath, 'vinn', 'html_imports_loader.js'));
     41   loadAndEval(path.join(vinnPath, 'vinn', 'path_utils.js'));
     42 
     43   // Now that everything is loaded, we need to set up the loader.
     44   var pathUtils = new global.PathUtils(
     45       {
     46         currentWorkingDirectory: process.cwd(),
     47         exists: function(fileName) {
     48           return fs.existsSync(fileName);
     49         }
     50       });
     51   global.HTMLImportsLoader.setPathUtils(pathUtils);
     52 }
     53 
     54 
     55 /**
     56  * Gets the source search paths for a catapult project module.
     57  *
     58  * @param {String} projectName The project in question.
     59  * @return {Array} A list of search paths.
     60  */
     61 module.exports.getSourcePathsForProject = function(projectName) {
     62   var sourcePathsString = child_process.execFileSync(
     63       path.join(catapultBuildPath, 'print_project_info'),
     64       ['--source-paths', projectName]);
     65   return JSON.parse(sourcePathsString);
     66 };
     67 
     68 
     69 /**
     70  * Gets the headless test module filenames for a catapult project module.
     71  *
     72  * @param {String} projectName The project in question.
     73  * @return {Array} A list of module filenames.
     74  */
     75 module.exports.getHeadlessTestModuleFilenamesForProject =
     76     function(projectName) {
     77   var sourcePathsString = child_process.execFileSync(
     78       path.join(catapultBuildPath, 'print_project_info'),
     79       ['--headless-test-module-filenames', projectName]);
     80   return JSON.parse(sourcePathsString);
     81 };
     82 
     83 initialize();
     84