├── bin ├── extensions │ ├── extension.dart │ └── file_extension.dart ├── controller │ ├── controller.dart │ └── swagger_reader.dart ├── utils │ ├── utils.dart │ ├── file_content_builder.dart │ ├── file.dart │ └── argument.dart └── generate_swagger_endpoint.dart ├── .gitignore ├── CHANGELOG.md ├── pubspec.yaml ├── analysis_options.yaml ├── README.md ├── example └── README.md ├── LICENSE └── pubspec.lock /bin/extensions/extension.dart: -------------------------------------------------------------------------------- 1 | export 'file_extension.dart'; 2 | -------------------------------------------------------------------------------- /bin/controller/controller.dart: -------------------------------------------------------------------------------- 1 | export 'swagger_reader.dart'; 2 | -------------------------------------------------------------------------------- /bin/utils/utils.dart: -------------------------------------------------------------------------------- 1 | export 'argument.dart'; 2 | export 'file.dart'; 3 | export 'file_content_builder.dart'; 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # https://dart.dev/guides/libraries/private-files 2 | # Created by `dart pub` 3 | .dart_tool/ 4 | *swagger.json -------------------------------------------------------------------------------- /bin/utils/file_content_builder.dart: -------------------------------------------------------------------------------- 1 | String buildReadOnlyClass(String className, {String? content}) { 2 | return '''class $className { 3 | $className._(); 4 | 5 | $content 6 | } 7 | '''; 8 | } 9 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.2 2 | 3 | - Improved pub points 4 | 5 | ## 1.0.1 6 | 7 | - Restructure the structure 8 | - Improve the pub points 9 | 10 | ## 1.0.0 11 | 12 | - Initial version of the generator. 13 | -------------------------------------------------------------------------------- /bin/extensions/file_extension.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | extension FileExtension on FileSystemEntity { 4 | String? get name { 5 | return path.split('/').last; 6 | } 7 | 8 | String? get fileName { 9 | return path.split('/').last.split('.').first; 10 | } 11 | 12 | String? get ext { 13 | return path.split('/').last.split('.').last; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /bin/utils/file.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import '../extensions/extension.dart' show FileExtension; 4 | 5 | File readJSONFile(String path) { 6 | if (path.endsWith('.json')) { 7 | return File(path); 8 | } 9 | return Directory(path).listSync().toList().whereType().firstWhere( 10 | (File entity) => entity.name != null && entity.name!.endsWith('.json'), 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: generate_swagger_endpoint 2 | owner: suica.dev 3 | description: This command-line tool extracts endpoints from a swagger.json file. It generates a class containing the endpoints as static properties. 4 | repository: https://github.com/SuicaLondon/generate_swagger_endpoint 5 | homepage: https://pub.dev/packages/generate_swagger_endpoint 6 | version: 1.0.2 7 | # repository: https://github.com/my_org/my_repo 8 | 9 | environment: 10 | sdk: ">=3.0.0 <4.0.0" 11 | 12 | dependencies: 13 | # path: ^1.8.0 14 | intl: ^0.19.0 15 | 16 | dev_dependencies: 17 | lints: ^2.0.0 18 | test: ^1.21.0 19 | -------------------------------------------------------------------------------- /bin/utils/argument.dart: -------------------------------------------------------------------------------- 1 | (String inputPath, String outputPath) readArgument(List arguments) { 2 | String inputPath = ''; 3 | String outputPath = ''; 4 | for (int i = 0; i < arguments.length; i++) { 5 | final String arg = arguments[i]; 6 | if (arg == '--input' || arg == '-i') { 7 | assert(i < arguments.length - 1, 'Input path is required'); 8 | i++; 9 | inputPath = arguments[i]; 10 | } 11 | if (arg == '--output' || arg == '-o') { 12 | assert(i < arguments.length - 1, 'Output path is required'); 13 | i++; 14 | outputPath = arguments[i]; 15 | } 16 | } 17 | 18 | return (inputPath, outputPath); 19 | } 20 | -------------------------------------------------------------------------------- /bin/generate_swagger_endpoint.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import './utils/utils.dart'; 5 | import './controller/controller.dart'; 6 | 7 | void main(List args) async { 8 | final (String inputPath, String outputPath) = readArgument(args); 9 | final File inputFile = readJSONFile(inputPath); 10 | 11 | assert(inputFile.existsSync(), 'You should specify input swagger file'); 12 | final Map swaggerJson = 13 | jsonDecode(inputFile.readAsStringSync()); 14 | 15 | SwaggerReader swaggerReader = SwaggerReader(swaggerJson: swaggerJson); 16 | List endpoints = swaggerReader.readEndpoints(); 17 | final outputString = 18 | buildReadOnlyClass('Endpoints', content: endpoints.join('\n\t')); 19 | 20 | if (!Directory(outputPath).existsSync()) { 21 | Directory(outputPath).createSync(); 22 | } 23 | (outputPath.endsWith('.json') 24 | ? File(outputPath) 25 | : File('$outputPath/endpoints.dart')) 26 | .writeAsStringSync(outputString); 27 | } 28 | -------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the static analysis results for your project (errors, 2 | # warnings, and lints). 3 | # 4 | # This enables the 'recommended' set of lints from `package:lints`. 5 | # This set helps identify many issues that may lead to problems when running 6 | # or consuming Dart code, and enforces writing Dart using a single, idiomatic 7 | # style and format. 8 | # 9 | # If you want a smaller set of lints you can change this to specify 10 | # 'package:lints/core.yaml'. These are just the most critical lints 11 | # (the recommended set includes the core lints). 12 | # The core lints are also what is used by pub.dev for scoring packages. 13 | 14 | include: package:lints/recommended.yaml 15 | 16 | # Uncomment the following section to specify additional rules. 17 | 18 | # linter: 19 | # rules: 20 | # - camel_case_types 21 | 22 | # analyzer: 23 | # exclude: 24 | # - path/to/excluded/files/** 25 | 26 | # For more information about the core and recommended set of lints, see 27 | # https://dart.dev/go/core-lints 28 | 29 | # For additional information about configuring this file, see 30 | # https://dart.dev/guides/language/analysis-options 31 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Generate Swagger Endpoints 2 | 3 | If you are using **Flutter** with **Swagger**, you may be annoyed that no library allows you to build models and endpoints flexibly. For example, a popular library called [swagger_dart_code_generator](https://pub.dev/packages/swagger_dart_code_generator) includes most functionality, but it is not flexible at all. It strictly binds the [Chopper](https://pub.dev/packages/chopper), if you don't want to use another client library like [Dio](https://pub.dev/packages/dio), you can only generate data models without any endpoint. That is a library I built for my freelance projects and company projects to quickly solve these issues of [swagger_dart_code_generator](https://pub.dev/packages/swagger_dart_code_generator). I saw my friend also face this issue on his company's new project. ~~So he should treat me a Big Mac now~~ 4 | 5 | This project is still very simple and I am busy on another thing right now, please leave your feedback on the issues or the requirements on the issues. 6 | 7 | ## Install 8 | 9 | ```Bash 10 | dart pub global activate generate_swagger_endpoint 11 | ``` 12 | 13 | ### How to use 14 | 15 | ```Bash 16 | dart pub global run generate_swagger_endpoint --input ./lib/api/swagger -output ./lib/api/endpoints/ 17 | 18 | dart pub global run generate_swagger_endpoint --input ./lib/api/swagger -output ./lib/api/endpoints/ 19 | ``` 20 | -------------------------------------------------------------------------------- /example/README.md: -------------------------------------------------------------------------------- 1 | # Generate Swagger Endpoints 2 | 3 | If you are using **Flutter** with **Swagger**, you may be annoyed that no library allows you to build models and endpoints flexibly. For example, a popular library called [swagger_dart_code_generator](https://pub.dev/packages/swagger_dart_code_generator) includes most functionality, but it is not flexible at all. It strictly binds the [Chopper](https://pub.dev/packages/chopper), if you don't want to use another client library like [Dio](https://pub.dev/packages/dio), you can only generate data models without any endpoint. That is a library I built for my freelance projects and company projects to quickly solve these issues of [swagger_dart_code_generator](https://pub.dev/packages/swagger_dart_code_generator). I saw my friend also face this issue on his company's new project. ~~So he should treat me a Big Mac now~~ 4 | 5 | This project is still very simple and I am busy on another thing right now, please leave your feedback on the issues or the requirements on the issues. 6 | 7 | ## Install 8 | 9 | ```Bash 10 | dart pub global activate generate_swagger_endpoint 11 | ``` 12 | 13 | ### How to use 14 | 15 | ```Bash 16 | dart pub global run generate_swagger_endpoint --input ./lib/api/swagger -output ./lib/api/endpoints/ 17 | 18 | dart pub global run generate_swagger_endpoint --input ./lib/api/swagger -output ./lib/api/endpoints/ 19 | ``` 20 | -------------------------------------------------------------------------------- /bin/controller/swagger_reader.dart: -------------------------------------------------------------------------------- 1 | import 'package:intl/intl.dart'; 2 | 3 | class SwaggerReader { 4 | Map swaggerJson; 5 | SwaggerReader({required this.swaggerJson}) 6 | : assert(swaggerJson['paths'] != null, 7 | 'Please input a valid swagger json file'); 8 | 9 | List readEndpoints() { 10 | assert( 11 | swaggerJson['paths'] != null, 'Please input a valid swagger json file'); 12 | final Map pathMap = swaggerJson['paths']; 13 | final List endpoints = []; 14 | pathMap.forEach((String url, value) { 15 | final Map urlValue = value; 16 | for (final String method in urlValue.keys) { 17 | final String propertyName = method.toLowerCase() + 18 | url.split('/').map((String e) { 19 | String folderName = e; 20 | if (folderName.contains('_')) { 21 | folderName = 22 | folderName.split('_').map(toBeginningOfSentenceCase).join(); 23 | } 24 | if (!RegExp(r'^[A-Za-z0-9_]+$').hasMatch(folderName)) { 25 | return ''; 26 | } 27 | return toBeginningOfSentenceCase(folderName); 28 | }).join(); 29 | endpoints.add("static const String $propertyName = '$url';"); 30 | } 31 | }); 32 | 33 | return endpoints; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2024 SUICA 2 | 3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 4 | 5 | 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 6 | 7 | 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 8 | 9 | 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. 10 | 11 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 12 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | _fe_analyzer_shared: 5 | dependency: transitive 6 | description: 7 | name: _fe_analyzer_shared 8 | sha256: ae92f5d747aee634b87f89d9946000c2de774be1d6ac3e58268224348cd0101a 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "61.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: ea3d8652bda62982addfd92fdc2d0214e5f82e43325104990d4f4c4a2a313562 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.13.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.2" 28 | async: 29 | dependency: transitive 30 | description: 31 | name: async 32 | sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "2.11.0" 36 | boolean_selector: 37 | dependency: transitive 38 | description: 39 | name: boolean_selector 40 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "2.1.1" 44 | clock: 45 | dependency: transitive 46 | description: 47 | name: clock 48 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.1.1" 52 | collection: 53 | dependency: transitive 54 | description: 55 | name: collection 56 | sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.18.0" 60 | convert: 61 | dependency: transitive 62 | description: 63 | name: convert 64 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "3.1.1" 68 | coverage: 69 | dependency: transitive 70 | description: 71 | name: coverage 72 | sha256: "595a29b55ce82d53398e1bcc2cba525d7bd7c59faeb2d2540e9d42c390cfeeeb" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "1.6.4" 76 | crypto: 77 | dependency: transitive 78 | description: 79 | name: crypto 80 | sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "3.0.3" 84 | file: 85 | dependency: transitive 86 | description: 87 | name: file 88 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "6.1.4" 92 | frontend_server_client: 93 | dependency: transitive 94 | description: 95 | name: frontend_server_client 96 | sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "3.2.0" 100 | glob: 101 | dependency: transitive 102 | description: 103 | name: glob 104 | sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "2.1.2" 108 | http_multi_server: 109 | dependency: transitive 110 | description: 111 | name: http_multi_server 112 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "3.2.1" 116 | http_parser: 117 | dependency: transitive 118 | description: 119 | name: http_parser 120 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "4.0.2" 124 | intl: 125 | dependency: "direct main" 126 | description: 127 | name: intl 128 | sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "0.19.0" 132 | io: 133 | dependency: transitive 134 | description: 135 | name: io 136 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "1.0.4" 140 | js: 141 | dependency: transitive 142 | description: 143 | name: js 144 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "0.6.7" 148 | lints: 149 | dependency: "direct dev" 150 | description: 151 | name: lints 152 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "2.0.1" 156 | logging: 157 | dependency: transitive 158 | description: 159 | name: logging 160 | sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "1.2.0" 164 | matcher: 165 | dependency: transitive 166 | description: 167 | name: matcher 168 | sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "0.12.16" 172 | meta: 173 | dependency: transitive 174 | description: 175 | name: meta 176 | sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "1.15.0" 180 | mime: 181 | dependency: transitive 182 | description: 183 | name: mime 184 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "1.0.4" 188 | node_preamble: 189 | dependency: transitive 190 | description: 191 | name: node_preamble 192 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "2.0.2" 196 | package_config: 197 | dependency: transitive 198 | description: 199 | name: package_config 200 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "2.1.0" 204 | path: 205 | dependency: transitive 206 | description: 207 | name: path 208 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "1.8.3" 212 | pool: 213 | dependency: transitive 214 | description: 215 | name: pool 216 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "1.5.1" 220 | pub_semver: 221 | dependency: transitive 222 | description: 223 | name: pub_semver 224 | sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "2.1.4" 228 | shelf: 229 | dependency: transitive 230 | description: 231 | name: shelf 232 | sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "1.4.1" 236 | shelf_packages_handler: 237 | dependency: transitive 238 | description: 239 | name: shelf_packages_handler 240 | sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "3.0.2" 244 | shelf_static: 245 | dependency: transitive 246 | description: 247 | name: shelf_static 248 | sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "1.1.2" 252 | shelf_web_socket: 253 | dependency: transitive 254 | description: 255 | name: shelf_web_socket 256 | sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "1.0.4" 260 | source_map_stack_trace: 261 | dependency: transitive 262 | description: 263 | name: source_map_stack_trace 264 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "2.1.1" 268 | source_maps: 269 | dependency: transitive 270 | description: 271 | name: source_maps 272 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "0.10.12" 276 | source_span: 277 | dependency: transitive 278 | description: 279 | name: source_span 280 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "1.10.0" 284 | stack_trace: 285 | dependency: transitive 286 | description: 287 | name: stack_trace 288 | sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b" 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "1.11.1" 292 | stream_channel: 293 | dependency: transitive 294 | description: 295 | name: stream_channel 296 | sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "2.1.2" 300 | string_scanner: 301 | dependency: transitive 302 | description: 303 | name: string_scanner 304 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "1.2.0" 308 | term_glyph: 309 | dependency: transitive 310 | description: 311 | name: term_glyph 312 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "1.2.1" 316 | test: 317 | dependency: "direct dev" 318 | description: 319 | name: test 320 | sha256: "13b41f318e2a5751c3169137103b60c584297353d4b1761b66029bae6411fe46" 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "1.24.3" 324 | test_api: 325 | dependency: transitive 326 | description: 327 | name: test_api 328 | sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8" 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "0.6.0" 332 | test_core: 333 | dependency: transitive 334 | description: 335 | name: test_core 336 | sha256: "99806e9e6d95c7b059b7a0fc08f07fc53fabe54a829497f0d9676299f1e8637e" 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "0.5.3" 340 | typed_data: 341 | dependency: transitive 342 | description: 343 | name: typed_data 344 | sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "1.3.2" 348 | vm_service: 349 | dependency: transitive 350 | description: 351 | name: vm_service 352 | sha256: c538be99af830f478718b51630ec1b6bee5e74e52c8a802d328d9e71d35d2583 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "11.10.0" 356 | watcher: 357 | dependency: transitive 358 | description: 359 | name: watcher 360 | sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "1.0.2" 364 | web_socket_channel: 365 | dependency: transitive 366 | description: 367 | name: web_socket_channel 368 | sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "2.4.0" 372 | webkit_inspection_protocol: 373 | dependency: transitive 374 | description: 375 | name: webkit_inspection_protocol 376 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "1.2.0" 380 | yaml: 381 | dependency: transitive 382 | description: 383 | name: yaml 384 | sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "3.1.2" 388 | sdks: 389 | dart: ">=3.0.0 <4.0.0" 390 | --------------------------------------------------------------------------------