blob: d36fde3570dcb6c47dbf18d007189621f8858a66 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
'use strict';
/**
* @fileoverview Lets node import catapult HTML-imports-authored modules.
*
*/
var isNode = global.process && global.process.versions.node;
if (!isNode)
throw new Error('Only works inside node');
var fs = require('fs');
var path = require('path');
var process = require('process');
var child_process = require('child_process');
var catapultPath = fs.realpathSync(path.join(__dirname, '..'));
var catapultBuildPath = path.join(catapultPath, 'catapult_build');
var vinnPath = path.join(catapultPath, 'third_party', 'vinn');
function loadAndEval(fileName) {
var contents = fs.readFileSync(fileName, 'utf8');
(function() {
eval(contents);
}).call(global);
}
function initialize() {
loadAndEval(path.join(vinnPath, 'vinn', 'base64_compat.js'));
// First, we need to hand-load the HTML imports loader from Vinn,
// plus a few of its supporting files. These all assume that 'this' is the
// global object, so eval them with 'this' redirected.
loadAndEval(path.join(vinnPath, 'third_party', 'parse5', 'parse5.js'));
loadAndEval(path.join(vinnPath, 'vinn', 'html_to_js_generator.js'));
loadAndEval(path.join(vinnPath, 'vinn', 'html_imports_loader.js'));
loadAndEval(path.join(vinnPath, 'vinn', 'path_utils.js'));
// Now that everything is loaded, we need to set up the loader.
var pathUtils = new global.PathUtils(
{
currentWorkingDirectory: process.cwd(),
exists: function(fileName) {
return fs.existsSync(fileName);
}
});
global.HTMLImportsLoader.setPathUtils(pathUtils);
}
/**
* Gets the source search paths for a catapult project module.
*
* @param {String} projectName The project in question.
* @return {Array} A list of search paths.
*/
module.exports.getSourcePathsForProject = function(projectName) {
var sourcePathsString = child_process.execFileSync(
path.join(catapultBuildPath, 'print_project_info'),
['--source-paths', projectName]);
return JSON.parse(sourcePathsString);
};
/**
* Gets the headless test module filenames for a catapult project module.
*
* @param {String} projectName The project in question.
* @return {Array} A list of module filenames.
*/
module.exports.getHeadlessTestModuleFilenamesForProject =
function(projectName) {
var sourcePathsString = child_process.execFileSync(
path.join(catapultBuildPath, 'print_project_info'),
['--headless-test-module-filenames', projectName]);
return JSON.parse(sourcePathsString);
};
initialize();