| // 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(); |