in src/extension/simulate.ts [65:119]
public launchServer(fsPath: string, simulateOptions: CordovaSimulate.SimulateOptions, projectType: ProjectType): Promise<SimulationInfo> {
const uri = vscode.Uri.file(fsPath);
const workspaceFolder = <vscode.WorkspaceFolder>vscode.workspace.getWorkspaceFolder(uri);
simulateOptions.dir = workspaceFolder.uri.fsPath;
if (!simulateOptions.simulationpath) {
simulateOptions.simulationpath = path.join(workspaceFolder.uri.fsPath, ".vscode", "simulate");
}
return this.getPackage()
.then(() => {
if (this.isServerRunning()) {
/* close the server old instance */
return this.simulator.stopSimulation();
}
})
.then(() => {
let simulateTelemetryWrapper = new CordovaSimulateTelemetry();
simulateOptions.telemetry = simulateTelemetryWrapper;
this.simulator = new this.simulatePackage.Simulator(simulateOptions);
let platforms = CordovaProjectHelper.getInstalledPlatforms(workspaceFolder.uri.fsPath);
let platform = simulateOptions.platform;
let isPlatformMissing = platform && platforms.indexOf(platform) < 0;
if (isPlatformMissing) {
let command = "cordova";
if (projectType.isIonic) {
const isIonicCliVersionGte3 = CordovaProjectHelper.isIonicCliVersionGte3(workspaceFolder.uri.fsPath);
command = "ionic" + (isIonicCliVersionGte3 ? " cordova" : "");
}
throw new Error(localize("CouldntFindPlatformInProject", "Couldn't find platform {0} in project, please install it using '{1} platform add {2}'", platform, command, platform));
}
return this.simulator.startSimulation()
.then(() => {
if (!this.simulator.isRunning()) {
throw new Error(localize("ErrorStartingTheSimulation", "Error starting the simulation"));
}
this.simulationInfo = {
appHostUrl: this.simulator.appUrl(),
simHostUrl: this.simulator.simHostUrl(),
urlRoot: this.simulator.urlRoot(),
};
if ((projectType.ionicMajorVersion === 2 || projectType.ionicMajorVersion === 3)
&& platform && platform !== PlatformType.Browser
) {
this.simulationInfo.appHostUrl = `${this.simulationInfo.appHostUrl}?ionicplatform=${simulateOptions.platform}`;
}
return this.simulationInfo;
});
});
}