[
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"pub\"\n    directory: \"/packages/kiwi\"\n    schedule:\n      interval: \"daily\"\n    labels:\n      - \"pub.dev\"\n      - \"kiwi\"\n      - \"dependencies\"\n      \n  - package-ecosystem: \"pub\"\n    directory: \"/packages/kiwi_generator\"\n    schedule:\n      interval: \"daily\"\n    labels:\n      - \"pub.dev\"\n      - \"kiwi generator\"\n      - \"dependencies\"\n\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    labels:\n      - \"github actions\"\n      - \"dependencies\""
  },
  {
    "path": ".github/no-response.yml",
    "content": "daysUntilClose: 14\nresponseRequiredLabel: \"waiting for customer response\"\ncloseComment: >\nThis issue has been automatically closed because there has been no response.\nIf there is extra information in the future this ticket will be reopenend."
  },
  {
    "path": ".github/workflows/build_all.yml",
    "content": "name: build_all\n\non:\n  push:\n    branches: [ 'master', 'stable' ]\n  pull_request:\n    branches: [ 'master', 'stable' ]\n\njobs:\n  flutter:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        version: [ stable ]\n    steps:\n      - uses: actions/checkout@v4\n      - uses: subosito/flutter-action@v2.18.0\n        with:\n          channel: ${{ matrix.version }}\n      - name: Build & format for flutter_kiwi example\n        run: |\n          cd examples/flutter_kiwi\n          flutter packages get\n          flutter packages pub run build_runner build --delete-conflicting-outputs\n          dart format .\n      - name: Use verify-changed-files to check if any of the above files changed.\n        uses: tj-actions/verify-changed-files@v20\n      - name: Run step only when any of the above files change.\n        if: steps.verify-changed-files.outputs.files_changed == 'true'\n        run: |\n          echo \"Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}\"\n  dart:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        sdk: [ stable, beta, dev ]\n    steps:\n      - uses: actions/checkout@v4\n      - uses: dart-lang/setup-dart@v1\n        with:\n          sdk: ${{ matrix.sdk }}\n      - name: Build & format for kiwi_generator\n        run: |\n          cd packages/kiwi_generator\n          dart pub get\n          dart run build_runner build --delete-conflicting-outputs\n          dart format .\n      - name: Build & format for dart_kiwi example\n        run: |\n          cd examples/dart_kiwi\n          dart pub get\n          dart run build_runner build --delete-conflicting-outputs\n          dart format .\n      - name: Use verify-changed-files to check if any of the above files changed.\n        uses: tj-actions/verify-changed-files@v20\n      - name: Run step only when any of the above files change.\n        if: steps.verify-changed-files.outputs.files_changed == 'true'\n        run: |\n          echo \"Changed files: ${{ steps.verify-changed-files.outputs.changed_files }}\"          \n\n"
  },
  {
    "path": ".github/workflows/changelog.yml",
    "content": "name: changelog\n\non:\n  push:\n    branches: [ 'master', 'stable' ]\n  pull_request:\n    branches: [ 'master', 'stable' ]\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: dart-lang/setup-dart@v1\n        with:\n          sdk: 'stable'\n      - name: Check changelog\n        run: |\n         cd tools/kiwi_cli_actions\n         dart pub get\n         dart run"
  },
  {
    "path": ".github/workflows/dart_kiwi_example.yml",
    "content": "name: dart_kiwi_example\n\non:\n  push:\n    branches: [ 'master', 'stable' ]\n  pull_request:\n    branches: [ 'master', 'stable' ]\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    defaults:\n      run:\n        working-directory: examples/dart_kiwi\n    steps:\n      - uses: actions/checkout@v4\n      - uses: subosito/flutter-action@v2.18.0\n        with:\n          channel: 'stable'\n      - run: flutter packages get\n      - run: flutter analyze\n      - run: dart format -o none --set-exit-if-changed .\n"
  },
  {
    "path": ".github/workflows/flutter_kiwi_example.yml",
    "content": "name: flutter_kiwi_example\n\non:\n  push:\n    branches: [ 'master', 'stable' ]\n  pull_request:\n    branches: [ 'master', 'stable' ]\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    defaults:\n      run:\n        working-directory: examples/flutter_kiwi\n    steps:\n      - uses: actions/checkout@v4\n      - uses: subosito/flutter-action@v2.18.0\n        with:\n          channel: 'stable'\n      - run: flutter packages get\n      - run: flutter analyze\n      - run: dart format -o none --set-exit-if-changed .\n"
  },
  {
    "path": ".github/workflows/kiwi.yml",
    "content": "name: kiwi\n\non:\n  push:\n    branches: [ 'master', 'stable' ]\n  pull_request:\n    branches: [ 'master', 'stable' ]\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        sdk: [ stable, beta, dev ]\n    defaults:\n      run:\n        working-directory: packages/kiwi\n    steps:\n      - uses: actions/checkout@v4\n      - uses: dart-lang/setup-dart@v1\n        with:\n          sdk: ${{ matrix.sdk }}\n      - run: dart pub get\n      - run: dart analyze --fatal-warnings .\n      - run: dart format -o none --set-exit-if-changed .\n      - run: dart test\n"
  },
  {
    "path": ".github/workflows/kiwi_generator.yml",
    "content": "name: kiwi_generator\n\non:\n  push:\n    branches: [ 'master', 'stable' ]\n  pull_request:\n    branches: [ 'master', 'stable' ]\n\njobs:\n  check:\n    runs-on: ubuntu-latest\n    strategy:\n      matrix:\n        sdk: [ stable, beta, dev ]\n    defaults:\n      run:\n        working-directory: packages/kiwi_generator\n    steps:\n      - uses: actions/checkout@v4\n      - uses: dart-lang/setup-dart@v1\n        with:\n          sdk: ${{ matrix.sdk }}\n      - run: dart pub get\n      - run: dart analyze --fatal-warnings .\n      - run: dart format -o none --set-exit-if-changed .\n      - run: dart test\n"
  },
  {
    "path": ".gitignore",
    "content": "# See https://www.dartlang.org/guides/libraries/private-files\n\n# Files and directories created by pub\n.dart_tool/\n.packages\n.pub/\nbuild/\n# If you're building an application, you may want to check-in your pubspec.lock\npubspec.lock\n\n# Directory created by dartdoc\n# If you don't generate documentation locally you can remove this line.\ndoc/api/\n.idea/\n.vscode/"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Romain Rastel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "# kiwi\n\n[![kiwi](https://github.com/gbtb16/kiwi/actions/workflows/kiwi.yml/badge.svg?branch=master)](https://github.com/gbtb16/kiwi/actions/workflows/kiwi.yml)\n[![kiwi_generator](https://github.com/gbtb16/kiwi/actions/workflows/kiwi_generator.yml/badge.svg?branch=master)](https://github.com/gbtb16/kiwi/actions/workflows/kiwi_generator.yml)\n[![dart_kiwi_example](https://github.com/gbtb16/kiwi/actions/workflows/dart_kiwi_example.yml/badge.svg?branch=master)](https://github.com/gbtb16/kiwi/actions/workflows/dart_kiwi_example.yml)\n[![flutter_kiwi_example](https://github.com/gbtb16/kiwi/actions/workflows/flutter_kiwi_example.yml/badge.svg?branch=master)](https://github.com/gbtb16/kiwi/actions/workflows/flutter_kiwi_example.yml)\n\n![Logo](https://raw.githubusercontent.com/gbtb16/kiwi/master/images/logo.png)\n\nA simple yet efficient IoC container for Dart and Flutter, coupled with a powerful generator to allow you to write less code.\n\nThe container does not rely on reflection, it's just a `Map`, so it's fast.\n\nWhile using the generator, only constructor injection is supported.\n\n## Kiwi\n\n[![Pub](https://img.shields.io/pub/v/kiwi.svg)](https://pub.dartlang.org/packages/kiwi)\n\n[Source Code](https://github.com/gbtb16/kiwi/tree/master/packages/kiwi)\n\nThe core package providing the IoC container and the annotations which has no dependencies.\n\nImport it into your pubspec `dependencies:` section.\n\n## Kiwi Generator\n\n[![Pub](https://img.shields.io/pub/v/kiwi_generator.svg)](https://pub.dartlang.org/packages/kiwi_generator)\n\n[Source Code](https://github.com/gbtb16/kiwi/tree/master/packages/kiwi_generator)\n\nThe package providing the generator.\n\nImport it into your pubspec `dev_dependencies:` section.\n\n## Dart Kiwi Example\n\n[Source Code](https://github.com/gbtb16/kiwi/tree/master/examples/dart_kiwi)\n\nAn example showing how to setup `kiwi` and `kiwi_generator` inside a Dart CLI project.\n\n## Flutter Kiwi Example\n\n[Source Code](https://github.com/gbtb16/kiwi/tree/master/examples/flutter_kiwi)\n\nAn example showing how to setup `kiwi` and `kiwi_generator` inside a Flutter project.\n\n## Contributions\n\nFeel free to contribute to this project.\n\nIf you find a bug or want a feature, but don't know how to fix/implement it, please fill an [issue](https://github.com/gbtb16/kiwi/issues).  \nIf you fixed a bug or implemented a new feature, please send a [pull request](https://github.com/gbtb16/kiwi/pulls)."
  },
  {
    "path": "examples/dart_kiwi/.gitignore",
    "content": "# Files and directories created by pub\n.dart_tool/\n.packages\n# Remove the following pattern if you wish to check in your lock file\npubspec.lock\n\n# Conventional directory for build outputs\nbuild/\n\n# Directory created by dartdoc\ndoc/api/\n"
  },
  {
    "path": "examples/dart_kiwi/CHANGELOG.md",
    "content": "## 0.1.0\n* Initial Open Source release."
  },
  {
    "path": "examples/dart_kiwi/README.md",
    "content": "# Dart Example\n\nAn example of how to use [kiwi](https://github.com/gbtb16/kiwi/tree/master/kiwi) coupled with [kiwi_generator](https://github.com/gbtb16/kiwi/tree/master/kiwi_generator).\n\nThis is an adaptation of the \"Coffee\" [example from Google/Inject](https://github.com/google/inject.dart/tree/master/example/coffee).\n\nTo launch the generator, execute the following command:\n\n```bash\npub run build_runner build\n```"
  },
  {
    "path": "examples/dart_kiwi/analysis_options.yaml",
    "content": "analyzer:\n#   exclude:\n#     - path/to/excluded/files/**\n\n# Lint rules and documentation, see http://dart-lang.github.io/linter/lints\nlinter:\n  rules:\n    - cancel_subscriptions\n    - hash_and_equals\n    - collection_methods_unrelated_type\n    - test_types_in_equals\n    - unrelated_type_equality_checks\n    - valid_regexps\n"
  },
  {
    "path": "examples/dart_kiwi/bin/dart_kiwi.dart",
    "content": "import 'package:dart_kiwi/src/models/coffee_maker.dart';\nimport 'package:dart_kiwi/src/modules/drip_coffee_module.dart';\nimport 'package:kiwi/kiwi.dart';\n\nvoid main(List<String> arguments) async {\n  CoffeeInjector coffeeInjector = getCoffeeInjector();\n  coffeeInjector.configure();\n\n  final container = KiwiContainer();\n\n  CoffeeMaker coffeeMaker = container<CoffeeMaker>();\n  coffeeMaker.brew();\n}\n"
  },
  {
    "path": "examples/dart_kiwi/example.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n    </content>\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Dart Packages\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "examples/dart_kiwi/lib/src/models/coffee_maker.dart",
    "content": "import 'package:dart_kiwi/src/models/heater.dart';\nimport 'package:dart_kiwi/src/models/model.dart';\nimport 'package:dart_kiwi/src/models/pump.dart';\n\nclass CoffeeMaker {\n  final Heater _heater;\n  final Pump _pump;\n  final Model _model;\n\n  const CoffeeMaker(\n    this._heater,\n    this._pump,\n    this._model,\n  );\n\n  void brew() {\n    _heater.on();\n    _pump.pump();\n    print(' [_]P coffee! [_]P');\n    print(' Thanks for using $_model');\n    _heater.off();\n  }\n}\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/models/electric_heater.dart",
    "content": "import 'package:dart_kiwi/src/models/heater.dart';\n\nclass PowerOutlet {\n  const PowerOutlet();\n}\n\nclass Electricity {\n  const Electricity(PowerOutlet outlet);\n}\n\nclass ElectricHeater implements Heater {\n  ElectricHeater(Electricity electricity);\n\n  bool _heating = false;\n\n  @override\n  void on() {\n    print('heating');\n    _heating = true;\n  }\n\n  @override\n  void off() {\n    _heating = false;\n  }\n\n  @override\n  bool get isHot => _heating;\n}\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/models/heater.dart",
    "content": "abstract interface class Heater {\n  void on();\n  void off();\n  bool get isHot;\n}\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/models/model.dart",
    "content": "class Model {\n  const Model(\n    this.brand,\n    this.name,\n  );\n  final String name;\n  final String brand;\n\n  @override\n  String toString() => '$name by $brand';\n}\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/models/pump.dart",
    "content": "abstract interface class Pump {\n  void pump();\n}\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/models/thermosiphon.dart",
    "content": "import 'package:dart_kiwi/src/models/heater.dart';\nimport 'package:dart_kiwi/src/models/pump.dart';\n\nclass Thermosiphon implements Pump {\n  final Heater _heater;\n\n  const Thermosiphon(this._heater);\n\n  @override\n  void pump() {\n    if (_heater.isHot) {\n      print('pumping water');\n    }\n  }\n}\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/modules/drip_coffee_module.dart",
    "content": "import 'package:dart_kiwi/src/models/coffee_maker.dart';\nimport 'package:dart_kiwi/src/models/electric_heater.dart';\nimport 'package:dart_kiwi/src/models/heater.dart';\nimport 'package:dart_kiwi/src/models/model.dart';\nimport 'package:dart_kiwi/src/models/pump.dart';\nimport 'package:dart_kiwi/src/models/thermosiphon.dart';\nimport 'package:kiwi/kiwi.dart';\n\npart 'drip_coffee_module.g.dart';\n\nabstract class CoffeeInjector {\n  void configure() {\n    _configureInstances();\n    _configureFactories();\n  }\n\n  void _configureInstances() {\n    final container = KiwiContainer();\n    container.registerInstance(Model('DartCoffee', 'DripCoffeeStandard'));\n  }\n\n  @Register.factory(PowerOutlet)\n  @Register.singleton(Electricity)\n  @Register.singleton(Heater, from: ElectricHeater)\n  @Register.singleton(Pump, from: Thermosiphon)\n  @Register.factory(CoffeeMaker)\n  void _configureFactories();\n}\n\nCoffeeInjector getCoffeeInjector() => _$CoffeeInjector();\n"
  },
  {
    "path": "examples/dart_kiwi/lib/src/modules/drip_coffee_module.g.dart",
    "content": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'drip_coffee_module.dart';\n\n// **************************************************************************\n// KiwiInjectorGenerator\n// **************************************************************************\n\nclass _$CoffeeInjector extends CoffeeInjector {\n  @override\n  void _configureFactories() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerFactory((c) => PowerOutlet())\n      ..registerSingleton((c) => Electricity(c.resolve<PowerOutlet>()))\n      ..registerSingleton<Heater>(\n          (c) => ElectricHeater(c.resolve<Electricity>()))\n      ..registerSingleton<Pump>((c) => Thermosiphon(c.resolve<Heater>()))\n      ..registerFactory((c) => CoffeeMaker(\n          c.resolve<Heater>(), c.resolve<Pump>(), c.resolve<Model>()));\n  }\n}\n"
  },
  {
    "path": "examples/dart_kiwi/pubspec.yaml",
    "content": "name: dart_kiwi\ndescription: A sample command-line application as an example for kiwi.\nversion: 1.0.0+2\npublish_to: none\n\nenvironment:\n  sdk: '>=3.0.0 <4.0.0'\n\ndependencies:\n  kiwi: ^5.0.0\n\ndependency_overrides:\n  kiwi:\n    path: ../../packages/kiwi/\n  kiwi_generator:\n    path: ../../packages/kiwi_generator/\n  \ndev_dependencies:\n  test: ^1.23.1\n  build_runner: ^2.3.3\n  kiwi_generator: ^4.2.0"
  },
  {
    "path": "examples/flutter_kiwi/.gitignore",
    "content": ".DS_Store\n.dart_tool/\n\n.packages\n.pub/\n\nbuild/\n\n.flutter-plugins\n\n**/ios/Flutter/flutter_export_environment.sh\n"
  },
  {
    "path": "examples/flutter_kiwi/.metadata",
    "content": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrades etc.\n#\n# This file should be version controlled and should not be manually edited.\n\nversion:\n  revision: 3b309bda072a6b326e8aa4591a5836af600923ce\n  channel: beta\n"
  },
  {
    "path": "examples/flutter_kiwi/README.md",
    "content": "# flutter_example\n\nAn example for **kiwi**, just to demonstrate how it can be used with Flutter.\n\nTo launch the generator, execute the following command:\n\n```bash\nflutter packages pub run build_runner build\n```\n"
  },
  {
    "path": "examples/flutter_kiwi/android/.gitignore",
    "content": "*.iml\n*.class\n.gradle\n/local.properties\n/.idea/workspace.xml\n/.idea/libraries\n.DS_Store\n/build\n/captures\nGeneratedPluginRegistrant.java\n"
  },
  {
    "path": "examples/flutter_kiwi/android/app/build.gradle",
    "content": "def localProperties = new Properties()\ndef localPropertiesFile = rootProject.file('local.properties')\nif (localPropertiesFile.exists()) {\n    localPropertiesFile.withReader('UTF-8') { reader ->\n        localProperties.load(reader)\n    }\n}\n\ndef flutterRoot = localProperties.getProperty('flutter.sdk')\nif (flutterRoot == null) {\n    throw new GradleException(\"Flutter SDK not found. Define location with flutter.sdk in the local.properties file.\")\n}\n\ndef flutterVersionCode = localProperties.getProperty('flutter.versionCode')\nif (flutterVersionCode == null) {\n    flutterVersionCode = '1'\n}\n\ndef flutterVersionName = localProperties.getProperty('flutter.versionName')\nif (flutterVersionName == null) {\n    flutterVersionName = '1.0'\n}\n\napply plugin: 'com.android.application'\napply from: \"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle\"\n\nandroid {\n    compileSdkVersion 30\n\n    lintOptions {\n        disable 'InvalidPackage'\n    }\n\n    defaultConfig {\n        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).\n        applicationId \"com.example.flutterexample\"\n        minSdkVersion 16\n        targetSdkVersion 30\n        versionCode flutterVersionCode.toInteger()\n        versionName flutterVersionName\n        testInstrumentationRunner \"androidx.test.runner.AndroidJUnitRunner\"\n    }\n\n    buildTypes {\n        release {\n            // TODO: Add your own signing config for the release build.\n            // Signing with the debug keys for now, so `flutter run --release` works.\n            signingConfig signingConfigs.debug\n        }\n    }\n}\n\nflutter {\n    source '../..'\n}\n\ndependencies {\n    testImplementation 'junit:junit:4.12'\n    androidTestImplementation 'androidx.test:runner:1.1.0'\n    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/android/app/src/main/AndroidManifest.xml",
    "content": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n    package=\"com.example.flutterexample\">\n\n    <uses-permission android:name=\"android.permission.INTERNET\" />\n\n    <application\n        android:icon=\"@mipmap/ic_launcher\"\n        android:label=\"flutter_example\">\n        <activity\n            android:name=\".MainActivity\"\n            android:configChanges=\"orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density\"\n            android:hardwareAccelerated=\"true\"\n            android:launchMode=\"singleTop\"\n            android:theme=\"@style/LaunchTheme\"\n            android:windowSoftInputMode=\"adjustResize\">\n            <meta-data\n                android:name=\"io.flutter.embedding.android.SplashScreenDrawable\"\n                android:resource=\"@drawable/launch_background\" />\n            <meta-data\n                android:name=\"io.flutter.embedding.android.NormalTheme\"\n                android:resource=\"@style/NormalTheme\" />\n\n            <intent-filter>\n                <action android:name=\"android.intent.action.MAIN\" />\n                <category android:name=\"android.intent.category.LAUNCHER\" />\n            </intent-filter>\n        </activity>\n\n        <meta-data\n            android:name=\"flutterEmbedding\"\n            android:value=\"2\" />\n    </application>\n</manifest>\n"
  },
  {
    "path": "examples/flutter_kiwi/android/app/src/main/java/com/example/flutterexample/MainActivity.java",
    "content": "package com.example.flutterexample;\n\nimport io.flutter.embedding.android.FlutterActivity;\n\npublic class MainActivity extends FlutterActivity {\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/android/app/src/main/res/drawable/launch_background.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n    <item android:drawable=\"@android:color/white\" />\n</layer-list>\n"
  },
  {
    "path": "examples/flutter_kiwi/android/app/src/main/res/values/styles.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n    <style name=\"LaunchTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n    <style name=\"NormalTheme\" parent=\"@android:style/Theme.Black.NoTitleBar\">\n        <item name=\"android:windowBackground\">@drawable/launch_background</item>\n    </style>\n</resources>\n"
  },
  {
    "path": "examples/flutter_kiwi/android/build.gradle",
    "content": "buildscript {\n    repositories {\n        google()\n        jcenter()\n    }\n\n    dependencies {\n        classpath 'com.android.tools.build:gradle:4.1.0'\n    }\n}\n\nallprojects {\n    repositories {\n        google()\n        jcenter()\n    }\n}\n\nrootProject.buildDir = '../build'\nsubprojects {\n    project.buildDir = \"${rootProject.buildDir}/${project.name}\"\n}\nsubprojects {\n    project.evaluationDependsOn(':app')\n}\n\ntask clean(type: Delete) {\n    delete rootProject.buildDir\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/android/gradle/wrapper/gradle-wrapper.properties",
    "content": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributions/gradle-6.7-all.zip\nzipStoreBase=GRADLE_USER_HOME\nzipStorePath=wrapper/dists\n"
  },
  {
    "path": "examples/flutter_kiwi/android/gradle.properties",
    "content": "org.gradle.jvmargs=-Xmx1536M\nandroid.useAndroidX=true\nandroid.enableJetifier=true\n"
  },
  {
    "path": "examples/flutter_kiwi/android/gradlew",
    "content": "#!/usr/bin/env bash\n\n##############################################################################\n##\n##  Gradle start up script for UN*X\n##\n##############################################################################\n\n# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nDEFAULT_JVM_OPTS=\"\"\n\nAPP_NAME=\"Gradle\"\nAPP_BASE_NAME=`basename \"$0\"`\n\n# Use the maximum available, or set MAX_FD != -1 to use that value.\nMAX_FD=\"maximum\"\n\nwarn ( ) {\n    echo \"$*\"\n}\n\ndie ( ) {\n    echo\n    echo \"$*\"\n    echo\n    exit 1\n}\n\n# OS specific support (must be 'true' or 'false').\ncygwin=false\nmsys=false\ndarwin=false\ncase \"`uname`\" in\n  CYGWIN* )\n    cygwin=true\n    ;;\n  Darwin* )\n    darwin=true\n    ;;\n  MINGW* )\n    msys=true\n    ;;\nesac\n\n# Attempt to set APP_HOME\n# Resolve links: $0 may be a link\nPRG=\"$0\"\n# Need this for relative symlinks.\nwhile [ -h \"$PRG\" ] ; do\n    ls=`ls -ld \"$PRG\"`\n    link=`expr \"$ls\" : '.*-> \\(.*\\)$'`\n    if expr \"$link\" : '/.*' > /dev/null; then\n        PRG=\"$link\"\n    else\n        PRG=`dirname \"$PRG\"`\"/$link\"\n    fi\ndone\nSAVED=\"`pwd`\"\ncd \"`dirname \\\"$PRG\\\"`/\" >/dev/null\nAPP_HOME=\"`pwd -P`\"\ncd \"$SAVED\" >/dev/null\n\nCLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar\n\n# Determine the Java command to use to start the JVM.\nif [ -n \"$JAVA_HOME\" ] ; then\n    if [ -x \"$JAVA_HOME/jre/sh/java\" ] ; then\n        # IBM's JDK on AIX uses strange locations for the executables\n        JAVACMD=\"$JAVA_HOME/jre/sh/java\"\n    else\n        JAVACMD=\"$JAVA_HOME/bin/java\"\n    fi\n    if [ ! -x \"$JAVACMD\" ] ; then\n        die \"ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\n    fi\nelse\n    JAVACMD=\"java\"\n    which java >/dev/null 2>&1 || die \"ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\n\nPlease set the JAVA_HOME variable in your environment to match the\nlocation of your Java installation.\"\nfi\n\n# Increase the maximum file descriptors if we can.\nif [ \"$cygwin\" = \"false\" -a \"$darwin\" = \"false\" ] ; then\n    MAX_FD_LIMIT=`ulimit -H -n`\n    if [ $? -eq 0 ] ; then\n        if [ \"$MAX_FD\" = \"maximum\" -o \"$MAX_FD\" = \"max\" ] ; then\n            MAX_FD=\"$MAX_FD_LIMIT\"\n        fi\n        ulimit -n $MAX_FD\n        if [ $? -ne 0 ] ; then\n            warn \"Could not set maximum file descriptor limit: $MAX_FD\"\n        fi\n    else\n        warn \"Could not query maximum file descriptor limit: $MAX_FD_LIMIT\"\n    fi\nfi\n\n# For Darwin, add options to specify how the application appears in the dock\nif $darwin; then\n    GRADLE_OPTS=\"$GRADLE_OPTS \\\"-Xdock:name=$APP_NAME\\\" \\\"-Xdock:icon=$APP_HOME/media/gradle.icns\\\"\"\nfi\n\n# For Cygwin, switch paths to Windows format before running java\nif $cygwin ; then\n    APP_HOME=`cygpath --path --mixed \"$APP_HOME\"`\n    CLASSPATH=`cygpath --path --mixed \"$CLASSPATH\"`\n    JAVACMD=`cygpath --unix \"$JAVACMD\"`\n\n    # We build the pattern for arguments to be converted via cygpath\n    ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`\n    SEP=\"\"\n    for dir in $ROOTDIRSRAW ; do\n        ROOTDIRS=\"$ROOTDIRS$SEP$dir\"\n        SEP=\"|\"\n    done\n    OURCYGPATTERN=\"(^($ROOTDIRS))\"\n    # Add a user-defined pattern to the cygpath arguments\n    if [ \"$GRADLE_CYGPATTERN\" != \"\" ] ; then\n        OURCYGPATTERN=\"$OURCYGPATTERN|($GRADLE_CYGPATTERN)\"\n    fi\n    # Now convert the arguments - kludge to limit ourselves to /bin/sh\n    i=0\n    for arg in \"$@\" ; do\n        CHECK=`echo \"$arg\"|egrep -c \"$OURCYGPATTERN\" -`\n        CHECK2=`echo \"$arg\"|egrep -c \"^-\"`                                 ### Determine if an option\n\n        if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition\n            eval `echo args$i`=`cygpath --path --ignore --mixed \"$arg\"`\n        else\n            eval `echo args$i`=\"\\\"$arg\\\"\"\n        fi\n        i=$((i+1))\n    done\n    case $i in\n        (0) set -- ;;\n        (1) set -- \"$args0\" ;;\n        (2) set -- \"$args0\" \"$args1\" ;;\n        (3) set -- \"$args0\" \"$args1\" \"$args2\" ;;\n        (4) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" ;;\n        (5) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" ;;\n        (6) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" ;;\n        (7) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" ;;\n        (8) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" ;;\n        (9) set -- \"$args0\" \"$args1\" \"$args2\" \"$args3\" \"$args4\" \"$args5\" \"$args6\" \"$args7\" \"$args8\" ;;\n    esac\nfi\n\n# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules\nfunction splitJvmOpts() {\n    JVM_OPTS=(\"$@\")\n}\neval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS\nJVM_OPTS[${#JVM_OPTS[*]}]=\"-Dorg.gradle.appname=$APP_BASE_NAME\"\n\nexec \"$JAVACMD\" \"${JVM_OPTS[@]}\" -classpath \"$CLASSPATH\" org.gradle.wrapper.GradleWrapperMain \"$@\"\n"
  },
  {
    "path": "examples/flutter_kiwi/android/gradlew.bat",
    "content": "@if \"%DEBUG%\" == \"\" @echo off\n@rem ##########################################################################\n@rem\n@rem  Gradle startup script for Windows\n@rem\n@rem ##########################################################################\n\n@rem Set local scope for the variables with windows NT shell\nif \"%OS%\"==\"Windows_NT\" setlocal\n\n@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.\nset DEFAULT_JVM_OPTS=\n\nset DIRNAME=%~dp0\nif \"%DIRNAME%\" == \"\" set DIRNAME=.\nset APP_BASE_NAME=%~n0\nset APP_HOME=%DIRNAME%\n\n@rem Find java.exe\nif defined JAVA_HOME goto findJavaFromJavaHome\n\nset JAVA_EXE=java.exe\n%JAVA_EXE% -version >NUL 2>&1\nif \"%ERRORLEVEL%\" == \"0\" goto init\n\necho.\necho ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:findJavaFromJavaHome\nset JAVA_HOME=%JAVA_HOME:\"=%\nset JAVA_EXE=%JAVA_HOME%/bin/java.exe\n\nif exist \"%JAVA_EXE%\" goto init\n\necho.\necho ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%\necho.\necho Please set the JAVA_HOME variable in your environment to match the\necho location of your Java installation.\n\ngoto fail\n\n:init\n@rem Get command-line arguments, handling Windowz variants\n\nif not \"%OS%\" == \"Windows_NT\" goto win9xME_args\nif \"%@eval[2+2]\" == \"4\" goto 4NT_args\n\n:win9xME_args\n@rem Slurp the command line arguments.\nset CMD_LINE_ARGS=\nset _SKIP=2\n\n:win9xME_args_slurp\nif \"x%~1\" == \"x\" goto execute\n\nset CMD_LINE_ARGS=%*\ngoto execute\n\n:4NT_args\n@rem Get arguments from the 4NT Shell from JP Software\nset CMD_LINE_ARGS=%$\n\n:execute\n@rem Setup the command line\n\nset CLASSPATH=%APP_HOME%\\gradle\\wrapper\\gradle-wrapper.jar\n\n@rem Execute Gradle\n\"%JAVA_EXE%\" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% \"-Dorg.gradle.appname=%APP_BASE_NAME%\" -classpath \"%CLASSPATH%\" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%\n\n:end\n@rem End local scope for the variables with windows NT shell\nif \"%ERRORLEVEL%\"==\"0\" goto mainEnd\n\n:fail\nrem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of\nrem the _cmd.exe /c_ return code!\nif  not \"\" == \"%GRADLE_EXIT_CONSOLE%\" exit 1\nexit /b 1\n\n:mainEnd\nif \"%OS%\"==\"Windows_NT\" endlocal\n\n:omega\n"
  },
  {
    "path": "examples/flutter_kiwi/android/settings.gradle",
    "content": "include ':app'\n\ndef flutterProjectRoot = rootProject.projectDir.parentFile.toPath()\n\ndef plugins = new Properties()\ndef pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')\nif (pluginsFile.exists()) {\n    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }\n}\n\nplugins.each { name, path ->\n    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()\n    include \":$name\"\n    project(\":$name\").projectDir = pluginDirectory\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/flutter_example.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n    </content>\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Dart Packages\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "examples/flutter_kiwi/flutter_example_android.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"JAVA_MODULE\" version=\"4\">\n  <component name=\"FacetManager\">\n    <facet type=\"android\" name=\"Android\">\n      <configuration>\n        <option name=\"ALLOW_USER_CONFIGURATION\" value=\"false\" />\n        <option name=\"GEN_FOLDER_RELATIVE_PATH_APT\" value=\"/android/gen\" />\n        <option name=\"GEN_FOLDER_RELATIVE_PATH_AIDL\" value=\"/android/gen\" />\n        <option name=\"MANIFEST_FILE_RELATIVE_PATH\" value=\"/android/AndroidManifest.xml\" />\n        <option name=\"RES_FOLDER_RELATIVE_PATH\" value=\"/android/res\" />\n        <option name=\"ASSETS_FOLDER_RELATIVE_PATH\" value=\"/android/assets\" />\n        <option name=\"LIBS_FOLDER_RELATIVE_PATH\" value=\"/android/libs\" />\n        <option name=\"PROGUARD_LOGS_FOLDER_RELATIVE_PATH\" value=\"/android/proguard_logs\" />\n      </configuration>\n    </facet>\n  </component>\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$/android\">\n      <sourceFolder url=\"file://$MODULE_DIR$/android/app/src/main/java\" isTestSource=\"false\" />\n      <sourceFolder url=\"file://$MODULE_DIR$/android/gen\" isTestSource=\"false\" generated=\"true\" />\n    </content>\n    <orderEntry type=\"jdk\" jdkName=\"Android API 25 Platform\" jdkType=\"Android SDK\" />\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Flutter for Android\" level=\"project\" />\n  </component>\n</module>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/.gitignore",
    "content": ".idea/\n.vagrant/\n.sconsign.dblite\n.svn/\n\n.DS_Store\n*.swp\nprofile\n\nDerivedData/\nbuild/\nGeneratedPluginRegistrant.h\nGeneratedPluginRegistrant.m\n\n.generated/\n\n*.pbxuser\n*.mode1v3\n*.mode2v3\n*.perspectivev3\n\n!default.pbxuser\n!default.mode1v3\n!default.mode2v3\n!default.perspectivev3\n\nxcuserdata\n\n*.moved-aside\n\n*.pyc\n*sync/\nIcon?\n.tags*\n\n/Flutter/app.flx\n/Flutter/app.zip\n/Flutter/flutter_assets/\n/Flutter/App.framework\n/Flutter/Flutter.framework\n/Flutter/Generated.xcconfig\n/ServiceDefinitions.json\n\nPods/\n.symlinks/\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Flutter/AppFrameworkInfo.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n  <key>CFBundleDevelopmentRegion</key>\n  <string>en</string>\n  <key>CFBundleExecutable</key>\n  <string>App</string>\n  <key>CFBundleIdentifier</key>\n  <string>io.flutter.flutter.app</string>\n  <key>CFBundleInfoDictionaryVersion</key>\n  <string>6.0</string>\n  <key>CFBundleName</key>\n  <string>App</string>\n  <key>CFBundlePackageType</key>\n  <string>FMWK</string>\n  <key>CFBundleShortVersionString</key>\n  <string>1.0</string>\n  <key>CFBundleSignature</key>\n  <string>????</string>\n  <key>CFBundleVersion</key>\n  <string>1.0</string>\n  <key>MinimumOSVersion</key>\n  <string>9.0</string>\n</dict>\n</plist>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Flutter/Debug.xcconfig",
    "content": "#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Flutter/Release.xcconfig",
    "content": "#include \"Generated.xcconfig\"\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/AppDelegate.h",
    "content": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n\n@interface AppDelegate : FlutterAppDelegate\n\n@end\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/AppDelegate.m",
    "content": "#include \"AppDelegate.h\"\n#include \"GeneratedPluginRegistrant.h\"\n\n@implementation AppDelegate\n\n- (BOOL)application:(UIApplication *)application\n    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {\n  [GeneratedPluginRegistrant registerWithRegistry:self];\n  // Override point for customization after application launch.\n  return [super application:application didFinishLaunchingWithOptions:launchOptions];\n}\n\n@end\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-20x20@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-29x29@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-40x40@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"60x60\",\n      \"idiom\" : \"iphone\",\n      \"filename\" : \"Icon-App-60x60@3x.png\",\n      \"scale\" : \"3x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"20x20\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-20x20@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"29x29\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-29x29@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"40x40\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-40x40@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@1x.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"size\" : \"76x76\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-76x76@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"83.5x83.5\",\n      \"idiom\" : \"ipad\",\n      \"filename\" : \"Icon-App-83.5x83.5@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"size\" : \"1024x1024\",\n      \"idiom\" : \"ios-marketing\",\n      \"filename\" : \"Icon-App-1024x1024@1x.png\",\n      \"scale\" : \"1x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
    "content": "{\n  \"images\" : [\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage.png\",\n      \"scale\" : \"1x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@2x.png\",\n      \"scale\" : \"2x\"\n    },\n    {\n      \"idiom\" : \"universal\",\n      \"filename\" : \"LaunchImage@3x.png\",\n      \"scale\" : \"3x\"\n    }\n  ],\n  \"info\" : {\n    \"version\" : 1,\n    \"author\" : \"xcode\"\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
    "content": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in this directory.\n\nYou can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images."
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/Base.lproj/LaunchScreen.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"12121\" systemVersion=\"16G29\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" launchScreen=\"YES\" colorMatched=\"YES\" initialViewController=\"01J-lp-oVM\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"12089\"/>\n    </dependencies>\n    <scenes>\n        <!--View Controller-->\n        <scene sceneID=\"EHf-IW-A2E\">\n            <objects>\n                <viewController id=\"01J-lp-oVM\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"Ydg-fD-yQy\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"xbc-2k-c8Z\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"Ze5-6b-2t3\">\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <subviews>\n                            <imageView opaque=\"NO\" clipsSubviews=\"YES\" multipleTouchEnabled=\"YES\" contentMode=\"center\" image=\"LaunchImage\" translatesAutoresizingMaskIntoConstraints=\"NO\" id=\"YRO-k0-Ey4\">\n                            </imageView>\n                        </subviews>\n                        <color key=\"backgroundColor\" red=\"1\" green=\"1\" blue=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"sRGB\"/>\n                        <constraints>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerX\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerX\" id=\"1a2-6s-vTC\"/>\n                            <constraint firstItem=\"YRO-k0-Ey4\" firstAttribute=\"centerY\" secondItem=\"Ze5-6b-2t3\" secondAttribute=\"centerY\" id=\"4X2-HB-R7a\"/>\n                        </constraints>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"iYj-Kq-Ea1\" userLabel=\"First Responder\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n            <point key=\"canvasLocation\" x=\"53\" y=\"375\"/>\n        </scene>\n    </scenes>\n    <resources>\n        <image name=\"LaunchImage\" width=\"168\" height=\"185\"/>\n    </resources>\n</document>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/Base.lproj/Main.storyboard",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3.0\" toolsVersion=\"10117\" systemVersion=\"15F34\" targetRuntime=\"iOS.CocoaTouch\" propertyAccessControl=\"none\" useAutolayout=\"YES\" useTraitCollections=\"YES\" initialViewController=\"BYZ-38-t0r\">\n    <dependencies>\n        <deployment identifier=\"iOS\"/>\n        <plugIn identifier=\"com.apple.InterfaceBuilder.IBCocoaTouchPlugin\" version=\"10085\"/>\n    </dependencies>\n    <scenes>\n        <!--Flutter View Controller-->\n        <scene sceneID=\"tne-QT-ifu\">\n            <objects>\n                <viewController id=\"BYZ-38-t0r\" customClass=\"FlutterViewController\" sceneMemberID=\"viewController\">\n                    <layoutGuides>\n                        <viewControllerLayoutGuide type=\"top\" id=\"y3c-jy-aDJ\"/>\n                        <viewControllerLayoutGuide type=\"bottom\" id=\"wfy-db-euE\"/>\n                    </layoutGuides>\n                    <view key=\"view\" contentMode=\"scaleToFill\" id=\"8bC-Xf-vdC\">\n                        <rect key=\"frame\" x=\"0.0\" y=\"0.0\" width=\"600\" height=\"600\"/>\n                        <autoresizingMask key=\"autoresizingMask\" widthSizable=\"YES\" heightSizable=\"YES\"/>\n                        <color key=\"backgroundColor\" white=\"1\" alpha=\"1\" colorSpace=\"custom\" customColorSpace=\"calibratedWhite\"/>\n                    </view>\n                </viewController>\n                <placeholder placeholderIdentifier=\"IBFirstResponder\" id=\"dkx-z0-nzr\" sceneMemberID=\"firstResponder\"/>\n            </objects>\n        </scene>\n    </scenes>\n</document>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/Info.plist",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\">\n<plist version=\"1.0\">\n<dict>\n\t<key>CFBundleDevelopmentRegion</key>\n\t<string>en</string>\n\t<key>CFBundleExecutable</key>\n\t<string>$(EXECUTABLE_NAME)</string>\n\t<key>CFBundleIdentifier</key>\n\t<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>\n\t<key>CFBundleInfoDictionaryVersion</key>\n\t<string>6.0</string>\n\t<key>CFBundleName</key>\n\t<string>flutter_example</string>\n\t<key>CFBundlePackageType</key>\n\t<string>APPL</string>\n\t<key>CFBundleShortVersionString</key>\n\t<string>$(FLUTTER_BUILD_NAME)</string>\n\t<key>CFBundleSignature</key>\n\t<string>????</string>\n\t<key>CFBundleVersion</key>\n\t<string>$(FLUTTER_BUILD_NUMBER)</string>\n\t<key>LSRequiresIPhoneOS</key>\n\t<true/>\n\t<key>UILaunchStoryboardName</key>\n\t<string>LaunchScreen</string>\n\t<key>UIMainStoryboardFile</key>\n\t<string>Main</string>\n\t<key>UISupportedInterfaceOrientations</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UISupportedInterfaceOrientations~ipad</key>\n\t<array>\n\t\t<string>UIInterfaceOrientationPortrait</string>\n\t\t<string>UIInterfaceOrientationPortraitUpsideDown</string>\n\t\t<string>UIInterfaceOrientationLandscapeLeft</string>\n\t\t<string>UIInterfaceOrientationLandscapeRight</string>\n\t</array>\n\t<key>UIViewControllerBasedStatusBarAppearance</key>\n\t<false/>\n</dict>\n</plist>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner/main.m",
    "content": "#import <Flutter/Flutter.h>\n#import <UIKit/UIKit.h>\n#import \"AppDelegate.h\"\n\nint main(int argc, char* argv[]) {\n  @autoreleasepool {\n    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner.xcodeproj/project.pbxproj",
    "content": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 46;\n\tobjects = {\n\n/* Begin PBXBuildFile section */\n\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };\n\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };\n\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */ = {isa = PBXBuildFile; fileRef = 9740EEB21CF90195004384FC /* Debug.xcconfig */; };\n\t\t978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */; };\n\t\t97C146F31CF9000F007C117D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 97C146F21CF9000F007C117D /* main.m */; };\n\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };\n\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };\n\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };\n/* End PBXBuildFile section */\n\n/* Begin PBXCopyFilesBuildPhase section */\n\t\t9705A1C41CF9048500538489 /* Embed Frameworks */ = {\n\t\t\tisa = PBXCopyFilesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tdstPath = \"\";\n\t\t\tdstSubfolderSpec = 10;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tname = \"Embed Frameworks\";\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXCopyFilesBuildPhase section */\n\n/* Begin PBXFileReference section */\n\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = \"<group>\"; };\n\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = \"<group>\"; };\n\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = \"<group>\"; };\n\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = \"<group>\"; };\n\t\t7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = \"<group>\"; };\n\t\t7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = \"<group>\"; };\n\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = \"<group>\"; };\n\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = \"<group>\"; };\n\t\t97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };\n\t\t97C146F21CF9000F007C117D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = \"<group>\"; };\n\t\t97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = \"<group>\"; };\n\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = \"<group>\"; };\n\t\t97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = \"<group>\"; };\n\t\t97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = \"<group>\"; };\n/* End PBXFileReference section */\n\n/* Begin PBXFrameworksBuildPhase section */\n\t\t97C146EB1CF9000F007C117D /* Frameworks */ = {\n\t\t\tisa = PBXFrameworksBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXFrameworksBuildPhase section */\n\n/* Begin PBXGroup section */\n\t\t9740EEB11CF90186004384FC /* Flutter */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,\n\t\t\t\t9740EEB21CF90195004384FC /* Debug.xcconfig */,\n\t\t\t\t7AFA3C8E1D35360C0083082E /* Release.xcconfig */,\n\t\t\t\t9740EEB31CF90195004384FC /* Generated.xcconfig */,\n\t\t\t);\n\t\t\tname = Flutter;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146E51CF9000F007C117D = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t9740EEB11CF90186004384FC /* Flutter */,\n\t\t\t\t97C146F01CF9000F007C117D /* Runner */,\n\t\t\t\t97C146EF1CF9000F007C117D /* Products */,\n\t\t\t\tCF3B75C9A7D2FA2A4C99F110 /* Frameworks */,\n\t\t\t);\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146EF1CF9000F007C117D /* Products */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146EE1CF9000F007C117D /* Runner.app */,\n\t\t\t);\n\t\t\tname = Products;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F01CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t7AFFD8ED1D35381100E5BB4D /* AppDelegate.h */,\n\t\t\t\t7AFFD8EE1D35381100E5BB4D /* AppDelegate.m */,\n\t\t\t\t97C146FA1CF9000F007C117D /* Main.storyboard */,\n\t\t\t\t97C146FD1CF9000F007C117D /* Assets.xcassets */,\n\t\t\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,\n\t\t\t\t97C147021CF9000F007C117D /* Info.plist */,\n\t\t\t\t97C146F11CF9000F007C117D /* Supporting Files */,\n\t\t\t\t1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,\n\t\t\t\t1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,\n\t\t\t);\n\t\t\tpath = Runner;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146F11CF9000F007C117D /* Supporting Files */ = {\n\t\t\tisa = PBXGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146F21CF9000F007C117D /* main.m */,\n\t\t\t);\n\t\t\tname = \"Supporting Files\";\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXGroup section */\n\n/* Begin PBXNativeTarget section */\n\t\t97C146ED1CF9000F007C117D /* Runner */ = {\n\t\t\tisa = PBXNativeTarget;\n\t\t\tbuildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */;\n\t\t\tbuildPhases = (\n\t\t\t\t9740EEB61CF901F6004384FC /* Run Script */,\n\t\t\t\t97C146EA1CF9000F007C117D /* Sources */,\n\t\t\t\t97C146EB1CF9000F007C117D /* Frameworks */,\n\t\t\t\t97C146EC1CF9000F007C117D /* Resources */,\n\t\t\t\t9705A1C41CF9048500538489 /* Embed Frameworks */,\n\t\t\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */,\n\t\t\t);\n\t\t\tbuildRules = (\n\t\t\t);\n\t\t\tdependencies = (\n\t\t\t);\n\t\t\tname = Runner;\n\t\t\tproductName = Runner;\n\t\t\tproductReference = 97C146EE1CF9000F007C117D /* Runner.app */;\n\t\t\tproductType = \"com.apple.product-type.application\";\n\t\t};\n/* End PBXNativeTarget section */\n\n/* Begin PBXProject section */\n\t\t97C146E61CF9000F007C117D /* Project object */ = {\n\t\t\tisa = PBXProject;\n\t\t\tattributes = {\n\t\t\t\tLastUpgradeCheck = 0910;\n\t\t\t\tORGANIZATIONNAME = \"The Chromium Authors\";\n\t\t\t\tTargetAttributes = {\n\t\t\t\t\t97C146ED1CF9000F007C117D = {\n\t\t\t\t\t\tCreatedOnToolsVersion = 7.3.1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t\tbuildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */;\n\t\t\tcompatibilityVersion = \"Xcode 3.2\";\n\t\t\tdevelopmentRegion = English;\n\t\t\thasScannedForEncodings = 0;\n\t\t\tknownRegions = (\n\t\t\t\ten,\n\t\t\t\tBase,\n\t\t\t);\n\t\t\tmainGroup = 97C146E51CF9000F007C117D;\n\t\t\tproductRefGroup = 97C146EF1CF9000F007C117D /* Products */;\n\t\t\tprojectDirPath = \"\";\n\t\t\tprojectRoot = \"\";\n\t\t\ttargets = (\n\t\t\t\t97C146ED1CF9000F007C117D /* Runner */,\n\t\t\t);\n\t\t};\n/* End PBXProject section */\n\n/* Begin PBXResourcesBuildPhase section */\n\t\t97C146EC1CF9000F007C117D /* Resources */ = {\n\t\t\tisa = PBXResourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,\n\t\t\t\t3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,\n\t\t\t\t9740EEB41CF90195004384FC /* Debug.xcconfig in Resources */,\n\t\t\t\t97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,\n\t\t\t\t97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXResourcesBuildPhase section */\n\n/* Begin PBXShellScriptBuildPhase section */\n\t\t3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Thin Binary\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" embed_and_thin\";\n\t\t};\n\t\t9740EEB61CF901F6004384FC /* Run Script */ = {\n\t\t\tisa = PBXShellScriptBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t);\n\t\t\tinputPaths = (\n\t\t\t);\n\t\t\tname = \"Run Script\";\n\t\t\toutputPaths = (\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t\tshellPath = /bin/sh;\n\t\t\tshellScript = \"/bin/sh \\\"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\\\" build\";\n\t\t};\n/* End PBXShellScriptBuildPhase section */\n\n/* Begin PBXSourcesBuildPhase section */\n\t\t97C146EA1CF9000F007C117D /* Sources */ = {\n\t\t\tisa = PBXSourcesBuildPhase;\n\t\t\tbuildActionMask = 2147483647;\n\t\t\tfiles = (\n\t\t\t\t978B8F6F1D3862AE00F588F7 /* AppDelegate.m in Sources */,\n\t\t\t\t97C146F31CF9000F007C117D /* main.m in Sources */,\n\t\t\t\t1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,\n\t\t\t);\n\t\t\trunOnlyForDeploymentPostprocessing = 0;\n\t\t};\n/* End PBXSourcesBuildPhase section */\n\n/* Begin PBXVariantGroup section */\n\t\t97C146FA1CF9000F007C117D /* Main.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C146FB1CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = Main.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n\t\t97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {\n\t\t\tisa = PBXVariantGroup;\n\t\t\tchildren = (\n\t\t\t\t97C147001CF9000F007C117D /* Base */,\n\t\t\t);\n\t\t\tname = LaunchScreen.storyboard;\n\t\t\tsourceTree = \"<group>\";\n\t\t};\n/* End PBXVariantGroup section */\n\n/* Begin XCBuildConfiguration section */\n\t\t97C147031CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = dwarf;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tENABLE_TESTABILITY = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_DYNAMIC_NO_PIC = NO;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_OPTIMIZATION_LEVEL = 0;\n\t\t\t\tGCC_PREPROCESSOR_DEFINITIONS = (\n\t\t\t\t\t\"DEBUG=1\",\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t);\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = YES;\n\t\t\t\tONLY_ACTIVE_ARCH = YES;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147041CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbuildSettings = {\n\t\t\t\tALWAYS_SEARCH_USER_PATHS = NO;\n\t\t\t\tCLANG_ANALYZER_NONNULL = YES;\n\t\t\t\tCLANG_CXX_LANGUAGE_STANDARD = \"gnu++0x\";\n\t\t\t\tCLANG_CXX_LIBRARY = \"libc++\";\n\t\t\t\tCLANG_ENABLE_MODULES = YES;\n\t\t\t\tCLANG_ENABLE_OBJC_ARC = YES;\n\t\t\t\tCLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;\n\t\t\t\tCLANG_WARN_BOOL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_COMMA = YES;\n\t\t\t\tCLANG_WARN_CONSTANT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;\n\t\t\t\tCLANG_WARN_EMPTY_BODY = YES;\n\t\t\t\tCLANG_WARN_ENUM_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_INFINITE_RECURSION = YES;\n\t\t\t\tCLANG_WARN_INT_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_LITERAL_CONVERSION = YES;\n\t\t\t\tCLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;\n\t\t\t\tCLANG_WARN_RANGE_LOOP_ANALYSIS = YES;\n\t\t\t\tCLANG_WARN_STRICT_PROTOTYPES = YES;\n\t\t\t\tCLANG_WARN_SUSPICIOUS_MOVE = YES;\n\t\t\t\tCLANG_WARN_UNREACHABLE_CODE = YES;\n\t\t\t\tCLANG_WARN__DUPLICATE_METHOD_MATCH = YES;\n\t\t\t\t\"CODE_SIGN_IDENTITY[sdk=iphoneos*]\" = \"iPhone Developer\";\n\t\t\t\tCOPY_PHASE_STRIP = NO;\n\t\t\t\tDEBUG_INFORMATION_FORMAT = \"dwarf-with-dsym\";\n\t\t\t\tENABLE_NS_ASSERTIONS = NO;\n\t\t\t\tENABLE_STRICT_OBJC_MSGSEND = YES;\n\t\t\t\tGCC_C_LANGUAGE_STANDARD = gnu99;\n\t\t\t\tGCC_NO_COMMON_BLOCKS = YES;\n\t\t\t\tGCC_WARN_64_TO_32_BIT_CONVERSION = YES;\n\t\t\t\tGCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;\n\t\t\t\tGCC_WARN_UNDECLARED_SELECTOR = YES;\n\t\t\t\tGCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;\n\t\t\t\tGCC_WARN_UNUSED_FUNCTION = YES;\n\t\t\t\tGCC_WARN_UNUSED_VARIABLE = YES;\n\t\t\t\tIPHONEOS_DEPLOYMENT_TARGET = 9.0;\n\t\t\t\tMTL_ENABLE_DEBUG_INFO = NO;\n\t\t\t\tSDKROOT = iphoneos;\n\t\t\t\tTARGETED_DEVICE_FAMILY = \"1,2\";\n\t\t\t\tVALIDATE_PRODUCT = YES;\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n\t\t97C147061CF9000F007C117D /* Debug */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.flutterExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Debug;\n\t\t};\n\t\t97C147071CF9000F007C117D /* Release */ = {\n\t\t\tisa = XCBuildConfiguration;\n\t\t\tbaseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;\n\t\t\tbuildSettings = {\n\t\t\t\tASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;\n\t\t\t\tCURRENT_PROJECT_VERSION = \"$(FLUTTER_BUILD_NUMBER)\";\n\t\t\t\tENABLE_BITCODE = NO;\n\t\t\t\tFRAMEWORK_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tINFOPLIST_FILE = Runner/Info.plist;\n\t\t\t\tLD_RUNPATH_SEARCH_PATHS = \"$(inherited) @executable_path/Frameworks\";\n\t\t\t\tLIBRARY_SEARCH_PATHS = (\n\t\t\t\t\t\"$(inherited)\",\n\t\t\t\t\t\"$(PROJECT_DIR)/Flutter\",\n\t\t\t\t);\n\t\t\t\tPRODUCT_BUNDLE_IDENTIFIER = com.example.flutterExample;\n\t\t\t\tPRODUCT_NAME = \"$(TARGET_NAME)\";\n\t\t\t\tVERSIONING_SYSTEM = \"apple-generic\";\n\t\t\t};\n\t\t\tname = Release;\n\t\t};\n/* End XCBuildConfiguration section */\n\n/* Begin XCConfigurationList section */\n\t\t97C146E91CF9000F007C117D /* Build configuration list for PBXProject \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147031CF9000F007C117D /* Debug */,\n\t\t\t\t97C147041CF9000F007C117D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n\t\t97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget \"Runner\" */ = {\n\t\t\tisa = XCConfigurationList;\n\t\t\tbuildConfigurations = (\n\t\t\t\t97C147061CF9000F007C117D /* Debug */,\n\t\t\t\t97C147071CF9000F007C117D /* Release */,\n\t\t\t);\n\t\t\tdefaultConfigurationIsVisible = 0;\n\t\t\tdefaultConfigurationName = Release;\n\t\t};\n/* End XCConfigurationList section */\n\t};\n\trootObject = 97C146E61CF9000F007C117D /* Project object */;\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"self:\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n   LastUpgradeVersion = \"0910\"\n   version = \"1.3\">\n   <BuildAction\n      parallelizeBuildables = \"YES\"\n      buildImplicitDependencies = \"YES\">\n      <BuildActionEntries>\n         <BuildActionEntry\n            buildForTesting = \"YES\"\n            buildForRunning = \"YES\"\n            buildForProfiling = \"YES\"\n            buildForArchiving = \"YES\"\n            buildForAnalyzing = \"YES\">\n            <BuildableReference\n               BuildableIdentifier = \"primary\"\n               BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n               BuildableName = \"Runner.app\"\n               BlueprintName = \"Runner\"\n               ReferencedContainer = \"container:Runner.xcodeproj\">\n            </BuildableReference>\n         </BuildActionEntry>\n      </BuildActionEntries>\n   </BuildAction>\n   <TestAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\">\n      <Testables>\n      </Testables>\n      <MacroExpansion>\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </MacroExpansion>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </TestAction>\n   <LaunchAction\n      buildConfiguration = \"Debug\"\n      selectedDebuggerIdentifier = \"Xcode.DebuggerFoundation.Debugger.LLDB\"\n      selectedLauncherIdentifier = \"Xcode.DebuggerFoundation.Launcher.LLDB\"\n      language = \"\"\n      launchStyle = \"0\"\n      useCustomWorkingDirectory = \"NO\"\n      ignoresPersistentStateOnLaunch = \"NO\"\n      debugDocumentVersioning = \"YES\"\n      debugServiceExtension = \"internal\"\n      allowLocationSimulation = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n      <AdditionalOptions>\n      </AdditionalOptions>\n   </LaunchAction>\n   <ProfileAction\n      buildConfiguration = \"Release\"\n      shouldUseLaunchSchemeArgsEnv = \"YES\"\n      savedToolIdentifier = \"\"\n      useCustomWorkingDirectory = \"NO\"\n      debugDocumentVersioning = \"YES\">\n      <BuildableProductRunnable\n         runnableDebuggingMode = \"0\">\n         <BuildableReference\n            BuildableIdentifier = \"primary\"\n            BlueprintIdentifier = \"97C146ED1CF9000F007C117D\"\n            BuildableName = \"Runner.app\"\n            BlueprintName = \"Runner\"\n            ReferencedContainer = \"container:Runner.xcodeproj\">\n         </BuildableReference>\n      </BuildableProductRunnable>\n   </ProfileAction>\n   <AnalyzeAction\n      buildConfiguration = \"Debug\">\n   </AnalyzeAction>\n   <ArchiveAction\n      buildConfiguration = \"Release\"\n      revealArchiveInOrganizer = \"YES\">\n   </ArchiveAction>\n</Scheme>\n"
  },
  {
    "path": "examples/flutter_kiwi/ios/Runner.xcworkspace/contents.xcworkspacedata",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n   version = \"1.0\">\n   <FileRef\n      location = \"group:Runner.xcodeproj\">\n   </FileRef>\n</Workspace>\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/di/test01.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\npart 'test01.g.dart';\n\nabstract class Injector {\n  @Register.factory(Test)\n  @Register.factory(Counter)\n  @Register.singleton(Counter, name: 'display')\n  void configure();\n}\n\nclass Test {}\n\nclass Counter {\n  int _value = 0;\n\n  Counter(Test test);\n\n  int get value => _value;\n\n  void add() => _value++;\n}\n\nclass Di {\n  static void setup() {\n    var injector = _$Injector();\n    injector.configure();\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/di/test01.g.dart",
    "content": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'test01.dart';\n\n// **************************************************************************\n// KiwiInjectorGenerator\n// **************************************************************************\n\nclass _$Injector extends Injector {\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerFactory((c) => Test())\n      ..registerFactory((c) => Counter(c.resolve<Test>()))\n      ..registerSingleton((c) => Counter(c.resolve<Test>()), name: 'display');\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/main.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_kiwi/screens/main_screen.dart';\n\nvoid main() => runApp(MyApp());\n\nclass MyApp extends StatelessWidget {\n  const MyApp({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    return MaterialApp(\n      title: 'Flutter Kiwi Demo',\n      theme: ThemeData(\n        primarySwatch: Colors.blue,\n      ),\n      home: const MainScreen(),\n    );\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/screens/error_screen.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_kiwi/di/test01.dart';\nimport 'package:flutter_kiwi/widgets/error_widget.dart';\nimport 'package:kiwi/kiwi.dart';\n\nclass ErrorScreen extends StatefulWidget {\n  @override\n  _ErrorScreenState createState() => _ErrorScreenState();\n}\n\nclass _ErrorScreenState extends State<ErrorScreen> {\n  @override\n  void initState() {\n    super.initState();\n    Di.setup();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Error Screen'),\n      ),\n      body: ListView(\n        children: [\n          Container(height: 16),\n          Container(\n            height: 600,\n            child: ErrorContainer(\n              error: () => KiwiContainer().resolve<String>(),\n            ),\n          ),\n          Container(height: 16),\n          Container(\n            height: 600,\n            child: ErrorContainer(\n              error: () => KiwiContainer().resolve<String>('named'),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/screens/main_screen.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_kiwi/screens/error_screen.dart';\nimport 'package:flutter_kiwi/screens/resolve_screen.dart';\nimport 'package:flutter_kiwi/screens/scoped_screen.dart';\nimport 'package:kiwi/kiwi.dart';\n\nclass MainScreen extends StatelessWidget {\n  const MainScreen({super.key});\n\n  @override\n  Widget build(BuildContext context) {\n    final theme = Theme.of(context);\n\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Main Screen'),\n      ),\n      body: ListView(\n        children: [\n          Container(height: 16),\n          MaterialButton(\n            color: Theme.of(context).primaryColor,\n            onPressed: () async {\n              await Navigator.of(context).push(\n                  MaterialPageRoute(builder: (context) => ResolveScreen()));\n              KiwiContainer().clear();\n            },\n            child: Text(\n              'Resolve Screen',\n              style: theme.textTheme.bodyLarge?.copyWith(\n                color: theme.colorScheme.onSecondary,\n              ),\n            ),\n          ),\n          MaterialButton(\n            color: Theme.of(context).primaryColor,\n            onPressed: () async {\n              await Navigator.of(context)\n                  .push(MaterialPageRoute(builder: (context) => ErrorScreen()));\n              KiwiContainer().clear();\n            },\n            child: Text(\n              'Error Screen',\n              style: theme.textTheme.bodyLarge?.copyWith(\n                color: theme.colorScheme.onSecondary,\n              ),\n            ),\n          ),\n          MaterialButton(\n            color: Theme.of(context).primaryColor,\n            onPressed: () async {\n              await Navigator.of(context).push(\n                  MaterialPageRoute(builder: (context) => ScopedScreen()));\n              KiwiContainer().clear();\n            },\n            child: Text(\n              'Scoped Container Screen',\n              style: theme.textTheme.bodyLarge?.copyWith(\n                color: theme.colorScheme.onSecondary,\n              ),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/screens/resolve_screen.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:flutter_kiwi/di/test01.dart';\nimport 'package:kiwi/kiwi.dart';\n\nclass ResolveScreen extends StatefulWidget {\n  @override\n  _ResolveScreenState createState() => new _ResolveScreenState();\n}\n\nclass _ResolveScreenState extends State<ResolveScreen> {\n  @override\n  void initState() {\n    super.initState();\n    Di.setup();\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Resolve Screen'),\n      ),\n      body: Center(\n        child: ListView(\n          children: [\n            Container(height: 16),\n            Text(\n              'Counter instances:',\n              textAlign: TextAlign.center,\n            ),\n            Text(\n              KiwiContainer().resolve<Counter>('display').value.toString(),\n              style: Theme.of(context).textTheme.headlineMedium,\n              textAlign: TextAlign.center,\n            ),\n            Text(\n              KiwiContainer().resolve<Counter>().value.toString(),\n              style: Theme.of(context).textTheme.headlineMedium,\n              textAlign: TextAlign.center,\n            ),\n            Text(\n              KiwiContainer().resolve<Test>().toString(),\n              style: Theme.of(context).textTheme.headlineMedium,\n              textAlign: TextAlign.center,\n            ),\n          ],\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: _incrementCounter,\n        tooltip: 'Increment',\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n\n  void _incrementCounter() {\n    setState(() => KiwiContainer().resolve<Counter>('display').add());\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/screens/scoped_screen.dart",
    "content": "import 'package:flutter/material.dart';\nimport 'package:kiwi/kiwi.dart';\n\nclass ScopedScreen extends StatefulWidget {\n  @override\n  _ScopedScreenState createState() => _ScopedScreenState();\n}\n\nclass _ScopedScreenState extends State<ScopedScreen> {\n  final container1 = KiwiContainer.scoped();\n  final container2 = KiwiContainer.scoped();\n\n  @override\n  void initState() {\n    super.initState();\n    container1.registerInstance('TEST CONTAINER 1');\n    container2.registerInstance('TEST CONTAINER 2');\n    container2.registerInstance('TEST CONTAINER 2 NAMED', name: 'named');\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text('Error Screen'),\n      ),\n      body: ListView(\n        children: [\n          Container(height: 16),\n          Text(container1.resolve<String>()),\n          Container(height: 16),\n          Text(container2.resolve<String>()),\n          Container(height: 16),\n          Text(container2.resolve<String>('named')),\n          Container(height: 16),\n        ],\n      ),\n    );\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/lib/widgets/error_widget.dart",
    "content": "import 'package:flutter/material.dart';\n\nclass ErrorContainer extends StatelessWidget {\n  final VoidCallback error;\n\n  const ErrorContainer({\n    required this.error,\n  });\n\n  @override\n  Widget build(BuildContext context) {\n    error();\n    return Container();\n  }\n}\n"
  },
  {
    "path": "examples/flutter_kiwi/pubspec.yaml",
    "content": "name: flutter_kiwi\ndescription: A Flutter example for kiwi.\nversion: 1.0.0+2\npublish_to: none\n\nenvironment:\n  sdk: \">=3.0.0 <4.0.0\"\n\ndependencies:\n  flutter:\n    sdk: flutter\n  kiwi: ^5.0.0\n\ndependency_overrides:\n  kiwi:\n    path: ../../packages/kiwi/\n  kiwi_generator:\n    path: ../../packages/kiwi_generator/\n\ndev_dependencies:\n  flutter_test:\n    sdk: flutter\n  build_runner: ^2.3.3\n  kiwi_generator: ^4.2.0\n\nflutter:\n  uses-material-design: true"
  },
  {
    "path": "packages/kiwi/.gitignore",
    "content": "# Files and directories created by pub\n.dart_tool/\n.packages\n# Remove the following pattern if you wish to check in your lock file\npubspec.lock\n\n# Conventional directory for build outputs\nbuild/\n\n# Directory created by dartdoc\ndoc/api/\n\n.vscode/\n.idea/\n"
  },
  {
    "path": "packages/kiwi/CHANGELOG.md",
    "content": "# 5.0.1\n\n- Fix a problem with pub.dev scores.\n\n# 5.0.0\n\nNow Kiwi it's a Brazilian package! 🇧🇷 ♥\n\nThank you ([@vanlooverenkoen](https://github.com/vanlooverenkoen)) for your contribution and trust in our work.\nHe continued his active and dedicated work on the Kiwi package up to version `4.1.0`.\n\n- feature: it's now possible to create a scoped container with providers copied from a parent, without a direct reference. ([PR #101](https://github.com/gbtb16/kiwi/pull/101))\n- feature: it's now possible to check if the instance or builder is registered. ([PR #103](https://github.com/gbtb16/kiwi/pull/103))\n- feature: it's now possible to list all providers. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- feature: it's now possible to list all named providers. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- feature: it's now possible to list all unnamed providers. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- feature: it's now possible to convert the _Provider class to String. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: the package structure has been refactored to be in line with the market. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: implemented new dart format rule for line length (160) of package development. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: the _providers now has a more verbose implementation, and it's now easy to read. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: for the new implementations, new tests have been created. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: github actions have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: github project labels have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: the Dart CLI tools in the package have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- fix: typedefs have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- fix: pub.dev points now sound great (150/150). ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- fix: dependabot has been updated. ([PR #107](https://github.com/gbtb16/kiwi/pull/107))\n- chore: other minimalist changes.\n\n# 4.1.0\n## Updated\n- Dependencies\n- Moved from travis to github actions\n\n# 4.0.3\n### Updated\n- Dependencies\n\n# 4.0.2\n## Updated\n- Dependencies\n- Example to use Android X\n- Travis Dart format\n## Added\n- Error's are now exported as well\n\n# 4.0.1\n### Fixed\n- Dart constraint issue for kiwi\n\n# 4.0.0\n## BREAKING\n- Support for kiwi_generator 4.0.0\n- Dart 2.14 min requirement\n## Updated dependencies\n\n# 3.0.0\n### Added\n- Nullsafety codebase migration\n## Updated dependencies\n- Updated dependencies to make sure we can still build with new dependencies.\n\n# 2.1.1\n## Updated\n- Description to make the kiwi package easy to find in pub.dev\n\n# 2.1.0\n## Added\n- No response bot to git\n- Android v2 embedding for the example project\n\n# 2.0.1\n## Updated\n- Updated dependencies\n\n# 2.0.0\n## BREAKING CHANGE\n- \\#9 Removed the unused T generic for some functions\n\n# 1.1.0\n## Added\n- \\#34 resolveAs<S,T>() added for testing only\n## Updated\n- \\#32 better error handling\n- Flutter example improvements\n- Updated documentation\n\n# 1.0.0\n## BREAKING CHANGE\n- renamed `Container` to `KiwiContainer` so it is easier for Flutter devs to import the KiwiContainer\n\n# 0.3.3\n## Fixed\n- Updated homepage\n\n# 0.3.2\n## Fixed\n- Fixed pub.dev score\n\n# 0.3.1\n## Fixed\n- Fixed pub.dev score\n\n# 0.3.0\n## Fixed\n- Upgrade dependencies\n- Fixed formatting errors\n- Fixed pub.dev score\n\n# 0.2.0\n## Added\n- Scoped constructor for the Container class.\n- Upgrade test dependency\n\n# 0.1.0\n- Initial Open Source release."
  },
  {
    "path": "packages/kiwi/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Romain Rastel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/kiwi/README.md",
    "content": "# kiwi\n\n[![Pub](https://img.shields.io/pub/v/kiwi.svg)](https://pub.dartlang.org/packages/kiwi)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://paypal.me/RomainRastel)\n\n![Logo](https://raw.githubusercontent.com/gbtb16/kiwi/master/images/logo.png)\n\nA simple yet efficient IoC container for Dart and Flutter.\n\nThe container does not rely on reflection, it's just a `Map`, so it's fast.\n\n**IMPORTANT: Dart2 is required to use this package.**\n\nThis package can be used with, or without code generation. While code generation allows you to code faster, it comes with extra configuration on you side (to be setup only one time).\nThis section is only about **kiwi** which contains the IoC container and the annotations. If you are looking for the kiwi_generator configuration, you can find documentation [here](https://github.com/gbtb16/kiwi/tree/master/packages/kiwi_generator).\n\n## Configuration\n\nAdd `kiwi` to `pubspec.yaml` under the `dependencies` field.\nThe latest version is [![Pub](https://img.shields.io/pub/v/kiwi.svg)](https://pub.dartlang.org/packages/kiwi)\n\n```yaml\ndependencies:\n  kiwi: ^latest_version\n```\n\n## Import\n\nIn your library add the following import:\n\n```dart\nimport 'package:kiwi/kiwi.dart';\n```\n\n## Usage\n\nThe core of **kiwi** is the `KiwiContainer` class. This is where all your instances and factories are stored.\nThe `KiwiContainer` is implemented as a singleton, you can access the single instance like this:\n\n```dart\nKiwiContainer container = KiwiContainer();\n```\n\n**Note:** I promise you, even if this is looking like a constructor, you will always end up with the same instance :wink:.\n\nIf you want different containers, you can create scoped ones easily:\n\n```dart\nKiwiContainer container = KiwiContainer.scoped();\n```\n\nIt works like a lot of IoC containers: you can register a factory under a type, and then resolve the type to get a value.\n\n### Registering\n\nYou can register 3 kinds of objects:\n\n#### Instances\n\n**Kiwi** can register simple instances like that:\n\n```dart\ncontainer.registerInstance(Sith('Anakin', 'Skywalker'));\n```\n\nYou can also give a name to a specific instance:\n\n```dart\ncontainer.registerInstance(Sith('Anakin', 'Skywalker'), name: 'DartVader');\n```\n\nBy default instances are registered under their type. If you want to register an instance under a supertype: \nyou have only need to add the super type in the generics. The subtype will be detected automatically:\n\n```dart\ncontainer.registerInstance<Character>(Sith('Anakin', 'Skywalker'), name: 'DartVader');\n```\n\nIn the above example `Character` is a supertype of `Sith`.\n\n#### Factories\n\n```dart\ncontainer.registerFactory((c) => Sith('Anakin', 'Skywalker'));\n```\n\nYou can also give a name to a specific factory:\n\n```dart\ncontainer.registerFactory((c) => Sith('Anakin', 'Skywalker'), name: 'DartVader');\n```\n\nBy default factories are registered under the return type of the factory. If you want to register an factory under a supertype, you have to specify both of them:\n\n```dart\ncontainer.registerFactory<Character>((c) => Sith('Anakin', 'Skywalker'), name: 'DartVader');\n```\n\n**Note:** the `c` parameter is the instance of the `KiwiContainer`, we will see later how it can be useful.\n\n#### Singletons\n\nSingletons are registered like factories but they are called only once: the first time we get their value.\n\n```dart\ncontainer.registerSingleton((c) => Sith('Anakin', 'Skywalker'));\n```\n\n### Resolving\n\nYou can get the instance registered for a type like this:\n\n```dart\nSith theSith = container.resolve<Sith>();\n```\n\nIf it was registered under a name, you can get its value like this:\n\n```dart\nSith theSith = container.resolve<Sith>('DartVader');\n```\n\nIf it was registered with a superclass, you can get its value like this:\n\n```dart\nSith theSith = container.resolveAs<Character, Sith>();\n```\n\nIf it was registered with a superclass under a name, you can get its value like this:\n\n```dart\nSith theSith = container.resolveAs<Character, Sith>('DartVader');\n```\n\nThe `KiwiContainer` is a callable class. You can also resolve a type like that:\n\n```dart\nSith theSith = container<Sith>('DartVader');\n```\n\n## Usage with dependencies\n\nIf you have a service that depends on another, you have to add the dependency in the constructor. For registering the service, you can then use the `c` parameter we saw earlier to resolve the value.\n\n```dart\nclass Service {}\n\nclass ServiceA extends Service {}\n\nclass ServiceB extends Service {\n  ServiceB(ServiceA serviceA);\n}\n...\n// Registers a complex factory by resolving the dependency\n// when the type is resolved.\nKiwiContainer container = KiwiContainer();\ncontainer.registerFactory((c) => ServiceB(c.resolve<ServiceA>()));\n```\n\nFor services with a lot of dependencies, it can be tedious to write that sort of code. That's why **kiwi** comes with a generator :smiley:!\n\n## Unregistering\n\nYou can unregister a factory/instance at any time:\n\n```dart\n// Unregisters the Sith type.\ncontainer.unregister<Sith>();\n\n// Unregister the Sith type that was registered under the name DartVader.\ncontainer.unregister<Sith>('DartVader');\n```\n\n## Cleaning\n\nYou can remove all the registered types by calling the `clear` method:\n\n```dart\ncontainer.clear();\n```\n\n## Ignoring KiwiErrors in development mode\n\nBy default **kiwi** throws an `KiwiError` in the following cases:\n\n* if you register the same type under the same name a second time.\n* if you try to resolve a type that was not previously registered.\n* if you try to unregister a type that was not previously registered.\n\nThis helps you to prevent potential errors in production, however you might want to ignore these KiwiErrors. To do this you can set `true` to the `silent` property of the `KiwiContainer`:\n\n```dart\ncontainer.silent = true;\n```\n\nIn production, or when `silent` is `true`, you will get `null` if you try to resolve a type that was not previously registered.\n\n## Changelog\n\nPlease see the [Changelog](https://github.com/gbtb16/kiwi/blob/master/packages/kiwi/CHANGELOG.md) page to know what's recently changed."
  },
  {
    "path": "packages/kiwi/analysis_options.yaml",
    "content": "analyzer:\n#   exclude:\n#     - path/to/excluded/files/**\n\n# Lint rules and documentation, see http://dart-lang.github.io/linter/lints\nlinter:\n  rules:\n    - cancel_subscriptions\n    - hash_and_equals\n    - collection_methods_unrelated_type\n    - test_types_in_equals\n    - unrelated_type_equality_checks\n    - valid_regexps\n"
  },
  {
    "path": "packages/kiwi/example/kiwi_example.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nmain() {\n  KiwiContainer container = KiwiContainer();\n\n  container.registerInstance(Logger());\n  container.registerSingleton((c) => Logger(), name: 'namedLogger');\n  container.registerFactory(\n      (c) => ServiceA(logger: c.resolve<Logger>('namedLogger')));\n\n  final comumLogger = container.resolve<Logger>();\n  final namedLogger = container.resolve<Logger>('namedLogger');\n  final serviceA = container.resolve<ServiceA>();\n\n  print(comumLogger.toString()); // Hey, I'm a logger!\n  print(namedLogger.toString()); // Hey, I'm a logger!\n  print(serviceA.toString()); // Hey, I'm a service A!\n}\n\nclass Service {\n  const Service();\n\n  @override\n  String toString() {\n    return 'Hey, I\\'m a service!';\n  }\n}\n\nclass ServiceA extends Service {\n  final Logger logger;\n\n  const ServiceA({required this.logger});\n\n  @override\n  String toString() {\n    return 'Hey, I\\'m a service A!';\n  }\n}\n\nclass Logger {\n  const Logger();\n\n  @override\n  String toString() {\n    return 'Hey, I\\'m a logger!';\n  }\n}\n"
  },
  {
    "path": "packages/kiwi/kiwi.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n    </content>\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Dart Packages\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "packages/kiwi/lib/kiwi.dart",
    "content": "library kiwi;\n\nexport 'src/annotations.dart';\nexport 'src/kiwi_container.dart';\nexport 'src/model/exception/kiwi_error.dart';\nexport 'src/model/exception/not_registered_error.dart';\n"
  },
  {
    "path": "packages/kiwi/lib/src/annotations.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\n/// An annotation that generates code for registering factories\n/// using the kiwi container.\nclass Register {\n  /// Create an annotation that will generate a `registerFactory` method.\n  const Register.factory(\n    this.type, {\n    this.name,\n    this.from,\n    this.resolvers,\n    this.constructorName,\n  }) : oneTime = null;\n\n  /// Create an annotation that will generate a `registerSingleton` method.\n  const Register.singleton(\n    this.type, {\n    this.name,\n    this.from,\n    this.resolvers,\n    this.constructorName,\n  }) : oneTime = true;\n\n  /// The type to register.\n  final Type type;\n\n  /// The type to create when requesting [type].\n  final Type? from;\n\n  /// The name under which the factory will be registered\n  ///\n  /// You must provide the same name in [KiwiContainer.resolve]\n  /// to get the same factory.\n  final String? name;\n\n  /// A map that give for a type, the name under which it should be resolved\n  ///\n  /// For example if you have registered a type T under the name\n  /// 'myType', you have to specify it in this map in order\n  /// to use it instead of the default value for the type T.\n  final Map<Type, String>? resolvers;\n\n  /// The name of the constructor to use inside the factory.\n  final String? constructorName;\n\n  /// Whether the factory has to be created only one time.\n  final bool? oneTime;\n}\n"
  },
  {
    "path": "packages/kiwi/lib/src/kiwi_container.dart",
    "content": "import 'package:kiwi/src/model/exception/kiwi_error.dart';\nimport 'package:kiwi/src/model/exception/not_registered_error.dart';\nimport 'package:meta/meta.dart';\n\n/// Signature for a builder which creates an object of type [T].\ntypedef FactoryBuilder<T> = T Function(KiwiContainer container);\n\n/// Signature for the generic provider name.\ntypedef _ProviderName = String;\n\n/// Signature for the generic provider value.\ntypedef _ProviderValue = Map<Type, _Provider<Object>>;\n\n/// A simple service container.\nclass KiwiContainer {\n  /// Creates a scoped container.\n  ///\n  /// If [parent] is set, the new scoped instance will include its providers.\n  KiwiContainer.scoped({\n    KiwiContainer? parent,\n  }) : _providers = <_ProviderName?, _ProviderValue>{\n          if (parent != null)\n            ...parent._providers.map(\n              // [Map.from] is needed to create a copy of value and not use its reference,\n              // because if only value is passed, everything included in the parent will be\n              // added to the new instance at any time, even after this scoped instance has been created.\n              (key, value) => MapEntry(key, Map.from(value)),\n            ),\n        };\n\n  static final KiwiContainer _instance = KiwiContainer.scoped();\n\n  /// Always returns a singleton representing the only container to be alive.\n  factory KiwiContainer() => _instance;\n\n  /// Map of all instances and builders registered in the container.\n  final Map<_ProviderName?, _ProviderValue> _providers;\n\n  /// All providers registered in the container,\n  /// including named our unnamed instances and builders.\n  ///\n  /// Instances and builders can be named or unnamed.\n  ///\n  /// Example:\n  /// ```dart\n  /// {\n  ///   \"int-instance\": {int: 1},\n  ///   null: {Character: Character('Anakin', 'Skywaker')},\n  /// };\n  /// ```\n  Map<_ProviderName?, _ProviderValue> get providers => _providers;\n\n  /// All named providers values registered in the container.\n  ///\n  /// Example:\n  /// ```dart\n  /// {\n  ///   \"int-instance\": {int: 1},\n  ///   \"character-builder\": {Character: Character('Anakin', 'Skywaker')},\n  /// };\n  /// ```\n  Map<_ProviderName?, _ProviderValue> get namedProviders {\n    return Map<_ProviderName?, _ProviderValue>.from(_providers)\n      ..removeWhere((key, value) => key == null);\n  }\n\n  /// All unnamed providers values registered in the container.\n  ///\n  /// Example:\n  /// ```dart\n  /// {\n  ///   null: {double: 2.0},\n  ///   null: {Vehicle: Car('Chevrolet Opala SS')},\n  /// };\n  /// ```\n  Map<_ProviderName?, _ProviderValue> get unnamedProviders {\n    return Map<_ProviderName?, _ProviderValue>.from(_providers)\n      ..removeWhere((key, value) => key != null);\n  }\n\n  /// Whether ignoring KiwiErrors in the following cases:\n  /// * if you register the same type under the same name a second time.\n  /// * if you try to resolve a type that was not previously registered.\n  /// * if you try to unregister a type that was not previously registered.\n  ///\n  /// Defaults to false.\n  bool silent = false;\n\n  /// Registers an instance into the container.\n  ///\n  /// An instance of type [S] can be registered.\n  ///\n  /// If [name] is set, the instance will be registered under this name.\n  /// To retrieve the same instance, the same name should be provided\n  /// to [KiwiContainer.resolve].\n  void registerInstance<S>(\n    S instance, {\n    String? name,\n  }) {\n    _setProvider(name, _Provider<S>.instance(instance));\n  }\n\n  /// Registers a factory into the container.\n  ///\n  /// A factory returning an object of type [S] can be registered.\n  ///\n  /// If [name] is set, the factory will be registered under this name.\n  /// To retrieve the same factory, the same name should be provided\n  /// to [KiwiContainer.resolve].\n  void registerFactory<S>(\n    FactoryBuilder<S> factory, {\n    String? name,\n  }) {\n    _setProvider(name, _Provider<S>.factory(factory));\n  }\n\n  /// Registers a factory that will be called only only when\n  /// accessing it for the first time, into the container.\n  ///\n  /// A factory returning an object of type [S] can be registered.\n  ///\n  /// If [name] is set, the factory will be registered under this name.\n  /// To retrieve the same factory, the same name should be provided\n  /// to [KiwiContainer.resolve].\n  void registerSingleton<S>(\n    FactoryBuilder<S> factory, {\n    String? name,\n  }) {\n    _setProvider(name, _Provider<S>.singleton(factory));\n  }\n\n  /// Removes the entry previously registered for the type [T].\n  ///\n  /// If [name] is set, removes the one registered for that name.\n  void unregister<T>([String? name]) {\n    if (!silent && !(_providers[name]?.containsKey(T) ?? false)) {\n      throw KiwiError(\n          'Failed to unregister `$T`:\\n\\nThe type `$T` was not registered${name == null ? '' : ' for the name `$name`'}\\n\\nMake sure `$T` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.');\n    }\n\n    _providers[name]?.remove(T);\n  }\n\n  /// Attemps to resolve the type [T].\n  ///\n  /// If [name] is set, the instance or builder registered with this\n  /// name will be get.\n  ///\n  /// See also:\n  ///\n  ///  * [KiwiContainer.registerFactory] for register a builder function.\n  ///  * [KiwiContainer.registerInstance] for register an instance.\n  T resolve<T>([String? name]) {\n    final providers = _providers[name] ?? _ProviderValue.from({});\n\n    if (!silent && !(providers.containsKey(T))) {\n      throw NotRegisteredKiwiError(\n          'Failed to resolve `$T`:\\n\\nThe type `$T` was not registered${name == null ? '' : ' for the name `$name`'}\\n\\nMake sure `$T` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.');\n    }\n\n    final value = providers[T]?.get(this);\n    if (value == null) {\n      throw NotRegisteredKiwiError(\n          'Failed to resolve `$T`:\\n\\nThe type `$T` was not registered${name == null ? '' : ' for the name `$name`'}\\n\\nMake sure `$T` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.');\n    }\n\n    if (value is T) return value as T;\n\n    throw NotRegisteredKiwiError(\n        'Failed to resolve `$T`:\\n\\nValue was not registered as `$T`\\n\\nThe type `$T` was not registered${name == null ? '' : ' for the name `$name`'}\\n\\nMake sure `$T` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.');\n  }\n\n  /// Attemps to resolve the type [S] and tries to cast it to T.\n  ///\n  /// If [name] is set, the instance or builder registered with this\n  /// name will be get.\n  ///\n  /// This method is only available for Testing.\n  ///\n  /// See also:\n  ///\n  ///  * [KiwiContainer.resolve] for resolving the object itself.\n  ///  * [KiwiContainer.registerFactory] for register a builder function.\n  ///  * [KiwiContainer.registerInstance] for register an instance.\n  @visibleForTesting\n  T? resolveAs<S, T extends S>([String? name]) {\n    final object = resolve<S>(name);\n\n    if (!silent && !(object is T)) {\n      throw KiwiError(\n          'Failed to resolve `$S` as `$T`:\\n\\nThe type `$S` as `$T` was not registered${name == null ? '' : ' for the name `$name`'}\\n\\nMake sure `$T` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.');\n    }\n\n    if (object == null) return null;\n    if (object is T) return object as T;\n\n    return null;\n  }\n\n  T call<T>([String? name]) => resolve<T>(name);\n\n  /// Returns if an instance or builder of type [T] is registered.\n  ///\n  /// If an instance or builder of type [T] is registered with a name,\n  /// and the name is not passed to [isRegistered], returns false.\n  bool isRegistered<T>({String? name}) {\n    return (_providers.containsKey(name) && _providers[name]!.containsKey(T));\n  }\n\n  /// Removes all instances and builders from the container.\n  ///\n  /// After this, the container is empty.\n  void clear() {\n    _providers.clear();\n  }\n\n  void _setProvider<T>(String? name, _Provider<T> provider) {\n    if (!silent && isRegistered<T>(name: name)) {\n      throw KiwiError(\n          'The type `$T` was already registered${name == null ? '' : ' for the name `$name`'}');\n    }\n\n    _providers.putIfAbsent(name, () => _ProviderValue.from({}))[T] =\n        provider as _Provider<Object>;\n  }\n}\n\nclass _Provider<T> {\n  final FactoryBuilder<T>? _instanceBuilder;\n\n  T? object;\n  bool _oneTime = false;\n\n  _Provider.instance(this.object)\n      : _instanceBuilder = null,\n        _oneTime = false;\n\n  _Provider.factory(this._instanceBuilder) : _oneTime = false;\n\n  _Provider.singleton(this._instanceBuilder) : _oneTime = true;\n\n  T? get(KiwiContainer container) {\n    final instanceBuilder = _instanceBuilder;\n\n    if (_oneTime && instanceBuilder != null) {\n      object = instanceBuilder(container);\n      _oneTime = false;\n    }\n\n    if (object != null) {\n      return object;\n    }\n\n    if (instanceBuilder != null) {\n      return instanceBuilder(container);\n    }\n\n    return null;\n  }\n\n  @override\n  String toString() {\n    return '''\n      _Provider(\n        _instanceBuilder: $_instanceBuilder,\n        object: $object,\n        _oneTime: $_oneTime,\n      );\n    ''';\n  }\n}\n"
  },
  {
    "path": "packages/kiwi/lib/src/model/exception/kiwi_error.dart",
    "content": "class KiwiError extends Error {\n  final String message;\n\n  KiwiError(this.message);\n\n  @override\n  String toString() {\n    return 'KiwiError:\\n\\n\\n$message\\n\\n\\n';\n  }\n}\n"
  },
  {
    "path": "packages/kiwi/lib/src/model/exception/not_registered_error.dart",
    "content": "import 'package:kiwi/src/model/exception/kiwi_error.dart';\n\nclass NotRegisteredKiwiError extends KiwiError {\n  NotRegisteredKiwiError(String message) : super(message);\n\n  @override\n  String toString() {\n    return 'Not Registered KiwiError:\\n\\n\\n$message\\n\\n\\n';\n  }\n}\n"
  },
  {
    "path": "packages/kiwi/mono_pkg.yaml",
    "content": "# See https://github.com/dart-lang/mono_repo for details\ndart:\n  - stable\n  - dev\n\nstages:\n  - analyze:\n    - dartfmt\n    - dartanalyzer: --fatal-infos --fatal-warnings .\n  - unit_test:\n    - test"
  },
  {
    "path": "packages/kiwi/pubspec.yaml",
    "content": "name: kiwi\ndescription: A simple yet efficient dependency injection container for Dart and Flutter (can be coupled with the kiwi_generator package).\nversion: 5.0.1\nhomepage: https://github.com/gbtb16/kiwi/tree/master/packages/kiwi\nrepository: https://github.com/gbtb16/kiwi/tree/master/packages/kiwi\nissue_tracker: https://github.com/gbtb16/kiwi/issues\n\nenvironment:\n  sdk: \">=2.14.0 <4.0.0\"\n\ndependencies:\n  meta: ^1.8.0\n\ndev_dependencies:\n  test: ^1.25.1\n\ntopics:\n  - deep-linking\n  - dependency-injector\n  - containers"
  },
  {
    "path": "packages/kiwi/test/kiwi_test.dart",
    "content": "import 'package:kiwi/kiwi.dart';\nimport 'package:test/test.dart';\n\nvoid main() {\n  KiwiContainer container = KiwiContainer();\n\n  group('Silent=true tests', () {\n    setUp(() {\n      container.clear();\n      container.silent = true;\n    });\n\n    test('containers should be the same', () {\n      KiwiContainer c1 = KiwiContainer();\n      KiwiContainer c2 = KiwiContainer();\n      expect(c1, c2);\n    });\n\n    test('KiwiContainer.scope should be a different object', () {\n      KiwiContainer c1 = KiwiContainer();\n      KiwiContainer c2 = KiwiContainer();\n      KiwiContainer c3 = KiwiContainer.scoped();\n      KiwiContainer c4 = KiwiContainer.scoped();\n      expect(c1, c2);\n      expect(c1, isNot(c3));\n      expect(c1, isNot(c4));\n      expect(c2, isNot(c3));\n      expect(c2, isNot(c4));\n      expect(c3, isNot(c4));\n    });\n\n    test('instances should be resolved', () {\n      var person = Character('Anakin', 'Skywalker');\n      container.registerInstance(5);\n      container.registerInstance(6, name: 'named');\n      container.registerInstance<num>(7);\n      container.registerInstance(person);\n\n      expect(container.resolve<int>(), 5);\n      expect(container.resolve<int>('named'), 6);\n      expect(container.resolve<num>(), 7);\n\n      expect(\n          () => container.resolve<num>('named'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `num`:\\n\\nThe type `num` was not registered for the name `named`\\n\\nMake sure `num` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('instances should be resolveAs', () {\n      final sith = Sith('Anakin', 'Skywalker', 'DarthVader');\n      container.registerSingleton<Character>((c) => sith);\n\n      expect(container.resolveAs<Character, Sith>(), sith);\n\n      expect(\n          () => container.resolveAs<Character, Sith>('named'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `Character`:\\n\\nThe type `Character` was not registered for the name `named`\\n\\nMake sure `Character` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('container should resolve when called', () {\n      var person = Character('Anakin', 'Skywalker');\n      container.registerInstance(5);\n      container.registerInstance(6, name: 'named');\n      container.registerInstance<num>(7);\n      container.registerInstance(person);\n\n      expect(container<int>(), 5);\n      expect(container<int>('named'), 6);\n      expect(container<num>(), 7);\n      expect(\n          () => container.resolve<num>('named'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `num`:\\n\\nThe type `num` was not registered for the name `named`\\n\\nMake sure `num` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n      expect(container<Character>(), person);\n    });\n\n    test('instances can be overridden', () {\n      container.registerInstance(5);\n      expect(container.resolve<int>(), 5);\n\n      container.registerInstance(6);\n      expect(container.resolve<int>(), 6);\n    });\n\n    test('builders should be resolved', () {\n      container.registerSingleton((c) => 5);\n      container.registerFactory(\n          (c) => const Sith('Anakin', 'Skywalker', 'DarthVader'));\n      container.registerFactory((c) => const Character('Anakin', 'Skywalker'));\n      container.registerFactory<Character>(\n          (c) => const Sith('Anakin', 'Skywalker', 'DarthVader'),\n          name: 'named');\n\n      expect(container.resolve<int>(), 5);\n      expect(container.resolve<Sith>(),\n          const Sith('Anakin', 'Skywalker', 'DarthVader'));\n      expect(container.resolve<Character>(),\n          const Character('Anakin', 'Skywalker'));\n      expect(container.resolve<Character>('named'),\n          const Sith('Anakin', 'Skywalker', 'DarthVader'));\n    });\n\n    test('builders should always be created', () {\n      container.registerFactory((c) => Character('Anakin', 'Skywalker'));\n\n      expect(container.resolve<Character>(),\n          isNot(same(container.resolve<Character>())));\n    });\n\n    test('one time builders should be resolved', () {\n      container.registerSingleton((c) => 5);\n      container.registerSingleton(\n          (c) => const Sith('Anakin', 'Skywalker', 'DarthVader'));\n      container.registerSingleton<Character>(\n          (c) => const Character('Anakin', 'Skywalker'));\n\n      expect(container.resolve<int>(), 5);\n      expect(container.resolve<Sith>(),\n          const Sith('Anakin', 'Skywalker', 'DarthVader'));\n      expect(container.resolve<Character>(),\n          const Character('Anakin', 'Skywalker'));\n    });\n\n    test('one time builders should be created one time only', () {\n      container.registerSingleton((c) => Character('Anakin', 'Skywalker'));\n\n      expect(container.resolve<Character>(), container.resolve<Character>());\n    });\n\n    test('unregister should remove items from container', () {\n      container.registerInstance(5);\n      container.registerInstance(6, name: 'named');\n\n      expect(container.resolve<int>(), 5);\n      expect(container.resolve<int>('named'), 6);\n\n      container.unregister<int>();\n      expect(\n          () => container.resolve<int>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      container.unregister<int>('named');\n      expect(\n          () => container.resolve<int>('named'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered for the name `named`\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n  });\n\n  group('Silent=false tests', () {\n    setUp(() {\n      container.clear();\n      container.silent = false;\n    });\n\n    test('instances cannot be overridden', () {\n      container.registerInstance(5);\n      expect(container.resolve<int>(), 5);\n\n      container.registerInstance(8, name: 'name');\n      expect(container.resolve<int>('name'), 8);\n\n      expect(\n          () => container.registerInstance(6),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'KiwiError:\\n\\n\\nThe type `int` was already registered\\n\\n\\n',\n          )));\n\n      expect(\n          () => container.registerInstance(9, name: 'name'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'KiwiError:\\n\\n\\nThe type `int` was already registered for the name `name`\\n\\n\\n',\n          )));\n    });\n\n    test('values should exist when unregistering', () {\n      expect(\n          () => container.unregister<int>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'KiwiError:\\n\\n\\nFailed to unregister `int`:\\n\\nThe type `int` was not registered\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      expect(\n          () => container.unregister<int>('name'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'KiwiError:\\n\\n\\nFailed to unregister `int`:\\n\\nThe type `int` was not registered for the name `name`\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('values should exist when resolving', () {\n      expect(\n          () => container.resolve<int>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      expect(\n          () => container.resolve<int>('name'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered for the name `name`\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n    test('values should exist when resolving as', () {\n      var person = Character('Anakin', 'Skywalker');\n      container.registerInstance(person);\n      container.registerInstance(person, name: 'named');\n      expect(\n          () => container.resolveAs<Character, Sith>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'KiwiError:\\n\\n\\nFailed to resolve `Character` as `Sith`:\\n\\nThe type `Character` as `Sith` was not registered\\n\\nMake sure `Sith` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      expect(\n          () => container.resolveAs<Character, Sith>('named'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'KiwiError:\\n\\n\\nFailed to resolve `Character` as `Sith`:\\n\\nThe type `Character` as `Sith` was not registered for the name `named`\\n\\nMake sure `Sith` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('Parented [KiwiContainer.scoped] should inherit global registrations',\n        () {\n      container.registerInstance(5);\n      container.registerInstance(6, name: 'named');\n      container.registerInstance<num>(7);\n\n      final character = Character('Gabriel', 'Kiwilied');\n      container.registerFactory<Character>((c) => character);\n\n      final scoped = KiwiContainer.scoped(parent: container);\n\n      // The scoped instance and global container must be different.\n      expect(scoped, isNot(container));\n\n      expect(scoped.resolve<int>(), 5);\n      expect(scoped.resolve<int>('named'), 6);\n      expect(scoped.resolve<num>(), 7);\n      expect(scoped.resolve<Character>(), character);\n    });\n\n    test('Parented [KiwiContainer.scoped] should inherit registrations', () {\n      final firstScoped = KiwiContainer.scoped();\n\n      firstScoped.registerInstance<int>(5);\n      firstScoped.registerInstance<int>(6, name: 'named');\n      firstScoped.registerInstance<num>(7);\n\n      final character = Character('Gabriel', 'Kiwilied');\n      firstScoped.registerFactory<Character>((c) => character);\n\n      final secondScoped = KiwiContainer.scoped(parent: firstScoped);\n\n      // The scoped instances must be different.\n      expect(secondScoped, isNot(firstScoped));\n\n      expect(secondScoped.resolve<int>(), 5);\n      expect(secondScoped.resolve<int>('named'), 6);\n      expect(secondScoped.resolve<num>(), 7);\n      expect(secondScoped.resolve<Character>(), character);\n    });\n\n    test('Parented [KiwiContainer.scoped] should be impacted by parent', () {\n      final firstScoped = KiwiContainer.scoped();\n\n      firstScoped.registerInstance<int>(5);\n      firstScoped.registerInstance<int>(6, name: 'named');\n      firstScoped.registerInstance<num>(7);\n\n      final character = Character('Gabriel', 'Kiwilied');\n      firstScoped.registerFactory<Character>((c) => character);\n\n      final secondScoped = KiwiContainer.scoped(parent: firstScoped);\n\n      firstScoped.registerInstance<int>(26, name: 'exclusive_to_parent');\n      firstScoped.registerInstance<String>('random_string');\n\n      expect(firstScoped.resolve<int>(), 5);\n      expect(firstScoped.resolve<int>('named'), 6);\n      expect(firstScoped.resolve<num>(), 7);\n      expect(firstScoped.resolve<Character>(), character);\n      // The instances registered in [firstScoped] after creation of [secondScoped].\n      expect(firstScoped.resolve<int>('exclusive_to_parent'), 26);\n      expect(firstScoped.resolve<String>(), 'random_string');\n\n      expect(secondScoped.resolve<int>(), 5);\n      expect(secondScoped.resolve<int>('named'), 6);\n      expect(secondScoped.resolve<Character>(), character);\n\n      // The [secondScoped] must not have the [firstScoped] instances registered after [secondScoped] creation.\n      expect(\n          () => secondScoped.resolve<int>('exclusive_to_parent'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered for the name `exclusive_to_parent`\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      expect(\n          () => secondScoped.resolve<String>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `String`:\\n\\nThe type `String` was not registered\\n\\nMake sure `String` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('Parented [KiwiContainer.scoped] should not impact parent', () {\n      final firstScoped = KiwiContainer.scoped();\n\n      firstScoped.registerInstance<int>(5);\n      firstScoped.registerInstance<int>(6, name: 'named');\n      firstScoped.registerInstance<num>(7);\n\n      final character = Character('Gabriel', 'Kiwilied');\n      firstScoped.registerFactory<Character>((c) => character);\n\n      final secondScoped = KiwiContainer.scoped(parent: firstScoped);\n\n      secondScoped.registerInstance<int>(27, name: 'exclusive_to_scoped');\n      secondScoped.registerInstance<String>('random_string');\n\n      expect(firstScoped.resolve<int>(), 5);\n      expect(firstScoped.resolve<int>('named'), 6);\n      expect(firstScoped.resolve<num>(), 7);\n      expect(firstScoped.resolve<Character>(), character);\n\n      expect(secondScoped.resolve<int>(), 5);\n      expect(secondScoped.resolve<int>('named'), 6);\n      expect(secondScoped.resolve<num>(), 7);\n      expect(secondScoped.resolve<Character>(), character);\n      // The instances registered in [secondScoped] after your creation.\n      expect(secondScoped.resolve<int>('exclusive_to_scoped'), 27);\n      expect(secondScoped.resolve<String>(), 'random_string');\n\n      // The [firstScoped] must not have the [secondScoped] instances registered only in [secondScoped].\n      expect(\n          () => firstScoped.resolve<int>('exclusive_to_scoped'),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered for the name `exclusive_to_scoped`\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      expect(\n          () => firstScoped.resolve<String>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `String`:\\n\\nThe type `String` was not registered\\n\\nMake sure `String` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('Unparented [KiwiContainer.scoped] should not be resolved', () {\n      final scoped = KiwiContainer.scoped(parent: container);\n\n      expect(\n          () => scoped.resolve<int>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('checks that the instances are registered', () {\n      final scoped = KiwiContainer.scoped();\n\n      // Unnamed instances\n      expect(scoped.isRegistered<int>(), false);\n\n      scoped.registerInstance<int>(5);\n\n      expect(scoped.isRegistered<int>(), true);\n      expect(scoped.resolve<int>(), 5);\n\n      scoped.unregister<int>();\n\n      expect(scoped.isRegistered<int>(), false);\n      expect(\n          () => container.resolve<int>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `int`:\\n\\nThe type `int` was not registered\\n\\nMake sure `int` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n\n      // Named instances\n      expect(scoped.isRegistered<String>(name: 'named_string_instance'), false);\n\n      scoped.registerInstance<String>('random_string',\n          name: 'named_string_instance');\n\n      expect(scoped.isRegistered<String>(),\n          false); // [isRegistered] cannot be true if String it is named and is tested unnamed.\n      expect(scoped.isRegistered<String>(name: 'named_string_instance'), true);\n      expect(scoped.resolve<String>('named_string_instance'), 'random_string');\n\n      scoped.unregister<String>('named_string_instance');\n\n      expect(scoped.isRegistered<String>(), false);\n      expect(\n          () => container.resolve<String>(),\n          throwsA(TypeMatcher<KiwiError>().having(\n            (f) => f.toString(),\n            'toString()',\n            'Not Registered KiwiError:\\n\\n\\nFailed to resolve `String`:\\n\\nThe type `String` was not registered\\n\\nMake sure `String` is added to your KiwiContainer and rerun build_runner build\\n(If you are using the kiwi_generator)\\n\\nWhen using Flutter, most of the time a hot restart is required to setup the KiwiContainer again.\\n\\n\\n',\n          )));\n    });\n\n    test('Should be return all providers', () {\n      final scoped = KiwiContainer.scoped();\n\n      expect(scoped.providers.length, 0);\n\n      scoped.registerInstance<int>(1, name: 'int-instance');\n      scoped.registerInstance<double>(2.0);\n\n      expect(scoped.providers.length, 2);\n    });\n\n    test('Should be return all named providers', () {\n      final scoped = KiwiContainer.scoped();\n\n      expect(scoped.namedProviders.length, 0);\n      expect(scoped.unnamedProviders.length, 0);\n\n      scoped.registerInstance<int>(1, name: 'int-instance');\n\n      expect(scoped.namedProviders.length, 1);\n      expect(scoped.unnamedProviders.length, 0);\n    });\n\n    test('Should be return all unnamed providers', () {\n      final scoped = KiwiContainer.scoped();\n\n      expect(scoped.namedProviders.length, 0);\n      expect(scoped.unnamedProviders.length, 0);\n\n      scoped.registerInstance<int>(1);\n\n      expect(scoped.namedProviders.length, 0);\n      expect(scoped.unnamedProviders.length, 1);\n    });\n\n    test('Should be return all named and unnamed providers', () {\n      final scoped = KiwiContainer.scoped();\n\n      expect(scoped.namedProviders.length, 0);\n      expect(scoped.unnamedProviders.length, 0);\n\n      scoped.registerInstance<int>(1);\n      scoped.registerInstance<double>(2.0, name: 'double-instance');\n\n      expect(scoped.namedProviders.length, 1);\n      expect(scoped.unnamedProviders.length, 1);\n    });\n  });\n}\n\nclass Character {\n  const Character(\n    this.firstName,\n    this.lastName,\n  );\n\n  final String firstName;\n  final String lastName;\n}\n\nclass Sith extends Character {\n  const Sith(\n    String firstName,\n    String lastName,\n    this.id,\n  ) : super(firstName, lastName);\n\n  final String id;\n}\n"
  },
  {
    "path": "packages/kiwi_generator/.gitignore",
    "content": "# Files and directories created by pub\n.dart_tool/\n.packages\n# Remove the following pattern if you wish to check in your lock file\npubspec.lock\n\n# Conventional directory for build outputs\nbuild/\n\n# Directory created by dartdoc\ndoc/api/\n"
  },
  {
    "path": "packages/kiwi_generator/CHANGELOG.md",
    "content": "# 4.2.1\n\n- kiwi version has been updated to `5.0.1`.\n\n# 4.2.0\n\nNow Kiwi it's a Brazilian package! 🇧🇷 ♥\n\nThank you ([@vanlooverenkoen](https://github.com/vanlooverenkoen)) for your contribution and trust in our work.\nHe continued his active and dedicated work on the Kiwi Generator package up to version `4.2.0`.\n\n- BREAKING: kiwi version has been updated to `5.0.0`.\n- refactor: the package structure has been refactored to be in line with the market. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: implemented new dart format rule for line length (160) of package development. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: github actions have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: github project labels have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- refactor: the Dart CLI tools in the package have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- fix: build_runner version has been updated. ([PR #102](https://github.com/gbtb16/kiwi/pull/102))\n- fix: typedefs have been updated. ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- fix: pub.dev points now sound great (150/150). ([PR #106](https://github.com/gbtb16/kiwi/pull/106))\n- fix: dependabot has been updated. ([PR #107](https://github.com/gbtb16/kiwi/pull/107))\n- chore: other minimalist changes.\n- chore: update `analyzer` dependency to `6.0.0`.\n\n# 4.1.0\n### Updated\n- Dependencies\n- Moved from travis to github actions\n\n# 4.0.3\n## Updated\n- Dependencies\n\n# 4.0.2\n## Updated\n- Dependencies\n\n# 4.0.1\n## Fixed\n- Dart constraint issue for kiwi\n\n# 4.0.0\n## BREAKING\n- Updated to analyzer 2.0.0\n- Dart 2.14 min requirement\n## Updated dependencies\n\n# 3.0.1\n## Updated\n- Generated core is now using the cascade operator\n## Fixed\n- Using build_runner 2.0.4 with kiwi\n\n# 3.0.0\n## Added\n- Nullsafety codebase migration\n## Updated dependencies\n- Updated dependencies to make sure we can still build with new dependencies.\n\n# 2.1.1\n## Updated\n- Kiwi version to 2.1.1\n\n# 2.1.0\n## Updated\n- Updated the documentation for the use of subclasses & subclasses with generics\n- Updated dependencies\n## Added\n- No response bot to git\n- Android v2 embedding for the example project\n## Fixed\n- \\#44 Fixed a bug where the @override was never generated\n- \\#45 Fixed a bug where a file that contained a abstract void method without @register would be skipped. This is not the case anymore. \n\n# 2.0.1\n## Fixed\n- \\#49 Fixed a bug that prepares for nullability. In this release we do not yet support nullability. But #51 is tracking nullability support\n\n# 2.0.0\n## BREAKING CHANGE\n- \\#9 Removed the unused T generic for some functions\n## Added\n- \\#19 added support for scopes with the kiwi_generator\n\n# 1.0.0\n## BREAKING CHANGE\n- renamed `Container` to `KiwiContainer` so it is easier for Flutter devs to import the KiwiContainer (kiwi: 1.0.0 required)\n\n# 0.5.2\n## Fixed\n- Updated homepage\n\n# 0.5.1\n### Fixed\n- Fixed pub.dev score\n\n# 0.5.0\n## Fixed\n- Upgrade dependencies\n- Fixed formatting errors\n- Fixed pub.dev score\n\n# 0.4.0\n- Upgrade dependencies\n\n# 0.3.1\n## Fixed\n- Upgrade dependencies and fix a deprecated error.\n\n# 0.3.0\n## Fixed\n- Upgrade dependencies\n\n# 0.2.0\n## Fixed\n- Upgrade dependencies\n\n# 0.1.1\n### Fixed\n- The generator no longer generates a `.g.dart` file for abstract classes without abstract methods.\n\n# 0.1.0\n- Initial Open Source release.\n"
  },
  {
    "path": "packages/kiwi_generator/LICENSE",
    "content": "MIT License\n\nCopyright (c) 2018 Romain Rastel\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/kiwi_generator/README.md",
    "content": "# kiwi_generator\n\n[![Pub](https://img.shields.io/pub/v/kiwi_generator.svg)](https://pub.dartlang.org/packages/kiwi_generator)\n\n![Logo](https://raw.githubusercontent.com/gbtb16/kiwi/master/images/logo.png)\n\nGenerates dependency injection code using the [kiwi](https://github.com/gbtb16/packages/kiwi) package to reduce development time.\n\n## Configuration\n\n1. Add `kiwi` to `pubspec.yaml` under the `dependencies:` section.\nThe latest version is [![Pub](https://img.shields.io/pub/v/kiwi.svg)](https://pub.dartlang.org/packages/kiwi)\n\n```yaml\ndependencies:\n  kiwi: ^latest_version\n```\n\n2. Add [build_runner](https://github.com/dart-lang/build/tree/master/build_runner) and `kiwi_generator` under the `dev_dependencies:` section of the `pubspec.yaml` file.\nThe latest version is [![Pub](https://img.shields.io/pub/v/kiwi_generator.svg)](https://pub.dartlang.org/packages/kiwi_generator)\n\n```yaml\ndev_dependencies:  \n  build_runner: ^2.3.3\n  kiwi_generator: ^latest_version\n```\n\n## Usage\n\nIn your library add the following import:\n\n```dart\nimport 'package:kiwi/kiwi.dart';\n```\n\nCreate an abstract class with an abstract method:\n\n```dart\nabstract class Injector {\n  void configure();\n}\n```\n\nAnnotate the abstract method with the **kiwi** `Register` annotations.\n\n```dart\nabstract class Injector {  \n  @Register.singleton(ServiceA)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceB, name: 'factoryB')\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void configure();\n}\n```\n\nInclude the part directive indicating the file that will be generated (typically the same file with a `.g` extension before `.dart`):\n\n```dart\npart 'test01.g.dart';\n```\n\nRun build_runner:\n\n```bash\npub run build_runner build\n```\n\nFor Flutter the command is different though:\n\n```bash\nflutter packages pub run build_runner build\n```\n\n**Note:** On first attempt to run this command you might encounter a conflict error. If so, please add the --delete-conflicting-outputs argument to your command:\n\n```bash\nflutter packages pub run build_runner build --delete-conflicting-outputs\n```\n(This additional argument allows the command to overwrite the `.g.dart` file if necessary.)\n\nYou can also use the `watch` command instead of `build`. This will generate your file when it's saved.\n\n```bash\npub run build_runner watch\n```\n\nA concrete class named `_$TheNameOfYourAbstractClass` will be generated and you can call the method where you like.\nFor example you can create a function in your library which will call it:\n\n```dart\nvoid setup() {\n  var injector = _$Injector();\n  injector.configure();\n}\n```\n\nOr you can create a function that will return the concrecte injector and use it elsewhere:\n\n```dart\nInjector getInjector() => _$Injector();\n```\n\n## Annotations\n\nThere is only one annotation, called `Register`, with two constructors: `factory` and `singleton`. There are no constructor for registering instances because only `const` instances are supported in metadata. And it would'nt be easier to create an annotation than registering directly with a container.\n\nIf you want to register a singleton (the factory will be called only one time, when accessing it for the first time):\n\n```dart\n@Register.singleton(ServiceA)\n```\n\nIf you want to register a factory:\n\n```dart\n@Register.factory(ServiceA)\n```\n\nBoth constructors have the same parameters:\n\n**Parameter**|**Type**|**Required**|**Description**\n-----|:-----:|:-----:|-----\n`type`|Type|Yes|This is the type to register\n`name`|String|No|This is the name under which the factory will be registered\n`from`|Type|No|The type to create when requesting `type`, if different of `type`.\n`constructorName`|String|No|The name of the constructor to use inside the factory\n`resolvers`|Map<String, String>|No|A map that give for a type, the name under which it should be resolved\n\n## Short example\n\nThis code:\n\n```dart\nimport 'package:kiwi/kiwi.dart';\n\npart 'test01.g.dart';\n\nabstract class Injector {\n  @Register.singleton(ServiceA)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceB, name: 'factoryB')\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void common();\n\n  @Register.factory(ServiceC)\n  void development();\n\n  @Register.factory(ServiceC, constructorName: 'other')\n  void production();\n}\n\nclass Service {}\n\nclass ServiceA extends Service {}\n\nclass ServiceB extends Service {\n  ServiceB(ServiceA serviceA);\n}\n\nclass ServiceC extends Service {\n  ServiceC(ServiceA serviceA, ServiceB serviceB);\n  ServiceC.other(ServiceB serviceA);\n}\n\nvoid setup(bool isProduction) {\n  var injector = _$Injector();\n  injector.common();\n  if (isProduction) {\n    injector.production();\n  } else {\n    injector.development();\n  }\n}\n```\n\nWill produce this:\n\n```dart\n// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'test01.dart';\n\n// **************************************************************************\n// InjectorGenerator\n// **************************************************************************\n\nclass _$Injector extends Injector {\n  void common() {\n    final KiwiContainer container = KiwiContainer();\n    container.registerSingleton((c) => ServiceA());\n    container\n        .registerFactory<Service>((c) => ServiceB(c<ServiceA>()));\n    container.registerFactory((c) => ServiceB(c<ServiceA>()), name: 'factoryB');\n    container.registerFactory(\n        (c) => ServiceC(c<ServiceA>(), c<ServiceB>('factoryB')));\n  }\n\n  void development() {\n    final KiwiContainer container = KiwiContainer();\n    container.registerFactory((c) => ServiceC(c<ServiceA>(), c<ServiceB>()));\n  }\n\n  void production() {\n    final KiwiContainer container = KiwiContainer();\n    container.registerFactory((c) => ServiceC.other(c<ServiceB>()));\n  }\n}\n```\n\n## Changelog\n\nPlease see the [Changelog](https://github.com/gbtb16/kiwi/blob/master/packages/kiwi_generator/CHANGELOG.md) page to know what's recently changed.\n"
  },
  {
    "path": "packages/kiwi_generator/analysis_options.yaml",
    "content": "analyzer:\n#   exclude:\n#     - path/to/excluded/files/**\n\n# Lint rules and documentation, see http://dart-lang.github.io/linter/lints\nlinter:\n  rules:\n    - cancel_subscriptions\n    - hash_and_equals\n    - collection_methods_unrelated_type\n    - test_types_in_equals\n    - unrelated_type_equality_checks\n    - valid_regexps\n"
  },
  {
    "path": "packages/kiwi_generator/build.yaml",
    "content": "targets:\n  $default:\n    builders:\n      kiwi:\n        generate_for:\n          - example/kiwi_generator_example.dart\n\n# Read about `build.yaml` at https://pub.dartlang.org/packages/build_config\nbuilders:\n  kiwi|kiwi:\n    import: \"package:kiwi_generator/builder.dart\"\n    builder_factories: [\"buildKiwi\"]\n    build_extensions: {\".dart\": [\".kiwi.g.part\"]}\n    auto_apply: dependents\n    build_to: cache\n    applies_builders: [\"source_gen|combining_builder\"]"
  },
  {
    "path": "packages/kiwi_generator/example/kiwi_generator_example.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\npart 'kiwi_generator_example.g.dart';\n\nabstract class Injector {\n  @Register.singleton(ServiceA)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceB, name: 'factoryB')\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void configureWithScopedContainer(KiwiContainer scopedContainer);\n\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void configureWithScopedContainer2([KiwiContainer scopedContainer]);\n\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void configureWithScopedContainer3({KiwiContainer scopedContainer});\n\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void configureWithScopedContainer4({KiwiContainer scopedContainer});\n\n  @Register.singleton(ServiceA)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceB, name: 'factoryB')\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  void configure();\n\n  void methodWithoutAnnotations();\n\n  void configureInjector() {}\n}\n\nvoid setup() {\n  final injector = _$Injector();\n  injector.configure();\n}\n\nclass Service {\n  const Service();\n}\n\nclass ServiceA extends Service {\n  const ServiceA();\n}\n\nclass ServiceB extends Service {\n  const ServiceB(ServiceA serviceA);\n}\n\nclass ServiceC extends Service {\n  const ServiceC(ServiceA serviceA, ServiceB serviceB);\n\n  const ServiceC.other(ServiceA serviceA);\n}\n"
  },
  {
    "path": "packages/kiwi_generator/example/kiwi_generator_example.g.dart",
    "content": "// GENERATED CODE - DO NOT MODIFY BY HAND\n\npart of 'kiwi_generator_example.dart';\n\n// **************************************************************************\n// KiwiInjectorGenerator\n// **************************************************************************\n\nclass _$Injector extends Injector {\n  @override\n  void configureWithScopedContainer(KiwiContainer? scopedContainer) {\n    final KiwiContainer container = scopedContainer ?? KiwiContainer();\n    container\n      ..registerSingleton((c) => ServiceA())\n      ..registerFactory<Service>((c) => ServiceB(c.resolve<ServiceA>()))\n      ..registerFactory((c) => ServiceB(c.resolve<ServiceA>()),\n          name: 'factoryB')\n      ..registerFactory((c) =>\n          ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')));\n  }\n\n  @override\n  void configureWithScopedContainer2([KiwiContainer? scopedContainer = null]) {\n    final KiwiContainer container = scopedContainer ?? KiwiContainer();\n    container.registerFactory((c) =>\n        ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')));\n  }\n\n  @override\n  void configureWithScopedContainer3({KiwiContainer? scopedContainer = null}) {\n    final KiwiContainer container = scopedContainer ?? KiwiContainer();\n    container.registerFactory((c) =>\n        ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')));\n  }\n\n  @override\n  void configureWithScopedContainer4({KiwiContainer? scopedContainer = null}) {\n    final KiwiContainer container = scopedContainer ?? KiwiContainer();\n    container.registerFactory((c) =>\n        ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')));\n  }\n\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerSingleton((c) => ServiceA())\n      ..registerFactory<Service>((c) => ServiceB(c.resolve<ServiceA>()))\n      ..registerFactory((c) => ServiceB(c.resolve<ServiceA>()),\n          name: 'factoryB')\n      ..registerFactory((c) =>\n          ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')));\n  }\n\n  @override\n  void methodWithoutAnnotations() {}\n}\n"
  },
  {
    "path": "packages/kiwi_generator/kiwi_generator.iml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<module type=\"WEB_MODULE\" version=\"4\">\n  <component name=\"NewModuleRootManager\" inherit-compiler-output=\"true\">\n    <exclude-output />\n    <content url=\"file://$MODULE_DIR$\">\n      <excludeFolder url=\"file://$MODULE_DIR$/.dart_tool\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/.pub\" />\n      <excludeFolder url=\"file://$MODULE_DIR$/build\" />\n    </content>\n    <orderEntry type=\"sourceFolder\" forTests=\"false\" />\n    <orderEntry type=\"library\" name=\"Dart SDK\" level=\"project\" />\n    <orderEntry type=\"library\" name=\"Dart Packages\" level=\"project\" />\n  </component>\n</module>"
  },
  {
    "path": "packages/kiwi_generator/lib/builder.dart",
    "content": "/// Configuration for using `package:build`-compatible build systems.\n///\n/// This library is **not** intended to be imported by typical end-users unless\n/// you are creating a custom compilation pipeline.\n///\n/// See [package:build_runner](https://pub.dartlang.org/packages/build_runner)\n/// for more information.\nlibrary builder;\n\nimport 'package:build/build.dart';\nimport 'package:source_gen/source_gen.dart';\n\nimport 'src/kiwi_injector_generator.dart';\n\nBuilder buildKiwi([BuilderOptions? options = null]) {\n  return SharedPartBuilder(const [\n    KiwiInjectorGenerator(),\n  ], 'kiwi');\n}\n"
  },
  {
    "path": "packages/kiwi_generator/lib/kiwi_generator.dart",
    "content": "library kiwi_generator;\n\nexport 'src/kiwi_injector_generator.dart';\n"
  },
  {
    "path": "packages/kiwi_generator/lib/src/kiwi_injector_generator.dart",
    "content": "import 'package:analyzer/dart/constant/value.dart';\nimport 'package:analyzer/dart/element/element.dart';\nimport 'package:analyzer/dart/element/type.dart';\nimport 'package:build/build.dart';\nimport 'package:build/src/builder/build_step.dart';\nimport 'package:built_collection/built_collection.dart';\nimport 'package:code_builder/code_builder.dart';\nimport 'package:dart_style/dart_style.dart';\nimport 'package:kiwi/kiwi.dart';\nimport 'package:kiwi_generator/src/model/kiwi_generator_error.dart';\nimport 'package:kiwi_generator/src/util/list_extensions.dart';\nimport 'package:source_gen/source_gen.dart';\n\nconst TypeChecker _registerTypeChecker = TypeChecker.fromRuntime(Register);\n\nbool _isRegisterMethod(MethodElement method) =>\n    (method.returnType is VoidType &&\n        _registerTypeChecker.hasAnnotationOfExact(method));\n\nclass KiwiInjectorGenerator extends Generator {\n  const KiwiInjectorGenerator();\n\n  @override\n  String? generate(LibraryReader library, BuildStep? buildStep) {\n    try {\n      // An injector is an abstract class where all abstract methods are\n      // annotated with Register.\n      final injectors = library.classes\n          .where((c) =>\n              c.isAbstract &&\n              c.methods.where((m) => m.isAbstract).isNotEmpty &&\n              c.methods\n                  .where((m) => m.isAbstract && _isRegisterMethod(m))\n                  .isNotEmpty)\n          .toList();\n\n      if (injectors.isEmpty) {\n        return null;\n      }\n      final file = Library((lb) => lb\n        ..body.addAll(\n            injectors.map((i) => _generateInjector(i, library, buildStep))));\n\n      final DartEmitter emitter = DartEmitter(allocator: Allocator());\n      return DartFormatter().format('${file.accept(emitter)}');\n    } catch (e) {\n      if (e is KiwiGeneratorError || e is UnresolvedAnnotationException) {\n        rethrow;\n      } else if (e is Error) {\n        throw KiwiGeneratorError(\n            'Something went wrong with the KiwiGenerator. Please create a new ticket with a copy of your error to https://github.com/gbtb16/kiwi/issues/new',\n            error: e);\n      } else {\n        throw KiwiGeneratorError(\n            'Something went wrong with the KiwiGenerator. Please create a new ticket with a copy of your error to https://github.com/gbtb16/kiwi/issues/new');\n      }\n    }\n  }\n\n  Class _generateInjector(\n      ClassElement injector, LibraryReader library, BuildStep? buildStep) {\n    return Class((cb) => cb\n      ..name = '_\\$${injector.name}'\n      ..extend = refer(injector.name)\n      ..methods.addAll(_generateInjectorMethods(injector)));\n  }\n\n  List<Method> _generateInjectorMethods(ClassElement injector) {\n    return injector.methods\n        .where((m) => m.isAbstract)\n        .map((m) => _generateInjectorMethod(m))\n        .toList();\n  }\n\n  Method _generateInjectorMethod(MethodElement method) {\n    if (method.parameters.length > 1) {\n      throw KiwiGeneratorError(\n          'Only 1 parameter is supported `KiwiContainer scopedContainer`, ${method.name} contains ${method.parameters.length} param(s)');\n    }\n    final scopedContainerParam = method.parameters.singleOrNullWhere(\n      (element) =>\n          element.name == 'scopedContainer' &&\n          element.type.getDisplayString(withNullability: true) ==\n              'KiwiContainer',\n    );\n\n    return Method.returnsVoid((mb) {\n      var scopedContainer = '';\n      if (scopedContainerParam != null) {\n        if (scopedContainerParam.isOptional) {\n          mb.optionalParameters = ListBuilder<Parameter>([\n            Parameter((builder) => builder\n              ..name = scopedContainerParam.name\n              ..named = scopedContainerParam.isNamed\n              ..required = scopedContainerParam.isRequiredNamed\n              ..defaultTo = Code('null')\n              ..type = Reference('KiwiContainer?'))\n          ]);\n        } else {\n          mb.requiredParameters = ListBuilder<Parameter>([\n            Parameter((builder) => builder\n              ..name = scopedContainerParam.name\n              ..named = scopedContainerParam.isNamed\n              ..required = scopedContainerParam.isRequiredNamed\n              ..defaultTo = Code('null')\n              ..type = Reference('KiwiContainer?'))\n          ]);\n        }\n        scopedContainer = '${scopedContainerParam.name} ?? ';\n      } else if (method.parameters.isNotEmpty) {\n        throw KiwiGeneratorError(\n            'Only 1 parameter is supported `KiwiContainer scopedContainer`, ${method.name} contains ${method.parameters.length} param(s) and `KiwiContainer scopedContainer` is not included');\n      }\n      final registers = _generateRegisters(method);\n      mb\n        ..name = method.name\n        ..annotations.add(refer('override'));\n      if (registers == null) {\n        mb..body = Block();\n      } else {\n        mb\n          ..body = Block((bb) => bb\n            ..statements.add(Code(\n                'final KiwiContainer container = ${scopedContainer}KiwiContainer();'))\n            ..addExpression(registers));\n      }\n    });\n  }\n\n  Expression? _generateRegisters(MethodElement method) {\n    final annotations = _registerTypeChecker.annotationsOfExact(method);\n    return annotations.isEmpty\n        ? null\n        : annotations.fold<Expression>(\n            Reference('container'),\n            (expr, annotation) => _generateRegister(\n              expr,\n              AnnotatedElement(ConstantReader(annotation), method),\n            ),\n          );\n  }\n\n  Expression _generateRegister(\n      Expression registerExpression, AnnotatedElement annotatedMethod) {\n    final ConstantReader annotation = annotatedMethod.annotation;\n    final DartObject registerObject = annotation.objectValue;\n\n    final String? name = registerObject.getField('name')?.toStringValue();\n    final DartType? type = registerObject.getField('type')?.toTypeValue();\n    final DartType? concrete = registerObject.getField('from')?.toTypeValue();\n    final String? constructorName =\n        registerObject.getField('constructorName')?.toStringValue();\n    final DartType? concreteType = concrete ?? type;\n\n    // TODO: Implement null type check\n    if (concreteType == null) {\n      throw KiwiGeneratorError(\n          'null can not be registered because there is no type for null');\n    }\n\n    final String className =\n        concreteType.getDisplayString(withNullability: false);\n    final String typeParameters = concrete == null\n        ? ''\n        : '<${type?.getDisplayString(withNullability: false)}>';\n\n    final String nameArgument = name == null ? '' : \", name: '$name'\";\n    final String constructorNameArgument =\n        constructorName == null ? '' : '.$constructorName';\n\n    final ClassElement? clazz =\n        concreteType.element?.library?.getClass(className);\n    if (clazz == null) {\n      throw KiwiGeneratorError('$className not found');\n    }\n\n    final bool oneTime =\n        registerObject.getField('oneTime')?.toBoolValue() ?? false;\n    final Map<DartType?, String?>? resolvers =\n        _computeResolvers(registerObject.getField('resolvers')?.toMapValue());\n\n    final String methodSuffix = oneTime ? 'Singleton' : 'Factory';\n\n    final constructor = constructorName == null\n        ? clazz.unnamedConstructor\n        : clazz.getNamedConstructor(constructorName);\n\n    if (constructor == null) {\n      throw KiwiGeneratorError(\n          'the constructor ${clazz.name}.$constructorName does not exist');\n    }\n\n    final String factoryParameters = _generateRegisterArguments(\n      constructor,\n      resolvers,\n    ).join(', ');\n\n    return registerExpression.cascade(\n        'register$methodSuffix$typeParameters((c) => $className$constructorNameArgument($factoryParameters)$nameArgument)');\n  }\n\n  List<String> _generateRegisterArguments(\n    ConstructorElement constructor,\n    Map<DartType?, String?>? resolvers,\n  ) {\n    return constructor.parameters\n        .map((p) => _generateRegisterArgument(p, resolvers))\n        .toList();\n  }\n\n  String _generateRegisterArgument(\n    ParameterElement parameter,\n    Map<DartType?, String?>? resolvers,\n  ) {\n    final List<DartType> dartTypes = resolvers == null\n        ? []\n        : resolvers.keys\n            .where((e) =>\n                e?.getDisplayString(withNullability: false) ==\n                parameter.type.getDisplayString(withNullability: false))\n            .where((e) => e != null)\n            .map((e) => e!)\n            .toList();\n    final String nameArgument = dartTypes.isEmpty || resolvers == null\n        ? ''\n        : \"'${resolvers[dartTypes.first]}'\";\n    return '${parameter.isNamed ? parameter.name + ': ' : ''}c.resolve<${parameter.type.getDisplayString(withNullability: false)}>($nameArgument)';\n  }\n\n  Map<DartType?, String?>? _computeResolvers(\n    Map<DartObject?, DartObject?>? resolvers,\n  ) {\n    return resolvers?.map((key, value) => MapEntry<DartType?, String?>(\n        key?.toTypeValue(), value?.toStringValue()));\n  }\n}\n"
  },
  {
    "path": "packages/kiwi_generator/lib/src/model/kiwi_generator_error.dart",
    "content": "class KiwiGeneratorError extends Error {\n  final String message;\n  final Error? error;\n\n  KiwiGeneratorError(\n    this.message, {\n    this.error,\n  });\n\n  @override\n  String toString() {\n    var toString = '\\nKiwiGeneratorError\\n\\n$message\\n\\n';\n    final internalError = error;\n    if (internalError != null) {\n      toString +=\n          '============\\n${internalError.toString()}\\n${internalError.stackTrace}\\n============\\n\\n';\n    }\n    return toString;\n  }\n}\n"
  },
  {
    "path": "packages/kiwi_generator/lib/src/util/list_extensions.dart",
    "content": "extension ListExtension<T> on List<T> {\n  T? singleOrNullWhere(bool test(T element)) {\n    late T result;\n    bool foundMatching = false;\n    for (T element in this) {\n      if (test(element)) {\n        if (foundMatching) {\n          throw Exception('No many results');\n        }\n        result = element;\n        foundMatching = true;\n      }\n    }\n    if (foundMatching) return result;\n    return null;\n  }\n}\n"
  },
  {
    "path": "packages/kiwi_generator/mono_pkg.yaml",
    "content": "# See https://github.com/dart-lang/mono_repo for details\ndart:\n  - stable\n  - dev\n\nstages:\n  - analyze:\n    - dartfmt\n    - dartanalyzer: --fatal-infos --fatal-warnings .\n  - unit_test:\n    - test"
  },
  {
    "path": "packages/kiwi_generator/pubspec.yaml",
    "content": "name: kiwi_generator\ndescription: Generates dependency injection code using the kiwi package to reduce development time.\nversion: 4.2.1\nhomepage: https://github.com/gbtb16/kiwi/tree/master/packages/kiwi_generator\nrepository: https://github.com/gbtb16/kiwi/tree/master/packages/kiwi_generator\nissue_tracker: https://github.com/gbtb16/kiwi/issues\n\nenvironment:\n  sdk: '>=2.14.0 <4.0.0'\n\ndependencies:\n  analyzer: ^6.0.0\n  build: ^2.4.1\n  build_config: ^1.1.1\n  built_collection: ^5.1.1\n  code_builder: ^4.10.0\n  dart_style: ^2.2.4\n  kiwi: ^5.0.1\n  path: ^1.8.3\n  source_gen: \">=1.5.0 <3.0.0\"\n\ndev_dependencies:\n  build_runner: ^2.3.3\n  build_test: ^2.1.6\n  test: ^1.25.1\n\ntopics:\n  - kiwi\n  - automatic-generator\n  - dependency-injector"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/abstract_class.dart",
    "content": "abstract class WithoutRegister {\n  void setup();\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/abstract_class_without_abstract_method.dart",
    "content": "abstract class WithoutRegister {\n  void setup() {}\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/abstract_class_without_method.dart",
    "content": "abstract class WithoutRegister {}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/complex_factory.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.factory(ServiceA)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceB, name: 'factoryB')\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  @Register.factory(ServiceC, constructorName: 'other')\n  void configure();\n}\n\nclass Service {}\n\nclass ServiceA extends Service {}\n\nclass ServiceB extends Service {\n  ServiceB(ServiceA serviceA);\n}\n\nclass ServiceC extends Service {\n  ServiceC(ServiceA serviceA, ServiceB serviceB);\n  ServiceC.other(ServiceB serviceA);\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/complex_factory_with_abstract_method_without_register_annotation.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.factory(ServiceA)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceB, name: 'factoryB')\n  @Register.factory(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  @Register.factory(ServiceC, constructorName: 'other')\n  void configure();\n\n  void abstractMethodWithoutAnnotation();\n}\n\nclass Service {}\n\nclass ServiceA extends Service {}\n\nclass ServiceB extends Service {\n  ServiceB(ServiceA serviceA);\n}\n\nclass ServiceC extends Service {\n  ServiceC(ServiceA serviceA, ServiceB serviceB);\n  ServiceC.other(ServiceB serviceA);\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/complex_singleton.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.singleton(ServiceA)\n  @Register.singleton(Service, from: ServiceB)\n  @Register.singleton(ServiceB, name: 'factoryB')\n  @Register.singleton(ServiceC, resolvers: {ServiceB: 'factoryB'})\n  @Register.singleton(ServiceC, constructorName: 'other')\n  void configure();\n}\n\nclass Service {}\n\nclass ServiceA extends Service {}\n\nclass ServiceB extends Service {\n  ServiceB(ServiceA serviceA);\n}\n\nclass ServiceC extends Service {\n  ServiceC(ServiceA serviceA, ServiceB serviceB);\n  ServiceC.other(ServiceB serviceA);\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/simple_factory.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.factory(ServiceA)\n  @Register.factory(ServiceB, from: null)\n  @Register.factory(ServiceB, name: null)\n  @Register.factory(Service, from: ServiceB)\n  @Register.factory(ServiceA, name: 'factoryA')\n  @Register.factory(Service, from: ServiceB, name: 'factoryB')\n  void configure();\n}\n\nclass Service {\n  const Service();\n}\n\nclass ServiceA extends Service {\n  const ServiceA();\n}\n\nclass ServiceB extends Service {\n  const ServiceB();\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/simple_singleton.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.singleton(ServiceA)\n  @Register.singleton(ServiceB, from: null)\n  @Register.singleton(ServiceB, name: null)\n  @Register.singleton(Service, from: ServiceB)\n  @Register.singleton(ServiceA, name: 'singletonA')\n  @Register.singleton(Service, from: ServiceB, name: 'singletonB')\n  void configure();\n}\n\nclass Service {}\n\nclass ServiceA extends Service {}\n\nclass ServiceB extends Service {}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/unknown_ctor_factory.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.factory(Service, constructorName: 'unknown')\n  void configure();\n}\n\nclass Service {\n  Service.other();\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/inputs/unknown_ctor_singleton.dart",
    "content": "import 'package:kiwi/kiwi.dart';\n\nabstract class Injector {\n  @Register.factory(Service, constructorName: 'unknown')\n  void configure();\n}\n\nclass Service {\n  Service.other();\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/kiwi_generator_test.dart",
    "content": "import 'package:kiwi_generator/src/model/kiwi_generator_error.dart';\nimport 'package:test/test.dart';\n\nimport 'utils/test_helper.dart';\n\nvoid main() async {\n  group('Register.factory', () {\n    test('simple', () async {\n      await testKiwi(\n        'simple_factory',\n        _outputSimpleFactory,\n      );\n    });\n\n    test('complex', () async {\n      await testKiwi(\n        'complex_factory',\n        _outputComplexFactory,\n      );\n    });\n\n    test('abstract class without abstract method', () async {\n      await testKiwi(\n        'complex_factory_with_abstract_method_without_register_annotation',\n        _outputComplexFactoryWithAbstractMethodWithoutAnnotation,\n      );\n    });\n\n    test('unknown constructor', () async {\n      await testKiwiException(\n        'unknown_ctor_factory',\n        const TypeMatcher<KiwiGeneratorError>().having(\n          (f) => f.toString(),\n          'toString()',\n          '\\nKiwiGeneratorError\\n\\nthe constructor Service.unknown does not exist\\n\\n',\n        ),\n      );\n    });\n  });\n\n  group('Register.singleton', () {\n    test('simple', () async {\n      await testKiwi(\n        'simple_singleton',\n        _outputSimpleSingleton,\n      );\n    });\n\n    test('complex', () async {\n      await testKiwi(\n        'complex_singleton',\n        _outputComplexSingleton,\n      );\n    });\n\n    test('unknown constructor', () async {\n      await testKiwiException(\n        'unknown_ctor_singleton',\n        const TypeMatcher<KiwiGeneratorError>().having(\n          (f) => f.toString(),\n          'toString()',\n          '\\nKiwiGeneratorError\\n\\nthe constructor Service.unknown does not exist\\n\\n',\n        ),\n      );\n    });\n  });\n\n  group('Generates null', () {\n    test('abstract class', () async {\n      await testKiwi(\n        'abstract_class',\n        null,\n      );\n    });\n\n    test('abstract class without method', () async {\n      await testKiwi(\n        'abstract_class_without_method',\n        null,\n      );\n    });\n\n    test('abstract class without abstract method', () async {\n      await testKiwi(\n        'abstract_class_without_abstract_method',\n        null,\n      );\n    });\n  });\n}\n\nconst _outputSimpleFactory = r'''\nclass _$Injector extends Injector {\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerFactory((c) => ServiceA())\n      ..registerFactory((c) => ServiceB())\n      ..registerFactory((c) => ServiceB())\n      ..registerFactory<Service>((c) => ServiceB())\n      ..registerFactory((c) => ServiceA(), name: 'factoryA')\n      ..registerFactory<Service>((c) => ServiceB(), name: 'factoryB');\n  }\n}\n''';\n\nconst _outputComplexFactory = r'''\nclass _$Injector extends Injector {\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerFactory((c) => ServiceA())\n      ..registerFactory<Service>((c) => ServiceB(c.resolve<ServiceA>()))\n      ..registerFactory((c) => ServiceB(c.resolve<ServiceA>()),\n          name: 'factoryB')\n      ..registerFactory((c) =>\n          ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')))\n      ..registerFactory((c) => ServiceC.other(c.resolve<ServiceB>()));\n  }\n}\n''';\n\nconst _outputComplexFactoryWithAbstractMethodWithoutAnnotation = r'''\nclass _$Injector extends Injector {\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerFactory((c) => ServiceA())\n      ..registerFactory<Service>((c) => ServiceB(c.resolve<ServiceA>()))\n      ..registerFactory((c) => ServiceB(c.resolve<ServiceA>()),\n          name: 'factoryB')\n      ..registerFactory((c) =>\n          ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')))\n      ..registerFactory((c) => ServiceC.other(c.resolve<ServiceB>()));\n  }\n\n  @override\n  void abstractMethodWithoutAnnotation() {}\n}\n''';\n\nconst _outputSimpleSingleton = r'''\nclass _$Injector extends Injector {\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerSingleton((c) => ServiceA())\n      ..registerSingleton((c) => ServiceB())\n      ..registerSingleton((c) => ServiceB())\n      ..registerSingleton<Service>((c) => ServiceB())\n      ..registerSingleton((c) => ServiceA(), name: 'singletonA')\n      ..registerSingleton<Service>((c) => ServiceB(), name: 'singletonB');\n  }\n}\n''';\n\nconst _outputComplexSingleton = r'''\nclass _$Injector extends Injector {\n  @override\n  void configure() {\n    final KiwiContainer container = KiwiContainer();\n    container\n      ..registerSingleton((c) => ServiceA())\n      ..registerSingleton<Service>((c) => ServiceB(c.resolve<ServiceA>()))\n      ..registerSingleton((c) => ServiceB(c.resolve<ServiceA>()),\n          name: 'factoryB')\n      ..registerSingleton((c) =>\n          ServiceC(c.resolve<ServiceA>(), c.resolve<ServiceB>('factoryB')))\n      ..registerSingleton((c) => ServiceC.other(c.resolve<ServiceB>()));\n  }\n}\n''';\n"
  },
  {
    "path": "packages/kiwi_generator/test/utils/analysis.dart",
    "content": "import 'dart:async';\nimport 'dart:io';\n\nimport 'package:build/build.dart';\nimport 'package:build_test/build_test.dart';\nimport 'package:path/path.dart' as p;\nimport 'package:source_gen/source_gen.dart';\n\nFuture<LibraryReader> resolveCompilationUnit(String sourceFile) async {\n  final files = [\n    File(sourceFile),\n  ];\n\n  final fileMap = Map<String, String>.fromEntries(\n    files.map(\n      (f) => MapEntry(\n        'a|lib/${p.basename(f.path)}',\n        f.readAsStringSync(),\n      ),\n    ),\n  );\n\n  final library = await resolveSources(fileMap, (item) async {\n    final assetId = AssetId.parse(fileMap.keys.first);\n    return await item.libraryFor(assetId);\n  });\n\n  return LibraryReader(library);\n}\n"
  },
  {
    "path": "packages/kiwi_generator/test/utils/test_helper.dart",
    "content": "import 'dart:async';\n\nimport 'package:kiwi_generator/kiwi_generator.dart';\nimport 'package:test/test.dart';\n\nimport 'analysis.dart';\n\nfinal KiwiInjectorGenerator _injectorGenerator = const KiwiInjectorGenerator();\n\nFuture<void> testKiwi(\n  String fileName,\n  String? output,\n) async {\n  try {\n    String inputFilePath = './test/inputs/$fileName.dart';\n\n    final library = await resolveCompilationUnit(inputFilePath);\n\n    String? actual = _injectorGenerator.generate(library, null);\n    expect(actual, output);\n  } catch (genericError) {\n    print('Its not possible to find inputs file.');\n    print('Error: $genericError');\n\n    rethrow;\n  }\n}\n\nFuture<void> testKiwiException(\n  String fileName,\n  dynamic matcher,\n) async {\n  try {\n    String inputFilePath = './test/inputs/$fileName.dart';\n\n    final library = await resolveCompilationUnit(inputFilePath);\n\n    expect(() => _injectorGenerator.generate(library, null), throwsA(matcher));\n  } catch (genericError) {\n    print('Its not possible to test kiwi exceptions.');\n    print('Error: $genericError');\n\n    rethrow;\n  }\n}\n"
  },
  {
    "path": "tools/all.sh",
    "content": "#!/bin/bash\n\n./packages_get.sh\n./analyze.sh\n./fix.sh\n./format.sh\n./test.sh\n./build.sh\n"
  },
  {
    "path": "tools/analyze.sh",
    "content": "#!/bin/bash\n\nCURRENT=`pwd`\nDIR_NAME=`basename \"$CURRENT\"`\nif [ $DIR_NAME == 'tools' ]\nthen\n  cd ..\nfi\n\necho \"\"\necho \"===========================\"\necho \"dart_kiwi example package analyze\"\necho \"---------------------------\"\ncd examples/dart_kiwi\nflutter analyze\necho \"===========================\"\ncd ../..\n\necho \"\"\necho \"===========================\"\necho \"flutter_kiwi example package analyze\"\necho \"---------------------------\"\ncd examples/flutter_kiwi\nflutter analyze\necho \"===========================\"\ncd ../..\n\necho \"\"\necho \"===========================\"\necho \"kiwi final package analyze\"\necho \"---------------------------\"\ncd packages/kiwi\ndart analyze --fatal-infos --fatal-warnings .\necho \"===========================\"\ncd ../..\n\necho \"\"\necho \"===========================\"\necho \"kiwi_generator final package analyze\"\necho \"---------------------------\"\ncd packages/kiwi_generator\ndart analyze --fatal-infos --fatal-warnings .\necho \"===========================\""
  },
  {
    "path": "tools/build.sh",
    "content": "#!/bin/bash\n\nCURRENT=`pwd`\nDIR_NAME=`basename \"$CURRENT\"`\nif [ $DIR_NAME == 'tools' ]\nthen\n  cd ..\nfi\n\necho \"\"\necho \"===========================\"\necho \"dart_kiwi example package build_runner build\"\necho \"---------------------------\"\ncd examples/dart_kiwi\ndart run build_runner build --delete-conflicting-outputs\necho \"===========================\"\ncd ../..\n\necho \"\"\necho \"===========================\"\necho \"flutter_kiwi example package build_runner build\"\necho \"---------------------------\"\ncd examples/flutter_kiwi\ndart run build_runner build --delete-conflicting-outputs\necho \"===========================\"\ncd ../..\n\necho \"\"\necho \"===========================\"\necho \"kiwi final package build_runner build\"\necho \"---------------------------\"\ncd packages/kiwi\necho \"Nothing to generate here\"\necho \"===========================\"\ncd ../..\n\necho \"\"\necho \"===========================\"\necho \"kiwi_generator final package build_runner build\"\necho \"---------------------------\"\ncd packages/kiwi_generator\ndart run build_runner build --delete-conflicting-outputs\necho \"===========================\""
  },
  {
    "path": "tools/fix.sh",
    "content": "#!/bin/bash\n\nCURRENT=`pwd`\nDIR_NAME=`basename \"$CURRENT\"`\nif [ $DIR_NAME == 'tools' ]\nthen\n  cd ..\nfi\n\necho \"\"\necho \"dart_kiwi example package fix lib\"\ncd examples/dart_kiwi\ndart fix --apply\ncd ../..\n\necho \"\"\necho \"flutter_kiwi example package fix lib\"\ncd examples/flutter_kiwi\ndart fix --apply\ncd ../..\n\necho \"\"\necho \"kiwi final package fix lib\"\ncd packages/kiwi\ndart fix --apply\ncd ../..\n\necho \"\"\necho \"kiwi_generator final package fix lib\"\ncd packages/kiwi_generator\ndart fix --apply"
  },
  {
    "path": "tools/format.sh",
    "content": "#!/bin/bash\n\nCURRENT=`pwd`\nDIR_NAME=`basename \"$CURRENT\"`\nif [ $DIR_NAME == 'tools' ]\nthen\n  cd ..\nfi\n\necho \"\"\necho \"dart_kiwi example package format lib\"\ncd examples/dart_kiwi\ndart format .\ncd ../..\n\necho \"\"\necho \"flutter_kiwi example package format lib\"\ncd examples/flutter_kiwi\ndart format .\ncd ../..\n\necho \"\"\necho \"kiwi final package format lib\"\ncd packages/kiwi\ndart format .\ncd ../..\n\necho \"\"\necho \"kiwi_generator final package format lib\"\ncd packages/kiwi_generator\ndart format ."
  },
  {
    "path": "tools/kiwi_cli_actions/bin/kiwi_cli_actions.dart",
    "content": "// ignore_for_file: unused_local_variable\n\nimport 'package:kiwi_cli_actions/changelog_checker.dart';\n\nvoid main() {\n  const rootPath = '../..';\n  const examplesBasePath = '$rootPath/examples';\n  const packagesBasePath = '$rootPath/packages';\n  const toolsBasePath = '$rootPath/tools';\n\n  // Check the changelogs of all Kiwi packages.\n  const changelogChecker = ChangelogChecker();\n\n  changelogChecker.checkIfChangelogHasBeenUpdated(\n    absolutePath: '$packagesBasePath/kiwi',\n  );\n\n  changelogChecker.checkIfChangelogHasBeenUpdated(\n    absolutePath: '$packagesBasePath/kiwi_generator',\n  );\n}\n"
  },
  {
    "path": "tools/kiwi_cli_actions/lib/changelog_checker.dart",
    "content": "import 'dart:io';\n\nimport 'package:yaml/yaml.dart';\n\nfinal class ChangelogChecker {\n  const ChangelogChecker();\n\n  String getActualPubspecVersion(String path) {\n    try {\n      final pubspec = File('$path/pubspec.yaml');\n      final pubspecContent = pubspec.readAsStringSync();\n      final loadedYaml = loadYaml(pubspecContent);\n\n      return loadedYaml['version'];\n    } catch (genericError) {\n      print('pubspec.yaml file not exists!');\n      print('error: $genericError');\n\n      rethrow;\n    }\n  }\n\n  void checkIfChangelogHasBeenUpdated({required String absolutePath}) {\n    try {\n      final pubspecVersion = getActualPubspecVersion(absolutePath);\n      final changelog = File('$absolutePath/CHANGELOG.md');\n      final changelogContent = changelog.readAsStringSync();\n\n      if (changelogContent.startsWith('# $pubspecVersion')) {\n        print('Changelog for $absolutePath has been updated!');\n      } else {\n        print('Changelog for $absolutePath has not been updated.');\n        exit(1);\n      }\n    } catch (genericError) {\n      print('its not possible check if changelog has been updated.');\n      print('error: $genericError');\n\n      rethrow;\n    }\n  }\n}\n"
  },
  {
    "path": "tools/kiwi_cli_actions/pubspec.yaml",
    "content": "name: kiwi_cli_actions\ndescription: A CLI tool to check for problems in the kiwi and kiwi_generator changelog.\nversion: 1.0.0+2\npublish_to: none\n\nenvironment:\n  sdk: '>=3.0.0 <4.0.0'\n\ndev_dependencies:\n  test: ^1.25.1\n  yaml: ^3.1.1\n"
  },
  {
    "path": "tools/packages_get.sh",
    "content": "#!/bin/bash\n\nCURRENT=`pwd`\nDIR_NAME=`basename \"$CURRENT\"`\nif [ $DIR_NAME == 'tools' ]\nthen\n  cd ..\nfi\n\necho \"dart_kiwi example package packages get\"\ncd examples/dart_kiwi\nflutter packages get\ncd ../..\n\necho \"flutter_kiwi example package packages get\"\ncd examples/flutter_kiwi\nflutter packages get\ncd ../..\n\necho \"kiwi final package packages get\"\ncd packages/kiwi\ndart pub get\ncd ../..\n\necho \"kiwi_generator final package packages get\"\ncd packages/kiwi_generator\ndart pub get\ncd ../..\n\necho \"actions packages get\"\ncd tools/kiwi_cli_actions\ndart pub get"
  },
  {
    "path": "tools/test.sh",
    "content": "#!/bin/bash\n\nCURRENT=`pwd`\nDIR_NAME=`basename \"$CURRENT\"`\nif [ $DIR_NAME == 'tools' ]\nthen\n  cd ..\nfi\n\necho \"\"\necho \"dart_kiwi example package test\"\ncd examples/dart_kiwi\necho \"No tests for dart_kiwi\"\ncd ../..\n\necho \"\"\necho \"flutter_kiwi example package test\"\ncd examples/flutter_kiwi\necho \"No test for flutter_kiwi\"\ncd ../..\n\necho \"\"\necho \"kiwi final package test\"\ncd packages/kiwi\ndart test\ncd ../..\n\necho \"\"\necho \"kiwi_generator final package test\"\ncd packages/kiwi_generator\ndart test"
  }
]