fix(core): update

This commit is contained in:
2019-02-24 23:11:26 +01:00
parent 5f2678f1cc
commit a895cd2af1
13 changed files with 1593 additions and 651 deletions

View File

@ -1,74 +1,17 @@
import 'typings-global'
import * as through2 from 'through2';
import { cache } from './injection';
import { Transform } from 'stream'; // needed for types
let Module = require('module')
import path = require('path')
import sourceMap = require('source-map-support')
import through2 = require('through2')
import vm = require('vm')
import { Transform } from 'stream'
sourceMap.install({
retrieveFile: function (path) {
if (cache[path]) {
return cache[path].contents.toString()
} else if (cache[path + '.js']) {
return cache[path + '.js'].contents.toString()
}
}
})
let cache = {}
let originalLoader = Module._extensions['.js']
Module._extensions['.js'] = function (module, filename) {
let file = cache[filename]
let file2 = cache[filename + '.js']
if (file) {
module._compile(file.contents.toString(), filename)
} else if (file2) {
module._compile(file2.contents.toString(), filename)
} else {
originalLoader.apply(this, arguments)
}
}
let originalModuleResolve = Module._resolveFilename
Module._resolveFilename = function (request, parent, isMain) {
let resolvedRequest: string
if (parent && /^\./.test(request)) {
let resolvedDir = path.parse(parent.filename).dir
resolvedRequest = path.join('/', resolvedDir, request)
} else {
resolvedRequest = request
}
// uncomment for testing
/* if (/[yourTestFilenameHere.js]/.test(request)) {
console.log('resolvedRequest:' + resolvedRequest)
console.log(parent)
} */
let file = cache[resolvedRequest]
let file2 = cache[resolvedRequest + '.js']
if (file || file2) {
return resolvedRequest
} else {
return originalModuleResolve.apply(this, arguments)
}
}
export let gulpPipe = function () {
return through2.obj(function (file, enc, cb) {
cache[file.path] = file
return cb(null, file)
})
}
export let gulpPipe = function() {
return through2.obj(function(file, enc, cb) {
cache[file.path] = file;
return cb(null, file);
});
};
export interface fileObject {
path: string
contents: Buffer
path: string;
contents: Buffer;
}
export let injectFileArray = async (fileArray: fileObject[]) => {
@ -76,13 +19,13 @@ export let injectFileArray = async (fileArray: fileObject[]) => {
/* if (/[yourTestFilenameHere.js]/.test(request)) {
// console.log('injected:' + fileObject.path)
} */
cache[fileObject.path] = fileObject
cache[fileObject.path] = fileObject;
}
return fileArray
}
return fileArray;
};
export let getFileString = (filePathArg: string) => {
if (cache[filePathArg]) {
return cache[filePathArg].contents.toString()
return cache[filePathArg].contents.toString();
}
}
};

76
ts/injection.ts Normal file
View File

@ -0,0 +1,76 @@
let Module = require('module');
import path = require('path');
import sourceMap = require('source-map-support');
import vm = require('vm');
export const cache = {};
export const extensionMap: {[key: string]: () => string} = {}
let originalLoader = Module._extensions['.js'];
/**
* ensure sourcemap support works with the cache
*/
sourceMap.install({
retrieveFile: function(path) {
if (cache[path]) {
return cache[path].contents.toString();
} else if (cache[path + '.js']) {
return cache[path + '.js'].contents.toString();
}
}
});
Module._extensions['.js'] = function(module, filename) {
let file = cache[filename];
let file2 = cache[filename + '.js'];
if (file) {
module._compile(file.contents.toString(), filename);
} else if (file2) {
module._compile(file2.contents.toString(), filename);
} else {
originalLoader.apply(this, arguments);
}
};
for (let extension in extensionMap) {
if(extensionMap[extension]) {
Module._extensions[extension] = function(module, filename) {
let file = cache[filename];
let file2 = cache[filename + '.ts'];
if (file) {
module._compile(file.contents.toString(), filename);
} else if (file2) {
module._compile(file2.contents.toString(), filename);
} else {
originalLoader.apply(this, arguments);
}
};
}
}
let originalModuleResolve = Module._resolveFilename;
Module._resolveFilename = function(request, parent, isMain) {
let resolvedRequest: string;
if (parent && /^\./.test(request)) {
let resolvedDir = path.parse(parent.filename).dir;
resolvedRequest = path.join('/', resolvedDir, request);
} else {
resolvedRequest = request;
}
// uncomment for testing
/* if (/[yourTestFilenameHere.js]/.test(request)) {
console.log('resolvedRequest:' + resolvedRequest)
console.log(parent)
} */
let file = cache[resolvedRequest];
let file2 = cache[resolvedRequest + '.js'];
if (file || file2) {
return resolvedRequest;
} else {
return originalModuleResolve.apply(this, arguments);
}
};

5
ts/registerextension.ts Normal file
View File

@ -0,0 +1,5 @@
import {extensionMap} from './injection';
export const registerExtension = (extensionName: string, compilerFunction) => {
extensionMap[extensionName] = compilerFunction;
}