12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- /**
- * espower-loader - Power Assert feature instrumentor on the fly.
- *
- * https://github.com/power-assert-js/espower-loader
- *
- * Copyright (c) 2013-2017 Takuto Wada
- * Licensed under the MIT license.
- * https://github.com/power-assert-js/espower-loader/blob/master/MIT-LICENSE.txt
- */
- var extensions = require.extensions;
- var originalLoader = extensions['.js'];
- var fs = require('fs');
- var extend = require('xtend');
- var minimatch = require('minimatch');
- var convert = require('convert-source-map');
- var sourceMapSupport = require('source-map-support');
- var espowerSourceToSource = require('espower-source');
- var pathToMap = {};
- function espowerLoader (options) {
- 'use strict';
- options = extend({ cwd: process.cwd() }, options);
- var patternStartsWithSlash = (options.pattern.lastIndexOf('/', 0) === 0);
- var separator = patternStartsWithSlash ? '' : '/';
- var pattern = options.cwd + separator + options.pattern;
- sourceMapSupport.install({
- retrieveSourceMap: function (source) {
- if (minimatch(source, pattern) && pathToMap[source]) {
- return {
- map: pathToMap[source]
- };
- }
- return null;
- }
- });
- var espowerOptions = extend({ sourceRoot: options.cwd }, options.espowerOptions);
- extensions['.js'] = function (localModule, filepath) {
- var output;
- if (minimatch(filepath, pattern)){
- output = espowerSourceToSource(fs.readFileSync(filepath, 'utf-8'), filepath, espowerOptions);
- var map = convert.fromSource(output).toObject();
- pathToMap[filepath] = map;
- localModule._compile(output, filepath);
- } else {
- originalLoader(localModule, filepath);
- }
- };
- }
- module.exports = espowerLoader;
|