* @private
*/
export function registerTS(_loadTS: () => typeof TS) {
- loadTS = _loadTS
+ loadTS = () => {
+ try {
+ return _loadTS()
+ } catch (err: any) {
+ if (
+ typeof err.message === 'string' &&
+ err.message.includes('Cannot find module')
+ ) {
+ throw new Error(
+ 'Failed to load TypeScript, which is required for resolving imported types. ' +
+ 'Please make sure "typescript" is installed as a project dependency.'
+ )
+ } else {
+ throw new Error(
+ 'Failed to load TypeScript for resolving imported types.'
+ )
+ }
+ }
+ }
}
type FS = NonNullable<SFCScriptCompileOptions['fs']>
scope: TypeScope,
source: string
): TypeScope {
- const fs = resolveFS(ctx)
+ let fs: FS | undefined
+ try {
+ fs = resolveFS(ctx)
+ } catch (err: any) {
+ return ctx.error(err.message, node, scope)
+ }
if (!fs) {
return ctx.error(
`No fs option provided to \`compileScript\` in non-Node environment. ` +