File tree Expand file tree Collapse file tree 2 files changed +44
-5
lines changed Expand file tree Collapse file tree 2 files changed +44
-5
lines changed Original file line number Diff line number Diff line change 1
1
import { basename , dirname } from '@sentry/utils' ;
2
2
3
+ /** normalizes Windows paths */
4
+ function normalizePath ( path : string ) : string {
5
+ return path
6
+ . replace ( / ^ [ A - Z ] : / , '' ) // remove Windows-style prefix
7
+ . replace ( / \\ / g, '/' ) ; // replace all `\` instances with `/`
8
+ }
9
+
3
10
/** Gets the module from a filename */
4
11
export function getModule ( filename : string | undefined ) : string | undefined {
5
12
if ( ! filename ) {
6
13
return ;
7
14
}
8
15
16
+ const normalizedFilename = normalizePath ( filename ) ;
17
+
9
18
// We could use optional chaining here but webpack does like that mixed with require
10
- const base = ` ${
11
- ( require && require . main && require . main . filename && dirname ( require . main . filename ) ) || global . process . cwd ( )
12
- } /` ;
19
+ const base = normalizePath (
20
+ ` ${ ( require && require . main && require . main . filename && dirname ( require . main . filename ) ) || global . process . cwd ( ) } /` ,
21
+ ) ;
13
22
14
23
// It's specifically a module
15
- const file = basename ( filename , '.js' ) ;
24
+ const file = basename ( normalizedFilename , '.js' ) ;
16
25
17
- const path = dirname ( filename ) ;
26
+ const path = dirname ( normalizedFilename ) ;
18
27
let n = path . lastIndexOf ( '/node_modules/' ) ;
19
28
if ( n > - 1 ) {
20
29
// /node_modules/ is 14 chars
Original file line number Diff line number Diff line change
1
+ import { getModule } from '../src/module' ;
2
+
3
+ function withFilename ( fn : ( ) => void , filename : string ) {
4
+ const prevFilename = require . main ?. filename ;
5
+ if ( require . main ?. filename ) {
6
+ require . main . filename = filename ;
7
+ }
8
+
9
+ try {
10
+ fn ( ) ;
11
+ } finally {
12
+ if ( require . main && prevFilename ) {
13
+ require . main . filename = prevFilename ;
14
+ }
15
+ }
16
+ }
17
+
18
+ describe ( 'getModule' , ( ) => {
19
+ test ( 'Windows' , ( ) => {
20
+ withFilename ( ( ) => {
21
+ expect ( getModule ( 'C:\\Users\\users\\Tim\\Desktop\\node_modules\\module.js' ) ) . toEqual ( 'module' ) ;
22
+ } , 'C:\\Users\\Tim\\app.js' ) ;
23
+ } ) ;
24
+
25
+ test ( 'POSIX' , ( ) => {
26
+ withFilename ( ( ) => {
27
+ expect ( getModule ( '/Users/users/Tim/Desktop/node_modules/module.js' ) ) . toEqual ( 'module' ) ;
28
+ } , '/Users/Tim/app.js' ) ;
29
+ } ) ;
30
+ } ) ;
You can’t perform that action at this time.
0 commit comments