microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.3.1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/extension/rn-extension.ts

153lines · modeblame

9cf5eef2leolee10 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
f1cad558Jimmy Thomson10 years ago3
d7df9dd4digeff10 years ago4import * as fs from "fs";
5
cc7a6803digeff10 years ago6// @ifdef DEBUG
d7df9dd4digeff10 years ago7try {
8fs.statSync(`${__filename}.map`); // We check if source maps are available
9/* tslint:disable:no-var-requires */
10require("source-map-support").install(); // If they are, we enable stack traces translation to typescript
11/* tslint:enable:no-var-requires */
12} catch (exceptions) {
13// If something goes wrong, we just ignore the errors
14}
cc7a6803digeff10 years ago15// @endif
d7df9dd4digeff10 years ago16
8db64d13digeff10 years ago17import * as Q from "q";
13ce3068Meena Kunnathur Balakrishnan10 years ago18import * as path from "path";
7b341316Jimmy Thomson10 years ago19import * as vscode from "vscode";
8db64d13digeff10 years ago20
21import {FileSystem} from "../common/node/fileSystem";
b0061ac6Meena Kunnathur Balakrishnan10 years ago22import {CommandPaletteHandler} from "./commandPaletteHandler";
a822ac85dlebu10 years ago23import {Packager} from "../common/packager";
18d8ad2adigeff10 years ago24import {EntryPointHandler, ProcessType} from "../common/entryPointHandler";
c2bf3c4fdigeff10 years ago25import {ErrorHelper} from "../common/error/errorHelper";
26import {InternalError} from "../common/error/internalError";
27import {InternalErrorCode} from "../common/error/internalErrorCode";
28import {Log} from "../common/log/log";
5bc682d4Alexander Sorokin9 years ago29import {LogHelper} from "../common/log/logHelper";
30import {SettingsHelper} from "./settingsHelper";
ffffa686Meena Kunnathur Balakrishnan10 years ago31import {PackagerStatusIndicator} from "./packagerStatusIndicator";
b0061ac6Meena Kunnathur Balakrishnan10 years ago32import {ReactNativeProjectHelper} from "../common/reactNativeProjectHelper";
9c9df666Meena Kunnathur Balakrishnan10 years ago33import {ReactDirManager} from "./reactDirManager";
6ab6f718Jimmy Thomson10 years ago34import {IntellisenseHelper} from "./intellisenseHelper";
9ac38e08Joshua Skelton10 years ago35import {Telemetry} from "../common/telemetry";
87323739dlebu10 years ago36import {TelemetryHelper} from "../common/telemetryHelper";
0502b7a8dlebu10 years ago37import {ExtensionServer} from "./extensionServer";
3837f9a0Jimmy Thomson9 years ago38import {DelayedOutputChannelLogger} from "./outputChannelLogger";
1c32fe84Patricio Beltran9 years ago39import {ExponentHelper} from "../common/exponent/exponentHelper";
9cf5eef2leolee10 years ago40
a822ac85dlebu10 years ago41/* all components use the same packager instance */
38edb09eAlexander Sorokin9 years ago42const projectRootPath = SettingsHelper.getReactNativeProjectRoot();
43const workspaceRootPath = vscode.workspace.rootPath;
44const globalPackager = new Packager(workspaceRootPath, projectRootPath);
ffffa686Meena Kunnathur Balakrishnan10 years ago45const packagerStatusIndicator = new PackagerStatusIndicator();
38edb09eAlexander Sorokin9 years ago46const globalExponentHelper = new ExponentHelper(workspaceRootPath, projectRootPath);
1c32fe84Patricio Beltran9 years ago47const commandPaletteHandler = new CommandPaletteHandler(projectRootPath, globalPackager, packagerStatusIndicator, globalExponentHelper);
a822ac85dlebu10 years ago48
3837f9a0Jimmy Thomson9 years ago49const outputChannelLogger = new DelayedOutputChannelLogger("React-Native");
18d8ad2adigeff10 years ago50const entryPointHandler = new EntryPointHandler(ProcessType.Extension, outputChannelLogger);
4f4e082ddigeff10 years ago51const reactNativeProjectHelper = new ReactNativeProjectHelper(projectRootPath);
10873e11digeff10 years ago52const fsUtil = new FileSystem();
8ba55f4cJimmy Thomson10 years ago53
710f8655digeff10 years ago54interface ISetupableDisposable extends vscode.Disposable {
55setup(): Q.Promise<any>;
56}
57
9cf5eef2leolee10 years ago58export function activate(context: vscode.ExtensionContext): void {
5bc682d4Alexander Sorokin9 years ago59configureLogLevel();
c2bf3c4fdigeff10 years ago60entryPointHandler.runApp("react-native", () => <string>require("../../package.json").version,
18d8ad2adigeff10 years ago61ErrorHelper.getInternalError(InternalErrorCode.ExtensionActivationFailed), projectRootPath, () => {
10873e11digeff10 years ago62return reactNativeProjectHelper.isReactNativeProject()
63.then(isRNProject => {
64if (isRNProject) {
9ac38e08Joshua Skelton10 years ago65let activateExtensionEvent = TelemetryHelper.createTelemetryEvent("activate");
66Telemetry.send(activateExtensionEvent);
67
10873e11digeff10 years ago68warnWhenReactNativeVersionIsNotSupported();
c2bf3c4fdigeff10 years ago69entryPointHandler.runFunction("debugger.setupLauncherStub",
70ErrorHelper.getInternalError(InternalErrorCode.DebuggerStubLauncherFailed), () =>
e45838cbVladimir Kotikov9 years ago71setupAndDispose(new ReactDirManager(), context)
710f8655digeff10 years ago72.then(() =>
1c32fe84Patricio Beltran9 years ago73setupAndDispose(new ExtensionServer(projectRootPath, globalPackager, packagerStatusIndicator, globalExponentHelper), context))
710f8655digeff10 years ago74.then(() => {}));
c2bf3c4fdigeff10 years ago75entryPointHandler.runFunction("intelliSense.setup",
76ErrorHelper.getInternalError(InternalErrorCode.IntellisenseSetupFailed), () =>
ef24cc06digeff10 years ago77IntellisenseHelper.setupReactNativeIntellisense());
10873e11digeff10 years ago78}
c2bf3c4fdigeff10 years ago79entryPointHandler.runFunction("debugger.setupNodeDebuggerLocation",
f6b41bbfAlexander Sorokin9 years ago80ErrorHelper.getInternalError(InternalErrorCode.NodeDebuggerConfigurationFailed), () => {
81configureNodeDebuggerLocation();
82});
10873e11digeff10 years ago83registerReactNativeCommands(context);
84});
85});
13ce3068Meena Kunnathur Balakrishnan10 years ago86}
87
568fc5bedaserge9 years ago88export function deactivate(): Q.Promise<void> {
89return Q.Promise<void>(function (resolve) {
90// Kill any packager processes that we spawned
91entryPointHandler.runFunction("extension.deactivate",
92ErrorHelper.getInternalError(InternalErrorCode.FailedToStopPackagerOnExit),
93() => {
94commandPaletteHandler.stopPackager().done(() => {
95// Tell vscode that we are done with deactivation
96resolve(void 0);
97});
98}, /*errorsAreFatal*/ true);
99});
10873e11digeff10 years ago100}
101
5bc682d4Alexander Sorokin9 years ago102function configureLogLevel(): void {
103LogHelper.logLevel = SettingsHelper.getLogLevel();
104}
105
10873e11digeff10 years ago106function configureNodeDebuggerLocation(): Q.Promise<void> {
e45838cbVladimir Kotikov9 years ago107const nodeDebugExtension = vscode.extensions.getExtension("ms-vscode.node-debug2");
8db64d13digeff10 years ago108if (!nodeDebugExtension) {
2166bdabdigeff10 years ago109return Q.reject<void>(ErrorHelper.getInternalError(InternalErrorCode.CouldNotFindLocationOfNodeDebugger));
8db64d13digeff10 years ago110}
111const nodeDebugPath = nodeDebugExtension.extensionPath;
10873e11digeff10 years ago112return fsUtil.writeFile(path.resolve(__dirname, "../", "debugger", "nodeDebugLocation.json"), JSON.stringify({ nodeDebugPath }));
113}
4a25dae0digeff10 years ago114
710f8655digeff10 years ago115function setupAndDispose<T extends ISetupableDisposable>(setuptableDisposable: T, context: vscode.ExtensionContext): Q.Promise<T> {
116return setuptableDisposable.setup()
eb113a1fdlebu10 years ago117.then(() => {
710f8655digeff10 years ago118context.subscriptions.push(setuptableDisposable);
119return setuptableDisposable;
eb113a1fdlebu10 years ago120});
13ce3068Meena Kunnathur Balakrishnan10 years ago121}
122
10873e11digeff10 years ago123function warnWhenReactNativeVersionIsNotSupported(): void {
124return reactNativeProjectHelper.validateReactNativeVersion().done(() => { }, reason => {
b3aec86adigeff10 years ago125TelemetryHelper.sendSimpleEvent("unsupportedRNVersion", { rnVersion: reason });
e44f7ea3Meena Kunnathur Balakrishnan10 years ago126const shortMessage = `React Native Tools need React Native version 0.19.0 or later to be installed in <PROJECT_ROOT>/node_modules/`;
10873e11digeff10 years ago127const longMessage = `${shortMessage}: ${reason}`;
128vscode.window.showWarningMessage(shortMessage);
c2bf3c4fdigeff10 years ago129Log.logMessage(longMessage);
10873e11digeff10 years ago130});
131}
132
133function registerReactNativeCommands(context: vscode.ExtensionContext): void {
134// Register React Native commands
c2bf3c4fdigeff10 years ago135registerVSCodeCommand(context, "runAndroid", ErrorHelper.getInternalError(InternalErrorCode.FailedToRunOnAndroid), () => commandPaletteHandler.runAndroid());
136registerVSCodeCommand(context, "runIos", ErrorHelper.getInternalError(InternalErrorCode.FailedToRunOnIos), () => commandPaletteHandler.runIos());
137registerVSCodeCommand(context, "startPackager", ErrorHelper.getInternalError(InternalErrorCode.FailedToStartPackager), () => commandPaletteHandler.startPackager());
1c32fe84Patricio Beltran9 years ago138registerVSCodeCommand(context, "startExponentPackager", ErrorHelper.getInternalError(InternalErrorCode.FailedToStartExponentPackager), () => commandPaletteHandler.startExponentPackager());
c2bf3c4fdigeff10 years ago139registerVSCodeCommand(context, "stopPackager", ErrorHelper.getInternalError(InternalErrorCode.FailedToStopPackager), () => commandPaletteHandler.stopPackager());
f2a58eefBret Johnson9 years ago140registerVSCodeCommand(context, "restartPackager", ErrorHelper.getInternalError(InternalErrorCode.FailedToRestartPackager), () => commandPaletteHandler.restartPackager());
7893fb7eJimmy Thomson9 years ago141registerVSCodeCommand(context, "publishToExpHost", ErrorHelper.getInternalError(InternalErrorCode.FailedToPublishToExpHost), () => commandPaletteHandler.publishToExpHost());
10873e11digeff10 years ago142}
143
144function registerVSCodeCommand(
145context: vscode.ExtensionContext, commandName: string,
c2bf3c4fdigeff10 years ago146error: InternalError, commandHandler: () => Q.Promise<void>): void {
10873e11digeff10 years ago147context.subscriptions.push(vscode.commands.registerCommand(
148`reactNative.${commandName}`,
149() =>
47958817digeff10 years ago150entryPointHandler.runFunction(
c2bf3c4fdigeff10 years ago151`commandPalette.${commandName}`, error,
ef24cc06digeff10 years ago152commandHandler)));
c9b4fa6cMeena Kunnathur Balakrishnan10 years ago153}