@@ -122,12 +122,16 @@ function _hasFolderPackageJsonTypeModule(folder) {
122122 return _hasFolderPackageJsonTypeModule ( path . resolve ( folder , '..' ) ) ;
123123}
124124
125- function _hasPackageJsonTypeModule ( file ) {
126- // File must have a .js extension
127- const jsPath = file + '.js' ;
128- return fs . existsSync ( jsPath )
129- ? _hasFolderPackageJsonTypeModule ( path . resolve ( path . dirname ( jsPath ) ) )
130- : false ;
125+ function _runtimeSupportsTypeScript ( ) {
126+ const minimumNodeVersion = 24 ;
127+
128+ const version = process . versions ?. node ;
129+ if ( ! version ) {
130+ return false ;
131+ }
132+
133+ const major = parseInt ( version . split ( '.' ) [ 0 ] , 10 ) ;
134+ return ! Number . isNaN ( major ) && major >= minimumNodeVersion ;
131135}
132136
133137/**
@@ -146,29 +150,37 @@ async function _tryRequire(appRoot, moduleRoot, module) {
146150
147151 const lambdaStylePath = path . resolve ( appRoot , moduleRoot , module ) ;
148152
153+ const supportsTs = _runtimeSupportsTypeScript ( ) ;
154+
149155 // Extensionless files are loaded via require.
150156 const extensionless = _tryRequireFile ( lambdaStylePath ) ;
151157 if ( extensionless ) {
152158 return extensionless ;
153159 }
154160
155161 // If package.json type != module, .js files are loaded via require.
156- const pjHasModule = _hasPackageJsonTypeModule ( lambdaStylePath ) ;
162+ const pjHasModule = _hasFolderPackageJsonTypeModule (
163+ path . resolve ( path . dirname ( lambdaStylePath ) ) ,
164+ ) ;
157165 if ( ! pjHasModule ) {
158166 const loaded = _tryRequireFile ( lambdaStylePath , '.js' ) ;
159167 if ( loaded ) {
160168 return loaded ;
161169 }
162170 }
163171
164- // If still not loaded, try .js, .mjs, and .cjs in that order.
172+ // If still not loaded, try .js, .mjs, .cjs, .ts, .mts, and .cts in that order.
165173 // Files ending with .js are loaded as ES modules when the nearest parent package.json
166174 // file contains a top-level field "type" with a value of "module".
167175 // https://nodejs.org/api/packages.html#packages_type
168176 const loaded =
169177 ( pjHasModule && ( await _tryAwaitImport ( lambdaStylePath , '.js' ) ) ) ||
170178 ( await _tryAwaitImport ( lambdaStylePath , '.mjs' ) ) ||
171- _tryRequireFile ( lambdaStylePath , '.cjs' ) ;
179+ _tryRequireFile ( lambdaStylePath , '.cjs' ) ||
180+ ( supportsTs && ! pjHasModule && _tryRequireFile ( lambdaStylePath , '.ts' ) ) ||
181+ ( supportsTs && pjHasModule && ( await _tryAwaitImport ( lambdaStylePath , '.ts' ) ) ) ||
182+ ( supportsTs && ( await _tryAwaitImport ( lambdaStylePath , '.mts' ) ) ) ||
183+ ( supportsTs && _tryRequireFile ( lambdaStylePath , '.cts' ) ) ;
172184 if ( loaded ) {
173185 return loaded ;
174186 }
0 commit comments