fix(core): update
This commit is contained in:
89
ts/index.ts
89
ts/index.ts
@ -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
76
ts/injection.ts
Normal 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
5
ts/registerextension.ts
Normal file
@ -0,0 +1,5 @@
|
||||
import {extensionMap} from './injection';
|
||||
|
||||
export const registerExtension = (extensionName: string, compilerFunction) => {
|
||||
extensionMap[extensionName] = compilerFunction;
|
||||
}
|
Reference in New Issue
Block a user