├── backends ├── dart_conduit │ ├── config.yaml │ ├── config.src.yaml │ ├── .gitignore │ ├── run.sh │ ├── lib │ │ ├── dart_conduit.dart │ │ └── channel.dart │ ├── README.md │ ├── pubspec.yaml │ ├── bin │ │ └── main.dart │ ├── analysis_options.yaml │ └── pubspec.lock ├── node_express │ ├── .gitignore │ ├── run.sh │ ├── README.md │ ├── package.json │ ├── index.js │ └── package-lock.json ├── py_flask │ ├── .gitignore │ ├── requirements.txt │ ├── run.sh │ ├── serve.py │ ├── README.md │ └── main.py ├── dart_shelf │ ├── CHANGELOG.md │ ├── run.sh │ ├── .dockerignore │ ├── .gitignore │ ├── README.md │ ├── pubspec.yaml │ ├── Dockerfile │ ├── test │ │ └── server_test.dart │ ├── analysis_options.yaml │ ├── bin │ │ └── server.dart │ └── pubspec.lock ├── dart_spry │ ├── CHANGELOG.md │ ├── .gitignore │ ├── run.sh │ ├── README.md │ ├── pubspec.yaml │ ├── bin │ │ └── dart_spry.dart │ ├── analysis_options.yaml │ └── pubspec.lock ├── dart_minerva │ ├── .gitignore │ ├── appsetting.json │ ├── .dockerignore │ ├── lib │ │ ├── main.dart │ │ └── builders │ │ │ ├── loggers_builder.dart │ │ │ ├── middlewares_builder.dart │ │ │ ├── setting_builder.dart │ │ │ └── endpoints_builder.dart │ ├── README.md │ ├── run.sh │ ├── pubspec.yaml │ ├── Dockerfile │ ├── analysis_options.yaml │ └── pubspec.lock ├── dart_dia │ ├── run.sh │ ├── .dockerignore │ ├── .gitignore │ ├── README.md │ ├── pubspec.yaml │ ├── Dockerfile │ ├── analysis_options.yaml │ ├── bin │ │ └── server.dart │ └── pubspec.lock ├── go_fiber │ ├── run.sh │ ├── .gitignore │ ├── go.mod │ ├── main.go │ └── go.sum └── dart_frog_backend │ ├── analysis_options.yaml │ ├── run.sh │ ├── .gitignore │ ├── README.md │ ├── routes │ ├── index.dart │ ├── echo │ │ └── index.dart │ ├── file_upload │ │ └── index.dart │ └── json_obj │ │ └── index.dart │ ├── pubspec.yaml │ └── test │ └── routes │ └── index_test.dart ├── .gitignore ├── benchmark ├── CHANGELOG.md ├── .gitignore ├── README.md ├── pubspec.yaml ├── analysis_options.yaml ├── bin │ └── benchmark.dart ├── lib │ └── benchmark.dart └── pubspec.lock ├── scripts ├── requirements.txt ├── generate_perf_report.py ├── k6_load_testing.js ├── generate_load_testing_report.py ├── generate_perf_graphs.py └── generate_load_testing_graphs.py ├── static ├── performance │ ├── async.jpeg │ ├── json.jpeg │ ├── sync.jpeg │ └── multipart.jpeg └── load_testing │ ├── dart_dia.jpeg │ ├── dart_spry.jpeg │ ├── go_fiber.jpeg │ ├── py_flask.jpeg │ ├── dart_conduit.jpeg │ ├── dart_minerva.jpeg │ ├── dart_shelf.jpeg │ ├── node_express.jpeg │ └── dart_frog_backend.jpeg ├── Dockerfile ├── .github └── workflows │ ├── generate_perf.yaml │ └── generate_load_test.yaml ├── LICENSE └── README.md /backends/dart_conduit/config.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backends/dart_conduit/config.src.yaml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | graphs/ 3 | results/ -------------------------------------------------------------------------------- /backends/node_express/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /backends/py_flask/.gitignore: -------------------------------------------------------------------------------- 1 | venv/ 2 | __pycache__/ -------------------------------------------------------------------------------- /benchmark/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 2 | 3 | - Initial version. 4 | -------------------------------------------------------------------------------- /backends/py_flask/requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==2.2.3 2 | fastwsgi==0.0.9 -------------------------------------------------------------------------------- /backends/dart_shelf/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 2 | 3 | - Initial version. 4 | -------------------------------------------------------------------------------- /backends/dart_spry/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 1.0.0 2 | 3 | - Initial version. 4 | -------------------------------------------------------------------------------- /scripts/requirements.txt: -------------------------------------------------------------------------------- 1 | plotly==5.13.1 2 | kaleido==0.2.1 3 | python-dateutil==2.8.2 4 | pandas==1.5.3 -------------------------------------------------------------------------------- /backends/dart_minerva/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /.dart_tool 3 | .packages 4 | test/test_app_setting.g.dart 5 | -------------------------------------------------------------------------------- /static/performance/async.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/performance/async.jpeg -------------------------------------------------------------------------------- /static/performance/json.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/performance/json.jpeg -------------------------------------------------------------------------------- /static/performance/sync.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/performance/sync.jpeg -------------------------------------------------------------------------------- /backends/dart_spry/.gitignore: -------------------------------------------------------------------------------- 1 | # https://dart.dev/guides/libraries/private-files 2 | # Created by `dart pub` 3 | .dart_tool/ 4 | -------------------------------------------------------------------------------- /static/load_testing/dart_dia.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/dart_dia.jpeg -------------------------------------------------------------------------------- /static/load_testing/dart_spry.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/dart_spry.jpeg -------------------------------------------------------------------------------- /static/load_testing/go_fiber.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/go_fiber.jpeg -------------------------------------------------------------------------------- /static/load_testing/py_flask.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/py_flask.jpeg -------------------------------------------------------------------------------- /static/performance/multipart.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/performance/multipart.jpeg -------------------------------------------------------------------------------- /backends/dart_spry/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | dart pub get 5 | 6 | echo 'Running server...' 7 | dart run -------------------------------------------------------------------------------- /static/load_testing/dart_conduit.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/dart_conduit.jpeg -------------------------------------------------------------------------------- /static/load_testing/dart_minerva.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/dart_minerva.jpeg -------------------------------------------------------------------------------- /static/load_testing/dart_shelf.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/dart_shelf.jpeg -------------------------------------------------------------------------------- /static/load_testing/node_express.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/node_express.jpeg -------------------------------------------------------------------------------- /backends/node_express/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | npm install 5 | 6 | echo 'Running server...' 7 | npm start -------------------------------------------------------------------------------- /static/load_testing/dart_frog_backend.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/SirusCodes/backend_benchmark/HEAD/static/load_testing/dart_frog_backend.jpeg -------------------------------------------------------------------------------- /backends/dart_dia/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | dart pub get 5 | 6 | echo 'Running server...' 7 | dart bin/server.dart -------------------------------------------------------------------------------- /backends/dart_shelf/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | dart pub get 5 | 6 | echo 'Running server...' 7 | dart bin/server.dart -------------------------------------------------------------------------------- /backends/dart_spry/README.md: -------------------------------------------------------------------------------- 1 | A sample command-line application with an entrypoint in `bin/`, library code 2 | in `lib/`, and example unit test in `test/`. 3 | -------------------------------------------------------------------------------- /backends/dart_minerva/appsetting.json: -------------------------------------------------------------------------------- 1 | {"debug":{"compile-type":"JIT","host":"127.0.0.1","port":8080},"release":{"compile-type":"AOT","host":"0.0.0.0","port":8080}} -------------------------------------------------------------------------------- /backends/py_flask/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | pip install -r requirements.txt 5 | 6 | echo 'Running server...' 7 | python serve.py -------------------------------------------------------------------------------- /backends/dart_dia/.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | Dockerfile 3 | build/ 4 | .dart_tool/ 5 | .git/ 6 | .github/ 7 | .gitignore 8 | .idea/ 9 | .packages 10 | -------------------------------------------------------------------------------- /backends/dart_dia/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub. 2 | .dart_tool/ 3 | .packages 4 | 5 | # Conventional directory for build output. 6 | build/ 7 | -------------------------------------------------------------------------------- /backends/dart_shelf/.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | Dockerfile 3 | build/ 4 | .dart_tool/ 5 | .git/ 6 | .github/ 7 | .gitignore 8 | .idea/ 9 | .packages 10 | -------------------------------------------------------------------------------- /backends/dart_shelf/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub. 2 | .dart_tool/ 3 | .packages 4 | 5 | # Conventional directory for build output. 6 | build/ 7 | -------------------------------------------------------------------------------- /backends/py_flask/serve.py: -------------------------------------------------------------------------------- 1 | import fastwsgi 2 | from main import app 3 | 4 | if __name__ == '__main__': 5 | fastwsgi.run(wsgi_app=app, host='127.0.0.1', port=8080) -------------------------------------------------------------------------------- /benchmark/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub. 2 | .dart_tool/ 3 | .packages 4 | 5 | # Conventional directory for build output. 6 | build/ 7 | results/ -------------------------------------------------------------------------------- /backends/dart_conduit/.gitignore: -------------------------------------------------------------------------------- 1 | # Files and directories created by pub. 2 | .dart_tool/ 3 | .packages 4 | 5 | # Conventional directory for build output. 6 | build/ 7 | -------------------------------------------------------------------------------- /backends/dart_minerva/.dockerignore: -------------------------------------------------------------------------------- 1 | .dockerignore 2 | Dockerfile 3 | build/ 4 | .dart_tool/ 5 | .git/ 6 | .github/ 7 | .gitignore 8 | .pubignore 9 | .package 10 | -------------------------------------------------------------------------------- /benchmark/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | ```sh 6 | dart pub get 7 | ``` 8 | 9 | Run the CLI 10 | 11 | ```sh 12 | dart run 13 | ``` 14 | -------------------------------------------------------------------------------- /backends/node_express/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | ```sh 6 | npm install 7 | ``` 8 | 9 | Run server 10 | 11 | ```sh 12 | npm start 13 | ``` 14 | -------------------------------------------------------------------------------- /backends/dart_shelf/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | ```sh 6 | dart pub get 7 | ``` 8 | 9 | Run server 10 | 11 | ```sh 12 | dart bin\server.dart 13 | ``` 14 | -------------------------------------------------------------------------------- /backends/go_fiber/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | go get 5 | 6 | echo 'Building server...' 7 | go build 8 | 9 | echo 'Running server...' 10 | ./backend_benchmark 11 | -------------------------------------------------------------------------------- /backends/py_flask/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | ```sh 6 | pip install -r requirements.txt 7 | ``` 8 | 9 | Run server 10 | 11 | ```sh 12 | python serve.py 13 | ``` 14 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | include: package:very_good_analysis/analysis_options.3.1.0.yaml 2 | analyzer: 3 | exclude: 4 | - build/** 5 | linter: 6 | rules: 7 | file_names: false 8 | -------------------------------------------------------------------------------- /backends/dart_conduit/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | dart pub get 5 | 6 | echo 'Activating conduit' 7 | dart pub global activate conduit 8 | 9 | echo 'Running conduit' 10 | conduit serve -a 127.0.0.1 -p 8080 -------------------------------------------------------------------------------- /backends/dart_dia/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | See details [here](https://github.com/unger1984/dia) 6 | 7 | ```sh 8 | dart pub get 9 | ``` 10 | 11 | Run server 12 | 13 | ```sh 14 | dart bin\server.dart 15 | ``` 16 | -------------------------------------------------------------------------------- /backends/dart_minerva/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:minerva/minerva.dart'; 2 | 3 | import 'builders/setting_builder.dart'; 4 | 5 | void main(List args) async { 6 | // Bind server 7 | await Minerva.bind(args: args, settingBuilder: SettingBuilder()); 8 | } 9 | -------------------------------------------------------------------------------- /backends/dart_conduit/lib/dart_conduit.dart: -------------------------------------------------------------------------------- 1 | /// dart_conduit 2 | /// 3 | /// A conduit web server. 4 | library dart_conduit; 5 | 6 | export 'dart:async'; 7 | export 'dart:io'; 8 | 9 | export 'package:conduit_core/conduit_core.dart'; 10 | 11 | export 'channel.dart'; 12 | -------------------------------------------------------------------------------- /backends/dart_conduit/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | ```sh 6 | dart pub get 7 | ``` 8 | 9 | Activate conduit cli 10 | 11 | ```dart 12 | dart pub global activate conduit 13 | ``` 14 | 15 | Run server 16 | 17 | ```sh 18 | conduit serve 19 | ``` 20 | -------------------------------------------------------------------------------- /backends/dart_minerva/README.md: -------------------------------------------------------------------------------- 1 | # How to run 2 | 3 | Download dependencies: 4 | 5 | ```sh 6 | dart pub get 7 | ``` 8 | 9 | Activate Minerva CLI: 10 | 11 | ```sh 12 | dart pub global activate minerva 13 | ``` 14 | 15 | Run server: 16 | 17 | ```sh 18 | minerva run 19 | ``` 20 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | dart pub get 5 | 6 | echo 'Activating dart_frog_cli' 7 | dart pub global activate dart_frog_cli 8 | 9 | echo 'Build server' 10 | dart_frog build 11 | 12 | echo 'Run server' 13 | dart build/bin/server.dart -------------------------------------------------------------------------------- /backends/dart_minerva/run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | echo 'Getting dependencies...' 4 | dart pub get 5 | 6 | echo 'Activating Minerva...' 7 | dart pub global activate minerva 8 | 9 | echo 'Building server...' 10 | minerva build -m release 11 | 12 | echo 'Running server...' 13 | ./build/release/bin/main -------------------------------------------------------------------------------- /backends/dart_frog_backend/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | pubspec.lock 7 | 8 | # Files and directories created by dart_frog 9 | build/ 10 | .dart_frog 11 | 12 | # Test related files 13 | coverage/ -------------------------------------------------------------------------------- /backends/dart_minerva/pubspec.yaml: -------------------------------------------------------------------------------- 1 | publish_to: none 2 | name: dart_minerva 3 | description: Minerva application. 4 | version: 1.0.0 5 | 6 | environment: 7 | sdk: ">=2.17.5 <3.0.0" 8 | 9 | dependencies: 10 | minerva: ^0.3.3 11 | 12 | dev_dependencies: 13 | lints: ^2.0.0 14 | test: ^1.16.0 15 | dio: ^5.0.0 16 | -------------------------------------------------------------------------------- /benchmark/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: benchmark 2 | description: A sample command-line application. 3 | version: 1.0.0 4 | # homepage: https://www.example.com 5 | 6 | environment: 7 | sdk: ">=2.18.2 <3.0.0" 8 | 9 | dependencies: 10 | http: ^0.13.5 11 | 12 | dev_dependencies: 13 | lints: ^2.0.0 14 | test: ^1.16.0 15 | -------------------------------------------------------------------------------- /backends/dart_conduit/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_conduit 2 | description: An empty conduit application. 3 | version: 0.0.1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.12.0 <3.0.0" 8 | 9 | dependencies: 10 | conduit: ^4.3.6 11 | mime: ^1.0.2 12 | 13 | dev_dependencies: 14 | test: ^1.21.6 15 | conduit_test: ^4.3.6 16 | -------------------------------------------------------------------------------- /backends/dart_spry/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_spry 2 | description: A sample command-line application. 3 | version: 1.0.0 4 | # repository: https://github.com/my_org/my_repo 5 | 6 | environment: 7 | sdk: '>=2.19.2 <3.0.0' 8 | 9 | dependencies: 10 | spry: ^3.0.0 11 | 12 | dev_dependencies: 13 | lints: ^2.0.0 14 | test: ^1.21.0 15 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/README.md: -------------------------------------------------------------------------------- 1 | # How to run? 2 | 3 | Download dependencies 4 | 5 | ```sh 6 | dart pub get 7 | ``` 8 | 9 | Activate dart_frog_cli 10 | 11 | ```sh 12 | dart pub global activate dart_frog_cli 13 | ``` 14 | 15 | Build server 16 | 17 | ```sh 18 | dart_frog build 19 | ``` 20 | 21 | Run server 22 | 23 | ```sh 24 | dart build\bin\server.dart 25 | ``` 26 | -------------------------------------------------------------------------------- /backends/dart_minerva/lib/builders/loggers_builder.dart: -------------------------------------------------------------------------------- 1 | import 'package:minerva/minerva.dart'; 2 | 3 | class LoggersBuilder extends MinervaLoggersBuilder { 4 | @override 5 | List build() { 6 | var loggers = []; 7 | 8 | // Adds console logger to log pipeline 9 | loggers.add(ConsoleLogger()); 10 | 11 | return loggers; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/routes/index.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:dart_frog/dart_frog.dart'; 5 | 6 | Response onRequest(RequestContext context) { 7 | if (context.request.method == HttpMethod.get) { 8 | return Response(body: jsonEncode({'response': 'Hello, World!'})); 9 | } 10 | return Response(statusCode: HttpStatus.notFound); 11 | } 12 | -------------------------------------------------------------------------------- /backends/node_express/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node_express", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.20.1", 13 | "express": "^4.18.2", 14 | "express-fileupload": "^1.4.0" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_frog_backend 2 | description: An new Dart Frog application 3 | version: 1.0.0+1 4 | publish_to: none 5 | 6 | environment: 7 | sdk: ">=2.19.0 <3.0.0" 8 | 9 | dependencies: 10 | compute: ^1.0.2 11 | dart_frog: ^0.3.3 12 | shelf_multipart: ^1.0.0 13 | 14 | dev_dependencies: 15 | mocktail: ^0.3.0 16 | test: ^1.19.2 17 | very_good_analysis: ^4.0.0+1 18 | -------------------------------------------------------------------------------- /backends/dart_conduit/bin/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:dart_conduit/dart_conduit.dart'; 2 | 3 | Future main() async { 4 | final app = Application() 5 | ..options.configurationFilePath = "config.yaml" 6 | ..options.port = 8080; 7 | 8 | await app.startOnCurrentIsolate(); 9 | 10 | print("Application started on port: ${app.options.port}."); 11 | print("Use Ctrl-C (SIGINT) to stop running the application."); 12 | } 13 | -------------------------------------------------------------------------------- /backends/dart_dia/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_shelf 2 | description: A server app using the shelf package and Docker. 3 | version: 1.0.0 4 | # homepage: https://www.example.com 5 | 6 | environment: 7 | sdk: ">=2.18.2 <3.0.0" 8 | 9 | dependencies: 10 | args: ^2.4.0 11 | compute: ^1.0.2 12 | dia: ^0.1.3 13 | dia_body: ^0.1.2 14 | dia_router: ^0.1.6 15 | 16 | dev_dependencies: 17 | http: ^0.13.5 18 | lints: ^2.0.1 19 | test: ^1.23.1 20 | -------------------------------------------------------------------------------- /backends/dart_shelf/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: dart_shelf 2 | description: A server app using the shelf package and Docker. 3 | version: 1.0.0 4 | # homepage: https://www.example.com 5 | 6 | environment: 7 | sdk: '>=2.18.2 <3.0.0' 8 | 9 | dependencies: 10 | args: ^2.0.0 11 | compute: ^1.0.2 12 | shelf: ^1.1.0 13 | shelf_multipart: ^1.0.0 14 | shelf_router: ^1.0.0 15 | 16 | dev_dependencies: 17 | http: ^0.13.0 18 | lints: ^2.0.0 19 | test: ^1.15.0 20 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/routes/echo/index.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:dart_frog/dart_frog.dart'; 4 | 5 | Future onRequest(RequestContext context) async { 6 | if (context.request.method == HttpMethod.post) { 7 | final body = await context.request.json() as Map; 8 | return Response.json(body: {'response': "Hello, ${body["name"]}!"}); 9 | } 10 | return Response(statusCode: HttpStatus.notFound); 11 | } 12 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/routes/file_upload/index.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:dart_frog/dart_frog.dart'; 4 | 5 | Future onRequest(RequestContext context) async { 6 | if (context.request.method == HttpMethod.post) { 7 | final formData = await context.request.formData(); 8 | final data = await formData.files['benchmark']!.readAsBytes(); 9 | return Response(body: data.length.toString()); 10 | } 11 | return Response(statusCode: HttpStatus.notFound); 12 | } 13 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM buildpack-deps:focal 2 | 3 | RUN apt update && apt install -y apt-transport-https 4 | 5 | RUN wget -qO- https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/dart.gpg 6 | 7 | RUN echo 'deb [signed-by=/usr/share/keyrings/dart.gpg arch=amd64] https://storage.googleapis.com/download.dartlang.org/linux/debian stable main' | sudo tee /etc/apt/sources.list.d/dart_stable.list 8 | 9 | RUN apt update && apt install -y dart 10 | 11 | RUN export PATH="$PATH":"$HOME/.pub-cache/bin"; -------------------------------------------------------------------------------- /backends/dart_minerva/lib/builders/middlewares_builder.dart: -------------------------------------------------------------------------------- 1 | import 'package:minerva/minerva.dart'; 2 | 3 | class MiddlewaresBuilder extends MinervaMiddlewaresBuilder { 4 | @override 5 | List build() { 6 | var middlewares = []; 7 | 8 | // Adds middleware for handling errors in middleware pipeline 9 | middlewares.add(ErrorMiddleware()); 10 | 11 | // Adds middleware for query mappings to endpoints in middleware pipeline 12 | middlewares.add(EndpointMiddleware()); 13 | 14 | return middlewares; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /backends/go_fiber/.gitignore: -------------------------------------------------------------------------------- 1 | # If you prefer the allow list template instead of the deny list, see community template: 2 | # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore 3 | # 4 | # Binaries for programs and plugins 5 | *.exe 6 | *.exe~ 7 | *.dll 8 | *.so 9 | *.dylib 10 | backend_benchmark 11 | 12 | # Test binary, built with `go test -c` 13 | *.test 14 | 15 | # Output of the go coverage tool, specifically when used with LiteIDE 16 | *.out 17 | 18 | # Dependency directories (remove the comment below to include it) 19 | # vendor/ 20 | 21 | # Go workspace file 22 | go.work -------------------------------------------------------------------------------- /backends/dart_minerva/lib/builders/setting_builder.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:minerva/minerva.dart'; 4 | 5 | import 'endpoints_builder.dart'; 6 | import 'middlewares_builder.dart'; 7 | import 'loggers_builder.dart'; 8 | 9 | class SettingBuilder extends MinervaSettingBuilder { 10 | @override 11 | MinervaSetting build() { 12 | // Creates server setting 13 | return MinervaSetting( 14 | instance: Platform.numberOfProcessors, 15 | loggersBuilder: LoggersBuilder(), 16 | endpointsBuilder: EndpointsBuilder(), 17 | middlewaresBuilder: MiddlewaresBuilder()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/routes/json_obj/index.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:compute/compute.dart'; 5 | import 'package:dart_frog/dart_frog.dart'; 6 | 7 | Future onRequest(RequestContext context) async { 8 | if (context.request.method == HttpMethod.post) { 9 | final body = await context.request.body(); 10 | final data = await compute(_asyncDecode, body); 11 | return Response(body: data.length.toString()); 12 | } 13 | return Response(statusCode: HttpStatus.notFound); 14 | } 15 | 16 | List _asyncDecode(String obj) { 17 | return jsonDecode(obj) as List; 18 | } 19 | -------------------------------------------------------------------------------- /backends/dart_dia/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use latest stable channel SDK. 2 | FROM dart:stable AS build 3 | 4 | # Resolve app dependencies. 5 | WORKDIR /app 6 | COPY pubspec.* ./ 7 | RUN dart pub get 8 | 9 | # Copy app source code (except anything in .dockerignore) and AOT compile app. 10 | COPY . . 11 | RUN dart compile exe bin/server.dart -o bin/server 12 | 13 | # Build minimal serving image from AOT-compiled `/server` 14 | # and the pre-built AOT-runtime in the `/runtime/` directory of the base image. 15 | FROM scratch 16 | COPY --from=build /runtime/ / 17 | COPY --from=build /app/bin/server /app/bin/ 18 | 19 | # Start server. 20 | EXPOSE 8080 21 | CMD ["/app/bin/server"] 22 | -------------------------------------------------------------------------------- /backends/dart_shelf/Dockerfile: -------------------------------------------------------------------------------- 1 | # Use latest stable channel SDK. 2 | FROM dart:stable AS build 3 | 4 | # Resolve app dependencies. 5 | WORKDIR /app 6 | COPY pubspec.* ./ 7 | RUN dart pub get 8 | 9 | # Copy app source code (except anything in .dockerignore) and AOT compile app. 10 | COPY . . 11 | RUN dart compile exe bin/server.dart -o bin/server 12 | 13 | # Build minimal serving image from AOT-compiled `/server` 14 | # and the pre-built AOT-runtime in the `/runtime/` directory of the base image. 15 | FROM scratch 16 | COPY --from=build /runtime/ / 17 | COPY --from=build /app/bin/server /app/bin/ 18 | 19 | # Start server. 20 | EXPOSE 8080 21 | CMD ["/app/bin/server"] 22 | -------------------------------------------------------------------------------- /backends/dart_frog_backend/test/routes/index_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:dart_frog/dart_frog.dart'; 4 | import 'package:mocktail/mocktail.dart'; 5 | import 'package:test/test.dart'; 6 | 7 | import '../../routes/index.dart' as route; 8 | 9 | class _MockRequestContext extends Mock implements RequestContext {} 10 | 11 | void main() { 12 | group('GET /', () { 13 | test('responds with a 200 and "Welcome to Dart Frog!".', () { 14 | final context = _MockRequestContext(); 15 | final response = route.onRequest(context); 16 | expect(response.statusCode, equals(HttpStatus.ok)); 17 | expect( 18 | response.body(), 19 | completion(equals('Welcome to Dart Frog!')), 20 | ); 21 | }); 22 | }); 23 | } 24 | -------------------------------------------------------------------------------- /.github/workflows/generate_perf.yaml: -------------------------------------------------------------------------------- 1 | name: Generate Performance results 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v3 12 | - uses: dart-lang/setup-dart@v1 13 | 14 | - name: generate report 15 | run: python scripts/generate_perf_report.py 16 | 17 | - name: install python deps 18 | run: pip install -r scripts/requirements.txt 19 | 20 | - name: generate graphs 21 | run: python scripts/generate_perf_graphs.py 22 | 23 | - uses: actions/upload-artifact@v3 24 | with: 25 | name: raw_data 26 | path: benchmark/results/ 27 | 28 | - uses: actions/upload-artifact@v3 29 | with: 30 | name: graphs 31 | path: graphs/ 32 | -------------------------------------------------------------------------------- /backends/dart_minerva/Dockerfile: -------------------------------------------------------------------------------- 1 | # Specify the Dart SDK base image 2 | FROM dart:stable as build 3 | 4 | # Create application directory. 5 | WORKDIR /app 6 | 7 | # Copy project. 8 | COPY . . 9 | 10 | # Resolve app dependencies. 11 | RUN dart pub get 12 | 13 | # Activate Minerva. 14 | RUN dart pub global activate minerva 15 | 16 | # Build project. 17 | RUN dart pub get --offline 18 | RUN ${HOME}/.pub-cache/bin/minerva build -m release 19 | 20 | # Build minimal serving image from AOT-compiled and required system 21 | # libraries and configuration files stored in `/runtime/` from the build stage. 22 | FROM scratch 23 | COPY --from=build /runtime / 24 | 25 | COPY --from=build /app/build/release/bin /app/bin 26 | COPY --from=build /app/build/release/appsetting.json /app 27 | 28 | # Start server. 29 | EXPOSE 8080 30 | CMD ["app/bin/main"] 31 | -------------------------------------------------------------------------------- /backends/py_flask/main.py: -------------------------------------------------------------------------------- 1 | import os 2 | from flask import Flask, jsonify, request 3 | 4 | 5 | host, port = "127.0.0.1", 8080 6 | 7 | app = Flask(__name__) 8 | 9 | @app.route('/', methods=['GET']) 10 | def index(): 11 | return jsonify({'response': 'Hello World!'}) 12 | 13 | @app.route('/echo', methods=['POST']) 14 | def echo(): 15 | body = request.get_json() 16 | return jsonify({"response": f"Hello, {body['name']}!"}) 17 | 18 | @app.route('/file_upload', methods=['POST']) 19 | def file_upload(): 20 | file = request.files["benchmark"] 21 | size = file.seek(0, os.SEEK_END) 22 | return str(size) 23 | 24 | @app.route('/json_obj', methods=['POST']) 25 | def json_obj(): 26 | body = request.get_json() 27 | return str(len(body)) 28 | 29 | 30 | 31 | if __name__ == '__main__': 32 | app.run(host=host, port=port, debug=True) -------------------------------------------------------------------------------- /backends/node_express/index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const expressFileUpload = require("express-fileupload"); 3 | const bodyParser = require("body-parser"); 4 | const app = express(); 5 | const port = 8080; 6 | const hostname = "127.0.0.1"; 7 | 8 | app.use(bodyParser.json({ limit: "50mb", strict: false })); 9 | 10 | app.get("/", (_, res) => { 11 | res.send(JSON.stringify({ response: "Hello World!" })); 12 | }); 13 | 14 | app.post("/echo", (req, res) => { 15 | res.send(JSON.stringify({ response: `Hello, ${req.body.name}!` })); 16 | }); 17 | 18 | app.post("/json_obj", (req, res) => { 19 | const data = req.body; 20 | res.send(`${data.length}`); 21 | }); 22 | 23 | app.post("/file_upload", expressFileUpload({ limits: {} }), (req, res) => { 24 | const file = req.files.benchmark; 25 | 26 | res.send(`${file.size}`); 27 | }); 28 | 29 | app.listen(port, hostname, () => { 30 | console.log(`Example app listening on port ${hostname}:${port}`); 31 | }); 32 | -------------------------------------------------------------------------------- /backends/go_fiber/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/SirusCodes/backend_benchmark 2 | 3 | go 1.19 4 | 5 | require github.com/gofiber/fiber/v2 v2.43.0 6 | 7 | require ( 8 | github.com/andybalholm/brotli v1.0.5 // indirect 9 | github.com/google/uuid v1.3.0 // indirect 10 | github.com/klauspost/compress v1.16.4 // indirect 11 | github.com/mattn/go-colorable v0.1.13 // indirect 12 | github.com/mattn/go-isatty v0.0.18 // indirect 13 | github.com/mattn/go-runewidth v0.0.14 // indirect 14 | github.com/philhofer/fwd v1.1.2 // indirect 15 | github.com/rivo/uniseg v0.4.4 // indirect 16 | github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94 // indirect 17 | github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee // indirect 18 | github.com/tinylib/msgp v1.1.8 // indirect 19 | github.com/valyala/bytebufferpool v1.0.0 // indirect 20 | github.com/valyala/fasthttp v1.45.0 // indirect 21 | github.com/valyala/tcplisten v1.0.0 // indirect 22 | golang.org/x/sys v0.7.0 // indirect 23 | ) 24 | -------------------------------------------------------------------------------- /backends/dart_spry/bin/dart_spry.dart: -------------------------------------------------------------------------------- 1 | // ignore_for_file: depend_on_referenced_packages 2 | 3 | import 'package:spry/spry.dart'; 4 | import 'package:webfetch/webfetch.dart'; 5 | 6 | void main(List arguments) async { 7 | final app = await Application.create(port: 8080); 8 | app.get("/", (request) { 9 | return {"message": "Hello World!"}; 10 | }); 11 | 12 | app.post("/echo", (request) async { 13 | final body = (await request.json()); 14 | if (body is Map) { 15 | return {"message": "Hello ${body["name"]}!"}; 16 | } 17 | 18 | throw Abort(404); 19 | }); 20 | 21 | app.post("/file_upload", (request) async { 22 | final formData = await request.formData(); 23 | final benchmark = formData.get("benchmark"); 24 | 25 | return (benchmark as Blob).size; 26 | }); 27 | 28 | app.post("/json_obj", (request) async { 29 | final json = await request.json(); 30 | 31 | return (json as Iterable).length; 32 | }); 33 | 34 | app.listen(); 35 | 36 | print("Server running at http://localhost:8080"); 37 | } 38 | -------------------------------------------------------------------------------- /backends/dart_shelf/test/server_test.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:http/http.dart'; 4 | import 'package:test/test.dart'; 5 | 6 | void main() { 7 | final port = '8080'; 8 | final host = 'http://0.0.0.0:$port'; 9 | late Process p; 10 | 11 | setUp(() async { 12 | p = await Process.start( 13 | 'dart', 14 | ['run', 'bin/server.dart'], 15 | environment: {'PORT': port}, 16 | ); 17 | // Wait for server to start and print to stdout. 18 | await p.stdout.first; 19 | }); 20 | 21 | tearDown(() => p.kill()); 22 | 23 | test('Root', () async { 24 | final response = await get(Uri.parse('$host/')); 25 | expect(response.statusCode, 200); 26 | expect(response.body, 'Hello, World!\n'); 27 | }); 28 | 29 | test('Echo', () async { 30 | final response = await get(Uri.parse('$host/echo/hello')); 31 | expect(response.statusCode, 200); 32 | expect(response.body, 'hello\n'); 33 | }); 34 | 35 | test('404', () async { 36 | final response = await get(Uri.parse('$host/foobar')); 37 | expect(response.statusCode, 404); 38 | }); 39 | } 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Darshan Rander 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /benchmark/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 | -------------------------------------------------------------------------------- /backends/dart_dia/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 | -------------------------------------------------------------------------------- /backends/dart_minerva/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 | -------------------------------------------------------------------------------- /backends/dart_shelf/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 | -------------------------------------------------------------------------------- /backends/dart_spry/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 | -------------------------------------------------------------------------------- /backends/dart_minerva/lib/builders/endpoints_builder.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | 3 | import 'package:minerva/minerva.dart'; 4 | 5 | class EndpointsBuilder extends MinervaEndpointsBuilder { 6 | @override 7 | void build(Endpoints endpoints) { 8 | endpoints.get('/', _root); 9 | 10 | endpoints.post('/echo', _echo); 11 | 12 | endpoints.post('/file_upload', _fileUpload); 13 | 14 | endpoints.post('/json_obj', _jsonObject); 15 | } 16 | 17 | dynamic _root(ServerContext context, MinervaRequest request) { 18 | return {'response': 'Hello, world!'}; 19 | } 20 | 21 | dynamic _echo(ServerContext context, MinervaRequest request) async { 22 | var json = await request.body.asJson(); 23 | 24 | return {"response": "Hello, ${json['name']}!"}; 25 | } 26 | 27 | dynamic _fileUpload(ServerContext context, MinervaRequest request) async { 28 | var form = await request.body.asForm(); 29 | 30 | var field = form.data['benchmark'] as FormDataFile; 31 | 32 | return utf8.decode(field.bytes).length; 33 | } 34 | 35 | dynamic _jsonObject(ServerContext context, MinervaRequest request) async { 36 | var json = await request.body.asJson(); 37 | 38 | return json.length; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /backends/go_fiber/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | 6 | "github.com/gofiber/fiber/v2" 7 | ) 8 | 9 | func main() { 10 | app := fiber.New() 11 | 12 | app.Get("/", func(c *fiber.Ctx) error { 13 | return c.JSON(fiber.Map{"response": "Hello, World!"}) 14 | }) 15 | 16 | app.Post("/echo", func(c *fiber.Ctx) error { 17 | type User struct { 18 | Name string `json:"name"` 19 | } 20 | 21 | user := new(User) 22 | if err := c.BodyParser(user); err != nil { 23 | return err 24 | } 25 | return c.JSON(fiber.Map{"response": "Hello, " + user.Name + "!"}) 26 | }) 27 | 28 | app.Post("/json_obj", func(c *fiber.Ctx) error { 29 | type Post struct { 30 | UserId int `json:"userId"` 31 | Id int `json:"id"` 32 | Title string `json:"title"` 33 | Body string `json:"body"` 34 | } 35 | 36 | posts := new([]Post) 37 | if err := c.BodyParser(&posts); err != nil { 38 | return err 39 | } 40 | return c.SendString(fmt.Sprint(len(*posts))) 41 | }) 42 | 43 | app.Post("/file_upload", func(c *fiber.Ctx) error { 44 | file, err := c.FormFile("benchmark") 45 | if err != nil { 46 | return err 47 | } 48 | return c.SendString(fmt.Sprint(file.Size)) 49 | }) 50 | 51 | app.Listen(":8080") 52 | } 53 | -------------------------------------------------------------------------------- /scripts/generate_perf_report.py: -------------------------------------------------------------------------------- 1 | import os 2 | import signal 3 | import subprocess 4 | import time 5 | 6 | import requests 7 | 8 | root_dir = os.getcwd() 9 | 10 | backends = os.listdir('./backends') 11 | 12 | 13 | for backend in backends: 14 | # if backend == "dart_conduit": 15 | # continue 16 | 17 | print(f"Testing {backend}...") 18 | 19 | # Start server 20 | os.chdir(f"./backends/{backend}/") 21 | os.chmod("run.sh", 0o777) 22 | running_server = subprocess.Popen( 23 | ["./run.sh"], shell=True, preexec_fn=os.setsid) 24 | os.chdir(root_dir) 25 | 26 | # Wait for the server to start 27 | while True: 28 | try: 29 | response = requests.get("http://localhost:8080", timeout=10) 30 | if response.status_code == 200: 31 | break 32 | except requests.exceptions.ConnectionError: 33 | print("Waiting for server to start...") 34 | time.sleep(5) 35 | 36 | # Run the benchmark 37 | os.chdir("./benchmark/") 38 | benchmark = subprocess.Popen(["dart", "run", "benchmark", backend]) 39 | benchmark.communicate() 40 | benchmark.wait() 41 | 42 | print("Killing server...", running_server.pid) 43 | os.killpg(os.getpgid(running_server.pid), signal.SIGTERM) 44 | 45 | os.chdir(root_dir) 46 | -------------------------------------------------------------------------------- /.github/workflows/generate_load_test.yaml: -------------------------------------------------------------------------------- 1 | name: Generate Load testing results 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v3 12 | - uses: dart-lang/setup-dart@v1 13 | 14 | - name: setup k6 15 | run: | 16 | sudo gpg -k; \ 17 | sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69; \ 18 | echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list; \ 19 | sudo apt-get update; \ 20 | sudo apt-get install k6 21 | 22 | - name: generate report 23 | run: python scripts/generate_load_testing_report.py 24 | 25 | - name: install python deps 26 | run: pip install -r scripts/requirements.txt 27 | 28 | - name: generate graphs 29 | run: python scripts/generate_load_testing_graphs.py 30 | 31 | - uses: actions/upload-artifact@v3 32 | with: 33 | name: raw_data 34 | path: results/ 35 | 36 | - uses: actions/upload-artifact@v3 37 | with: 38 | name: graphs 39 | path: graphs/ 40 | -------------------------------------------------------------------------------- /scripts/k6_load_testing.js: -------------------------------------------------------------------------------- 1 | import http from "k6/http"; 2 | import { check, sleep } from "k6"; 3 | 4 | export const options = { 5 | ext: { 6 | loadimpact: { 7 | name: "Backend Load Testing", 8 | }, 9 | }, 10 | stages: [ 11 | { duration: "30s", target: 50 }, // simulate ramp-up of traffic from 1 to 50 users over 5 minutes. 12 | { duration: "1m", target: 50 }, // stay at 50 users for 2 minutes 13 | { duration: "30s", target: 100 }, // ramp-up to 100 users in 1 minute 14 | { duration: "1m", target: 100 }, // stay at 100 users for 2 minutes 15 | { duration: "30s", target: 150 }, // ramp-up to 150 users in 15 seconds 16 | { duration: "1m", target: 150 }, // stay at 150 users for 1 minute 17 | { duration: "30s", target: 200 }, // ramp-up to 200 users in 15 seconds 18 | { duration: "1m", target: 200 }, // stay at 200 users for 1 minute 19 | { duration: "30s", target: 100 }, // ramp-down to 150 users in 15 seconds 20 | { duration: "1m", target: 100 }, // stay at 100 users for 2 minutes 21 | { duration: "30s", target: 0 }, // ramp-down to 0 users in 1 minute 22 | ], 23 | }; 24 | 25 | const BASE_URL = "http://localhost:8080/"; 26 | 27 | export default () => { 28 | check(http.get(`${BASE_URL}`), { 29 | "is status 200 (GET)": (r) => r.status === 200, 30 | }); 31 | 32 | sleep(1); 33 | }; 34 | -------------------------------------------------------------------------------- /scripts/generate_load_testing_report.py: -------------------------------------------------------------------------------- 1 | import os 2 | import signal 3 | import subprocess 4 | import time 5 | 6 | import requests 7 | 8 | root_dir = os.getcwd() 9 | 10 | backends = os.listdir('./backends') 11 | 12 | if not os.path.exists("./results"): 13 | os.mkdir("./results") 14 | 15 | for backend in backends: 16 | # if backend == "dart_conduit": 17 | # continue 18 | 19 | print(f"Testing {backend}...") 20 | 21 | # Start server 22 | os.chdir(f"./backends/{backend}/") 23 | os.chmod("run.sh", 0o777) 24 | running_server = subprocess.Popen( 25 | ["./run.sh"], shell=True, preexec_fn=os.setsid) 26 | os.chdir(root_dir) 27 | 28 | # Wait for the server to start 29 | while True: 30 | try: 31 | response = requests.get("http://localhost:8080", timeout=10) 32 | if response.status_code == 200: 33 | break 34 | except requests.exceptions.ConnectionError: 35 | print("Waiting for server to start...") 36 | time.sleep(5) 37 | 38 | # Run the load ttest 39 | load_test = subprocess.Popen( 40 | ["k6", "run", "./scripts/k6_load_testing.js", 41 | "--out", f"json=./results/{backend}.json"] 42 | ) 43 | load_test.communicate() 44 | load_test.wait() 45 | 46 | print("Killing server...", running_server.pid) 47 | os.killpg(os.getpgid(running_server.pid), signal.SIGTERM) 48 | 49 | os.chdir(root_dir) 50 | -------------------------------------------------------------------------------- /backends/dart_dia/bin/server.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:dia/dia.dart'; 5 | import 'package:dia_body/dia_body.dart'; 6 | import 'package:dia_router/dia_router.dart'; 7 | 8 | class ServerContext extends Context with Routing, ParsedBody { 9 | ServerContext(super.request); 10 | 11 | @override 12 | String toString() { 13 | var res = {}; 14 | res['query'] = query.toString(); 15 | res['params'] = params.toString(); 16 | res['files'] = files.toString(); 17 | res['parsed'] = parsed.toString(); 18 | 19 | return res.toString(); 20 | } 21 | } 22 | 23 | void main(List args) async { 24 | // Use any available host or container IP (usually `0.0.0.0`). 25 | final ip = "127.0.0.1"; 26 | 27 | final app = App((req) => ServerContext(req)); 28 | 29 | final router = Router('/'); 30 | 31 | router.get('/', (ctx, next) async { 32 | ctx.body = json.encode({"response": 'Hello, World!'}); 33 | }); 34 | router.post('/echo', (ctx, next) async { 35 | final map = ctx.parsed; 36 | ctx.body = json.encode({"response": "Hello, ${map["name"]}!"}); 37 | }); 38 | router.post('/file_upload', (ctx, next) async { 39 | final file = ctx.files['benchmark']; 40 | ctx.body = file?.first.file.lengthSync().toString() ?? '0'; 41 | }); 42 | router.post('/json_obj', (ctx, next) async { 43 | final body = ctx.parsed; 44 | ctx.body = body.length.toString(); 45 | }); 46 | 47 | app.use(body()); 48 | app.use(router.middleware); 49 | 50 | // For running in containers, we respect the PORT environment variable. 51 | final port = int.parse(Platform.environment['PORT'] ?? '8080'); 52 | app 53 | .listen(ip, port) 54 | .then((info) => print('Server listening on port $ip:$port')); 55 | } 56 | -------------------------------------------------------------------------------- /backends/dart_shelf/bin/server.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:compute/compute.dart'; 5 | import 'package:shelf_multipart/form_data.dart'; 6 | import 'package:shelf/shelf.dart'; 7 | import 'package:shelf/shelf_io.dart'; 8 | import 'package:shelf_router/shelf_router.dart'; 9 | 10 | // Configure routes. 11 | final _router = Router() 12 | ..get('/', _rootHandler) 13 | ..post('/echo', _echoHandler) 14 | ..post("/file_upload", _fileUpload) 15 | ..post("/json_obj", _jsonObj); 16 | 17 | Response _rootHandler(Request req) { 18 | return Response.ok(json.encode({"response": 'Hello, World!'})); 19 | } 20 | 21 | Future _echoHandler(Request request) async { 22 | final string = await request.readAsString(); 23 | final body = json.decode(string); 24 | return Response.ok(json.encode({"response": "Hello, ${body["name"]}!"})); 25 | } 26 | 27 | Future _fileUpload(Request request) async { 28 | final parameters = { 29 | await for (final formData in request.multipartFormData) 30 | formData.name: await formData.part.readString(), 31 | }; 32 | 33 | return Response.ok(parameters["benchmark"]?.length.toString()); 34 | } 35 | 36 | Future _jsonObj(Request request) async { 37 | final body = await request.readAsString(); 38 | final data = await compute(_asyncDecode, body); 39 | return Response.ok(data.length.toString()); 40 | } 41 | 42 | _asyncDecode(String obj) { 43 | return jsonDecode(obj); 44 | } 45 | 46 | void main(List args) async { 47 | // Use any available host or container IP (usually `0.0.0.0`). 48 | final ip = InternetAddress("127.0.0.1"); 49 | 50 | // Configure a pipeline that logs requests. 51 | final handler = Pipeline().addHandler(_router); 52 | 53 | // For running in containers, we respect the PORT environment variable. 54 | final port = int.parse(Platform.environment['PORT'] ?? '8080'); 55 | final server = await serve(handler, ip, port); 56 | print('Server listening on port ${server.address.host}:${server.port}'); 57 | } 58 | -------------------------------------------------------------------------------- /scripts/generate_perf_graphs.py: -------------------------------------------------------------------------------- 1 | import os 2 | import json 3 | import plotly.graph_objects as go 4 | 5 | 6 | def create_graphs_dir(): 7 | if not os.path.exists("graphs"): 8 | os.mkdir("graphs") 9 | 10 | 11 | def get_property_results(prop: str): 12 | servers = os.listdir("./benchmark/results/") 13 | results = {} 14 | for server in servers: 15 | with open(f"./benchmark/results/{server}", encoding="utf8") as fp: 16 | data = json.load(fp) 17 | results[server] = data[prop] 18 | return results 19 | 20 | 21 | def grouped_bar_graph(prop1: str, prop2: str, title: str, filename: str): 22 | sync_get = get_property_results(prop1) 23 | sync_post = get_property_results(prop2) 24 | x = list(server.split(".")[0] for server in sync_get.keys()) 25 | y_get = list(sync_get.values()) 26 | y_post = list(sync_post.values()) 27 | barplots = [ 28 | go.Bar(x=x, y=y_get, name="GET", 29 | text=y_get, textposition="outside", texttemplate="%{text:.2f}"), 30 | go.Bar(x=x, y=y_post, name="POST", 31 | text=y_post, textposition="outside", texttemplate="%{text:.2f}"), 32 | ] 33 | 34 | layout = go.Layout(title=title, barmode="group", 35 | xaxis_title="Servers", yaxis_title="RTT (ms)",) 36 | fig = go.Figure(data=barplots, layout=layout) 37 | fig.write_image(filename, scale=2) 38 | 39 | 40 | def bar_graph(prop: str, title: str, filename: str): 41 | data = get_property_results(prop) 42 | x = list(server.split(".")[0] for server in data.keys()) 43 | y = list(data.values()) 44 | barplot = go.Bar(x=x, y=y, 45 | text=y, textposition="outside", texttemplate="%{text:.2f}") 46 | layout = go.Layout(title=title, xaxis_title="Servers", 47 | yaxis_title="RTT (ms)",) 48 | fig = go.Figure(data=barplot, layout=layout) 49 | fig.write_image(filename, scale=2) 50 | 51 | 52 | if __name__ == "__main__": 53 | create_graphs_dir() 54 | grouped_bar_graph("get_rtt", "post_rtt", 55 | "Sync Requests", "graphs/sync.jpeg") 56 | grouped_bar_graph("get_rtt_parallel", "post_rtt_parallel", 57 | "Async Requests", "graphs/async.jpeg") 58 | bar_graph("parse_json", "JSON Parsing", "graphs/json.jpeg") 59 | bar_graph("send_file", "File Sending", "graphs/multipart.jpeg") 60 | -------------------------------------------------------------------------------- /backends/dart_conduit/lib/channel.dart: -------------------------------------------------------------------------------- 1 | import 'package:mime/mime.dart'; 2 | 3 | import 'dart_conduit.dart'; 4 | 5 | /// This type initializes an application. 6 | /// 7 | /// Override methods in this class to set up routes and initialize services like 8 | /// database connections. See http://conduit.io/docs/http/channel/. 9 | class DartConduitChannel extends ApplicationChannel { 10 | /// Construct the request channel. 11 | /// 12 | /// Return an instance of some [Controller] that will be the initial receiver 13 | /// of all [Request]s. 14 | /// 15 | /// This method is invoked after [prepare]. 16 | @override 17 | Controller get entryPoint { 18 | final router = Router(); 19 | 20 | // Prefer to use `link` instead of `linkFunction`. 21 | // See: https://conduit.io/docs/http/request_controller/ 22 | router.route("/").linkFunction((request) async { 23 | if (request.method == "GET") { 24 | return Response.ok({"response": 'Hello, World!'}); 25 | } 26 | return Response.notFound(); 27 | }); 28 | 29 | router.route("/echo").linkFunction((request) async { 30 | if (request.method == "POST") { 31 | final body = await request.body.decode>(); 32 | return Response.ok({"response": "Hello, ${body["name"]}!"}); 33 | } 34 | return Response.notFound(); 35 | }); 36 | 37 | router.route("/json_obj").linkFunction((request) async { 38 | if (request.method == "POST") { 39 | final body = await request.body.decode>(); 40 | return Response.ok(body.length.toString()); 41 | } 42 | return Response.notFound(); 43 | }); 44 | 45 | router.route("/file_upload").linkFunction((request) async { 46 | final boundary = request.raw.headers.contentType!.parameters["boundary"]!; 47 | final transformer = MimeMultipartTransformer(boundary); 48 | final bodyBytes = await request.body.decode>(); 49 | 50 | // Pay special attention to the square brackets in the argument: 51 | final bodyStream = Stream.fromIterable([bodyBytes]); 52 | final parts = await transformer.bind(bodyStream).toList(); 53 | 54 | int size = 0; 55 | for (var part in parts) { 56 | final content = await part.toList(); 57 | 58 | size += content.length; 59 | } 60 | 61 | return Response.ok(size.toString()); 62 | }); 63 | 64 | return router; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /benchmark/bin/benchmark.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:benchmark/benchmark.dart' as benchmark; 5 | 6 | const interation = 20; 7 | const syncReqCount = 1000; 8 | const asyncBurstReqCount = 250; 9 | const fileReqCount = 100; 10 | const jsonReqCount = 100; 11 | 12 | Future main(List arguments) async { 13 | final name = arguments.length == 1 ? arguments[0] : "none"; 14 | 15 | final List rttGet = [], 16 | rttPost = [], 17 | rttGetParallel = [], 18 | rttPostParallel = [], 19 | sendFileTime = [], 20 | parseJsonTime = []; 21 | 22 | final fileSize = File("files/test.json").lengthSync() / 1024; 23 | 24 | for (var i = 0; i < interation; i++) { 25 | print("Running ${i + 1} iteration..."); 26 | 27 | // Round trip time 28 | rttGet.add(await benchmark.getRTTTimeGet(syncReqCount)); 29 | rttPost.add(await benchmark.getRTTTimePost(syncReqCount)); 30 | 31 | // Round trip time in Parallel 32 | rttGetParallel 33 | .add(await benchmark.getRTTTimeGetParallel(1, asyncBurstReqCount)); 34 | rttPostParallel 35 | .add(await benchmark.getRTTTimePostParallel(1, asyncBurstReqCount)); 36 | 37 | // Sending files to server 38 | sendFileTime.add(await benchmark.sendFile(fileReqCount)); 39 | 40 | // Json parsing speed 41 | parseJsonTime.add(await benchmark.jsonParse(jsonReqCount)); 42 | 43 | await Future.delayed(const Duration(seconds: 2)); 44 | } 45 | 46 | print("\nRequests in sync"); 47 | print("GET RTT: ${rttGet.average()}ms"); 48 | print("POST RTT: ${rttPost.average()}ms"); 49 | 50 | print("\nRequests in parallel"); 51 | print("GET RTT: ${rttGetParallel.average()}ms"); 52 | print("POST RTT: ${rttPostParallel.average()}ms"); 53 | 54 | print("\nFile upload"); 55 | print( 56 | "Send file (${fileSize.toStringAsFixed(2)}KB): ${sendFileTime.average()}ms", 57 | ); 58 | 59 | print("\nJSON parsing speed"); 60 | print("Parse JSON: ${parseJsonTime.average()}ms"); 61 | 62 | saveResults( 63 | { 64 | "get_rtt": rttGet.average(), 65 | "post_rtt": rttPost.average(), 66 | "get_rtt_parallel": rttGetParallel.average(), 67 | "post_rtt_parallel": rttPostParallel.average(), 68 | "send_file": sendFileTime.average(), 69 | "parse_json": parseJsonTime.average(), 70 | "file_size": fileSize, 71 | }, 72 | name, 73 | ); 74 | 75 | return 0; 76 | } 77 | 78 | void saveResults(Map result, String name) { 79 | final file = File("./results/$name.json"); 80 | if (file.existsSync()) { 81 | file.deleteSync(); 82 | } 83 | file.createSync(recursive: true); 84 | file.writeAsStringSync(jsonEncode(result)); 85 | } 86 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Backend Benchmark 2 | 3 | Currently, it benchmarks backends in two ways. 4 | 5 | 1. Custom script to target specific cases 6 | 1. Sequential requests (GET/POST) 7 | 2. Multiple parallel requests (GET/POST) 8 | 3. File upload (Multipart Requests) 9 | 4. JSON parsing 10 | 2. Load testing by [k6] 11 | 12 | Below are the results for both 13 | 14 | ## Specific stress test 15 | 16 | | | | 17 | | --------------------------------------------------------------- | ---------------------------------------------------------------------------------- | 18 | | ![Send one request at a time](static/performance/sync.jpeg) | ![Send multiple GET request at a time](static/performance/async.jpeg) | 19 | | Send one request at a time | Send multiple request at a time | 20 | | ![Send files with multipart](static/performance/multipart.jpeg) | ![Send 1.04MB of JSON to server and let it parse it](static/performance/json.jpeg) | 21 | | Send files with multipart | Send 1.04MB of JSON to server and let it parse it | 22 | 23 | ## Load testing 24 | 25 | You can have a look at the [config file](https://github.com/SirusCodes/backend_benchmark/blob/main/scripts/k6_load_testing.js) on how it works. 26 | 27 | A **TL;DR** would be it simulates the user increasing from 0 to 50, staying there for a minute then increasing to 100 and so on till it reaches 200 in step 50 and then decreases in step 100 till it reaches 0. 28 | 29 | In the graphs below the _**Red line**_, represents the number of **virtual/simulated users** and the _**Blue line**_, represents the **Average round trip time (ms)** on the **Y-axes** and the **time for test** on **X-axis**. 30 | 31 | ### Conduit (Dart) 32 | 33 | ![Conduit (Dart)](static/load_testing/dart_conduit.jpeg) 34 | 35 | ### Dia (Dart) 36 | 37 | ![Dia (Dart)](static/load_testing/dart_dia.jpeg) 38 | 39 | ### dart_frog (Dart) 40 | 41 | ![dart_frog (Dart)](static/load_testing/dart_frog_backend.jpeg) 42 | 43 | ### minerva (Dart) 44 | 45 | ![minerva (Dart)](static/load_testing/dart_minerva.jpeg) 46 | 47 | ### shelf (Dart) 48 | 49 | ![shelf (Dart)](static/load_testing/dart_shelf.jpeg) 50 | 51 | ### spry (Dart) 52 | 53 | ![spry (Dart)](static/load_testing/dart_spry.jpeg) 54 | 55 | ### Fiber (Go) 56 | 57 | ![Fiber (Go)](static/load_testing/go_fiber.jpeg) 58 | 59 | ### expressjs (Node) 60 | 61 | ![expressjs (Node)](static/load_testing/node_express.jpeg) 62 | 63 | ### Flask (Python) 64 | 65 | ![Flask (Python)](static/load_testing/py_flask.jpeg) 66 | -------------------------------------------------------------------------------- /backends/dart_conduit/analysis_options.yaml: -------------------------------------------------------------------------------- 1 | analyzer: 2 | strong-mode: 3 | implicit-casts: false 4 | 5 | linter: 6 | rules: 7 | - always_declare_return_types 8 | - always_put_control_body_on_new_line 9 | - always_put_required_named_parameters_first 10 | - always_require_non_null_named_parameters 11 | - annotate_overrides 12 | - avoid_bool_literals_in_conditional_expressions 13 | - avoid_double_and_int_checks 14 | - avoid_empty_else 15 | - avoid_field_initializers_in_const_classes 16 | - avoid_init_to_null 17 | - avoid_null_checks_in_equality_operators 18 | - avoid_positional_boolean_parameters 19 | - avoid_relative_lib_imports 20 | - avoid_renaming_method_parameters 21 | - avoid_return_types_on_setters 22 | - avoid_returning_null 23 | - avoid_single_cascade_in_expression_statements 24 | - avoid_slow_async_io 25 | - avoid_types_as_parameter_names 26 | - avoid_unused_constructor_parameters 27 | - await_only_futures 28 | - camel_case_types 29 | - cancel_subscriptions 30 | - close_sinks 31 | - comment_references 32 | - constant_identifier_names 33 | - control_flow_in_finally 34 | - directives_ordering 35 | - empty_catches 36 | - empty_constructor_bodies 37 | - empty_statements 38 | - hash_and_equals 39 | - implementation_imports 40 | - iterable_contains_unrelated_type 41 | - join_return_with_assignment 42 | - library_names 43 | - library_prefixes 44 | - list_remove_unrelated_type 45 | - literal_only_boolean_expressions 46 | - no_duplicate_case_values 47 | - non_constant_identifier_names 48 | - null_closures 49 | - package_api_docs 50 | - package_names 51 | - package_prefixed_library_names 52 | - parameter_assignments 53 | - prefer_adjacent_string_concatenation 54 | - prefer_asserts_in_initializer_lists 55 | - prefer_collection_literals 56 | - prefer_conditional_assignment 57 | - prefer_const_constructors 58 | - prefer_const_constructors_in_immutables 59 | - prefer_const_declarations 60 | - prefer_const_literals_to_create_immutables 61 | - prefer_constructors_over_static_methods 62 | - prefer_contains 63 | - prefer_equal_for_default_values 64 | - prefer_final_fields 65 | - prefer_final_locals 66 | - prefer_foreach 67 | - prefer_generic_function_type_aliases 68 | - prefer_interpolation_to_compose_strings 69 | - prefer_is_empty 70 | - prefer_is_not_empty 71 | - prefer_iterable_whereType 72 | - prefer_typing_uninitialized_variables 73 | - recursive_getters 74 | - slash_for_doc_comments 75 | - sort_constructors_first 76 | - sort_unnamed_constructors_first 77 | - test_types_in_equals 78 | - throw_in_finally 79 | - type_annotate_public_apis 80 | - type_init_formals 81 | - unawaited_futures 82 | - unnecessary_const 83 | - unnecessary_getters_setters 84 | - unnecessary_lambdas 85 | - unnecessary_new 86 | - unnecessary_null_aware_assignments 87 | - unnecessary_null_in_if_null_operators 88 | - unnecessary_overrides 89 | - unnecessary_parenthesis 90 | - unnecessary_statements 91 | - unnecessary_this 92 | - unrelated_type_equality_checks 93 | - use_rethrow_when_possible 94 | - use_string_buffers 95 | - use_to_and_as_if_applicable 96 | - valid_regexps 97 | - void_checks -------------------------------------------------------------------------------- /benchmark/lib/benchmark.dart: -------------------------------------------------------------------------------- 1 | import 'dart:convert'; 2 | import 'dart:io'; 3 | 4 | import 'package:http/http.dart'; 5 | // ignore: depend_on_referenced_packages 6 | import 'package:http_parser/http_parser.dart' show MediaType; 7 | 8 | const host = "127.0.0.1:8080"; 9 | 10 | extension ListAvg on List { 11 | double average() { 12 | num sum = (T == int ? 0 : 0.0) as T; 13 | for (num current in this) { 14 | sum += current; 15 | } 16 | return sum / length; 17 | } 18 | } 19 | 20 | Future getRTTTimePost(int requestCount) async { 21 | final body = jsonEncode({"name": "Darshan"}); 22 | final uri = Uri.http(host, "/echo"); 23 | final client = Client(); 24 | return getTimeFor( 25 | requestCount, 26 | () => client.post(uri, body: body), 27 | () => client.close(), 28 | ); 29 | } 30 | 31 | Future getRTTTimeGet(int requestCount) async { 32 | final uri = Uri.http(host); 33 | final client = Client(); 34 | return getTimeFor( 35 | requestCount, 36 | () => client.get(uri), 37 | () => client.close(), 38 | ); 39 | } 40 | 41 | Future getRTTTimePostParallel(int requestCount, int burstCount) async { 42 | final body = jsonEncode({"name": "Darshan"}); 43 | final uri = Uri.http(host, "/echo"); 44 | final client = Client(); 45 | return getTimeFor( 46 | requestCount, 47 | () => Future.wait(List.generate( 48 | burstCount, 49 | (_) => client.post(uri, body: body), 50 | )), 51 | () => client.close(), 52 | ); 53 | } 54 | 55 | Future getRTTTimeGetParallel(int requestCount, int burstCount) async { 56 | final uri = Uri.http(host); 57 | final client = Client(); 58 | return getTimeFor( 59 | requestCount, 60 | () => Future.wait(List.generate( 61 | burstCount, 62 | (_) => client.get(uri), 63 | )), 64 | () => client.close(), 65 | ); 66 | } 67 | 68 | Future sendFile(int requestCount) async { 69 | final uri = Uri.http(host, "/file_upload"); 70 | final bytes = await File("files/test.json").readAsBytes(); 71 | 72 | return getTimeFor(requestCount, () async { 73 | final request = MultipartRequest("POST", uri) 74 | ..files.add(MultipartFile.fromBytes( 75 | "benchmark", 76 | bytes, 77 | filename: "test.json", 78 | contentType: MediaType("application", "json"), 79 | )); 80 | final res = await Response.fromStream(await request.send()); 81 | if (res.statusCode != 200) { 82 | throw Exception("Failed"); 83 | } 84 | }); 85 | } 86 | 87 | Future jsonParse(int requestCount) async { 88 | final uri = Uri.http(host, "/json_obj"); 89 | final data = await File("files/test.json").readAsString(); 90 | final client = Client(); 91 | return getTimeFor( 92 | requestCount, 93 | () => client.post( 94 | uri, 95 | body: data, 96 | headers: {"content-type": "application/json"}, 97 | ), 98 | () => client.close(), 99 | ); 100 | } 101 | 102 | Future getTimeFor( 103 | int requestCount, 104 | Function func, [ 105 | Function? dispose, 106 | ]) async { 107 | final interation = []; 108 | final stopwatch = Stopwatch(); 109 | for (var i = 0; i < requestCount; i++) { 110 | stopwatch.start(); 111 | await func(); 112 | stopwatch.stop(); 113 | interation.add(stopwatch.elapsedMicroseconds); 114 | stopwatch.reset(); 115 | } 116 | dispose?.call(); 117 | 118 | return interation.average(); 119 | } 120 | -------------------------------------------------------------------------------- /scripts/generate_load_testing_graphs.py: -------------------------------------------------------------------------------- 1 | import os 2 | from typing import Dict, List, Tuple 3 | from dateutil import parser 4 | import datetime 5 | import json 6 | import plotly.graph_objects as go 7 | from plotly.subplots import make_subplots 8 | import pandas as pd 9 | 10 | REQUIRED_METRICS = ["http_req_duration", "vus"] 11 | 12 | 13 | def create_graphs_dir(): 14 | if not os.path.exists("graphs"): 15 | os.mkdir("graphs") 16 | 17 | 18 | def round_seconds(date_time_object: datetime.datetime): 19 | new_date_time = date_time_object 20 | 21 | if new_date_time.microsecond >= 500_000: 22 | new_date_time = new_date_time + datetime.timedelta(seconds=1) 23 | 24 | return new_date_time.replace(microsecond=0) 25 | 26 | 27 | def load_data(file_name: str) -> Dict[str, Tuple[float, datetime.datetime]]: 28 | data: Dict[str, Tuple[float, datetime.datetime]] = {} 29 | with open(file_name, "r") as f: 30 | for line in f.readlines(): 31 | line_data = json.loads(line) 32 | if line_data["type"] == "Point" and line_data["metric"] in REQUIRED_METRICS: 33 | metric = line_data["metric"] 34 | metric_data = data.get(metric, []) 35 | metric_data.append( 36 | (line_data["data"]["value"], parser.parse(line_data["data"]["time"]))) 37 | data[metric] = metric_data 38 | return data 39 | 40 | 41 | def get_avg_from_data(metric_data_raw: List[Tuple[float, datetime.datetime]]) -> Dict[datetime.datetime, float]: 42 | df = pd.DataFrame(metric_data_raw, columns=["value", "time"]) 43 | # remove outliers 44 | df = df[(df["value"] - df["value"].mean()).abs() < 3 * df["value"].std()] 45 | 46 | # round off the time to seconds 47 | df["time"] = df["time"].apply(round_seconds) 48 | 49 | # group by time and compute the average 50 | df = df.groupby("time").mean() 51 | 52 | # return list of tuples 53 | return df.to_dict()["value"] 54 | 55 | 56 | def split_vus_data(vus_data_raw: List[Tuple[float, datetime.datetime]]) -> Dict[datetime.datetime, float]: 57 | df = pd.DataFrame(vus_data_raw, columns=["value", "time"]) 58 | # round off the time to seconds 59 | df["time"] = df["time"].apply(round_seconds) 60 | 61 | # group by time and compute the average 62 | df = df.groupby("time").mean() 63 | 64 | # return list of tuples 65 | return df.to_dict()["value"] 66 | 67 | 68 | def generate_graph(metric_data_avg: Dict[datetime.datetime, float], vus_data: Dict[datetime.datetime, float], watched_metric: str, backend: str) -> None: 69 | # the chart will have two Y axes 70 | fig = make_subplots(specs=[[{"secondary_y": True}]]) 71 | 72 | fig.add_trace( 73 | go.Scatter(x=list(metric_data_avg.keys()), 74 | y=list(metric_data_avg.values()), 75 | name=f"Average {watched_metric} (ms)"), 76 | secondary_y=False, 77 | ) 78 | 79 | fig.add_trace( 80 | go.Scatter(x=list(vus_data.keys()), 81 | y=list(vus_data.values()), 82 | name="VU count"), 83 | secondary_y=True, 84 | ) 85 | fig.update_xaxes(title_text="Time") 86 | fig.update_yaxes( 87 | title_text=f"Average {watched_metric} (ms)", secondary_y=False) 88 | fig.update_yaxes(title_text="VU count", secondary_y=True) 89 | fig.update_layout( 90 | autosize=False, 91 | width=1500, 92 | ) 93 | fig.write_image(f"graphs/{backend}.jpeg", scale=2) 94 | 95 | 96 | def process_file(file_name: str, watched_metric: str): 97 | # load data from the file 98 | print(f"Processing {file_name} for {watched_metric}...") 99 | data = load_data(file_name) 100 | print(f"File processed...") 101 | 102 | print("Parsing data...") 103 | # get avg and vus from data 104 | metric_data_avg = get_avg_from_data(data[watched_metric]) 105 | vus_data = split_vus_data(data["vus"]) 106 | 107 | # display a chart 108 | generate_graph(metric_data_avg, vus_data, watched_metric, 109 | file_name.split("/")[-1].split(".")[0]) 110 | 111 | 112 | if __name__ == "__main__": 113 | create_graphs_dir() 114 | results = os.listdir("results") 115 | for result in results: 116 | process_file(f"results/{result}", "http_req_duration") 117 | -------------------------------------------------------------------------------- /backends/go_fiber/go.sum: -------------------------------------------------------------------------------- 1 | github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= 2 | github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= 3 | github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= 4 | github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= 5 | github.com/gofiber/fiber/v2 v2.42.0 h1:Fnp7ybWvS+sjNQsFvkhf4G8OhXswvB6Vee8hM/LyS+8= 6 | github.com/gofiber/fiber/v2 v2.42.0/go.mod h1:3+SGNjqMh5VQH5Vz2Wdi43zTIV16ktlFd3x3R6O1Zlc= 7 | github.com/gofiber/fiber/v2 v2.43.0 h1:yit3E4kHf178B60p5CQBa/3v+WVuziWMa/G2ZNyLJB0= 8 | github.com/gofiber/fiber/v2 v2.43.0/go.mod h1:mpS1ZNE5jU+u+BA4FbM+KKnUzJ4wzTK+FT2tG3tU+6I= 9 | github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= 10 | github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= 11 | github.com/klauspost/compress v1.15.9 h1:wKRjX6JRtDdrE9qwa4b/Cip7ACOshUI4smpCQanqjSY= 12 | github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= 13 | github.com/klauspost/compress v1.16.4 h1:91KN02FnsOYhuunwU4ssRe8lc2JosWmizWa91B5v1PU= 14 | github.com/klauspost/compress v1.16.4/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= 15 | github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= 16 | github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= 17 | github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 18 | github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= 19 | github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= 20 | github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= 21 | github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= 22 | github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= 23 | github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= 24 | github.com/philhofer/fwd v1.1.1 h1:GdGcTjf5RNAxwS4QLsiMzJYj5KEvPJD3Abr261yRQXQ= 25 | github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= 26 | github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= 27 | github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= 28 | github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= 29 | github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= 30 | github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= 31 | github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= 32 | github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94 h1:rmMl4fXJhKMNWl+K+r/fq4FbbKI+Ia2m9hYBLm2h4G4= 33 | github.com/savsgio/dictpool v0.0.0-20221023140959-7bf2e61cea94/go.mod h1:90zrgN3D/WJsDd1iXHT96alCoN2KJo6/4x1DZC3wZs8= 34 | github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d h1:Q+gqLBOPkFGHyCJxXMRqtUgUbTjI8/Ze8vu8GGyNFwo= 35 | github.com/savsgio/gotils v0.0.0-20220530130905-52f3993e8d6d/go.mod h1:Gy+0tqhJvgGlqnTF8CVGP0AaGRjwBtXs/a5PA0Y3+A4= 36 | github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee h1:8Iv5m6xEo1NR1AvpV+7XmhI4r39LGNzwUL4YpMuL5vk= 37 | github.com/savsgio/gotils v0.0.0-20230208104028-c358bd845dee/go.mod h1:qwtSXrKuJh/zsFQ12yEE89xfCrGKK63Rr7ctU/uCo4g= 38 | github.com/tinylib/msgp v1.1.6 h1:i+SbKraHhnrf9M5MYmvQhFnbLhAXSDWF8WWsuyRdocw= 39 | github.com/tinylib/msgp v1.1.6/go.mod h1:75BAfg2hauQhs3qedfdDZmWAPcFMAvJE5b9rGOMufyw= 40 | github.com/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= 41 | github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= 42 | github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= 43 | github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= 44 | github.com/valyala/fasthttp v1.44.0 h1:R+gLUhldIsfg1HokMuQjdQ5bh9nuXHPIfvkYUu9eR5Q= 45 | github.com/valyala/fasthttp v1.44.0/go.mod h1:f6VbjjoI3z1NDOZOv17o6RvtRSWxC77seBFc2uWtgiY= 46 | github.com/valyala/fasthttp v1.45.0 h1:zPkkzpIn8tdHZUrVa6PzYd0i5verqiPSkgTd3bSUcpA= 47 | github.com/valyala/fasthttp v1.45.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA= 48 | github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= 49 | github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= 50 | github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 51 | github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 52 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 53 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 54 | golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= 55 | golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= 56 | golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= 57 | golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 58 | golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= 59 | golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 60 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 61 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 62 | golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= 63 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 64 | golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 65 | golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= 66 | golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= 67 | golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= 68 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 69 | golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 70 | golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 71 | golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 72 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 73 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 74 | golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 75 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 76 | golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 77 | golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 78 | golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 79 | golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 80 | golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 81 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= 82 | golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 83 | golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 84 | golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 85 | golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= 86 | golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 87 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= 88 | golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 89 | golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= 90 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 91 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 92 | golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= 93 | golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= 94 | golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= 95 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 96 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 97 | golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= 98 | golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= 99 | golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= 100 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 101 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 102 | golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 103 | -------------------------------------------------------------------------------- /benchmark/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: "3444216bfd127af50bbe4862d8843ed44db946dd933554f0d7285e89f10e28ac" 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "50.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: "68796c31f510c8455a06fed75fc97d8e5ad04d324a830322ab3efc9feb6201c1" 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.2.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.3.1" 28 | async: 29 | dependency: transitive 30 | description: 31 | name: async 32 | sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "2.10.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 | collection: 45 | dependency: transitive 46 | description: 47 | name: collection 48 | sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.17.0" 52 | convert: 53 | dependency: transitive 54 | description: 55 | name: convert 56 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "3.1.1" 60 | coverage: 61 | dependency: transitive 62 | description: 63 | name: coverage 64 | sha256: d2494157c32b303f47dedee955b1479f2979c4ff66934eb7c0def44fd9e0267a 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.6.1" 68 | crypto: 69 | dependency: transitive 70 | description: 71 | name: crypto 72 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "3.0.2" 76 | file: 77 | dependency: transitive 78 | description: 79 | name: file 80 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "6.1.4" 84 | frontend_server_client: 85 | dependency: transitive 86 | description: 87 | name: frontend_server_client 88 | sha256: "82715f8041a85a534a7bf64400b2ee0bb3d594ccf695d97c0bb017259657ff5d" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "3.1.0" 92 | glob: 93 | dependency: transitive 94 | description: 95 | name: glob 96 | sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "2.1.0" 100 | http: 101 | dependency: "direct main" 102 | description: 103 | name: http 104 | sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "0.13.5" 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 | io: 125 | dependency: transitive 126 | description: 127 | name: io 128 | sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852" 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "1.0.3" 132 | js: 133 | dependency: transitive 134 | description: 135 | name: js 136 | sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "0.6.5" 140 | lints: 141 | dependency: "direct dev" 142 | description: 143 | name: lints 144 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "2.0.1" 148 | logging: 149 | dependency: transitive 150 | description: 151 | name: logging 152 | sha256: c0bbfe94d46aedf9b8b3e695cf3bd48c8e14b35e3b2c639e0aa7755d589ba946 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "1.1.0" 156 | matcher: 157 | dependency: transitive 158 | description: 159 | name: matcher 160 | sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "0.12.13" 164 | meta: 165 | dependency: transitive 166 | description: 167 | name: meta 168 | sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "1.8.0" 172 | mime: 173 | dependency: transitive 174 | description: 175 | name: mime 176 | sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "1.0.2" 180 | node_preamble: 181 | dependency: transitive 182 | description: 183 | name: node_preamble 184 | sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "2.0.1" 188 | package_config: 189 | dependency: transitive 190 | description: 191 | name: package_config 192 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "2.1.0" 196 | path: 197 | dependency: transitive 198 | description: 199 | name: path 200 | sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "1.8.2" 204 | pool: 205 | dependency: transitive 206 | description: 207 | name: pool 208 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "1.5.1" 212 | pub_semver: 213 | dependency: transitive 214 | description: 215 | name: pub_semver 216 | sha256: b959af0a045c3484c4a8f4997731f5bfe4cac60d732fd8ce35b351f2d6a459fe 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "2.1.2" 220 | shelf: 221 | dependency: transitive 222 | description: 223 | name: shelf 224 | sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "1.4.0" 228 | shelf_packages_handler: 229 | dependency: transitive 230 | description: 231 | name: shelf_packages_handler 232 | sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "3.0.1" 236 | shelf_static: 237 | dependency: transitive 238 | description: 239 | name: shelf_static 240 | sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "1.1.1" 244 | shelf_web_socket: 245 | dependency: transitive 246 | description: 247 | name: shelf_web_socket 248 | sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "1.0.2" 252 | source_map_stack_trace: 253 | dependency: transitive 254 | description: 255 | name: source_map_stack_trace 256 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "2.1.1" 260 | source_maps: 261 | dependency: transitive 262 | description: 263 | name: source_maps 264 | sha256: "490098075234dcedb83c5d949b4c93dad5e6b7702748de000be2b57b8e6b2427" 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "0.10.11" 268 | source_span: 269 | dependency: transitive 270 | description: 271 | name: source_span 272 | sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "1.9.1" 276 | stack_trace: 277 | dependency: transitive 278 | description: 279 | name: stack_trace 280 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "1.11.0" 284 | stream_channel: 285 | dependency: transitive 286 | description: 287 | name: stream_channel 288 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "2.1.1" 292 | string_scanner: 293 | dependency: transitive 294 | description: 295 | name: string_scanner 296 | sha256: "862015c5db1f3f3c4ea3b94dc2490363a84262994b88902315ed74be1155612f" 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "1.1.1" 300 | term_glyph: 301 | dependency: transitive 302 | description: 303 | name: term_glyph 304 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "1.2.1" 308 | test: 309 | dependency: "direct dev" 310 | description: 311 | name: test 312 | sha256: "03dbf5cb87d56394ffe951eef93893b43624240aa8dd16f6f063ee01fcb22aee" 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "1.21.7" 316 | test_api: 317 | dependency: transitive 318 | description: 319 | name: test_api 320 | sha256: c9aba3b3dbfe8878845dfab5fa096eb8de7b62231baeeb1cea8e3ee81ca8c6d8 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "0.4.15" 324 | test_core: 325 | dependency: transitive 326 | description: 327 | name: test_core 328 | sha256: f99f8a4c093d6c5adbe100494ccc259ec69c8f86eb769d661e5af18f9b6b9375 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "0.4.19" 332 | typed_data: 333 | dependency: transitive 334 | description: 335 | name: typed_data 336 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "1.3.1" 340 | vm_service: 341 | dependency: transitive 342 | description: 343 | name: vm_service 344 | sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "9.4.0" 348 | watcher: 349 | dependency: transitive 350 | description: 351 | name: watcher 352 | sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "1.0.2" 356 | web_socket_channel: 357 | dependency: transitive 358 | description: 359 | name: web_socket_channel 360 | sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd" 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "2.2.0" 364 | webkit_inspection_protocol: 365 | dependency: transitive 366 | description: 367 | name: webkit_inspection_protocol 368 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "1.2.0" 372 | yaml: 373 | dependency: transitive 374 | description: 375 | name: yaml 376 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "3.1.1" 380 | sdks: 381 | dart: ">=2.18.2 <3.0.0" 382 | -------------------------------------------------------------------------------- /backends/dart_spry/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: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "58.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.10.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.0" 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 | collection: 45 | dependency: transitive 46 | description: 47 | name: collection 48 | sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.17.1" 52 | convert: 53 | dependency: transitive 54 | description: 55 | name: convert 56 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "3.1.1" 60 | coverage: 61 | dependency: transitive 62 | description: 63 | name: coverage 64 | sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.6.3" 68 | crypto: 69 | dependency: transitive 70 | description: 71 | name: crypto 72 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "3.0.2" 76 | file: 77 | dependency: transitive 78 | description: 79 | name: file 80 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "6.1.4" 84 | frontend_server_client: 85 | dependency: transitive 86 | description: 87 | name: frontend_server_client 88 | sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "3.2.0" 92 | glob: 93 | dependency: transitive 94 | description: 95 | name: glob 96 | sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "2.1.1" 100 | http_multi_server: 101 | dependency: transitive 102 | description: 103 | name: http_multi_server 104 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "3.2.1" 108 | http_parser: 109 | dependency: transitive 110 | description: 111 | name: http_parser 112 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "4.0.2" 116 | io: 117 | dependency: transitive 118 | description: 119 | name: io 120 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "1.0.4" 124 | js: 125 | dependency: transitive 126 | description: 127 | name: js 128 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "0.6.7" 132 | lints: 133 | dependency: "direct dev" 134 | description: 135 | name: lints 136 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "2.0.1" 140 | logging: 141 | dependency: transitive 142 | description: 143 | name: logging 144 | sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "1.2.0" 148 | matcher: 149 | dependency: transitive 150 | description: 151 | name: matcher 152 | sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "0.12.15" 156 | meta: 157 | dependency: transitive 158 | description: 159 | name: meta 160 | sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "1.9.1" 164 | mime: 165 | dependency: transitive 166 | description: 167 | name: mime 168 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "1.0.4" 172 | node_preamble: 173 | dependency: transitive 174 | description: 175 | name: node_preamble 176 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "2.0.2" 180 | package_config: 181 | dependency: transitive 182 | description: 183 | name: package_config 184 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "2.1.0" 188 | path: 189 | dependency: transitive 190 | description: 191 | name: path 192 | sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "1.9.0" 196 | pool: 197 | dependency: transitive 198 | description: 199 | name: pool 200 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "1.5.1" 204 | pub_semver: 205 | dependency: transitive 206 | description: 207 | name: pub_semver 208 | sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "2.1.3" 212 | routingkit: 213 | dependency: transitive 214 | description: 215 | name: routingkit 216 | sha256: bd0f94f96c3869e7dae0601b2ff218f7402d1d76d6bfb4b2387a1f4071968c6b 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "0.2.0" 220 | shelf: 221 | dependency: transitive 222 | description: 223 | name: shelf 224 | sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "1.4.0" 228 | shelf_packages_handler: 229 | dependency: transitive 230 | description: 231 | name: shelf_packages_handler 232 | sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "3.0.1" 236 | shelf_static: 237 | dependency: transitive 238 | description: 239 | name: shelf_static 240 | sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "1.1.1" 244 | shelf_web_socket: 245 | dependency: transitive 246 | description: 247 | name: shelf_web_socket 248 | sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "1.0.3" 252 | source_map_stack_trace: 253 | dependency: transitive 254 | description: 255 | name: source_map_stack_trace 256 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "2.1.1" 260 | source_maps: 261 | dependency: transitive 262 | description: 263 | name: source_maps 264 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "0.10.12" 268 | source_span: 269 | dependency: transitive 270 | description: 271 | name: source_span 272 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "1.10.0" 276 | spry: 277 | dependency: "direct main" 278 | description: 279 | name: spry 280 | sha256: b025ff346c21f5538fdd10a7253ec1282d2444ad205d11d67a7aa2b91da4a793 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "3.0.0" 284 | stack_trace: 285 | dependency: transitive 286 | description: 287 | name: stack_trace 288 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "1.11.0" 292 | stream_channel: 293 | dependency: transitive 294 | description: 295 | name: stream_channel 296 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "2.1.1" 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: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "1.24.1" 324 | test_api: 325 | dependency: transitive 326 | description: 327 | name: test_api 328 | sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "0.5.1" 332 | test_core: 333 | dependency: transitive 334 | description: 335 | name: test_core 336 | sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "0.5.1" 340 | typed_data: 341 | dependency: transitive 342 | description: 343 | name: typed_data 344 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "1.3.1" 348 | vm_service: 349 | dependency: transitive 350 | description: 351 | name: vm_service 352 | sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "11.3.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: 365 | dependency: transitive 366 | description: 367 | name: web 368 | sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05" 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "0.4.2" 372 | web_socket_channel: 373 | dependency: transitive 374 | description: 375 | name: web_socket_channel 376 | sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "2.3.0" 380 | webfetch: 381 | dependency: transitive 382 | description: 383 | name: webfetch 384 | sha256: "08cb156e0b476447da5c9d2cd30a4ca7d63270310153fc351aa536217d73d859" 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "0.0.15" 388 | webkit_inspection_protocol: 389 | dependency: transitive 390 | description: 391 | name: webkit_inspection_protocol 392 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 393 | url: "https://pub.dev" 394 | source: hosted 395 | version: "1.2.0" 396 | yaml: 397 | dependency: transitive 398 | description: 399 | name: yaml 400 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 401 | url: "https://pub.dev" 402 | source: hosted 403 | version: "3.1.1" 404 | sdks: 405 | dart: ">=3.2.0 <4.0.0" 406 | -------------------------------------------------------------------------------- /backends/dart_minerva/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: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "58.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.10.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.0" 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: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.17.1" 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: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "1.6.3" 76 | crypt: 77 | dependency: transitive 78 | description: 79 | name: crypt 80 | sha256: c12682393cc6aae221e278692d8a433e188db2064b7de5daa253fd62ccfa096f 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "4.2.1" 84 | crypto: 85 | dependency: transitive 86 | description: 87 | name: crypto 88 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "3.0.2" 92 | dio: 93 | dependency: "direct dev" 94 | description: 95 | name: dio 96 | sha256: "0894a098594263fe1caaba3520e3016d8a855caeb010a882273189cca10f11e9" 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "5.1.1" 100 | file: 101 | dependency: transitive 102 | description: 103 | name: file 104 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "6.1.4" 108 | frontend_server_client: 109 | dependency: transitive 110 | description: 111 | name: frontend_server_client 112 | sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "3.2.0" 116 | glob: 117 | dependency: transitive 118 | description: 119 | name: glob 120 | sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "2.1.1" 124 | http_multi_server: 125 | dependency: transitive 126 | description: 127 | name: http_multi_server 128 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "3.2.1" 132 | http_parser: 133 | dependency: transitive 134 | description: 135 | name: http_parser 136 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "4.0.2" 140 | intl: 141 | dependency: transitive 142 | description: 143 | name: intl 144 | sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "0.17.0" 148 | io: 149 | dependency: transitive 150 | description: 151 | name: io 152 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "1.0.4" 156 | js: 157 | dependency: transitive 158 | description: 159 | name: js 160 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "0.6.7" 164 | lints: 165 | dependency: "direct dev" 166 | description: 167 | name: lints 168 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "2.0.1" 172 | logging: 173 | dependency: transitive 174 | description: 175 | name: logging 176 | sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "1.1.1" 180 | matcher: 181 | dependency: transitive 182 | description: 183 | name: matcher 184 | sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "0.12.15" 188 | meta: 189 | dependency: transitive 190 | description: 191 | name: meta 192 | sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "1.9.1" 196 | mime: 197 | dependency: transitive 198 | description: 199 | name: mime 200 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "1.0.4" 204 | minerva: 205 | dependency: "direct main" 206 | description: 207 | name: minerva 208 | sha256: "8a9baddba5343622c125024975b15447c857298fd71346454fab4e05b88d7e79" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "0.3.3" 212 | node_preamble: 213 | dependency: transitive 214 | description: 215 | name: node_preamble 216 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "2.0.2" 220 | package_config: 221 | dependency: transitive 222 | description: 223 | name: package_config 224 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "2.1.0" 228 | path: 229 | dependency: transitive 230 | description: 231 | name: path 232 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "1.8.3" 236 | pool: 237 | dependency: transitive 238 | description: 239 | name: pool 240 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "1.5.1" 244 | pub_semver: 245 | dependency: transitive 246 | description: 247 | name: pub_semver 248 | sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "2.1.3" 252 | shelf: 253 | dependency: transitive 254 | description: 255 | name: shelf 256 | sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "1.4.0" 260 | shelf_packages_handler: 261 | dependency: transitive 262 | description: 263 | name: shelf_packages_handler 264 | sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "3.0.1" 268 | shelf_static: 269 | dependency: transitive 270 | description: 271 | name: shelf_static 272 | sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "1.1.1" 276 | shelf_web_socket: 277 | dependency: transitive 278 | description: 279 | name: shelf_web_socket 280 | sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "1.0.3" 284 | source_map_stack_trace: 285 | dependency: transitive 286 | description: 287 | name: source_map_stack_trace 288 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "2.1.1" 292 | source_maps: 293 | dependency: transitive 294 | description: 295 | name: source_maps 296 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "0.10.12" 300 | source_span: 301 | dependency: transitive 302 | description: 303 | name: source_span 304 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "1.10.0" 308 | stack_trace: 309 | dependency: transitive 310 | description: 311 | name: stack_trace 312 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "1.11.0" 316 | stream_channel: 317 | dependency: transitive 318 | description: 319 | name: stream_channel 320 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "2.1.1" 324 | string_scanner: 325 | dependency: transitive 326 | description: 327 | name: string_scanner 328 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "1.2.0" 332 | term_glyph: 333 | dependency: transitive 334 | description: 335 | name: term_glyph 336 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "1.2.1" 340 | test: 341 | dependency: "direct dev" 342 | description: 343 | name: test 344 | sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "1.24.1" 348 | test_api: 349 | dependency: transitive 350 | description: 351 | name: test_api 352 | sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "0.5.1" 356 | test_core: 357 | dependency: transitive 358 | description: 359 | name: test_core 360 | sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "0.5.1" 364 | typed_data: 365 | dependency: transitive 366 | description: 367 | name: typed_data 368 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "1.3.1" 372 | vm_service: 373 | dependency: transitive 374 | description: 375 | name: vm_service 376 | sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "11.3.0" 380 | watcher: 381 | dependency: transitive 382 | description: 383 | name: watcher 384 | sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "1.0.2" 388 | web_socket_channel: 389 | dependency: transitive 390 | description: 391 | name: web_socket_channel 392 | sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b 393 | url: "https://pub.dev" 394 | source: hosted 395 | version: "2.3.0" 396 | webkit_inspection_protocol: 397 | dependency: transitive 398 | description: 399 | name: webkit_inspection_protocol 400 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 401 | url: "https://pub.dev" 402 | source: hosted 403 | version: "1.2.0" 404 | yaml: 405 | dependency: transitive 406 | description: 407 | name: yaml 408 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 409 | url: "https://pub.dev" 410 | source: hosted 411 | version: "3.1.1" 412 | sdks: 413 | dart: ">=2.19.0 <3.0.0" 414 | -------------------------------------------------------------------------------- /backends/dart_shelf/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: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "58.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.10.0" 20 | args: 21 | dependency: "direct main" 22 | description: 23 | name: args 24 | sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.0" 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 | collection: 45 | dependency: transitive 46 | description: 47 | name: collection 48 | sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.17.1" 52 | compute: 53 | dependency: "direct main" 54 | description: 55 | name: compute 56 | sha256: b70190d59352a267a9765a77b97d0f619874c84d30c5193ae71050ee22ab2ef7 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.0.2" 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: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "1.6.3" 76 | crypto: 77 | dependency: transitive 78 | description: 79 | name: crypto 80 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "3.0.2" 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: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "2.1.1" 108 | http: 109 | dependency: "direct dev" 110 | description: 111 | name: http 112 | sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "0.13.5" 116 | http_methods: 117 | dependency: transitive 118 | description: 119 | name: http_methods 120 | sha256: c192bb6fb4ae99d06053f67a2c1c65350a29bc778a39d9a12b96bd2ec820e9dc 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "1.1.0" 124 | http_multi_server: 125 | dependency: transitive 126 | description: 127 | name: http_multi_server 128 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "3.2.1" 132 | http_parser: 133 | dependency: transitive 134 | description: 135 | name: http_parser 136 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "4.0.2" 140 | io: 141 | dependency: transitive 142 | description: 143 | name: io 144 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "1.0.4" 148 | js: 149 | dependency: transitive 150 | description: 151 | name: js 152 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "0.6.7" 156 | lints: 157 | dependency: "direct dev" 158 | description: 159 | name: lints 160 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "2.0.1" 164 | logging: 165 | dependency: transitive 166 | description: 167 | name: logging 168 | sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "1.1.1" 172 | matcher: 173 | dependency: transitive 174 | description: 175 | name: matcher 176 | sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "0.12.15" 180 | meta: 181 | dependency: transitive 182 | description: 183 | name: meta 184 | sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "1.9.1" 188 | mime: 189 | dependency: transitive 190 | description: 191 | name: mime 192 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "1.0.4" 196 | node_preamble: 197 | dependency: transitive 198 | description: 199 | name: node_preamble 200 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "2.0.2" 204 | package_config: 205 | dependency: transitive 206 | description: 207 | name: package_config 208 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "2.1.0" 212 | path: 213 | dependency: transitive 214 | description: 215 | name: path 216 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "1.8.3" 220 | pool: 221 | dependency: transitive 222 | description: 223 | name: pool 224 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "1.5.1" 228 | pub_semver: 229 | dependency: transitive 230 | description: 231 | name: pub_semver 232 | sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "2.1.3" 236 | shelf: 237 | dependency: "direct main" 238 | description: 239 | name: shelf 240 | sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "1.4.0" 244 | shelf_multipart: 245 | dependency: "direct main" 246 | description: 247 | name: shelf_multipart 248 | sha256: "6dc368d7778ea031e7f688b70ea95b1b27731116cf71d837f6a25df613d81902" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "1.0.0" 252 | shelf_packages_handler: 253 | dependency: transitive 254 | description: 255 | name: shelf_packages_handler 256 | sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "3.0.1" 260 | shelf_router: 261 | dependency: "direct main" 262 | description: 263 | name: shelf_router 264 | sha256: "0b0bfb835e8b2bb43c5341ee689f0d2851e9cea377a4f2db4ec06a1a99beace4" 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "1.1.3" 268 | shelf_static: 269 | dependency: transitive 270 | description: 271 | name: shelf_static 272 | sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "1.1.1" 276 | shelf_web_socket: 277 | dependency: transitive 278 | description: 279 | name: shelf_web_socket 280 | sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "1.0.3" 284 | source_map_stack_trace: 285 | dependency: transitive 286 | description: 287 | name: source_map_stack_trace 288 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "2.1.1" 292 | source_maps: 293 | dependency: transitive 294 | description: 295 | name: source_maps 296 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "0.10.12" 300 | source_span: 301 | dependency: transitive 302 | description: 303 | name: source_span 304 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "1.10.0" 308 | stack_trace: 309 | dependency: transitive 310 | description: 311 | name: stack_trace 312 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "1.11.0" 316 | stream_channel: 317 | dependency: transitive 318 | description: 319 | name: stream_channel 320 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "2.1.1" 324 | string_scanner: 325 | dependency: transitive 326 | description: 327 | name: string_scanner 328 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "1.2.0" 332 | term_glyph: 333 | dependency: transitive 334 | description: 335 | name: term_glyph 336 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "1.2.1" 340 | test: 341 | dependency: "direct dev" 342 | description: 343 | name: test 344 | sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "1.24.1" 348 | test_api: 349 | dependency: transitive 350 | description: 351 | name: test_api 352 | sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "0.5.1" 356 | test_core: 357 | dependency: transitive 358 | description: 359 | name: test_core 360 | sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "0.5.1" 364 | typed_data: 365 | dependency: transitive 366 | description: 367 | name: typed_data 368 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "1.3.1" 372 | vm_service: 373 | dependency: transitive 374 | description: 375 | name: vm_service 376 | sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "11.3.0" 380 | watcher: 381 | dependency: transitive 382 | description: 383 | name: watcher 384 | sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "1.0.2" 388 | web_socket_channel: 389 | dependency: transitive 390 | description: 391 | name: web_socket_channel 392 | sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b 393 | url: "https://pub.dev" 394 | source: hosted 395 | version: "2.3.0" 396 | webkit_inspection_protocol: 397 | dependency: transitive 398 | description: 399 | name: webkit_inspection_protocol 400 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 401 | url: "https://pub.dev" 402 | source: hosted 403 | version: "1.2.0" 404 | yaml: 405 | dependency: transitive 406 | description: 407 | name: yaml 408 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 409 | url: "https://pub.dev" 410 | source: hosted 411 | version: "3.1.1" 412 | sdks: 413 | dart: ">=2.19.0 <3.0.0" 414 | -------------------------------------------------------------------------------- /backends/dart_dia/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: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "58.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.10.0" 20 | args: 21 | dependency: "direct main" 22 | description: 23 | name: args 24 | sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.0" 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 | collection: 45 | dependency: transitive 46 | description: 47 | name: collection 48 | sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.17.1" 52 | compute: 53 | dependency: "direct main" 54 | description: 55 | name: compute 56 | sha256: b70190d59352a267a9765a77b97d0f619874c84d30c5193ae71050ee22ab2ef7 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.0.2" 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: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "1.6.3" 76 | crypto: 77 | dependency: transitive 78 | description: 79 | name: crypto 80 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "3.0.2" 84 | dia: 85 | dependency: "direct main" 86 | description: 87 | name: dia 88 | sha256: "66d795097c51a8fbff01b7e06ba1c864fce6445d12d56b84f447ad2411be094c" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "0.1.5" 92 | dia_body: 93 | dependency: "direct main" 94 | description: 95 | name: dia_body 96 | sha256: da294574ee2365a086a734833826c136652819a25c82ebb53240eb6052716c95 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "0.1.3" 100 | dia_router: 101 | dependency: "direct main" 102 | description: 103 | name: dia_router 104 | sha256: a28a0c1962af170cf65b0af1134b7c377c01aa00dfadbfbd03e9d2a403be7410 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "0.1.7" 108 | file: 109 | dependency: transitive 110 | description: 111 | name: file 112 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "6.1.4" 116 | frontend_server_client: 117 | dependency: transitive 118 | description: 119 | name: frontend_server_client 120 | sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "3.2.0" 124 | glob: 125 | dependency: transitive 126 | description: 127 | name: glob 128 | sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "2.1.1" 132 | http: 133 | dependency: "direct dev" 134 | description: 135 | name: http 136 | sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "0.13.5" 140 | http_multi_server: 141 | dependency: transitive 142 | description: 143 | name: http_multi_server 144 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "3.2.1" 148 | http_parser: 149 | dependency: transitive 150 | description: 151 | name: http_parser 152 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "4.0.2" 156 | io: 157 | dependency: transitive 158 | description: 159 | name: io 160 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "1.0.4" 164 | js: 165 | dependency: transitive 166 | description: 167 | name: js 168 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "0.6.7" 172 | lints: 173 | dependency: "direct dev" 174 | description: 175 | name: lints 176 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "2.0.1" 180 | logging: 181 | dependency: transitive 182 | description: 183 | name: logging 184 | sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "1.1.1" 188 | matcher: 189 | dependency: transitive 190 | description: 191 | name: matcher 192 | sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "0.12.15" 196 | meta: 197 | dependency: transitive 198 | description: 199 | name: meta 200 | sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "1.9.1" 204 | mime: 205 | dependency: transitive 206 | description: 207 | name: mime 208 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "1.0.4" 212 | node_preamble: 213 | dependency: transitive 214 | description: 215 | name: node_preamble 216 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "2.0.2" 220 | package_config: 221 | dependency: transitive 222 | description: 223 | name: package_config 224 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "2.1.0" 228 | path: 229 | dependency: transitive 230 | description: 231 | name: path 232 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "1.8.3" 236 | path_to_regexp: 237 | dependency: transitive 238 | description: 239 | name: path_to_regexp 240 | sha256: "169d78fbd55e61ea8873bcca545979f559d22238f66facdd7ef30870c7f53327" 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "0.4.0" 244 | pool: 245 | dependency: transitive 246 | description: 247 | name: pool 248 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "1.5.1" 252 | pub_semver: 253 | dependency: transitive 254 | description: 255 | name: pub_semver 256 | sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "2.1.3" 260 | shelf: 261 | dependency: transitive 262 | description: 263 | name: shelf 264 | sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "1.4.0" 268 | shelf_packages_handler: 269 | dependency: transitive 270 | description: 271 | name: shelf_packages_handler 272 | sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "3.0.1" 276 | shelf_static: 277 | dependency: transitive 278 | description: 279 | name: shelf_static 280 | sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "1.1.1" 284 | shelf_web_socket: 285 | dependency: transitive 286 | description: 287 | name: shelf_web_socket 288 | sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "1.0.3" 292 | source_map_stack_trace: 293 | dependency: transitive 294 | description: 295 | name: source_map_stack_trace 296 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "2.1.1" 300 | source_maps: 301 | dependency: transitive 302 | description: 303 | name: source_maps 304 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "0.10.12" 308 | source_span: 309 | dependency: transitive 310 | description: 311 | name: source_span 312 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "1.10.0" 316 | stack_trace: 317 | dependency: transitive 318 | description: 319 | name: stack_trace 320 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "1.11.0" 324 | stream_channel: 325 | dependency: transitive 326 | description: 327 | name: stream_channel 328 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "2.1.1" 332 | string_scanner: 333 | dependency: transitive 334 | description: 335 | name: string_scanner 336 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "1.2.0" 340 | term_glyph: 341 | dependency: transitive 342 | description: 343 | name: term_glyph 344 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "1.2.1" 348 | test: 349 | dependency: "direct dev" 350 | description: 351 | name: test 352 | sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "1.24.1" 356 | test_api: 357 | dependency: transitive 358 | description: 359 | name: test_api 360 | sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "0.5.1" 364 | test_core: 365 | dependency: transitive 366 | description: 367 | name: test_core 368 | sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "0.5.1" 372 | typed_data: 373 | dependency: transitive 374 | description: 375 | name: typed_data 376 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "1.3.1" 380 | uuid: 381 | dependency: transitive 382 | description: 383 | name: uuid 384 | sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "3.0.7" 388 | vm_service: 389 | dependency: transitive 390 | description: 391 | name: vm_service 392 | sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe 393 | url: "https://pub.dev" 394 | source: hosted 395 | version: "11.3.0" 396 | watcher: 397 | dependency: transitive 398 | description: 399 | name: watcher 400 | sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" 401 | url: "https://pub.dev" 402 | source: hosted 403 | version: "1.0.2" 404 | web_socket_channel: 405 | dependency: transitive 406 | description: 407 | name: web_socket_channel 408 | sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b 409 | url: "https://pub.dev" 410 | source: hosted 411 | version: "2.3.0" 412 | webkit_inspection_protocol: 413 | dependency: transitive 414 | description: 415 | name: webkit_inspection_protocol 416 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 417 | url: "https://pub.dev" 418 | source: hosted 419 | version: "1.2.0" 420 | yaml: 421 | dependency: transitive 422 | description: 423 | name: yaml 424 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 425 | url: "https://pub.dev" 426 | source: hosted 427 | version: "3.1.1" 428 | sdks: 429 | dart: ">=2.19.0 <3.0.0" 430 | -------------------------------------------------------------------------------- /backends/dart_conduit/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: a36ec4843dc30ea6bf652bf25e3448db6c5e8bcf4aa55f063a5d1dad216d8214 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "58.0.0" 12 | analyzer: 13 | dependency: transitive 14 | description: 15 | name: analyzer 16 | sha256: cc4242565347e98424ce9945c819c192ec0838cb9d1f6aa4a97cc96becbc5b27 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "5.10.0" 20 | args: 21 | dependency: transitive 22 | description: 23 | name: args 24 | sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.4.0" 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 | buffer: 45 | dependency: transitive 46 | description: 47 | name: buffer 48 | sha256: "8962c12174f53e2e848a6acd7ac7fd63d8a1a6a316c20c458a832d87eba5422a" 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "1.2.0" 52 | charcode: 53 | dependency: transitive 54 | description: 55 | name: charcode 56 | sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "1.3.1" 60 | collection: 61 | dependency: transitive 62 | description: 63 | name: collection 64 | sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.17.1" 68 | conduit: 69 | dependency: "direct main" 70 | description: 71 | name: conduit 72 | sha256: d3d29d83b0dd73b477ce778ee65da1f3e55729af7d7de802576c9693390cf11b 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "4.3.9" 76 | conduit_codable: 77 | dependency: transitive 78 | description: 79 | name: conduit_codable 80 | sha256: "488bed56b9046e125869be602fb1a02452b2fd2d19743837a615a15a3755548c" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "4.3.7" 84 | conduit_common: 85 | dependency: transitive 86 | description: 87 | name: conduit_common 88 | sha256: "240f88479de38425ad8b3b2810b9ab4ebaae4c897923f79fb0f2ef0cce8cc14f" 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "4.3.7" 92 | conduit_config: 93 | dependency: transitive 94 | description: 95 | name: conduit_config 96 | sha256: d0066a15db2b11cd2d07022a3d426cb909cd8deef35c233b332131edbc4d3a01 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "4.3.7" 100 | conduit_core: 101 | dependency: transitive 102 | description: 103 | name: conduit_core 104 | sha256: "5bffd0480be315eaf2f878ae352694f77add318d1d90a20c78864be82714015e" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "4.3.8" 108 | conduit_isolate_exec: 109 | dependency: transitive 110 | description: 111 | name: conduit_isolate_exec 112 | sha256: c3e5cc052ac89cf36df7c01202b4239e6c507c01306779c59b2570d26b76b792 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "4.3.7" 116 | conduit_open_api: 117 | dependency: transitive 118 | description: 119 | name: conduit_open_api 120 | sha256: "83f3f3dfece0c36a111655dc1d8f555fb4b2ca695d36876c325eb157d5ef9cb7" 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "4.3.7" 124 | conduit_password_hash: 125 | dependency: transitive 126 | description: 127 | name: conduit_password_hash 128 | sha256: "3735c77ac94b224b662f8c7dd19ac16743dc20eb2fe2092be061719572b758a7" 129 | url: "https://pub.dev" 130 | source: hosted 131 | version: "4.3.7" 132 | conduit_postgresql: 133 | dependency: transitive 134 | description: 135 | name: conduit_postgresql 136 | sha256: "8deced694b52a7ab8af02181180ad117a61d3124fe1b1326366d15e5ecaf06b9" 137 | url: "https://pub.dev" 138 | source: hosted 139 | version: "4.3.7" 140 | conduit_runtime: 141 | dependency: transitive 142 | description: 143 | name: conduit_runtime 144 | sha256: ba03e98585fcfb4b493484b1e43ae36a8a9ea024b62e787dea91ae4e41322a85 145 | url: "https://pub.dev" 146 | source: hosted 147 | version: "4.3.7" 148 | conduit_test: 149 | dependency: "direct dev" 150 | description: 151 | name: conduit_test 152 | sha256: efb3de0146c6dc3a926ac98753b3ed52583297b0e38549aee2b3a8999b4efb5e 153 | url: "https://pub.dev" 154 | source: hosted 155 | version: "4.3.7" 156 | convert: 157 | dependency: transitive 158 | description: 159 | name: convert 160 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" 161 | url: "https://pub.dev" 162 | source: hosted 163 | version: "3.1.1" 164 | coverage: 165 | dependency: transitive 166 | description: 167 | name: coverage 168 | sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" 169 | url: "https://pub.dev" 170 | source: hosted 171 | version: "1.6.3" 172 | crypto: 173 | dependency: transitive 174 | description: 175 | name: crypto 176 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 177 | url: "https://pub.dev" 178 | source: hosted 179 | version: "3.0.2" 180 | file: 181 | dependency: transitive 182 | description: 183 | name: file 184 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 185 | url: "https://pub.dev" 186 | source: hosted 187 | version: "6.1.4" 188 | frontend_server_client: 189 | dependency: transitive 190 | description: 191 | name: frontend_server_client 192 | sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" 193 | url: "https://pub.dev" 194 | source: hosted 195 | version: "3.2.0" 196 | glob: 197 | dependency: transitive 198 | description: 199 | name: glob 200 | sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" 201 | url: "https://pub.dev" 202 | source: hosted 203 | version: "2.1.1" 204 | http_multi_server: 205 | dependency: transitive 206 | description: 207 | name: http_multi_server 208 | sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" 209 | url: "https://pub.dev" 210 | source: hosted 211 | version: "3.2.1" 212 | http_parser: 213 | dependency: transitive 214 | description: 215 | name: http_parser 216 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 217 | url: "https://pub.dev" 218 | source: hosted 219 | version: "4.0.2" 220 | io: 221 | dependency: transitive 222 | description: 223 | name: io 224 | sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" 225 | url: "https://pub.dev" 226 | source: hosted 227 | version: "1.0.4" 228 | js: 229 | dependency: transitive 230 | description: 231 | name: js 232 | sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 233 | url: "https://pub.dev" 234 | source: hosted 235 | version: "0.6.7" 236 | logging: 237 | dependency: transitive 238 | description: 239 | name: logging 240 | sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" 241 | url: "https://pub.dev" 242 | source: hosted 243 | version: "1.1.1" 244 | matcher: 245 | dependency: transitive 246 | description: 247 | name: matcher 248 | sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" 249 | url: "https://pub.dev" 250 | source: hosted 251 | version: "0.12.15" 252 | meta: 253 | dependency: transitive 254 | description: 255 | name: meta 256 | sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" 257 | url: "https://pub.dev" 258 | source: hosted 259 | version: "1.9.1" 260 | mime: 261 | dependency: "direct main" 262 | description: 263 | name: mime 264 | sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e 265 | url: "https://pub.dev" 266 | source: hosted 267 | version: "1.0.4" 268 | node_preamble: 269 | dependency: transitive 270 | description: 271 | name: node_preamble 272 | sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" 273 | url: "https://pub.dev" 274 | source: hosted 275 | version: "2.0.2" 276 | package_config: 277 | dependency: transitive 278 | description: 279 | name: package_config 280 | sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" 281 | url: "https://pub.dev" 282 | source: hosted 283 | version: "2.1.0" 284 | path: 285 | dependency: transitive 286 | description: 287 | name: path 288 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" 289 | url: "https://pub.dev" 290 | source: hosted 291 | version: "1.8.3" 292 | pedantic: 293 | dependency: transitive 294 | description: 295 | name: pedantic 296 | sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" 297 | url: "https://pub.dev" 298 | source: hosted 299 | version: "1.11.1" 300 | pool: 301 | dependency: transitive 302 | description: 303 | name: pool 304 | sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" 305 | url: "https://pub.dev" 306 | source: hosted 307 | version: "1.5.1" 308 | postgres: 309 | dependency: transitive 310 | description: 311 | name: postgres 312 | sha256: "8a94c672fbfd252228862a8e786497828f650b427e51b2e624606756c64224e3" 313 | url: "https://pub.dev" 314 | source: hosted 315 | version: "2.6.1" 316 | pub_semver: 317 | dependency: transitive 318 | description: 319 | name: pub_semver 320 | sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" 321 | url: "https://pub.dev" 322 | source: hosted 323 | version: "2.1.3" 324 | pubspec: 325 | dependency: transitive 326 | description: 327 | name: pubspec 328 | sha256: f534a50a2b4d48dc3bc0ec147c8bd7c304280fff23b153f3f11803c4d49d927e 329 | url: "https://pub.dev" 330 | source: hosted 331 | version: "2.3.0" 332 | quiver: 333 | dependency: transitive 334 | description: 335 | name: quiver 336 | sha256: b1c1ac5ce6688d77f65f3375a9abb9319b3cb32486bdc7a1e0fdf004d7ba4e47 337 | url: "https://pub.dev" 338 | source: hosted 339 | version: "3.2.1" 340 | recase: 341 | dependency: transitive 342 | description: 343 | name: recase 344 | sha256: e4eb4ec2dcdee52dcf99cb4ceabaffc631d7424ee55e56f280bc039737f89213 345 | url: "https://pub.dev" 346 | source: hosted 347 | version: "4.1.0" 348 | sasl_scram: 349 | dependency: transitive 350 | description: 351 | name: sasl_scram 352 | sha256: a47207a436eb650f8fdcf54a2e2587b850dc3caef9973ce01f332b07a6fc9cb9 353 | url: "https://pub.dev" 354 | source: hosted 355 | version: "0.1.1" 356 | saslprep: 357 | dependency: transitive 358 | description: 359 | name: saslprep 360 | sha256: "79c9e163a82f55da542feaf0f7a59031e74493299c92008b2b404cd88d639bb4" 361 | url: "https://pub.dev" 362 | source: hosted 363 | version: "1.0.2" 364 | shelf: 365 | dependency: transitive 366 | description: 367 | name: shelf 368 | sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c 369 | url: "https://pub.dev" 370 | source: hosted 371 | version: "1.4.0" 372 | shelf_packages_handler: 373 | dependency: transitive 374 | description: 375 | name: shelf_packages_handler 376 | sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 377 | url: "https://pub.dev" 378 | source: hosted 379 | version: "3.0.1" 380 | shelf_static: 381 | dependency: transitive 382 | description: 383 | name: shelf_static 384 | sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c 385 | url: "https://pub.dev" 386 | source: hosted 387 | version: "1.1.1" 388 | shelf_web_socket: 389 | dependency: transitive 390 | description: 391 | name: shelf_web_socket 392 | sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 393 | url: "https://pub.dev" 394 | source: hosted 395 | version: "1.0.3" 396 | source_map_stack_trace: 397 | dependency: transitive 398 | description: 399 | name: source_map_stack_trace 400 | sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" 401 | url: "https://pub.dev" 402 | source: hosted 403 | version: "2.1.1" 404 | source_maps: 405 | dependency: transitive 406 | description: 407 | name: source_maps 408 | sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" 409 | url: "https://pub.dev" 410 | source: hosted 411 | version: "0.10.12" 412 | source_span: 413 | dependency: transitive 414 | description: 415 | name: source_span 416 | sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" 417 | url: "https://pub.dev" 418 | source: hosted 419 | version: "1.10.0" 420 | stack_trace: 421 | dependency: transitive 422 | description: 423 | name: stack_trace 424 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 425 | url: "https://pub.dev" 426 | source: hosted 427 | version: "1.11.0" 428 | stream_channel: 429 | dependency: transitive 430 | description: 431 | name: stream_channel 432 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 433 | url: "https://pub.dev" 434 | source: hosted 435 | version: "2.1.1" 436 | string_scanner: 437 | dependency: transitive 438 | description: 439 | name: string_scanner 440 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 441 | url: "https://pub.dev" 442 | source: hosted 443 | version: "1.2.0" 444 | term_glyph: 445 | dependency: transitive 446 | description: 447 | name: term_glyph 448 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 449 | url: "https://pub.dev" 450 | source: hosted 451 | version: "1.2.1" 452 | test: 453 | dependency: "direct dev" 454 | description: 455 | name: test 456 | sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" 457 | url: "https://pub.dev" 458 | source: hosted 459 | version: "1.24.1" 460 | test_api: 461 | dependency: transitive 462 | description: 463 | name: test_api 464 | sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb 465 | url: "https://pub.dev" 466 | source: hosted 467 | version: "0.5.1" 468 | test_core: 469 | dependency: transitive 470 | description: 471 | name: test_core 472 | sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" 473 | url: "https://pub.dev" 474 | source: hosted 475 | version: "0.5.1" 476 | typed_data: 477 | dependency: transitive 478 | description: 479 | name: typed_data 480 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 481 | url: "https://pub.dev" 482 | source: hosted 483 | version: "1.3.1" 484 | unorm_dart: 485 | dependency: transitive 486 | description: 487 | name: unorm_dart 488 | sha256: "5b35bff83fce4d76467641438f9e867dc9bcfdb8c1694854f230579d68cd8f4b" 489 | url: "https://pub.dev" 490 | source: hosted 491 | version: "0.2.0" 492 | uri: 493 | dependency: transitive 494 | description: 495 | name: uri 496 | sha256: "889eea21e953187c6099802b7b4cf5219ba8f3518f604a1033064d45b1b8268a" 497 | url: "https://pub.dev" 498 | source: hosted 499 | version: "1.0.0" 500 | vm_service: 501 | dependency: transitive 502 | description: 503 | name: vm_service 504 | sha256: f6deed8ed625c52864792459709183da231ebf66ff0cf09e69b573227c377efe 505 | url: "https://pub.dev" 506 | source: hosted 507 | version: "11.3.0" 508 | watcher: 509 | dependency: transitive 510 | description: 511 | name: watcher 512 | sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" 513 | url: "https://pub.dev" 514 | source: hosted 515 | version: "1.0.2" 516 | web_socket_channel: 517 | dependency: transitive 518 | description: 519 | name: web_socket_channel 520 | sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b 521 | url: "https://pub.dev" 522 | source: hosted 523 | version: "2.3.0" 524 | webkit_inspection_protocol: 525 | dependency: transitive 526 | description: 527 | name: webkit_inspection_protocol 528 | sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" 529 | url: "https://pub.dev" 530 | source: hosted 531 | version: "1.2.0" 532 | yaml: 533 | dependency: transitive 534 | description: 535 | name: yaml 536 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 537 | url: "https://pub.dev" 538 | source: hosted 539 | version: "3.1.1" 540 | sdks: 541 | dart: ">=2.19.2 <3.0.0" 542 | -------------------------------------------------------------------------------- /backends/node_express/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node_express", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "node_express", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "body-parser": "^1.20.1", 13 | "express": "^4.18.2", 14 | "express-fileupload": "^1.4.0" 15 | } 16 | }, 17 | "node_modules/accepts": { 18 | "version": "1.3.8", 19 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 20 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 21 | "dependencies": { 22 | "mime-types": "~2.1.34", 23 | "negotiator": "0.6.3" 24 | }, 25 | "engines": { 26 | "node": ">= 0.6" 27 | } 28 | }, 29 | "node_modules/array-flatten": { 30 | "version": "1.1.1", 31 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 32 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 33 | }, 34 | "node_modules/body-parser": { 35 | "version": "1.20.2", 36 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 37 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 38 | "dependencies": { 39 | "bytes": "3.1.2", 40 | "content-type": "~1.0.5", 41 | "debug": "2.6.9", 42 | "depd": "2.0.0", 43 | "destroy": "1.2.0", 44 | "http-errors": "2.0.0", 45 | "iconv-lite": "0.4.24", 46 | "on-finished": "2.4.1", 47 | "qs": "6.11.0", 48 | "raw-body": "2.5.2", 49 | "type-is": "~1.6.18", 50 | "unpipe": "1.0.0" 51 | }, 52 | "engines": { 53 | "node": ">= 0.8", 54 | "npm": "1.2.8000 || >= 1.4.16" 55 | } 56 | }, 57 | "node_modules/busboy": { 58 | "version": "1.6.0", 59 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 60 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 61 | "dependencies": { 62 | "streamsearch": "^1.1.0" 63 | }, 64 | "engines": { 65 | "node": ">=10.16.0" 66 | } 67 | }, 68 | "node_modules/bytes": { 69 | "version": "3.1.2", 70 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 71 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 72 | "engines": { 73 | "node": ">= 0.8" 74 | } 75 | }, 76 | "node_modules/call-bind": { 77 | "version": "1.0.2", 78 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 79 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 80 | "dependencies": { 81 | "function-bind": "^1.1.1", 82 | "get-intrinsic": "^1.0.2" 83 | }, 84 | "funding": { 85 | "url": "https://github.com/sponsors/ljharb" 86 | } 87 | }, 88 | "node_modules/content-disposition": { 89 | "version": "0.5.4", 90 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 91 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 92 | "dependencies": { 93 | "safe-buffer": "5.2.1" 94 | }, 95 | "engines": { 96 | "node": ">= 0.6" 97 | } 98 | }, 99 | "node_modules/content-type": { 100 | "version": "1.0.5", 101 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 102 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 103 | "engines": { 104 | "node": ">= 0.6" 105 | } 106 | }, 107 | "node_modules/cookie": { 108 | "version": "0.5.0", 109 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", 110 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", 111 | "engines": { 112 | "node": ">= 0.6" 113 | } 114 | }, 115 | "node_modules/cookie-signature": { 116 | "version": "1.0.6", 117 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 118 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 119 | }, 120 | "node_modules/debug": { 121 | "version": "2.6.9", 122 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 123 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 124 | "dependencies": { 125 | "ms": "2.0.0" 126 | } 127 | }, 128 | "node_modules/depd": { 129 | "version": "2.0.0", 130 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 131 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 132 | "engines": { 133 | "node": ">= 0.8" 134 | } 135 | }, 136 | "node_modules/destroy": { 137 | "version": "1.2.0", 138 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 139 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 140 | "engines": { 141 | "node": ">= 0.8", 142 | "npm": "1.2.8000 || >= 1.4.16" 143 | } 144 | }, 145 | "node_modules/ee-first": { 146 | "version": "1.1.1", 147 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 148 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 149 | }, 150 | "node_modules/encodeurl": { 151 | "version": "1.0.2", 152 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 153 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 154 | "engines": { 155 | "node": ">= 0.8" 156 | } 157 | }, 158 | "node_modules/escape-html": { 159 | "version": "1.0.3", 160 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 161 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 162 | }, 163 | "node_modules/etag": { 164 | "version": "1.8.1", 165 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 166 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 167 | "engines": { 168 | "node": ">= 0.6" 169 | } 170 | }, 171 | "node_modules/express": { 172 | "version": "4.18.2", 173 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", 174 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", 175 | "dependencies": { 176 | "accepts": "~1.3.8", 177 | "array-flatten": "1.1.1", 178 | "body-parser": "1.20.1", 179 | "content-disposition": "0.5.4", 180 | "content-type": "~1.0.4", 181 | "cookie": "0.5.0", 182 | "cookie-signature": "1.0.6", 183 | "debug": "2.6.9", 184 | "depd": "2.0.0", 185 | "encodeurl": "~1.0.2", 186 | "escape-html": "~1.0.3", 187 | "etag": "~1.8.1", 188 | "finalhandler": "1.2.0", 189 | "fresh": "0.5.2", 190 | "http-errors": "2.0.0", 191 | "merge-descriptors": "1.0.1", 192 | "methods": "~1.1.2", 193 | "on-finished": "2.4.1", 194 | "parseurl": "~1.3.3", 195 | "path-to-regexp": "0.1.7", 196 | "proxy-addr": "~2.0.7", 197 | "qs": "6.11.0", 198 | "range-parser": "~1.2.1", 199 | "safe-buffer": "5.2.1", 200 | "send": "0.18.0", 201 | "serve-static": "1.15.0", 202 | "setprototypeof": "1.2.0", 203 | "statuses": "2.0.1", 204 | "type-is": "~1.6.18", 205 | "utils-merge": "1.0.1", 206 | "vary": "~1.1.2" 207 | }, 208 | "engines": { 209 | "node": ">= 0.10.0" 210 | } 211 | }, 212 | "node_modules/express-fileupload": { 213 | "version": "1.4.0", 214 | "resolved": "https://registry.npmjs.org/express-fileupload/-/express-fileupload-1.4.0.tgz", 215 | "integrity": "sha512-RjzLCHxkv3umDeZKeFeMg8w7qe0V09w3B7oGZprr/oO2H/ISCgNzuqzn7gV3HRWb37GjRk429CCpSLS2KNTqMQ==", 216 | "dependencies": { 217 | "busboy": "^1.6.0" 218 | }, 219 | "engines": { 220 | "node": ">=12.0.0" 221 | } 222 | }, 223 | "node_modules/express/node_modules/body-parser": { 224 | "version": "1.20.1", 225 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", 226 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", 227 | "dependencies": { 228 | "bytes": "3.1.2", 229 | "content-type": "~1.0.4", 230 | "debug": "2.6.9", 231 | "depd": "2.0.0", 232 | "destroy": "1.2.0", 233 | "http-errors": "2.0.0", 234 | "iconv-lite": "0.4.24", 235 | "on-finished": "2.4.1", 236 | "qs": "6.11.0", 237 | "raw-body": "2.5.1", 238 | "type-is": "~1.6.18", 239 | "unpipe": "1.0.0" 240 | }, 241 | "engines": { 242 | "node": ">= 0.8", 243 | "npm": "1.2.8000 || >= 1.4.16" 244 | } 245 | }, 246 | "node_modules/express/node_modules/raw-body": { 247 | "version": "2.5.1", 248 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", 249 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", 250 | "dependencies": { 251 | "bytes": "3.1.2", 252 | "http-errors": "2.0.0", 253 | "iconv-lite": "0.4.24", 254 | "unpipe": "1.0.0" 255 | }, 256 | "engines": { 257 | "node": ">= 0.8" 258 | } 259 | }, 260 | "node_modules/finalhandler": { 261 | "version": "1.2.0", 262 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 263 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 264 | "dependencies": { 265 | "debug": "2.6.9", 266 | "encodeurl": "~1.0.2", 267 | "escape-html": "~1.0.3", 268 | "on-finished": "2.4.1", 269 | "parseurl": "~1.3.3", 270 | "statuses": "2.0.1", 271 | "unpipe": "~1.0.0" 272 | }, 273 | "engines": { 274 | "node": ">= 0.8" 275 | } 276 | }, 277 | "node_modules/forwarded": { 278 | "version": "0.2.0", 279 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 280 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 281 | "engines": { 282 | "node": ">= 0.6" 283 | } 284 | }, 285 | "node_modules/fresh": { 286 | "version": "0.5.2", 287 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 288 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 289 | "engines": { 290 | "node": ">= 0.6" 291 | } 292 | }, 293 | "node_modules/function-bind": { 294 | "version": "1.1.1", 295 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 296 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 297 | }, 298 | "node_modules/get-intrinsic": { 299 | "version": "1.2.0", 300 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 301 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 302 | "dependencies": { 303 | "function-bind": "^1.1.1", 304 | "has": "^1.0.3", 305 | "has-symbols": "^1.0.3" 306 | }, 307 | "funding": { 308 | "url": "https://github.com/sponsors/ljharb" 309 | } 310 | }, 311 | "node_modules/has": { 312 | "version": "1.0.3", 313 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 314 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 315 | "dependencies": { 316 | "function-bind": "^1.1.1" 317 | }, 318 | "engines": { 319 | "node": ">= 0.4.0" 320 | } 321 | }, 322 | "node_modules/has-symbols": { 323 | "version": "1.0.3", 324 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 325 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 326 | "engines": { 327 | "node": ">= 0.4" 328 | }, 329 | "funding": { 330 | "url": "https://github.com/sponsors/ljharb" 331 | } 332 | }, 333 | "node_modules/http-errors": { 334 | "version": "2.0.0", 335 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 336 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 337 | "dependencies": { 338 | "depd": "2.0.0", 339 | "inherits": "2.0.4", 340 | "setprototypeof": "1.2.0", 341 | "statuses": "2.0.1", 342 | "toidentifier": "1.0.1" 343 | }, 344 | "engines": { 345 | "node": ">= 0.8" 346 | } 347 | }, 348 | "node_modules/iconv-lite": { 349 | "version": "0.4.24", 350 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 351 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 352 | "dependencies": { 353 | "safer-buffer": ">= 2.1.2 < 3" 354 | }, 355 | "engines": { 356 | "node": ">=0.10.0" 357 | } 358 | }, 359 | "node_modules/inherits": { 360 | "version": "2.0.4", 361 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 362 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 363 | }, 364 | "node_modules/ipaddr.js": { 365 | "version": "1.9.1", 366 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 367 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 368 | "engines": { 369 | "node": ">= 0.10" 370 | } 371 | }, 372 | "node_modules/media-typer": { 373 | "version": "0.3.0", 374 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 375 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 376 | "engines": { 377 | "node": ">= 0.6" 378 | } 379 | }, 380 | "node_modules/merge-descriptors": { 381 | "version": "1.0.1", 382 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 383 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 384 | }, 385 | "node_modules/methods": { 386 | "version": "1.1.2", 387 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 388 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 389 | "engines": { 390 | "node": ">= 0.6" 391 | } 392 | }, 393 | "node_modules/mime": { 394 | "version": "1.6.0", 395 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 396 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 397 | "bin": { 398 | "mime": "cli.js" 399 | }, 400 | "engines": { 401 | "node": ">=4" 402 | } 403 | }, 404 | "node_modules/mime-db": { 405 | "version": "1.52.0", 406 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 407 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 408 | "engines": { 409 | "node": ">= 0.6" 410 | } 411 | }, 412 | "node_modules/mime-types": { 413 | "version": "2.1.35", 414 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 415 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 416 | "dependencies": { 417 | "mime-db": "1.52.0" 418 | }, 419 | "engines": { 420 | "node": ">= 0.6" 421 | } 422 | }, 423 | "node_modules/ms": { 424 | "version": "2.0.0", 425 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 426 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 427 | }, 428 | "node_modules/negotiator": { 429 | "version": "0.6.3", 430 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 431 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 432 | "engines": { 433 | "node": ">= 0.6" 434 | } 435 | }, 436 | "node_modules/object-inspect": { 437 | "version": "1.12.3", 438 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 439 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 440 | "funding": { 441 | "url": "https://github.com/sponsors/ljharb" 442 | } 443 | }, 444 | "node_modules/on-finished": { 445 | "version": "2.4.1", 446 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 447 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 448 | "dependencies": { 449 | "ee-first": "1.1.1" 450 | }, 451 | "engines": { 452 | "node": ">= 0.8" 453 | } 454 | }, 455 | "node_modules/parseurl": { 456 | "version": "1.3.3", 457 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 458 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 459 | "engines": { 460 | "node": ">= 0.8" 461 | } 462 | }, 463 | "node_modules/path-to-regexp": { 464 | "version": "0.1.7", 465 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 466 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 467 | }, 468 | "node_modules/proxy-addr": { 469 | "version": "2.0.7", 470 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 471 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 472 | "dependencies": { 473 | "forwarded": "0.2.0", 474 | "ipaddr.js": "1.9.1" 475 | }, 476 | "engines": { 477 | "node": ">= 0.10" 478 | } 479 | }, 480 | "node_modules/qs": { 481 | "version": "6.11.0", 482 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 483 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 484 | "dependencies": { 485 | "side-channel": "^1.0.4" 486 | }, 487 | "engines": { 488 | "node": ">=0.6" 489 | }, 490 | "funding": { 491 | "url": "https://github.com/sponsors/ljharb" 492 | } 493 | }, 494 | "node_modules/range-parser": { 495 | "version": "1.2.1", 496 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 497 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 498 | "engines": { 499 | "node": ">= 0.6" 500 | } 501 | }, 502 | "node_modules/raw-body": { 503 | "version": "2.5.2", 504 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 505 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 506 | "dependencies": { 507 | "bytes": "3.1.2", 508 | "http-errors": "2.0.0", 509 | "iconv-lite": "0.4.24", 510 | "unpipe": "1.0.0" 511 | }, 512 | "engines": { 513 | "node": ">= 0.8" 514 | } 515 | }, 516 | "node_modules/safe-buffer": { 517 | "version": "5.2.1", 518 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 519 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 520 | "funding": [ 521 | { 522 | "type": "github", 523 | "url": "https://github.com/sponsors/feross" 524 | }, 525 | { 526 | "type": "patreon", 527 | "url": "https://www.patreon.com/feross" 528 | }, 529 | { 530 | "type": "consulting", 531 | "url": "https://feross.org/support" 532 | } 533 | ] 534 | }, 535 | "node_modules/safer-buffer": { 536 | "version": "2.1.2", 537 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 538 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 539 | }, 540 | "node_modules/send": { 541 | "version": "0.18.0", 542 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 543 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 544 | "dependencies": { 545 | "debug": "2.6.9", 546 | "depd": "2.0.0", 547 | "destroy": "1.2.0", 548 | "encodeurl": "~1.0.2", 549 | "escape-html": "~1.0.3", 550 | "etag": "~1.8.1", 551 | "fresh": "0.5.2", 552 | "http-errors": "2.0.0", 553 | "mime": "1.6.0", 554 | "ms": "2.1.3", 555 | "on-finished": "2.4.1", 556 | "range-parser": "~1.2.1", 557 | "statuses": "2.0.1" 558 | }, 559 | "engines": { 560 | "node": ">= 0.8.0" 561 | } 562 | }, 563 | "node_modules/send/node_modules/ms": { 564 | "version": "2.1.3", 565 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 566 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 567 | }, 568 | "node_modules/serve-static": { 569 | "version": "1.15.0", 570 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 571 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 572 | "dependencies": { 573 | "encodeurl": "~1.0.2", 574 | "escape-html": "~1.0.3", 575 | "parseurl": "~1.3.3", 576 | "send": "0.18.0" 577 | }, 578 | "engines": { 579 | "node": ">= 0.8.0" 580 | } 581 | }, 582 | "node_modules/setprototypeof": { 583 | "version": "1.2.0", 584 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 585 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 586 | }, 587 | "node_modules/side-channel": { 588 | "version": "1.0.4", 589 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 590 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 591 | "dependencies": { 592 | "call-bind": "^1.0.0", 593 | "get-intrinsic": "^1.0.2", 594 | "object-inspect": "^1.9.0" 595 | }, 596 | "funding": { 597 | "url": "https://github.com/sponsors/ljharb" 598 | } 599 | }, 600 | "node_modules/statuses": { 601 | "version": "2.0.1", 602 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 603 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 604 | "engines": { 605 | "node": ">= 0.8" 606 | } 607 | }, 608 | "node_modules/streamsearch": { 609 | "version": "1.1.0", 610 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 611 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 612 | "engines": { 613 | "node": ">=10.0.0" 614 | } 615 | }, 616 | "node_modules/toidentifier": { 617 | "version": "1.0.1", 618 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 619 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 620 | "engines": { 621 | "node": ">=0.6" 622 | } 623 | }, 624 | "node_modules/type-is": { 625 | "version": "1.6.18", 626 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 627 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 628 | "dependencies": { 629 | "media-typer": "0.3.0", 630 | "mime-types": "~2.1.24" 631 | }, 632 | "engines": { 633 | "node": ">= 0.6" 634 | } 635 | }, 636 | "node_modules/unpipe": { 637 | "version": "1.0.0", 638 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 639 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 640 | "engines": { 641 | "node": ">= 0.8" 642 | } 643 | }, 644 | "node_modules/utils-merge": { 645 | "version": "1.0.1", 646 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 647 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 648 | "engines": { 649 | "node": ">= 0.4.0" 650 | } 651 | }, 652 | "node_modules/vary": { 653 | "version": "1.1.2", 654 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 655 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 656 | "engines": { 657 | "node": ">= 0.8" 658 | } 659 | } 660 | } 661 | } 662 | --------------------------------------------------------------------------------