@cypress/webpack-preprocessor
Version:
Cypress preprocessor for bundling JavaScript via webpack
53 lines (52 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.overrideSourceMaps = void 0;
var debug = require('debug')('cypress:webpack');
var _ = require('lodash');
var patched = false;
var getProgramOptions = function (rootNamesOrOptions, options) {
return _.isArray(rootNamesOrOptions) ? options : rootNamesOrOptions.options;
};
var overrideSourceMaps = function (sourceMap, typescriptPath) {
try {
if (patched) {
debug('typescript.createProgram() already overridden');
return;
}
// when using webpack-preprocessor as a local filesystem dependency (`file:...`),
// require(typescript) will resolve to this repo's `typescript` devDependency, not the
// targeted project's `typescript`, which breaks monkeypatching. resolving from the
// CWD avoids this issue.
var projectTsPath = require.resolve(typescriptPath || 'typescript', {
paths: [process.cwd()],
});
var typescript_1 = require(projectTsPath);
var createProgram_1 = typescript_1.createProgram;
debug('typescript found, overriding typescript.createProgram()');
typescript_1.createProgram = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var rootNamesOrOptions = args[0], _options = args[1];
var options = getProgramOptions(rootNamesOrOptions, _options);
debug('typescript unmodified createProgram options %o', options);
// if sourceMap has been set then apply
// these overrides to force typescript
// to generate the right sourcemaps
options.sourceMap = sourceMap;
delete options.inlineSources;
delete options.inlineSourceMap;
debug('typescript modified createProgram options %o', options);
// @ts-ignore
return createProgram_1.apply(typescript_1, args);
};
patched = true;
}
catch (err) {
debug('typescript not found');
// for testing purposes
return err;
}
};
exports.overrideSourceMaps = overrideSourceMaps;