Skip to content

Commit 3c77d2a

Browse files
author
Fatme
authored
Merge pull request #3906 from NativeScript/fatme/network-validator
chore: check network connectivity when `tns preview` command is executed
2 parents 7c9c635 + 25756d6 commit 3c77d2a

File tree

4 files changed

+39
-0
lines changed

4 files changed

+39
-0
lines changed

lib/bootstrap.ts

+2
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,5 @@ $injector.require("iOSDebuggerPortService", "./services/ios-debugger-port-servic
181181

182182
$injector.require("pacoteService", "./services/pacote-service");
183183
$injector.require("qrCodeTerminalService", "./services/qr-code-terminal-service");
184+
185+
$injector.require("networkConnectivityValidator", "./helpers/network-connectivity-validator");

lib/commands/preview.ts

+2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ export class PreviewCommand implements ICommand {
33

44
constructor(private $bundleValidatorHelper: IBundleValidatorHelper,
55
private $liveSyncService: ILiveSyncService,
6+
private $networkConnectivityValidator: INetworkConnectivityValidator,
67
private $projectData: IProjectData,
78
private $options: IOptions,
89
private $playgroundQrCodeGenerator: IPlaygroundQrCodeGenerator,
@@ -27,6 +28,7 @@ export class PreviewCommand implements ICommand {
2728
}
2829

2930
public async canExecute(args: string[]): Promise<boolean> {
31+
await this.$networkConnectivityValidator.validate();
3032
this.$bundleValidatorHelper.validate();
3133
return true;
3234
}

lib/declarations.d.ts

+4
Original file line numberDiff line numberDiff line change
@@ -865,4 +865,8 @@ interface IAssetsGenerationService {
865865
interface IRuntimeGradleVersions {
866866
gradleVersion?: string;
867867
gradleAndroidPluginVersion?: string;
868+
}
869+
870+
interface INetworkConnectivityValidator {
871+
validate(): Promise<void>;
868872
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import * as dns from "dns";
2+
3+
export class NetworkConnectivityValidator implements INetworkConnectivityValidator {
4+
private static DNS_LOOKUP_URL = "play.nativescript.org";
5+
private static NO_INTERNET_ERROR_CODE = "ENOTFOUND";
6+
private static NO_INTERNET_ERROR_MESSAGE = "No internet connection. Check your internet settings and try again.";
7+
8+
constructor(private $errors: IErrors,
9+
private $logger: ILogger) { }
10+
11+
public async validate(): Promise<void> {
12+
const isConnected = await this.isConnected();
13+
if (!isConnected) {
14+
this.$errors.failWithoutHelp(NetworkConnectivityValidator.NO_INTERNET_ERROR_MESSAGE);
15+
}
16+
}
17+
18+
private isConnected(): Promise<boolean> {
19+
return new Promise((resolve, reject) => {
20+
dns.lookup(NetworkConnectivityValidator.DNS_LOOKUP_URL, err => {
21+
this.$logger.trace(`Error from dns.lookup is ${err}.`);
22+
if (err && err.code === NetworkConnectivityValidator.NO_INTERNET_ERROR_CODE) {
23+
resolve(false);
24+
} else {
25+
resolve(true);
26+
}
27+
});
28+
});
29+
}
30+
}
31+
$injector.register("networkConnectivityValidator", NetworkConnectivityValidator);

0 commit comments

Comments
 (0)