File

src/agent/v8/debugapi.ts

import consoleLogLevel = require('console-log-level');
import * as stackdriver from '../../types/stackdriver';
import {DebugAgentConfig} from '../config';
import {ScanStats} from '../io/scanner';
import {SourceMapper} from '../io/sourcemapper';
import * as utils from '../util/utils';

export interface DebugApi {
  set(
    breakpoint: stackdriver.Breakpoint,
    cb: (err: Error | null) => void
  ): void;
  clear(
    breakpoint: stackdriver.Breakpoint,
    cb: (err: Error | null) => void
  ): void;
  wait(
    breakpoint: stackdriver.Breakpoint,
    callback: (err?: Error) => void
  ): void;
  log(
    breakpoint: stackdriver.Breakpoint,
    print: (format: string, exps: string[]) => void,
    shouldStop: () => boolean
  ): void;
  disconnect(): void;
  numBreakpoints_(): number;
  numListeners_(): number;
}

interface DebugApiConstructor {
  new (
    logger: consoleLogLevel.Logger,
    config: DebugAgentConfig,
    jsFiles: ScanStats,
    sourcemapper: SourceMapper
  ): DebugApi;
}

let debugApiConstructor: DebugApiConstructor;

export function willUseInspector(nodeVersion?: string) {
  const version = nodeVersion != null ? nodeVersion : process.version;
  return utils.satisfies(version, '>=10');
}

if (willUseInspector()) {
  const inspectorapi = require('./inspector-debugapi');
  debugApiConstructor = inspectorapi.InspectorDebugApi;
} else {
  const v8debugapi = require('./legacy-debugapi');
  debugApiConstructor = v8debugapi.V8DebugApi;
}

export const MODULE_WRAP_PREFIX_LENGTH = require('module')
  .wrap('☃')
  .indexOf('☃');

let singleton: DebugApi;

export function create(
  logger: consoleLogLevel.Logger,
  config: DebugAgentConfig,
  jsFiles: ScanStats,
  sourcemapper: SourceMapper
): DebugApi {
  if (singleton && !config.forceNewAgent_) {
    return singleton;
  } else if (singleton) {
    singleton.disconnect();
  }

  singleton = new debugApiConstructor(logger, config, jsFiles, sourcemapper);
  return singleton;
}

result-matching ""

    No results matching ""