async resolveDebugConfiguration()

in src/extension.ts [57:112]


    async resolveDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken): Promise<vscode.DebugConfiguration> {
        // if launch.json is missing or empty
        if (!config.type && !config.request && !config.name) {
            // Return null so it will create a launch.json and fall back on provideDebugConfigurations - better to point the user towards the config
            // than try to work automagically.
            return null;
        }

        if (msedgeIsOnMachine() || config['version'] || config['runtimeExecutable']) {
            config.type = 'msedge';
        }

        if (config.type === 'edge' && !isEdgeDebuggingSupported()) {
            const errorMessage = localize('edge.debug.error.versionNotSupported', 'Your version of Microsoft Edge does not support debugging via the Edge DevTools Protocol. You can read more about supported versions here (https://aka.ms/edp-docs).');
            // since we're not passing any user options, we want to return an undefined debug configuration
            return <Thenable<undefined>>vscode.window.showErrorMessage(errorMessage);
        }

        if (config.request === 'attach') {
            const nullLogger = new Core.NullLogger();
            const nullTelemetryReporter = new Core.telemetry.NullTelemetryReporter();

            const discovery = new Core.chromeTargetDiscoveryStrategy.ChromeTargetDiscovery(nullLogger, nullTelemetryReporter);

            let targets;
            try {
                targets = await discovery.getAllTargets(config.address || '127.0.0.1', config.port, config.targetTypes === undefined ? defaultTargetFilter : getTargetFilter(config.targetTypes), config.url || config.urlFilter);
            } catch (e) {
                // Target not running?
            }

            if (targets && targets.length > 1) {
                const selectedTarget = await pickTarget(targets);
                if (!selectedTarget) {
                    // Quickpick canceled, bail
                    return null;
                }

                config.websocketUrl = selectedTarget.websocketDebuggerUrl;
            }

            const protocolDetection = new ProtocolDetection(nullLogger);

            await protocolDetection.hitVersionEndpoint(config.address || '127.0.0.1', config.port, EdgeConfigurationProvider.ATTACH_TIMEOUT)
                .then((detectedBrowserProtocol) => {
                    if (protocolDetection.extractBrowserProtocol(detectedBrowserProtocol).indexOf('Chrome') > -1) {
                        config.type = 'msedge';
                    }
                })
                .catch(async e => {
                    Promise.reject(errors.getNotExistErrorResponse(String(EdgeConfigurationProvider.ATTACH_TIMEOUT), e.message));
                });
        }

        return config;
    }