// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. import 'package:dwds/data/utils.dart'; /// A request to open DevTools. class DevToolsRequest { static const type = 'DevToolsRequest'; /// Identifies a given application, across tabs/windows. final String appId; /// Identifies a given instance of an application, unique per tab/window. final String instanceId; /// Identifies the context in which evaluations should occur. /// /// Defines execution context for the debug service that connects /// to chrome via the extension debugger. /// Can be `null` for local debug service, which gets the execution /// context from the Chrome runtime. final int? contextId; /// Belongs to the tab that requests the DevTools. /// /// Defines the tab being debugged for the debug service that connects /// to chrome via the extension debugger. /// Can be `null` for local debug service, which finds the tab with the /// correct `dartAppInstanceId` automatically. final String? tabUrl; /// Designates this as a request to send back the DevTools URI instead of /// opening DevTools in a new tab or window. /// /// Only available on requests coming from the Dart Debug Extension. Is `null` /// for local debug service. final bool? uriOnly; /// Identifies the client that DWDS is attaching to. /// /// This could be Cider, DevTools (as a standalone app), or DevTools (embedded /// in Chrome DevTools). final String? client; DevToolsRequest({ required this.appId, required this.instanceId, this.contextId, this.tabUrl, this.uriOnly, this.client, }); factory DevToolsRequest.fromJson(List jsonList) { final json = listToMap(jsonList, type: type); return DevToolsRequest( appId: json['appId'] as String, instanceId: json['instanceId'] as String, contextId: json['contextId'] as int?, tabUrl: json['tabUrl'] as String?, uriOnly: json['uriOnly'] as bool?, client: json['client'] as String?, ); } List toJson() { return [ type, 'appId', appId, 'instanceId', instanceId, if (contextId != null) ...['contextId', contextId], if (tabUrl != null) ...['tabUrl', tabUrl], if (uriOnly != null) ...['uriOnly', uriOnly], if (client != null) ...['client', client], ]; } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is DevToolsRequest && other.appId == appId && other.instanceId == instanceId && other.contextId == contextId && other.tabUrl == tabUrl && other.uriOnly == uriOnly && other.client == client; } @override int get hashCode => Object.hash(appId, instanceId, contextId, tabUrl, uriOnly, client); @override String toString() { return 'DevToolsRequest { ' 'appId: $appId, ' 'instanceId: $instanceId, ' 'contextId: $contextId, ' 'tabUrl: $tabUrl, ' 'uriOnly: $uriOnly, ' 'client: $client, ' '}'; } } /// A response to a [DevToolsRequest]. class DevToolsResponse { static const type = 'DevToolsResponse'; final bool success; final bool promptExtension; final String? error; DevToolsResponse({ required this.success, required this.promptExtension, this.error, }); factory DevToolsResponse.fromJson(List jsonList) { final json = listToMap(jsonList, type: type); return DevToolsResponse( success: json['success'] as bool, promptExtension: json['promptExtension'] as bool, error: json['error'] as String?, ); } List toJson() { return [ type, 'success', success, 'promptExtension', promptExtension, if (error != null) ...['error', error], ]; } @override bool operator ==(Object other) { if (identical(this, other)) return true; return other is DevToolsResponse && other.success == success && other.promptExtension == promptExtension && other.error == error; } @override int get hashCode => Object.hash(success, promptExtension, error); @override String toString() { return 'DevToolsResponse { ' 'success: $success, ' 'promptExtension: $promptExtension, ' 'error: $error }'; } }