| const path = require('path'); |
| |
| // Automatically transpile .ts imports |
| require('ts-node').register({ |
| // Specify the project file so ts-node doesn't try to find it itself based on the CWD. |
| project: path.resolve(__dirname, '../../../tsconfig.json'), |
| compilerOptions: { |
| module: 'commonjs', |
| }, |
| transpileOnly: true, |
| }); |
| const Module = require('module'); |
| |
| // Redirect imports of .js files to .ts files |
| const resolveFilename = Module._resolveFilename; |
| Module._resolveFilename = (request, parentModule, isMain) => { |
| do { |
| if (request.startsWith('.') && parentModule.filename.endsWith('.ts')) { |
| // Required for browser (because it needs the actual correct file path and |
| // can't do any kind of file resolution). |
| if (request.endsWith('/index.js')) { |
| throw new Error( |
| "Avoid the name `index.js`; we don't have Node-style path resolution: " + request |
| ); |
| } |
| |
| // Import of Node addon modules are valid and should pass through. |
| if (request.endsWith('.node')) { |
| break; |
| } |
| |
| if (!request.endsWith('.js')) { |
| throw new Error('All relative imports must end in .js: ' + request); |
| } |
| |
| try { |
| const tsRequest = request.substring(0, request.length - '.js'.length) + '.ts'; |
| return resolveFilename.call(this, tsRequest, parentModule, isMain); |
| } catch (ex) { |
| // If the .ts file doesn't exist, try .js instead. |
| break; |
| } |
| } |
| } while (0); |
| |
| return resolveFilename.call(this, request, parentModule, isMain); |
| }; |
| |
| process.on('unhandledRejection', ex => { |
| throw ex; |
| }); |