Full Code of isar-community/isar for AI

v3 36e70529ac90 cached
688 files
22.4 MB
691.4k tokens
2530 symbols
1 requests
Download .txt
Showing preview only (2,894K chars total). Download the full file or copy to clipboard to get everything.
Repository: isar-community/isar
Branch: v3
Commit: 36e70529ac90
Files: 688
Total size: 22.4 MB

Directory structure:
gitextract_p8q538ro/

├── .all-contributorsrc
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── actions/
│   │   └── prepare-build/
│   │       └── action.yaml
│   ├── dependabot.yaml
│   └── workflows/
│       ├── cron_test.yaml
│       ├── docs.yaml
│       ├── release.yaml
│       ├── skynet.yaml
│       ├── test.yaml
│       └── testlab.yaml
├── .gitignore
├── Cargo.toml
├── LICENSE
├── TODO.md
├── docs/
│   ├── .gitignore
│   ├── README.md
│   ├── docs/
│   │   ├── .vuepress/
│   │   │   ├── config.ts
│   │   │   ├── locales.ts
│   │   │   ├── redirect.ts
│   │   │   └── styles/
│   │   │       └── index.scss
│   │   ├── README.md
│   │   ├── crud.md
│   │   ├── de/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── es/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── faq.md
│   │   ├── fr/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── indexes.md
│   │   ├── it/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── ja/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── ko/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── limitations.md
│   │   ├── links.md
│   │   ├── pt/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── queries.md
│   │   ├── recipes/
│   │   │   ├── data_migration.md
│   │   │   ├── full_text_search.md
│   │   │   ├── multi_isolate.md
│   │   │   └── string_ids.md
│   │   ├── schema.md
│   │   ├── transactions.md
│   │   ├── tutorials/
│   │   │   └── quickstart.md
│   │   ├── ur/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── watchers.md
│   │   └── zh/
│   │       ├── README.md
│   │       ├── crud.md
│   │       ├── faq.md
│   │       ├── indexes.md
│   │       ├── limitations.md
│   │       ├── links.md
│   │       ├── queries.md
│   │       ├── recipes/
│   │       │   ├── data_migration.md
│   │       │   ├── full_text_search.md
│   │       │   ├── multi_isolate.md
│   │       │   └── string_ids.md
│   │       ├── schema.md
│   │       ├── transactions.md
│   │       ├── tutorials/
│   │       │   └── quickstart.md
│   │       └── watchers.md
│   └── package.json
├── examples/
│   └── pub/
│       ├── .gitignore
│       ├── .metadata
│       ├── README.md
│       ├── analysis_options.yaml
│       ├── lib/
│       │   ├── asset_loader.dart
│       │   ├── main.dart
│       │   ├── models/
│       │   │   ├── api/
│       │   │   │   ├── metrics.dart
│       │   │   │   └── package.dart
│       │   │   ├── asset.dart
│       │   │   └── package.dart
│       │   ├── package_manager.dart
│       │   ├── provider.dart
│       │   ├── repository.dart
│       │   └── ui/
│       │       ├── app_bar.dart
│       │       ├── detail_page.dart
│       │       ├── home_page.dart
│       │       ├── markdown_viewer.dart
│       │       ├── package_metadata.dart
│       │       ├── package_versions.dart
│       │       ├── publisher.dart
│       │       ├── search.dart
│       │       └── search_page.dart
│       └── pubspec.yaml
├── packages/
│   ├── isar/
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── example/
│   │   │   └── README.md
│   │   ├── lib/
│   │   │   ├── isar.dart
│   │   │   └── src/
│   │   │       ├── annotations/
│   │   │       │   ├── backlink.dart
│   │   │       │   ├── collection.dart
│   │   │       │   ├── embedded.dart
│   │   │       │   ├── enumerated.dart
│   │   │       │   ├── ignore.dart
│   │   │       │   ├── index.dart
│   │   │       │   ├── name.dart
│   │   │       │   └── type.dart
│   │   │       ├── common/
│   │   │       │   ├── isar_common.dart
│   │   │       │   ├── isar_link_base_impl.dart
│   │   │       │   ├── isar_link_common.dart
│   │   │       │   ├── isar_links_common.dart
│   │   │       │   └── schemas.dart
│   │   │       ├── isar.dart
│   │   │       ├── isar_collection.dart
│   │   │       ├── isar_connect.dart
│   │   │       ├── isar_connect_api.dart
│   │   │       ├── isar_error.dart
│   │   │       ├── isar_link.dart
│   │   │       ├── isar_reader.dart
│   │   │       ├── isar_writer.dart
│   │   │       ├── native/
│   │   │       │   ├── bindings.dart
│   │   │       │   ├── encode_string.dart
│   │   │       │   ├── index_key.dart
│   │   │       │   ├── isar_collection_impl.dart
│   │   │       │   ├── isar_core.dart
│   │   │       │   ├── isar_impl.dart
│   │   │       │   ├── isar_link_impl.dart
│   │   │       │   ├── isar_reader_impl.dart
│   │   │       │   ├── isar_writer_impl.dart
│   │   │       │   ├── open.dart
│   │   │       │   ├── query_build.dart
│   │   │       │   ├── query_impl.dart
│   │   │       │   ├── split_words.dart
│   │   │       │   └── txn.dart
│   │   │       ├── query.dart
│   │   │       ├── query_builder.dart
│   │   │       ├── query_builder_extensions.dart
│   │   │       ├── query_components.dart
│   │   │       ├── schema/
│   │   │       │   ├── collection_schema.dart
│   │   │       │   ├── index_schema.dart
│   │   │       │   ├── link_schema.dart
│   │   │       │   ├── property_schema.dart
│   │   │       │   └── schema.dart
│   │   │       └── web/
│   │   │           ├── bindings.dart
│   │   │           ├── isar_collection_impl.dart
│   │   │           ├── isar_impl.dart
│   │   │           ├── isar_link_impl.dart
│   │   │           ├── isar_reader_impl.dart
│   │   │           ├── isar_web.dart
│   │   │           ├── isar_writer_impl.dart
│   │   │           ├── open.dart
│   │   │           ├── query_build.dart
│   │   │           ├── query_impl.dart
│   │   │           └── split_words.dart
│   │   ├── pubspec.yaml
│   │   ├── test/
│   │   │   └── isar_reader_writer_test.dart
│   │   └── tool/
│   │       ├── get_version.dart
│   │       └── verify_release_version.dart
│   ├── isar_core/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── src/
│   │   │   ├── collection.rs
│   │   │   ├── cursor.rs
│   │   │   ├── error.rs
│   │   │   ├── index/
│   │   │   │   ├── index_key.rs
│   │   │   │   ├── index_key_builder.rs
│   │   │   │   └── mod.rs
│   │   │   ├── instance.rs
│   │   │   ├── legacy/
│   │   │   │   ├── isar_object_v1.rs
│   │   │   │   └── mod.rs
│   │   │   ├── lib.rs
│   │   │   ├── link.rs
│   │   │   ├── mdbx/
│   │   │   │   ├── cursor.rs
│   │   │   │   ├── db.rs
│   │   │   │   ├── env.rs
│   │   │   │   ├── mod.rs
│   │   │   │   └── txn.rs
│   │   │   ├── object/
│   │   │   │   ├── data_type.rs
│   │   │   │   ├── id.rs
│   │   │   │   ├── isar_object.rs
│   │   │   │   ├── json_encode_decode.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── object_builder.rs
│   │   │   │   └── property.rs
│   │   │   ├── query/
│   │   │   │   ├── fast_wild_match.rs
│   │   │   │   ├── filter.rs
│   │   │   │   ├── id_where_clause.rs
│   │   │   │   ├── index_where_clause.rs
│   │   │   │   ├── link_where_clause.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── query_builder.rs
│   │   │   │   └── where_clause.rs
│   │   │   ├── schema/
│   │   │   │   ├── collection_schema.rs
│   │   │   │   ├── index_schema.rs
│   │   │   │   ├── link_schema.rs
│   │   │   │   ├── migrate_v1.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── property_schema.rs
│   │   │   │   └── schema_manager.rs
│   │   │   ├── txn.rs
│   │   │   └── watch/
│   │   │       ├── change_set.rs
│   │   │       ├── isar_watchers.rs
│   │   │       ├── mod.rs
│   │   │       └── watcher.rs
│   │   └── tests/
│   │       ├── binary_golden.json
│   │       ├── test_binary.rs
│   │       └── test_hash.rs
│   ├── isar_core_ffi/
│   │   ├── .cargo/
│   │   │   └── config.toml
│   │   ├── Cargo.toml
│   │   ├── build.rs
│   │   └── src/
│   │       ├── c_object_set.rs
│   │       ├── crud.rs
│   │       ├── dart.rs
│   │       ├── error.rs
│   │       ├── filter.rs
│   │       ├── index_key.rs
│   │       ├── instance.rs
│   │       ├── lib.rs
│   │       ├── link.rs
│   │       ├── query.rs
│   │       ├── query_aggregation.rs
│   │       ├── txn.rs
│   │       └── watchers.rs
│   ├── isar_flutter_libs/
│   │   ├── .pubignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── android/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle/
│   │   │   │   └── wrapper/
│   │   │   │       └── gradle-wrapper.properties
│   │   │   ├── gradle.properties
│   │   │   ├── settings.gradle
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           └── java/
│   │   │               └── dev/
│   │   │                   └── isar/
│   │   │                       └── isar_flutter_libs/
│   │   │                           └── IsarFlutterLibsPlugin.java
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   ├── Assets/
│   │   │   │   └── .gitkeep
│   │   │   ├── Classes/
│   │   │   │   ├── IsarFlutterLibsPlugin.h
│   │   │   │   ├── IsarFlutterLibsPlugin.m
│   │   │   │   ├── SwiftIsarFlutterLibsPlugin.swift
│   │   │   │   └── binding.h
│   │   │   ├── Resources/
│   │   │   │   └── PrivacyInfo.xcprivacy
│   │   │   └── isar_flutter_libs.podspec
│   │   ├── lib/
│   │   │   └── isar_flutter_libs.dart
│   │   ├── linux/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── include/
│   │   │   │   └── isar_flutter_libs/
│   │   │   │       └── isar_flutter_libs_plugin.h
│   │   │   └── isar_flutter_libs_plugin.cc
│   │   ├── macos/
│   │   │   ├── Classes/
│   │   │   │   └── IsarFlutterLibsPlugin.swift
│   │   │   └── isar_flutter_libs.podspec
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── windows/
│   │       ├── .gitignore
│   │       ├── CMakeLists.txt
│   │       ├── include/
│   │       │   └── isar_flutter_libs/
│   │       │       └── isar_flutter_libs_plugin.h
│   │       └── isar_flutter_libs_plugin.cpp
│   ├── isar_generator/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── build.yaml
│   │   ├── lib/
│   │   │   ├── isar_generator.dart
│   │   │   └── src/
│   │   │       ├── code_gen/
│   │   │       │   ├── by_index_generator.dart
│   │   │       │   ├── collection_schema_generator.dart
│   │   │       │   ├── query_distinct_by_generator.dart
│   │   │       │   ├── query_filter_generator.dart
│   │   │       │   ├── query_filter_length.dart
│   │   │       │   ├── query_link_generator.dart
│   │   │       │   ├── query_object_generator.dart
│   │   │       │   ├── query_property_generator.dart
│   │   │       │   ├── query_sort_by_generator.dart
│   │   │       │   ├── query_where_generator.dart
│   │   │       │   └── type_adapter_generator.dart
│   │   │       ├── collection_generator.dart
│   │   │       ├── helper.dart
│   │   │       ├── isar_analyzer.dart
│   │   │       ├── isar_type.dart
│   │   │       └── object_info.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── test/
│   │       ├── error_test.dart
│   │       └── errors/
│   │           ├── class/
│   │           │   ├── abstract.dart
│   │           │   ├── collection_supertype.dart
│   │           │   ├── constructor_named.dart
│   │           │   ├── constructor_unknown_parameter.dart
│   │           │   ├── constructor_wrong_parameter.dart
│   │           │   ├── enum.dart
│   │           │   ├── invalid_name.dart
│   │           │   ├── mixin.dart
│   │           │   ├── private.dart
│   │           │   └── variable.dart
│   │           ├── id/
│   │           │   ├── duplicate.dart
│   │           │   └── missing.dart
│   │           ├── index/
│   │           │   ├── composite_double_not_last.dart
│   │           │   ├── composite_non_hashed_list.dart
│   │           │   ├── composite_string_value_not_last.dart
│   │           │   ├── contains_id.dart
│   │           │   ├── double_list_hashed.dart
│   │           │   ├── duplicate_name.dart
│   │           │   ├── duplicate_property.dart
│   │           │   ├── invalid_name.dart
│   │           │   ├── non_string_hashed.dart
│   │           │   ├── non_string_list_hashed_elements.dart
│   │           │   ├── non_unique_replace.dart
│   │           │   ├── object_hashed.dart
│   │           │   ├── object_list_hashed.dart
│   │           │   └── property_does_not_exist.dart
│   │           ├── link/
│   │           │   ├── backlink_target_does_no_exist.dart
│   │           │   ├── backlink_target_is_backlink.dart
│   │           │   ├── backlink_target_not_a_link.dart
│   │           │   ├── duplicate_name.dart
│   │           │   ├── invalid_name.dart
│   │           │   ├── late.dart
│   │           │   ├── nullable.dart
│   │           │   ├── target_not_a_collection.dart
│   │           │   └── type_nullable.dart
│   │           └── property/
│   │               ├── duplicate_name.dart
│   │               ├── enum_bool_type.dart
│   │               ├── enum_double_type.dart
│   │               ├── enum_duplicate.dart
│   │               ├── enum_float_type.dart
│   │               ├── enum_list_type.dart
│   │               ├── enum_not_annotated.dart
│   │               ├── enum_null_value.dart
│   │               ├── enum_object_type.dart
│   │               ├── invalid_name.dart
│   │               ├── null_byte.dart
│   │               ├── null_byte_element.dart
│   │               └── unsupported_type.dart
│   ├── isar_inspector/
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── isar_inspector.iml
│   │   ├── lib/
│   │   │   ├── collection/
│   │   │   │   ├── button_prev_next.dart
│   │   │   │   ├── button_sort.dart
│   │   │   │   ├── collection_area.dart
│   │   │   │   └── objects_list_sliver.dart
│   │   │   ├── collections_list.dart
│   │   │   ├── connect_client.dart
│   │   │   ├── connected_layout.dart
│   │   │   ├── connection_screen.dart
│   │   │   ├── error_screen.dart
│   │   │   ├── instance_selector.dart
│   │   │   ├── main.dart
│   │   │   ├── object/
│   │   │   │   ├── isar_object.dart
│   │   │   │   ├── object_view.dart
│   │   │   │   ├── property_builder.dart
│   │   │   │   ├── property_embedded_view.dart
│   │   │   │   ├── property_link_view.dart
│   │   │   │   ├── property_value.dart
│   │   │   │   └── property_view.dart
│   │   │   ├── query_builder/
│   │   │   │   ├── query_filter.dart
│   │   │   │   └── query_group.dart
│   │   │   ├── sidebar.dart
│   │   │   └── util.dart
│   │   ├── pubspec.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── isar_test/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── android/
│   │   │   ├── .gitignore
│   │   │   ├── app/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       ├── androidTest/
│   │   │   │       │   └── java/
│   │   │   │       │       └── dev/
│   │   │   │       │           └── isar/
│   │   │   │       │               └── isar_test/
│   │   │   │       │                   └── MainActivityTest.java
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           ├── kotlin/
│   │   │   │           │   └── dev/
│   │   │   │           │       └── isar/
│   │   │   │           │           └── isar_test/
│   │   │   │           │               └── MainActivity.kt
│   │   │   │           └── res/
│   │   │   │               ├── drawable/
│   │   │   │               │   └── launch_background.xml
│   │   │   │               └── values/
│   │   │   │                   └── styles.xml
│   │   │   ├── build.gradle
│   │   │   ├── gradle/
│   │   │   │   └── wrapper/
│   │   │   │       └── gradle-wrapper.properties
│   │   │   ├── gradle.properties
│   │   │   ├── settings.gradle
│   │   │   └── settings_aar.gradle
│   │   ├── integration_test/
│   │   │   └── integration_test.dart
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   ├── AppFrameworkInfo.plist
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   └── Release.xcconfig
│   │   │   ├── Podfile
│   │   │   ├── Runner/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── LaunchImage.imageset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Base.lproj/
│   │   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── Runner-Bridging-Header.h
│   │   │   ├── Runner.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace/
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           └── Runner.xcscheme
│   │   │   └── Runner.xcworkspace/
│   │   │       ├── contents.xcworkspacedata
│   │   │       └── xcshareddata/
│   │   │           ├── IDEWorkspaceChecks.plist
│   │   │           └── WorkspaceSettings.xcsettings
│   │   ├── lib/
│   │   │   ├── isar_test.dart
│   │   │   └── src/
│   │   │       ├── common.dart
│   │   │       ├── init_native.dart
│   │   │       ├── init_web.dart
│   │   │       ├── isar_web_src.dart
│   │   │       ├── listener.dart
│   │   │       ├── matchers.dart
│   │   │       ├── sync_async_helper.dart
│   │   │       ├── sync_future.dart
│   │   │       └── twitter/
│   │   │           ├── entities.dart
│   │   │           ├── geo.dart
│   │   │           ├── media.dart
│   │   │           ├── tweet.dart
│   │   │           ├── user.dart
│   │   │           └── util.dart
│   │   ├── linux/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── flutter/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── generated_plugin_registrant.cc
│   │   │   │   ├── generated_plugin_registrant.h
│   │   │   │   └── generated_plugins.cmake
│   │   │   ├── main.cc
│   │   │   ├── my_application.cc
│   │   │   └── my_application.h
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   ├── Flutter-Debug.xcconfig
│   │   │   │   └── Flutter-Release.xcconfig
│   │   │   ├── Podfile
│   │   │   ├── Runner/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   └── AppIcon.appiconset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Base.lproj/
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── Configs/
│   │   │   │   │   ├── AppInfo.xcconfig
│   │   │   │   │   ├── Debug.xcconfig
│   │   │   │   │   ├── Release.xcconfig
│   │   │   │   │   └── Warnings.xcconfig
│   │   │   │   ├── DebugProfile.entitlements
│   │   │   │   ├── Info.plist
│   │   │   │   ├── MainFlutterWindow.swift
│   │   │   │   └── Release.entitlements
│   │   │   ├── Runner.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace/
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       └── IDEWorkspaceChecks.plist
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           └── Runner.xcscheme
│   │   │   └── Runner.xcworkspace/
│   │   │       ├── contents.xcworkspacedata
│   │   │       └── xcshareddata/
│   │   │           └── IDEWorkspaceChecks.plist
│   │   ├── pubspec.yaml
│   │   ├── test/
│   │   │   ├── clear_test.dart
│   │   │   ├── collection_size_test.dart
│   │   │   ├── compact_on_launch_test.dart
│   │   │   ├── constructor_test.dart
│   │   │   ├── copy_to_file_test.dart
│   │   │   ├── crud_test.dart
│   │   │   ├── default_value/
│   │   │   │   ├── common.dart
│   │   │   │   ├── default_test.dart
│   │   │   │   ├── no_default_test.dart
│   │   │   │   └── nullable_test.dart
│   │   │   ├── embedded_test.dart
│   │   │   ├── enum_test.dart
│   │   │   ├── filter/
│   │   │   │   ├── filter_bool_list_test.dart
│   │   │   │   ├── filter_bool_test.dart
│   │   │   │   ├── filter_byte_list_test.dart
│   │   │   │   ├── filter_byte_test.dart
│   │   │   │   ├── filter_date_time_list_test.dart
│   │   │   │   ├── filter_date_time_test.dart
│   │   │   │   ├── filter_embedded_list_test.dart
│   │   │   │   ├── filter_embedded_test.dart
│   │   │   │   ├── filter_float_list_test.dart
│   │   │   │   ├── filter_float_test.dart
│   │   │   │   ├── filter_id_test.dart
│   │   │   │   ├── filter_int_test.dart
│   │   │   │   ├── filter_list_length_test.dart
│   │   │   │   ├── filter_string_list_test.dart
│   │   │   │   ├── filter_string_test.dart
│   │   │   │   └── link/
│   │   │   │       ├── filter_backlink_test.dart
│   │   │   │       ├── filter_backlinks_test.dart
│   │   │   │       ├── filter_link_circular_direct_test.dart
│   │   │   │       ├── filter_link_circular_indirect_test.dart
│   │   │   │       ├── filter_link_nested_test.dart
│   │   │   │       ├── filter_link_self_test.dart
│   │   │   │       ├── filter_link_test.dart
│   │   │   │       ├── filter_links_self_test.dart
│   │   │   │       └── filter_links_test.dart
│   │   │   ├── id_test.dart
│   │   │   ├── index/
│   │   │   │   ├── composite2_test.dart
│   │   │   │   ├── composite3_test.dart
│   │   │   │   ├── composite_string_test.dart
│   │   │   │   ├── get_by_delete_by_test.dart
│   │   │   │   ├── multi_entry_test.dart
│   │   │   │   ├── put_by_test.dart
│   │   │   │   ├── where_bool_list_test.dart
│   │   │   │   ├── where_bool_test.dart
│   │   │   │   ├── where_byte_list_test.dart
│   │   │   │   ├── where_byte_test.dart
│   │   │   │   ├── where_date_time_list_test.dart
│   │   │   │   ├── where_date_time_test.dart
│   │   │   │   ├── where_float_list_test.dart
│   │   │   │   ├── where_float_test.dart
│   │   │   │   ├── where_id_test.dart
│   │   │   │   ├── where_int_test.dart
│   │   │   │   ├── where_string_list_test.dart
│   │   │   │   └── where_string_test.dart
│   │   │   ├── inheritance_test.dart
│   │   │   ├── instance_test.dart
│   │   │   ├── isolate_test.dart
│   │   │   ├── json_test.dart
│   │   │   ├── link_test.dart
│   │   │   ├── links/
│   │   │   │   ├── backlink_test.dart
│   │   │   │   ├── link_test.dart
│   │   │   │   └── links_test.dart
│   │   │   ├── max_size_test.dart
│   │   │   ├── migration/
│   │   │   │   ├── add_remove_collection_test.dart
│   │   │   │   ├── add_remove_embedded_field_test.dart
│   │   │   │   ├── add_remove_field_test.dart
│   │   │   │   ├── add_remove_index_test.dart
│   │   │   │   ├── add_remove_link_test.dart
│   │   │   │   ├── change_field_embedded_test.dart
│   │   │   │   ├── change_field_nullability_test.dart
│   │   │   │   ├── change_field_type_test.dart
│   │   │   │   └── change_link_links_test.dart
│   │   │   ├── mutli_type_model.dart
│   │   │   ├── name_test.dart
│   │   │   ├── open_close_isar_listener_test.dart
│   │   │   ├── other_test.dart
│   │   │   ├── query/
│   │   │   │   ├── aggregation_test.dart
│   │   │   │   ├── embedded_test.dart
│   │   │   │   ├── group_test.dart
│   │   │   │   ├── is_empty_is_not_empty_test.dart
│   │   │   │   ├── multi_filter_test.dart
│   │   │   │   ├── offset_limit_test.dart
│   │   │   │   ├── property_test.dart
│   │   │   │   ├── sort_by_distinct_by_test.dart
│   │   │   │   └── where_sort_distinct_test.dart
│   │   │   ├── regression/
│   │   │   │   └── issue_235_rename_field_test.dart
│   │   │   ├── schema_test.dart
│   │   │   ├── stress/
│   │   │   │   ├── long_string_test.dart
│   │   │   │   └── twitter_test.dart
│   │   │   ├── transaction_test.dart
│   │   │   ├── type_models.dart
│   │   │   ├── user_model.dart
│   │   │   └── watcher_test.dart
│   │   ├── tool/
│   │   │   ├── generate_all_tests.dart
│   │   │   └── generate_long_double_test.dart
│   │   ├── web/
│   │   │   ├── index.html
│   │   │   └── manifest.json
│   │   └── windows/
│   │       ├── .gitignore
│   │       ├── CMakeLists.txt
│   │       ├── flutter/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── generated_plugin_registrant.cc
│   │       │   ├── generated_plugin_registrant.h
│   │       │   └── generated_plugins.cmake
│   │       └── runner/
│   │           ├── CMakeLists.txt
│   │           ├── Runner.rc
│   │           ├── flutter_window.cpp
│   │           ├── flutter_window.h
│   │           ├── main.cpp
│   │           ├── resource.h
│   │           ├── runner.exe.manifest
│   │           ├── utils.cpp
│   │           ├── utils.h
│   │           ├── win32_window.cpp
│   │           └── win32_window.h
│   ├── isar_web/
│   │   ├── .eslintrc.yml
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── bulk-delete.ts
│   │   │   ├── collection.ts
│   │   │   ├── cursor.ts
│   │   │   ├── index.ts
│   │   │   ├── instance.ts
│   │   │   ├── link.ts
│   │   │   ├── open.ts
│   │   │   ├── query.ts
│   │   │   ├── schema.ts
│   │   │   ├── txn.ts
│   │   │   └── watcher.ts
│   │   ├── tsconfig.json
│   │   └── webpack.config.js
│   └── mdbx_sys/
│       ├── .gitignore
│       ├── Cargo.toml
│       ├── build.rs
│       └── src/
│           └── lib.rs
└── tool/
    ├── build.sh
    ├── build_android.sh
    ├── build_ios.sh
    ├── build_linux.sh
    ├── build_macos.sh
    ├── build_windows.sh
    ├── cbindgen.toml
    ├── download_binaries.sh
    ├── ffigen.yaml
    ├── generate_bindings.sh
    ├── prepare_tests.sh
    ├── publish.sh
    └── replace-versions.sh

================================================
FILE CONTENTS
================================================

================================================
FILE: .all-contributorsrc
================================================
{
  "files": [
    "packages/isar/README.md"
  ],
  "imageSize": 100,
  "commit": false,
  "contributors": [
    {
      "login": "Jtplouffe",
      "name": "JT",
      "avatar_url": "https://avatars.githubusercontent.com/u/32107801?v=4",
      "profile": "https://github.com/Jtplouffe",
      "contributions": [
        "test",
        "bug"
      ]
    },
    {
      "login": "leisim",
      "name": "Simon Leier",
      "avatar_url": "https://avatars.githubusercontent.com/u/13610195?v=4",
      "profile": "https://www.linkedin.com/in/simon-leier/",
      "contributions": [
        "bug",
        "code",
        "doc",
        "test",
        "example"
      ]
    },
    {
      "login": "h1376h",
      "name": "Hamed H.",
      "avatar_url": "https://avatars.githubusercontent.com/u/3498335?v=4",
      "profile": "https://github.com/h1376h",
      "contributions": [
        "code",
        "maintenance"
      ]
    },
    {
      "login": "Viper-Bit",
      "name": "Peyman",
      "avatar_url": "https://avatars.githubusercontent.com/u/24822764?v=4",
      "profile": "https://github.com/Viper-Bit",
      "contributions": [
        "bug",
        "code"
      ]
    },
    {
      "login": "blendthink",
      "name": "blendthink",
      "avatar_url": "https://avatars.githubusercontent.com/u/32213113?v=4",
      "profile": "https://github.com/blendthink",
      "contributions": [
        "maintenance"
      ]
    },
    {
      "login": "Moseco",
      "name": "Moseco",
      "avatar_url": "https://avatars.githubusercontent.com/u/10720298?v=4",
      "profile": "https://github.com/Moseco",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "Frostedfox",
      "name": "Frostedfox",
      "avatar_url": "https://avatars.githubusercontent.com/u/84601232?v=4",
      "profile": "https://github.com/Frostedfox",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "nohli",
      "name": "Joachim Nohl",
      "avatar_url": "https://avatars.githubusercontent.com/u/43643339?v=4",
      "profile": "http://achim.io",
      "contributions": [
        "maintenance"
      ]
    },
    {
      "login": "VoidxHoshi",
      "name": "LaLucid",
      "avatar_url": "https://avatars.githubusercontent.com/u/55886143?v=4",
      "profile": "https://github.com/VoidxHoshi",
      "contributions": [
        "maintenance"
      ]
    },
    {
      "login": "vothvovo",
      "name": "Johnson",
      "avatar_url": "https://avatars.githubusercontent.com/u/20894472?v=4",
      "profile": "https://github.com/vothvovo",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "ika020202",
      "name": "Ura",
      "avatar_url": "https://avatars.githubusercontent.com/u/42883378?v=4",
      "profile": "https://zenn.dev/urasan",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "mnkeis",
      "name": "mnkeis",
      "avatar_url": "https://avatars.githubusercontent.com/u/41247357?v=4",
      "profile": "https://github.com/mnkeis",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "CarloDotLog",
      "name": "Carlo Loguercio",
      "avatar_url": "https://avatars.githubusercontent.com/u/13763473?v=4",
      "profile": "https://github.com/CarloDotLog",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "hafeezrana",
      "name": "Hafeez Rana",
      "avatar_url": "https://avatars.githubusercontent.com/u/87476445?v=4",
      "profile": "https://g.dev/hafeezrana",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "inkomomutane",
      "name": "Nelson  Mutane",
      "avatar_url": "https://avatars.githubusercontent.com/u/57417802?v=4",
      "profile": "https://github.com/inkomomutane",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "lodisy",
      "name": "Michael",
      "avatar_url": "https://avatars.githubusercontent.com/u/8101584?v=4",
      "profile": "https://github.com/lodisy",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "ritksm",
      "name": "Jack Rivers",
      "avatar_url": "https://avatars.githubusercontent.com/u/111809?v=4",
      "profile": "http://blog.jackrivers.me/",
      "contributions": [
        "translation"
      ]
    },
    {
      "login": "buraktabn",
      "name": "Burak",
      "avatar_url": "https://avatars.githubusercontent.com/u/49204989?v=4",
      "profile": "http://buraktaban.ca",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "AlexisL61",
      "name": "Alexis",
      "avatar_url": "https://avatars.githubusercontent.com/u/30233189?v=4",
      "profile": "https://github.com/AlexisL61",
      "contributions": [
        "bug"
      ]
    },
    {
      "login": "letyletylety",
      "name": "Lety",
      "avatar_url": "https://avatars.githubusercontent.com/u/16468579?v=4",
      "profile": "https://letyarch.blogspot.com/",
      "contributions": [
        "doc"
      ]
    },
    {
      "login": "nobkd",
      "name": "nobkd",
      "avatar_url": "https://avatars.githubusercontent.com/u/44443899?v=4",
      "profile": "https://github.com/nobkd",
      "contributions": [
        "doc"
      ]
    }
  ],
  "contributorTemplate": "<a href=\"https://github.com/<%= contributor.login %>\"><img src=\"<%= contributor.avatar_url %>\" width=\"<%= options.imageSize %>px;\" alt=\"\"/><br /><sub><b><%= contributor.name %></b></sub></a>",
  "contributorsPerLine": 7,
  "contributorsSortAlphabetically": true,
  "projectName": "isar",
  "projectOwner": "isar",
  "repoType": "github",
  "repoHost": "https://github.com",
  "skipCi": true,
  "commitConvention": "angular"
}


================================================
FILE: .github/FUNDING.yml
================================================
github: simc


================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.md
================================================
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: problem
assignees: leisim

---



### Steps to Reproduce

Please describe exactly how to reproduce the problem you are running into.



### Code sample

```dart
Provide a few simple lines of code to show your problem.
```



### Details

 - Platform: iPhone 13 Pro, Galaxy S7, x86 Android Emulator on Windows etc.
 - Flutter version: [e.g. 3.0.0]
 - Isar version: [e.g. 2.5.0]


---


 - [ ] I searched for similar issues already
 - [ ] I filled the details section with the exact device model and version
 - [ ] I am able to provide a reproducible example


================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
  - name: Ask a question
    url: https://github.com/isar-community/isar/discussions
    about: Ask questions and discuss with other community members


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''

---

**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

**Describe the solution you'd like**
A clear and concise description of what you want to happen.

**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.

**Version**
 - Platform: iOS, Android, Mac, Windows, Linux, Web
 - Flutter version: [e.g. 1.5.4]
 - Isar version: [e.g. 0.5.0]

================================================
FILE: .github/actions/prepare-build/action.yaml
================================================
name: "Prepare Build"
description: "Prepares the build for Isar Core"
runs:
  using: "composite"
  steps:
    - name: Install LLVM and Clang
      if: runner.os == 'Windows'
      uses: KyleMayes/install-llvm-action@v1
      with:
        version: "11.0"
        directory: ${{ runner.temp }}/llvm
    - name: Set LIBCLANG_PATH
      if: runner.os == 'Windows'
      shell: bash
      run: echo "LIBCLANG_PATH=$((gcm clang).source -replace "clang.exe")" >> $env:GITHUB_ENV
    # See https://github.com/godot-rust/godot-rust/pull/920
    - name: "Workaround Android NDK due to Rust bug"
      if: runner.os == 'Linux' || runner.os == 'macOS'
      shell: bash
      run: >
        find -L $ANDROID_SDK_ROOT/ndk/$ANDROID_NDK_VERSION -name libunwind.a
        -execdir sh -c 'echo "INPUT(-lunwind)" > libgcc.a' \;


================================================
FILE: .github/dependabot.yaml
================================================
version: 2
enable-beta-ecosystems: true
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "cargo"
    directory: "/"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "pub"
    directory: "/packages/isar"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "pub"
    directory: "/packages/isar_flutter_libs"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "pub"
    directory: "/packages/isar_generator"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "pub"
    directory: "/packages/isar_inspector"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "pub"
    directory: "/packages/isar_test"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "pub"
    directory: "/examples/pub"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "gradle"
    directory: "/packages/isar_flutter_libs/android"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "gradle"
    directory: "/packages/isar_test/android"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "npm"
    directory: "/docs"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"
  - package-ecosystem: "npm"
    directory: "/packages/isar_web"
    schedule:
      interval: "weekly"
    reviewers:
      - "leisim"


================================================
FILE: .github/workflows/cron_test.yaml
================================================
name: Dart CI Cron

on:
  schedule:
    - cron: "0 0 * * 0"

jobs:
  testlab:
    uses: ./.github/workflows/testlab.yaml
    secrets: inherit


================================================
FILE: .github/workflows/docs.yaml
================================================
name: Unified Deploy Docs

on:
  push:
    branches:
      - main
      - v3

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    permissions:
      contents: write
      id-token: write
      pages: write
    steps:
      - name: Checkout v3 branch
        uses: actions/checkout@v4
        with:
          ref: "v3"
          path: "v3"

      - name: Build v3 docs
        run: |
          cd v3
          git fetch --unshallow
          git fetch --tags
          tool/replace-versions.sh
          cd docs
          sed -i'.bak' "s|base:.*|base: '/v3/',|" docs/.vuepress/config.ts
          sed -i 's|text: "vx.x"|text: "v3.x"|' docs/.vuepress/config.ts  
          npm ci
          npm run build
          mv ./docs/.vuepress/dist ../../v3-docs

      - name: Checkout main branch
        uses: actions/checkout@v4
        with:
          ref: "main"
          path: "main"

      - name: Build main docs
        run: |
          cd main
          git fetch --tags
          tool/replace-versions.sh
          cd docs
          sed -i'.bak' "s|base:.*|base: '/',|" docs/.vuepress/config.ts
          sed -i 's|text: "vx.x"|text: "v4.x"|' docs/.vuepress/config.ts  
          npm ci
          npm run build
          mv ./docs/.vuepress/dist ../../main-docs

      - name: Prepare deployment directory
        run: |
          mkdir deploy
          mv main-docs/* deploy/
          mkdir deploy/v3
          mv v3-docs/* deploy/v3/

      - name: Setup Pages
        uses: actions/configure-pages@v4

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: deploy

      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

================================================
FILE: .github/workflows/release.yaml
================================================
name: Isar release

on:
  push:
    tags:
      - "*"

jobs:
  verify_version:
    name: Verify version matches release
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest, macos-latest, windows-latest]
        sdk: [3.0.0]
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Verify release version
        run: |
          flutter pub get
          dart tool/verify_release_version.dart ${{ github.ref_name }}
        working-directory: packages/isar

  build_binaries:
    name: Build Binaries
    needs: verify_version
    strategy:
      fail-fast: false
      matrix:
        include:
          - os: ubuntu-latest
            artifact_name: libisar_android_arm64.so
            script: build_android.sh
          - os: ubuntu-latest
            artifact_name: libisar_android_armv7.so
            script: build_android.sh armv7
          - os: ubuntu-latest
            artifact_name: libisar_android_x64.so
            script: build_android.sh x64
          - os: ubuntu-latest
            artifact_name: libisar_android_x86.so
            script: build_android.sh x86
          - os: macos-latest
            artifact_name: isar_ios.xcframework.zip
            script: build_ios.sh
          - os: ubuntu-20.04
            artifact_name: libisar_linux_x64.so
            script: build_linux.sh x64
          - os: macos-latest
            artifact_name: libisar_macos.dylib
            script: build_macos.sh
          - os: windows-latest
            artifact_name: isar_windows_arm64.dll
            script: build_windows.sh
          - os: windows-latest
            artifact_name: isar_windows_x64.dll
            script: build_windows.sh x64
    runs-on: ${{ matrix.os }}
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Set env
        run: echo "ISAR_VERSION=${{ github.ref_name }}" >> $GITHUB_ENV
      - name: Build binary
        run: bash tool/${{ matrix.script }}
      - name: Upload binary
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: ${{ matrix.artifact_name }}
          asset_name: ${{ matrix.artifact_name }}
          tag: ${{ github.ref }}

  testlab:
    needs: build_binaries
    uses: ./.github/workflows/testlab.yaml
    secrets: inherit

  build_inspector:
    name: Build Inspector
    needs: build_binaries
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Build
        run: flutter build web --base-href /${{ github.ref_name }}/
        working-directory: packages/isar_inspector
      - name: Deploy to GitHub Pages
        uses: JamesIves/github-pages-deploy-action@v4
        with:
          folder: packages/isar_inspector/build/web
          repository-name: isar-community/inspector
          token: ${{ secrets.TOKEN }}
          target-folder: ${{ github.ref_name }}
          clean: false

  upload_to_repo:
    needs: build_binaries
    runs-on: ubuntu-latest
    steps:
      - name: Download all artifacts
        uses: actions/download-artifact@v2
        with:
          path: binaries/
      - name: List contents of downloaded artifacts
        run: |
          echo "Listing contents of all downloaded artifacts..."
          ls -Rlh binaries/
          echo "Listing complete."
      - name: Setup Git and clone target repository
        run: |
          git config --global user.email "vicente.russo@gmail.com"
          git config --global user.name "GitHub Actions"
          git clone https://github.com/isar-community/binaries repo
          cd repo
          git checkout main || git checkout -b main
        env:
          GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN }}
      - name: Copy binaries to repository and push
        run: |
          cd repo
          ISAR_VERSION=$(echo "${{ github.ref_name }}" | sed 's/refs\/tags\///')
          echo "Deploying binaries to version: $ISAR_VERSION"
          mkdir -p "$ISAR_VERSION"
          cp ../binaries/**/* "$ISAR_VERSION"
          git add .
          git commit -m "Deploy binaries for version $ISAR_VERSION" || echo "No changes to commit"
          git push https://x-access-token:${GITHUB_TOKEN}@github.com/isar-community/binaries.git main
        env:
          GITHUB_TOKEN: ${{ secrets.DEPLOY_TOKEN }}

  # publish:
  #   name: Publish
  #   needs: build_inspector
  #   runs-on: ubuntu-latest
  #   steps:
  #     - uses: actions/checkout@v4
  #     - uses: subosito/flutter-action@v2
  #     - name: pub get
  #       run: dart pub get
  #       working-directory: packages/isar
  #     - name: Download Binaries
  #       run: sh tool/download_binaries.sh
  #     - name: pub.dev credentials
  #       run: |
  #         mkdir -p $HOME/.config/dart
  #         echo '${{ secrets.PUB_JSON }}' >> $HOME/.config/dart/pub-credentials.json
  #     - name: Publish isar
  #       run: dart pub publish --force
  #       working-directory: packages/isar
  #     - name: Publish isar_generator
  #       run: dart pub publish --force
  #       working-directory: packages/isar_generator
  #     - name: Publish isar_flutter_libs
  #       run: dart pub publish --force
  #       working-directory: packages/isar_flutter_libs


================================================
FILE: .github/workflows/skynet.yaml
================================================
name: Triggers remote jenkins

on:
  push:
    branches:
      - main
      - v3

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: true

jobs:
  trigger_remote:
    name: Trigger remote jenkins instance
    runs-on: ubuntu-latest
    steps:
      - name: Invoke trigger
        run: |
          curl -s 'https://isar-community.dev/git/notifyCommit?url=https://github.com/isar-community/isar.git&token=a641b59c61c22effd6dd258f8e713c7b'


================================================
FILE: .github/workflows/test.yaml
================================================
name: Dart CI

on:
  push:
    branches:
      - v3
  pull_request:
    branches:
      - v3

jobs:
  version:
    name: Version Display
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - run: flutter --version

  format:
    name: Check formatting
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Check formatting
        run: dart format --set-exit-if-changed .

  lint:
    name: Check lints
    runs-on: ubuntu-latest
    if: ${{ false }}
    steps:
      - uses: actions/checkout@v4
      - name: Setup Flutter
        uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - run: flutter pub get
        working-directory: packages/isar
      - run: flutter pub get
        working-directory: packages/isar_flutter_libs
      - run: flutter pub get
        working-directory: packages/isar_generator
      - run: flutter pub get
        working-directory: packages/isar_inspector
      - run: flutter pub get
        working-directory: examples/pub
      - run: |
          flutter pub get
          flutter pub run build_runner build
          dart tool/generate_all_tests.dart
        working-directory: packages/isar_test
      - name: Lint
        run: flutter analyze

  test:
    name: Dart Test
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]
      fail-fast: false
    runs-on: ${{ matrix.os }}
    steps:
      - run: echo "$OSTYPE"
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core
        run: sh tool/build.sh
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Flutter Unit tests
        run: flutter test -j 1
        working-directory: packages/isar_test

  valgrind:
    name: Valgrind
    runs-on: ubuntu-latest
    if: ${{ false }}
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Install valgrind and llvm
        run: sudo apt update && sudo apt install -y valgrind libclang-dev
      - name: Build Isar Core
        run: sh tool/build.sh
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Valgrind
        run: |
          dart compile exe integration_test/all_tests.dart
          valgrind \
            --leak-check=full \
            --error-exitcode=1 \
            --show-mismatched-frees=no \
            --show-possibly-lost=no \
            --errors-for-leak-kinds=definite \
            integration_test/all_tests.exe
        working-directory: packages/isar_test

  coverage:
    name: Code Coverage
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core
        run: sh tool/build.sh
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Add packages
        run: |
          flutter pub add json_annotation
          flutter pub add intl
          flutter pub add isar_test --path ../isar_test
        working-directory: packages/isar
      - name: Collect isar Coverage
        run: |
          flutter test --coverage --coverage-path lcov_isar.info
        working-directory: packages/isar
      - name: Collect isar_test Coverage
        run: |
          flutter test --coverage ../isar_test/test --coverage-path lcov_isar_test.info
        working-directory: packages/isar
      - name: Upload isar Coverage
        uses: codecov/codecov-action@v3
        with:
          files: packages/isar/lcov_isar.info
      - name: Upload isar_test Coverage
        uses: codecov/codecov-action@v3
        with:
          files: packages/isar/lcov_isar_test.info

  test_generator:
    name: Generator Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Run Generator Unit tests
        run: |
          dart pub get
          dart test
        working-directory: packages/isar_generator

  integration_test_ios:
    name: Integration Test iOS
    runs-on: macos-12
    steps:
      - uses: actions/checkout@v4
      - name: Start simulator
        uses: futureware-tech/simulator-action@v3
        with:
          model: iPhone 13
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core
        run: |
          bash tool/build_ios.sh
          unzip isar_ios.xcframework.zip -d packages/isar_flutter_libs/ios
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Flutter Integration tests
        run: flutter test integration_test/integration_test.dart --dart-define STRESS=true
        working-directory: packages/isar_test

  integration_test_android:
    name: Integration Test Android
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-java@v3
        with:
          java-version: "11"
          distribution: "zulu"
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core
        run: |
          bash tool/build_android.sh x64
          mkdir -p packages/isar_flutter_libs/android/src/main/jniLibs/x86_64
          mv libisar_android_x64.so packages/isar_flutter_libs/android/src/main/jniLibs/x86_64/libisar.so
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Flutter Integration tests
        continue-on-error: true
        timeout-minutes: ${{ inputs.timeout_minutes }}
        uses: Wandalen/wretry.action@v1.0.36
        with:
          action: reactivecircus/android-emulator-runner@v2
          with: |
            api-level: 29
            arch: x86_64
            profile: pixel
            working-directory: packages/isar_test
            script: flutter test integration_test/integration_test.dart --dart-define STRESS=true

  integration_test_macos:
    name: Integration Test macOS
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          # flutter-version: "3.3.10" # https://github.com/flutter/flutter/issues/118469
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core
        run: |
          bash tool/build_macos.sh
          install_name_tool -id @rpath/libisar.dylib libisar_macos.dylib
          mv libisar_macos.dylib packages/isar_flutter_libs/macos/libisar.dylib
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Flutter Driver tests
        run: |
          flutter config --enable-macos-desktop
          flutter test -d macos integration_test/integration_test.dart --dart-define STRESS=true
        working-directory: packages/isar_test

  integration_test_linux:
    name: Integration Test Linux
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Install Linux requirements
        run: sudo apt-get install clang cmake ninja-build pkg-config libgtk-3-dev
      - name: Setup headless display
        uses: pyvista/setup-headless-display-action@v1
      - name: Build Isar Core
        run: |
          bash tool/build_linux.sh x64
          mv libisar_linux_x64.so packages/isar_flutter_libs/linux/libisar.so
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Flutter Driver tests
        run: |
          flutter config --enable-linux-desktop
          flutter test -d linux integration_test/integration_test.dart --dart-define STRESS=true
        working-directory: packages/isar_test

  integration_test_windows:
    name: Integration Test Windows
    runs-on: windows-2019
    if: ${{ false }}
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core
        run: |
          bash tool/build_windows.sh x64
          mv isar_windows_x64.dll packages/isar_flutter_libs/windows/libisar.dll
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Run Flutter Driver tests
        run: |
          flutter config --enable-windows-desktop
          flutter test -d windows integration_test/integration_test.dart --dart-define STRESS=true
        working-directory: packages/isar_test

  drive_chrome:
    runs-on: ubuntu-latest
    if: ${{ false }}
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Install chromedricer
        uses: nanasess/setup-chromedriver@v1
      - name: Prepare chromedricer
        run: chromedriver --port=4444 &
      - name: Run Dart tests in browser
        run: |
          flutter pub get
          dart tool/generate_long_double_test.dart
          dart tool/generate_all_tests.dart
          flutter pub run build_runner build
          flutter drive --driver=isar_driver.dart --target=isar_driver_target.dart -d web-server --browser-name chrome
        working-directory: packages/isar_test

  drive_safari:
    runs-on: macos-latest
    if: ${{ false }}
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare safaridricer
        run: |
          sudo safaridriver --enable
          safaridriver --port=4444 &
      - name: Run Dart tests in browser
        run: |
          flutter pub get
          dart tool/generate_long_double_test.dart
          flutter pub run build_runner build
          dart tool/generate_all_tests.dart
          flutter drive --driver=isar_driver.dart --target=isar_driver_target.dart -d web-server --browser-name safari
        working-directory: packages/isar_test

  drive_firefox:
    runs-on: ubuntu-latest
    if: ${{ false }}
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Install geckodriver
        uses: browser-actions/setup-geckodriver@latest
      - name: Prepare geckodriver
        run: geckodriver --port=4444 &
      - name: Run Dart tests in browser
        run: |
          flutter pub get
          dart tool/generate_long_double_test.dart
          flutter pub run build_runner build
          dart tool/generate_all_tests.dart
          flutter drive --driver=isar_driver.dart --target=isar_driver_target.dart -d web-server --browser-name firefox
        working-directory: packages/isar_test


================================================
FILE: .github/workflows/testlab.yaml
================================================
on: workflow_call

jobs:
  firebase_testlab_android:
    name: Firebase Testlab Android
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: subosito/flutter-action@v2
        with:
          flutter-version: ${{ vars.FLUTTER_VERSION }}
      - name: Prepare Build
        uses: ./.github/actions/prepare-build
      - name: Build Isar Core arm64
        run: |
          bash tool/build_android.sh arm64
          mkdir -p packages/isar_flutter_libs/android/src/main/jniLibs/arm64-v8a
          mv libisar_android_arm64.so packages/isar_flutter_libs/android/src/main/jniLibs/arm64-v8a/libisar.so
      - name: Build Isar Core armv7
        run: |
          bash tool/build_android.sh armv7
          mkdir -p packages/isar_flutter_libs/android/src/main/jniLibs/armeabi-v7a
          mv libisar_android_armv7.so packages/isar_flutter_libs/android/src/main/jniLibs/armeabi-v7a/libisar.so
      - name: Prepare Tests
        run: sh tool/prepare_tests.sh
      - name: Build dummy APK
        run: flutter build apk integration_test/integration_test.dart
        working-directory: packages/isar_test
      - name: Build APKs
        run: |
          ./gradlew app:assembleAndroidTest
          ./gradlew app:assembleDebug -Ptarget=integration_test/integration_test.dart
        working-directory: packages/isar_test/android
      - name: Login to Google Cloud
        uses: "google-github-actions/auth@v1"
        with:
          credentials_json: "${{ secrets.FIREBASE_JSON }}"
      - name: Run tests
        run: |
          gcloud firebase test android run \
            --project isar-community \
            --type instrumentation \
            --timeout 5m \
            --device model=starqlteue,version=26 \
            --device model=cheetah,version=33 \
            --device model=shiba,version=34 \
            --app build/app/outputs/apk/debug/app-debug.apk \
            --test build/app/outputs/apk/androidTest/debug/app-debug-androidTest.apk
        working-directory: packages/isar_test


================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.lock
*.log
.DS_Store
.vscode/
.idea

# Dart related
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
build/

# Rust related
target/
*.a
*.so
*.dylib
*.dll
*.zip
*.xcframework/
isar-dart.h

# Android related
**/android/**/gradle-wrapper.jar
.gradle/
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java

# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*

# macOS
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/ephemeral
**/.plugin_symlinks/

# Coverage
coverage/


================================================
FILE: Cargo.toml
================================================
[workspace]
resolver = "2"
members = [
    "packages/isar_core",
    "packages/isar_core_ffi",
    "packages/mdbx_sys"
]

[profile.release]
lto = true
codegen-units = 1
panic = "abort"
strip = "symbols"

================================================
FILE: LICENSE
================================================

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright [yyyy] [name of copyright owner]

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.

================================================
FILE: TODO.md
================================================
<h1 align="center"> Roadmap and TODOs</p>


# Documentation

## API Docs

- [ ] Document all public APIs

## Schema

- [x] Update schema migration instructions
- [ ] Document all annotation options

## CRUD

- [ ] Document sync operations
- [x] `getAll()`, `putAll`, `deleteAll()`
- [ ] `getBy...()`, `deleteBy...()`

## Queries

- [x] Filter groups
- [x] Boolean operators `and()`, `or()`, `not()`
- [x] Offset, limit
- [x] Distinct where clauses
- [x] Different filter operations (`equalTo`, `beginsWith()` etc.)
- [ ] Better explanation for distinct and sorted where clauses
- [ ] Watching queries

## Indexes

- [ ] Intro
- [x] What are they
- [ ] Why use them
- [x] How to in isar?

## Examples

- [ ] Create minimal example
- [ ] Create complex example with indexes, filter groups etc.
- [ ] More Sample Apps

## Tutorials

- [ ] How to write fast queries
- [ ] Build a simple offline first app
- [ ] Advanced queries


----


# Isar Dart

## Features

- [x] Distinct by
- [x] Offset, Limit
- [x] Sorted by

## Fixes

- [x] Provide an option to change collection accessor names

## Unit tests

- [x] Download binaries automatically for tests

### Queries

- [x] Restructure query tests to make them less verbose
- [x] Define models that can be reused across tests
- [x] Where clauses with string indexes (value, hash, words, case-sensitive)
- [x] Distinct where clauses
- [x] String filter operations


----


# Isar Core

## Features (low priority)

- [ ] Draft Synchronization
- [x] Relationships

## Unit tests

- [ ] Make mdbx unit tests bulletproof
- [x] Migration tests
- [x] Binary format
- [x] CRUD
- [x] Links
- [ ] QueryBuilder
- [ ] WhereClause
- [ ] WhereExecutor
- [x] CollectionMigrator
- [ ] Watchers


----


# Isar Web

- [ ] MVP




================================================
FILE: docs/.gitignore
================================================
.DS_Store

node_modules
.temp
.cache
dist


================================================
FILE: docs/README.md
================================================
# Isar Docs

Run the docs locally:

```
npm install

npm run dev
```

## Create a new language

1. Create a new folder in `docs` with the language code (e.g. `de` for German).
2. Add the locale config to `.vueepress/locales.ts`.
3. Start translating the existing pages.

================================================
FILE: docs/docs/.vuepress/config.ts
================================================
import { shikiPlugin } from '@vuepress/plugin-shiki'
import { DefaultThemeLocaleData, defineUserConfig, LocaleConfig, SiteLocaleConfig, } from 'vuepress'
import { defaultTheme } from 'vuepress'
import { viteBundler } from 'vuepress'
import { getLocalePath, locales } from './locales'
import * as path from 'path'
import * as fs from 'fs'

const vueLocales: SiteLocaleConfig = {}
for (const locale of locales) {
    vueLocales[getLocalePath(locale.code)] = {
        lang: locale.language,
        title: locale.dbName,
        description: locale.dbDescription,
    }
}

const themeLocales: LocaleConfig<DefaultThemeLocaleData> = {}
for (const locale of locales) {
    themeLocales[getLocalePath(locale.code)] = {
        selectLanguageName: locale.language,
        selectLanguageText: locale.selectLanguage,
        editLinkText: locale.editPage,
        lastUpdatedText: locale.lastUpdated,
        contributorsText: locale.contributors,
        tip: locale.tip,
        warning: locale.warning,
        danger: locale.danger,
        notFound: locale.notFound,
        backToHome: locale.backToHome,
        sidebar: getSidebar({
            locale: locale.code,
            tutorials: locale.tutorials,
            concepts: locale.concepts,
            recipes: locale.recipes,
            sampleApps: locale.sampleApps,
            chnagelog: locale.changelog,
            contributors: locale.contributors,
        }),
    }
}

export default defineUserConfig({
    locales: vueLocales,
    bundler: viteBundler({}),
    base: '/v3/',
    theme: defaultTheme({
        logo: "/isar.svg",
        repo: "isar-community/isar",
        docsRepo: "isar-community/isar",
        docsDir: "docs/docs",
        contributors: true,
        locales: themeLocales,
        navbar: [
            {
                text: "pub.dev",
                link: "https://pub.dev/packages/isar",
            },
            {
                text: "API",
                link: "https://pub.dev/documentation/isar/latest/isar/isar-library.html",
            },
            {
                text: "Telegram",
                link: "https://t.me/isardb",
            },
            {
                text: "v3.x",
                children: [
                    {
                        text: "v4.x",
                        link: "https://isar-community.dev",
                    },
                    {
                        text: "v3.x",
                        link: "https://isar-community.dev/v3",
                    },
                ],
            },
        ],
        sidebarDepth: 1,

    }),
    markdown: {
        code: {
            lineNumbers: false,
        },
    },
    plugins: [
        [
            shikiPlugin({
                theme: "one-dark-pro",
            }),
            {
                name: 'redirect-locale',
                clientConfigFile: path.resolve(__dirname, 'redirect.ts'),
            },
        ],
    ],
    head: [
        [
            "link",
            {
                rel: "icon",
                type: "image/png",
                sizes: "256x256",
                href: `/icon-256x256.png`,
            },
        ],
        [
            "link",
            {
                rel: "icon",
                type: "image/png",
                sizes: "512x512",
                href: `/icon-512x512.png`,
            },
        ],
        [
            "link",
            {
                rel: "stylesheet",
                href: "https://fonts.googleapis.com/css2?family=Montserrat:wght@800&display=swap",
            },
        ],
        ["meta", { name: "application-name", content: "Isar Database" }],
        ["meta", { name: "apple-mobile-web-app-title", content: "Isar Database" }],
        [
            "meta",
            { name: "apple-mobile-web-app-status-bar-style", content: "black" },
        ],
        [
            "script",
            {
                async: "",
                src: "https://www.googletagmanager.com/gtag/js?id=G-36LNDL9RHB",
            },
        ],
        [
            "script",
            {},
            `window.dataLayer = window.dataLayer || [];
                function gtag(){dataLayer.push(arguments);}
                gtag('js', new Date());
                gtag('config', 'G-36LNDL9RHB');`,
        ],
        [
            "script",
            {},
            `(function(c,l,a,r,i,t,y){
            c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)};
            t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i;
            y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y);
          })(window, document, "clarity", "script", "lkyzg3xacc");`,
        ],
    ],
})

function getSidebar({ locale, tutorials, concepts, recipes, sampleApps, chnagelog, contributors }) {
    return [
        {
            text: tutorials,
            children: getSidebarChildren(locale, ["tutorials/quickstart.md"])
        },
        {
            text: concepts,
            children: getSidebarChildren(
                locale,
                [
                    "schema.md",
                    "crud.md",
                    "queries.md",
                    "transactions.md",
                    "indexes.md",
                    "links.md",
                    "watchers.md",
                    "limitations.md",
                    "faq.md",
                ],
            ),
        },
        {
            text: recipes,
            children: getSidebarChildren(
                locale,
                [
                    "recipes/full_text_search.md",
                    "recipes/multi_isolate.md",
                    "recipes/string_ids.md",
                    "recipes/data_migration.md",
                ]
            ),
        },
        {
            text: sampleApps,
            link: "https://github.com/isar-community/isar/tree/main/examples",
        },
        {
            text: chnagelog,
            link: "https://github.com/isar-community/isar/blob/main/packages/isar/CHANGELOG.md",
        },
        {
            text: contributors,
            link: "https://github.com/isar-community/isar#contributors-",
        },
    ]
}

function getSidebarChildren(locale: string, children: string[]) {
    const localePath = getLocalePath(locale)
    return children.map((child) => {
        if (locale === "en") {
            return '/' + child
        }
        const file = path.resolve(__dirname, '../', localePath.substring(1), child)
        if (fs.existsSync(file)) {
            return localePath + child
        } else {
            return '/' + child
        }
    });
}

================================================
FILE: docs/docs/.vuepress/locales.ts
================================================
export interface LocalConfig {
  code: string;
  language: string;
  selectLanguage: string;
  editPage: string;
  lastUpdated: string;
  tip: string;
  warning: string;
  danger: string;
  notFound: string[];
  backToHome: string;
  translationOutdated: string;

  dbName: string;
  dbDescription: string;

  tutorials: string;
  concepts: string;
  recipes: string;
  sampleApps: string;
  changelog: string;
  contributors: string;
}

export function getLocalePath(code: string): string {
  if (code === "en") {
    return "/";
  } else {
    return "/" + code + "/";
  }
}

export const locales: LocalConfig[] = [
  {
    code: "en",
    language: "English",
    selectLanguage: "Select Language",
    editPage: "Edit Page",
    lastUpdated: "Last Updated",
    tip: "Tip",
    warning: "Warning",
    danger: "Danger",
    notFound: [
      "Nothing to see here.",
      "How did we end up here?",
      "This is a four-oh-four...",
      "Looks like we have a broken link.",
    ],
    backToHome: "Back to Home",
    translationOutdated: "Translation is outdated. Please help us update it!",
    dbName: "Isar Database",
    dbDescription: "Super Fast Cross-Platform Database for Flutter",
    tutorials: "TUTORIALS",
    concepts: "CONCEPTS",
    recipes: "RECIPES",
    sampleApps: "Sample Apps",
    changelog: "Changelog",
    contributors: "Contributors",
  },
  {
    code: "de",
    language: "Deutsch",
    selectLanguage: "Sprache wählen",
    editPage: "Seite bearbeiten",
    lastUpdated: "Zuletzt aktualisiert",
    tip: "Tipp",
    warning: "Warnung",
    danger: "Achtung",
    notFound: [
      "Hier gibt es nichts zu sehen.",
      "Wie sind wir hier gelandet?",
      "Das ist ein vier-null-vier...",
      "Sieht aus als hätten wir einen kaputten Link.",
    ],
    backToHome: "Zurück zur Startseite",
    translationOutdated:
      "Übersetzung ist veraltet. Bitte hilf uns, sie zu aktualisieren!",
    dbName: "Isar Datenbank",
    dbDescription: "Super Schnelle Cross-Platform Flutter Datenbank",
    tutorials: "TUTORIALS",
    concepts: "KONZEPTE",
    recipes: "REZEPTE",
    sampleApps: "Beispiel Apps",
    changelog: "Änderungsprotokoll",
    contributors: "Mitwirkende",
  },
  {
    code: "ja",
    language: "日本語",
    selectLanguage: "言語の選択",
    editPage: "編集ページ",
    lastUpdated: "最終更新日",
    tip: "ヒント",
    warning: "警告",
    danger: "危険",
    notFound: [
      "何も見つかりませんでした.",
      "どうしてこんなところに辿り着いたのだろう...",
      "ここは404ページのようです...",
      "リンク切れのようです。",
    ],
    backToHome: "ホームに戻る",
    translationOutdated:
      "翻訳は古くなっています。翻訳の更新にご協力頂けませんか?",
    dbName: "Isar Database",
    dbDescription: "Flutterのための超高速クロスプラットフォームDatabase",
    tutorials: "チュートリアル",
    concepts: "コンセプト",
    recipes: "レシピ集",
    sampleApps: "サンプルアプリ",
    changelog: "変更履歴",
    contributors: "貢献者の方々",
  },
  {
    code: "ko",
    language: "한국어",
    selectLanguage: "언어 선택",
    editPage: "페이지 편집",
    lastUpdated: "마지막 업데이트",
    tip: "팁",
    warning: "경고",
    danger: "위험",
    notFound: [
      "여기는 볼 것이 없다.",
      "우리가 어떻게 여기까지 오게 되었나요?",
      "여기는 404...",
      "연결이 끊어진 것 같습니다.",
    ],
    backToHome: "홈으로 돌아가기",
    translationOutdated: "번역이 낡았습니다. 업데이트 도와주세요!",
    dbName: "Isar 데이터베이스",
    dbDescription: "플러터를 위한 초고속 크로스 플랫폼 데이터베이스",
    tutorials: "튜토리얼",
    concepts: "개념",
    recipes: "레시피",
    sampleApps: "샘플 앱",
    changelog: "체인지로그",
    contributors: "기여자들",
  },
  {
    code: "es",
    language: "Español",
    selectLanguage: "Seleccionar Idioma",
    editPage: "Editar Página",
    lastUpdated: "Última actualización",
    tip: "Consejo",
    warning: "Advertencia",
    danger: "Peligro",
    notFound: [
      "No hay nada para ver aquí.",
      "Cómo llegamos aquí?",
      "Esto es vergonzoso, no tenemos nada...",
      "Parece que hay un enlace roto.",
    ],
    backToHome: "Volver al inicio",
    translationOutdated:
      "Esta traducción está desactualizada. Por favor ayúdanos a mantenerla al día!",
    dbName: "Isar Database",
    dbDescription: "Base de Datos Super rápida, Multiplataforma para Flutter",
    tutorials: "TUTORIALES",
    concepts: "CONCEPTOS",
    recipes: "RECETAS",
    sampleApps: "Aplicaciones de Ejemplo",
    changelog: "Registro de cambios",
    contributors: "Colaboradores",
  },
  {
    code: "it",
    language: "Italiano",
    selectLanguage: "Seleziona Lingua",
    editPage: "Modifica Pagina",
    lastUpdated: "Ultimo aggiornamento",
    tip: "Suggerimento",
    warning: "Attenzione",
    danger: "Pericolo",
    notFound: [
      "Nulla da vedere qui.",
      "Come ci siamo finiti qui?",
      "Questa è una quattro-zero-quattro...",
      "Sembra che abbiamo un collegamento rotto.",
    ],
    backToHome: "Indietro alla Home",
    translationOutdated:
      "La traduzione è obsoleta. Per favore aiutaci ad aggiornarla!",
    dbName: "Isar Database",
    dbDescription: "Database multipiattaforma super veloce per Flutter",
    tutorials: "TUTORIALS",
    concepts: "CONCETTI",
    recipes: "RICETTE",
    sampleApps: "App d'esempio",
    changelog: "Registro delle modifiche",
    contributors: "Contributori",
  },
  {
    code: "pt",
    language: "Português",
    selectLanguage: "Selecione o idioma",
    editPage: "Editar página",
    lastUpdated: "Ultima atualização",
    tip: "Dica",
    warning: "Aviso",
    danger: "Perigo",
    notFound: [
      "Nada para ver aqui.",
      "Como chegamos aqui?",
      "Isso é embaraçoso, não temos nada...",
      "Parece que temos um link inválido.",
    ],
    backToHome: "Voltar para Início",
    translationOutdated:
      "A tradução está desatualizada. Por favor, ajude-nos a atualizá-lo!",
    dbName: "Isar Database",
    dbDescription: "Banco de dados multiplataforma super rápido para Flutter",
    tutorials: "TUTORIAIS",
    concepts: "CONCEITOS",
    recipes: "RECEITAS",
    sampleApps: "Aplicativos de amostra",
    changelog: "Registro de alterações",
    contributors: "Contribuidores",
  },
  {
    code: "ur",
    language: "اردو",
    selectLanguage: "زبان منتخب کریں",
    editPage: "صفحہ میں ترمیم کریں",
    lastUpdated: "آخری تازہ کاری",
    tip: "ٹپ",
    warning: "انتباہ",
    danger: "خطرہ",
    notFound: [
      "یہاں دیکھنے کے لیے کچھ نہیں ہے۔",
      "ہم یہاں کیسے پہنچے؟",
      " یہ چار اوہ چار ہے۔۔۔",
      "لگتا ہے ہمارے پاس کوئی ٹوٹا ہوا لنک ہے۔",
    ],
    backToHome: "گھر پر واپس",
    translationOutdated:
      "ترجمہ پرانا ہے۔ براہ کرم اسے تروتازہ کرنے میں ہماری مدد کریں!",
    dbName: "Isar Database",
    dbDescription: "  ڈیٹا بیس کے لیے سپر فاسٹ کراس پلیٹ فارم Flutter",
    tutorials: "اسباق",
    concepts: "تصورات",
    recipes: "تراکیب",
    sampleApps: "نمونہ ایپس",
    changelog: "چینج لاگ",
    contributors: "شراکت دار",
  },
  {
    code: "fr",
    language: "Français",
    selectLanguage: "Sélectionner la langue",
    editPage: "Modifier la page",
    lastUpdated: "Dernière modification",
    tip: "Conseil",
    warning: "Avertissement",
    danger: "Danger",
    notFound: [
      'Il n"y a rien a voir ici.',
      "Comment en sommes-nous arrivés là ?",
      "Ceci est un quatre-cent-quatre...",
      "Il semble que nous avons un lien brisé.",
    ],
    backToHome: "Retour à l'acceuil",
    translationOutdated: "Translation is outdated. Please help us update it!",
    dbName: "Base de données Isar",
    dbDescription: "Base de données multiplateforme super rapide pour Flutter",
    tutorials: "TUTORIELS",
    concepts: "CONCEPTS",
    recipes: "RECETTES",
    sampleApps: "Exemples d'applications",
    changelog: "Changements",
    contributors: "Contributeurs",
  },
  {
    code: "zh",
    language: "简体中文",
    selectLanguage: "选择语言",
    editPage: "编辑页面",
    lastUpdated: "更新日期",
    tip: "提示",
    warning: "警告",
    danger: "危险",
    notFound: [
      "这里什么都没有。",
      "怎么会来到这个页面?",
      "404...",
      "看起来链接失效了。",
    ],
    backToHome: "回到主页",
    translationOutdated: "翻译已过期,请帮助我们更新。",
    dbName: "Isar 数据库",
    dbDescription: "专门为 Flutter 打造的超高速跨平台数据库",
    tutorials: "教程",
    concepts: "概念",
    recipes: "专题",
    sampleApps: "示例 App",
    changelog: "更新记录",
    contributors: "贡献者",
  },
];


================================================
FILE: docs/docs/.vuepress/redirect.ts
================================================
import { defineClientConfig } from '@vuepress/client'
import { locales } from './locales'

export default defineClientConfig({
    enhance({ app, router, siteData }) {
        router.beforeEach((to, from) => {
            // open vuepress for the first time
            let isFirstStart = to.fullPath == from.fullPath

            // Whether the home page is about to be displayed
            let isHome = to.fullPath == "/"

            if (typeof navigator != 'undefined' && isFirstStart && isHome) {
                const lang = navigator.language.split("-")[0].toLowerCase()

                if (lang != "en" && locales.some((l) => l.code === lang)) {
                    const redirectUrl = "/" + lang + "/"
                    // Avoid infinite redirection
                    if (to.fullPath != redirectUrl) {
                        return redirectUrl
                    }
                }
            }
        })
    }
})

================================================
FILE: docs/docs/.vuepress/styles/index.scss
================================================
:root {
  --c-brand: #4799fc;
  --c-brand-light: #67abfd;

  --c-text: rgb(30, 30, 30); // normal text
  --c-text-light: rgb(30, 30, 30);
  --c-text-lighter: rgb(30, 30, 30); // code block text
  --c-text-lightest: rgba(30, 30, 30, 0.7);

  .custom-container.tip {
    color: rgb(57, 146, 255) !important;
    border-color: rgb(57, 146, 255) !important;
    background-color: rgba(57, 146, 255, 0.1) !important;
  }

  .custom-container.warning {
    color: rgb(39, 31, 6) !important;
    border-color: rgb(39, 31, 6) !important;
    background-color: rgba(131, 122, 11, 0.15) !important;
  }

  .custom-container.danger {
    color: rgb(170, 37, 58) !important;
    border-color: rgb(170, 37, 58) !important;
    background-color: rgba(170, 37, 58, 0.1) !important;
  }
}

html.dark {
  --c-brand: #67abfd;
  --c-brand-light: #4799fc;

  --c-bg: rgb(18, 18, 18);
  --c-bg-light: rgb(30, 30, 30); // code block background
  --code-bg-color: #1e1e1e; // code background

  --c-text: rgb(183, 188, 190); // normal text
  --c-text-light: rgba(183, 188, 190);
  --c-text-lighter: rgb(183, 188, 190); // code block text
  --c-text-lightest: rgba(183, 188, 190, 0.7);

  --c-border: rgb(45, 45, 45);
  --c-border-dark: rgb(60, 60, 60);

  .custom-container.tip {
    color: rgb(57, 146, 255) !important;
    border-color: rgb(57, 146, 255) !important;
    background-color: rgba(57, 146, 255, 0.1) !important;
  }

  .custom-container.warning {
    color: rgb(248, 239, 159) !important;
    border-color: rgb(248, 239, 159) !important;
    background-color: rgba(131, 122, 11, 0.15) !important;
  }

  .custom-container.danger {
    color: rgb(240, 158, 183) !important;
    border-color: rgb(240, 158, 183) !important;
    background-color: rgba(240, 158, 183, 0.1) !important;
  }
}

h1 {
  font-family: "Montserrat", sans-serif;

  font-size: 38px;
  @media (min-width: 750px) {
    font-size: 55px;
  }
}

h2 {
  font-family: "Montserrat", sans-serif;
  font-size: 27px;
  @media (min-width: 750px) {
    font-size: 38px;
  }
}

h3 {
  font-family: "Montserrat", sans-serif;
  font-size: 20px;
  @media (min-width: 750px) {
    font-size: 27px;
  }
}

h4 {
  font-family: "Montserrat", sans-serif;
  font-size: 16px;
}

mark {
  padding: 2px;
}

.action-button.primary {
  font-weight: 800;
}

summary {
  cursor: pointer;
}

details[open] summary {
  margin-bottom: 0.5rem;
}

.custom-container {
  border-radius: 10px;
  border-left-width: 0.25rem !important;
  border-left-style: solid;
  border-right-style: solid;
  border-right-width: 0.25rem;
}

.custom-container-title {
  display: none;
}

.video-block {
  position: relative; 
  padding-bottom: 56.25%; /* 16:9 */
  height: 0;
  overflow: hidden;
  width: 100%; height: auto;
}

.video-block iframe {
  position: absolute;
  top: 0; left: 0;
  width: 100%; height: 100%;
}

================================================
FILE: docs/docs/README.md
================================================
---
home: true
title: Home
heroImage: /isar.svg
actions:
  - text: Let's Get Started!
    link: /tutorials/quickstart.html
    type: primary
features:
  - title: 💙 Made for Flutter
    details: Minimal setup, Easy to use, no config, no boilerplate. Just add a few lines of code to get started.
  - title: 🚀 Highly scalable
    details: Store hundreds of thousands of records in a single NoSQL database and query them efficiently and asynchronously.
  - title: 🍭 Feature-rich
    details: Isar has a rich set of features to help you manage your data. Composite & multi-entry indexes, query modifiers, JSON support, and more.
  - title: 🔎 Full-text search
    details: Isar has built-in full-text search. Create a multi-entry index and search for records easily.
  - title: 🧪 ACID semantics
    details: Isar is ACID compliant and handles transactions automatically. It rolls back changes if an error occurs.
  - title: 💃 Static typing
    details: Isar's queries are statically typed and compile-time checked. No need to worry about runtime errors. 
  - title: 📱 Multiplatform
    details: iOS, Android, Desktop, and FULL WEB SUPPORT!
  - title: ⏱ Asynchronous
    details: Parallel query operations & multi-isolate support out-of-the-box
  - title: 🦄 Open Source
    details: Everything is open source and free forever!

footer: Apache Licensed | Copyright © 2022 Simon Leier
---


================================================
FILE: docs/docs/crud.md
================================================
---
title: Create, Read, Update, Delete
---

# Create, Read, Update, Delete

When you have your collections defined, learn how to manipulate them!

## Opening Isar

Before you can do anything, we need an Isar instance. Each instance requires a directory with write permission where the database file can be stored. If you don't specify a directory, Isar will find a suitable default directory for the current platform.

Provide all the schemas you want to use with the Isar instance. If you open multiple instances, you still have to provide the same schemas to each instance.

```dart
final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.open(
  [RecipeSchema],
  directory: dir.path,
);
```

You can use the default config or provide some of the following parameters:

| Config              | Description                                                                                                                                                                                                                                                                                  |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`              | Open multiple instances with distinct names. By default, `"default"` is used.                                                                                                                                                                                                                |
| `directory`         | The storage location for this instance. Not required for web.                                                                                                                                                                                                                                |
| `maxSizeMib`        | The maximum size of the database file in MiB. Isar uses virtual memory which is not an endless resource so be mindful with the value here. If you open multiple instances they share the available virtual memory so each instance should have a smaller `maxSizeMib` . The default is 2048. |
| `relaxedDurability` | Relaxes the durability guarantee to increase write performance. In case of a system crash (not app crash), it is possible to lose the last committed transaction. Corruption is not possible                                                                                                 |
| `compactOnLaunch`   | Conditions to check whether the database should be compacted when the instance is opened.                                                                                                                                                                                                    |
| `inspector`         | Enabled the Inspector for debug builds. For profile and release builds this option is ignored.                                                                                                                                                                                               |

If an instance is already open, calling `Isar.open()` will yield the existing instance regardless of the specified parameters. That's useful for using Isar in an isolate.

:::tip
Consider using the [path_provider](https://pub.dev/packages/path_provider) package to get a valid path on all platforms.
:::

The storage location of the database file is `directory/name.isar`

## Reading from the database

Use `IsarCollection` instances to find, query, and create new objects of a given type in Isar.

For the examples below, we assume that we have a collection `Recipe` defined as follows:

```dart
@collection
class Recipe {
  Id? id;

  String? name;

  DateTime? lastCooked;

  bool? isFavorite;
}
```

### Get a collection

All your collections live in the Isar instance. You can get the recipes collection with:

```dart
final recipes = isar.recipes;
```

That was easy! If you don't want to use collection accessors, you can also use the `collection()` method:

```dart
final recipes = isar.collection<Recipe>();
```

### Get an object (by id)

We don't have data in the collection yet but let's pretend we do so we can get an imaginary object by the id `123`

```dart
final recipe = await isar.recipes.get(123);
```

`get()` returns a `Future` with either the object or `null` if it does not exist. All Isar operations are asynchronous by default, and most of them have a synchronous counterpart:

```dart
final recipe = isar.recipes.getSync(123);
```

:::warning
You should default to the asynchronous version of methods in your UI isolate. Since Isar is very fast, it is often acceptable to use the synchronous version.
:::

If you want to get multiple objects at once, use `getAll()` or `getAllSync()`:

```dart
final recipe = await isar.recipes.getAll([1, 2]);
```

### Query objects

Instead of getting objects by id you can also query a list of objects matching certain conditions using `.where()` and `.filter()`:

```dart
final allRecipes = await isar.recipes.where().findAll();

final favorites = await isar.recipes.filter()
  .isFavoriteEqualTo(true)
  .findAll();
```

➡️ Learn more: [Queries](queries)

## Modifying the database

It's finally time to modify our collection! To create, update, or delete objects, use the respective operations wrapped in a write transaction:

```dart
await isar.writeTxn(() async {
  final recipe = await isar.recipes.get(123)

  recipe.isFavorite = false;
  await isar.recipes.put(recipe); // perform update operations

  await isar.recipes.delete(123); // or delete operations
});
```

➡️ Learn more: [Transactions](transactions)

### Insert object

To persist an object in Isar, insert it into a collection. Isar's `put()` method will either insert or update the object depending on whether it already exists in the collection.

If the id field is `null` or `Isar.autoIncrement`, Isar will use an auto-increment id.

```dart
final pancakes = Recipe()
  ..name = 'Pancakes'
  ..lastCooked = DateTime.now()
  ..isFavorite = true;

await isar.writeTxn(() async {
  await isar.recipes.put(pancakes);
})
```

Isar will automatically assign the id to the object if the `id` field is non-final.

Inserting multiple objects at once is just as easy:

```dart
await isar.writeTxn(() async {
  await isar.recipes.putAll([pancakes, pizza]);
})
```

### Update object

Both creating and updating works with `collection.put(object)`. If the id is `null` (or does not exist), the object is inserted; otherwise, it is updated.

So if we want to unfavorite our pancakes, we can do the following:

```dart
await isar.writeTxn(() async {
  pancakes.isFavorite = false;
  await isar.recipes.put(pancakes);
});
```

### Delete object

Want to get rid of an object in Isar? Use `collection.delete(id)`. The delete method returns whether an object with the specified id was found and deleted. If you want to delete the object with id `123`, for example, you can do:

```dart
await isar.writeTxn(() async {
  final success = await isar.recipes.delete(123);
  print('Recipe deleted: $success');
});
```

Similarly to get and put, there is also a bulk delete operation that returns the number of deleted objects:

```dart
await isar.writeTxn(() async {
  final count = await isar.recipes.deleteAll([1, 2, 3]);
  print('We deleted $count recipes');
});
```

If you don't know the ids of the objects you want to delete, you can use a query:

```dart
await isar.writeTxn(() async {
  final count = await isar.recipes.filter()
    .isFavoriteEqualTo(false)
    .deleteAll();
  print('We deleted $count recipes');
});
```


================================================
FILE: docs/docs/de/README.md
================================================
---
home: true
title: Home
heroImage: /isar.svg
actions:
  - text: Auf Los geht's los!
    link: /de/tutorials/quickstart.html
    type: primary
features:
  - title: 💙 Für Flutter gemacht
    details: Minimales Setup, einfach zu bedienen, keine Konfiguration, kein Boilerplate. Mit ein paar Zeilen Code geht's los.
  - title: 🚀 Skalierbar
    details: Speichere Hunderttausende von Datensätzen und rufe sie effizient und asynchron ab.
  - title: 🍭 Viele Features
    details: Isar hat unzählige Features. Komposit- und Mehrfach-Indizes, Query-Modifikatoren, JSON und mehr.
  - title: 🔎 Volltextsuche
    details: Volltextsuche ist integriert. Erstelle einen Mehrfach-Index und suche nach Datensätzen.
  - title: 🧪 ACID Semantik
    details: Isar ist ACID-konform und verwaltet Transaktionen automatisch. Änderungen werden rückgängig gemacht, falls ein Fehler auftritt.
  - title: 💃 Statische Typisierung
    details: Abfragen sind statisch typisiert und werden zur Kompilierzeit überprüft. Laufzeitfehler sind ein Problem von gestern.
  - title: 📱 Multiplatform
    details: iOS, Android, Desktop und VOLLE WEB UNTERSTÜTZUNG!
  - title: ⏱ Asynchron
    details: Parallelle Abfragen und Multi-Isolate-Unterstützung.
  - title: 🦄 Open Source
    details: Komplett Open Source und für immer kostenlos!

footer: Apache Licensed | Copyright © 2022 Simon Leier
---


================================================
FILE: docs/docs/de/crud.md
================================================
---
title: Erstellen, Lesen, Aktualisieren und Löschen
---

# Erstellen, Lesen, Aktualisieren und Löschen

Lerne wie du Collections in Isar nutzt nachdem du sie definiert hast.

## Öffnen von Isar

Als Erstes benötigen wir eine Isar Instanz. Jede Instanz erfordert einen Ordner mit Schreibrechten, in dem die Datenbankdatei gespeichert werden kann. Wenn du keinen Ordner angibst, wird Isar einen geeigneten Standardordner für die aktuelle Plattform finden.

Gib alle Schemas an, die du mit der Isar-Instanz verwenden möchtest. Wenn du mehrere Instanzen öffnest, musst du trotzdem jeder Instanz die gleichen Schemas mitgeben.

```dart
final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.open(
  [RecipeSchema],
  directory: dir.path,
);
```

Du kannst die Standardkonfiguration verwenden oder einige der folgenden Parameter setzen:

| Konfiguration       | Beschreibung                                                                                                                                                                                                        |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`              | Öffne mehrere Instanzen mit unterschiedlichen Namen. Standardmäßig wird `"default"` verwendet.                                                                                                                      |
| `directory`         | Der Speicherort für diese Instanz. Standardmäßig wird `NSDocumentDirectory` für iOS und `getDataDirectory` für Android verwendet. Nicht erforderlich für Web.                                                       |
| `relaxedDurability` | Entspannt die durability-Garantie, um die Schreibleistung zu erhöhen. Im Falle eines Systemabsturzes (nicht App-Absturz) ist es möglich, die letzte Transaktion zu verlieren. Datenbankkorruption ist nicht möglich |

Wenn eine Instanz bereits geöffnet ist, wird `Isar.open()` die vorhandene Instanz unabhängig von den angegebenen Parametern zurückgeben. Das ist nützlich, um Isar in einem Isolate zu verwenden.

:::tip
Verwende das [path_provider](https://pub.dev/packages/path_provider)-Paket, um einen gültigen Pfad auf allen Plattformen zu erhalten.
:::

Der Speicherort der Datenbankdatei ist `directory/name.isar`

## Aus der Datenbank lesen

Verwende `IsarCollection`-Instanzen um Objekte eines bestimmten Typs in Isar zu finden, abzufragen und neu zu erstellen.

Den folgenden Beispielen liegt die Collection `Recipe` zugrunde, die wie folgt definiert ist:

```dart
@collection
class Recipe {
  Id? id;

  String? name;

  DateTime? lastCooked;

  bool? isFavorite;
}
```

### Eine Collection erhalten

Alle deine Collections befinden sich in der Isar Instanz. Erhalte die Recipes-Collection über den Accessor:

```dart
final recipes = isar.recipes;
```

Das war einfach! Wenn du keine Collection-Accessors verwenden möchtest, ist alternativ die `collection()`-Methode verfügbar:

```dart
final recipes = isar.collection<Recipe>();
```

### Objekt abrufen (per ID)

Wir haben noch keine Daten in der Collection, aber wir nehmen an, dass bereits ein Objekt mit der ID `123` existiert.

```dart
final recipe = await recipes.get(123);
```

Die `get()`-Methode gibt ein `Future` zurück, das entweder das Objekt enthält, oder `null`, wenn die ID nicht existiert. Alle Isar-Operationen sind standardmäßig asynchron, auch wenn die meisten ein synchrones Gegenstück haben:

```dart
final recipe = recipes.getSync(123);
```

:::warning
Normalerweise solltest du die asynchrone Version der Methoden in deinem UI-Isolate bevorzugen. Da Isar sehr schnell ist, sind die synchronen Methoden oft auch in Ordnung.
:::

Wenn du mehrere Objekte auf einmal abrufen möchtest, kannst du `getAll()` oder `getAllSync()` verwenden:

```dart
final recipe = await recipes.getAll([1, 2]);
```

### Abfragen von Objekten

Anstatt Objekte über die ID zu erhalten, kannst du mittels `.where()` und `.filter()` auch eine Liste von Objekten abfragen, die bestimmten Bedingungen entsprechen:

```dart
final allRecipes = await recipes.where().findAll();

final favourites = await recipes.filter()
  .isFavoriteEqualTo(true)
  .findAll();
```

➡️ Lerne mehr: [Abfragen](queries)

## Ändern der Datenbank

Jetzt ist es endlich an der Zeit, unsere Collection zu verändern! Um Objekte zu erstellen, zu aktualisieren oder zu löschen, rufe die entsprechenden Operationen innerhalb einer Schreibtransaktion auf:

```dart
await isar.writeTxn(() async {
  final recipe = await recipes.get(123)

  recipe.isFavorite = false;
  await recipes.put(recipe); // Aktualisierungsoperationen

  await recipes.delete(123); // oder Löschoperationen durchführen
});
```

➡️ Lerne mehr: [Transaktionen](transactions)

### Objekt erstellen

Erstelle ein Objekt in einer Collection um es in Isar zu speichern. Die `put()`-Methode von Isar erstellt das Objekt entweder oder aktualisiert es, je nachdem, ob es bereits in der Collection existiert.

Wenn das ID-Feld `null` oder `Isar.autoIncrement` ist, verwendet Isar eine automatisch generierte ID.

```dart
final pancakes = Recipe()
  ..name = 'Pancakes'
  ..lastCooked = DateTime.now()
  ..isFavorite = true;

await isar.writeTxn(() async {
  await recipes.put(pancakes);
})
```

Ist das ID-Feld nicht-final, weist Isar die generierte ID automatisch dem Objekt zu.

Das Erstellen von mehreren Objekten auf einmal ist genauso einfach:

```dart
await isar.writeTxn(() async {
  await recipes.putAll([pancakes, pizza]);
})
```

### Objekt aktualisieren

Sowohl das Erstellen als auch das Aktualisieren funktioniert mit `collection.put(object)`. Wenn die ID `null` ist (oder nicht existiert), wird das Objekt erstellt, andernfalls wird es aktualisiert.

Wenn wir also Pfannkuchen nicht mehr mögen, können wir Folgendes tun:

```dart
await isar.writeTxn(() async {
  pancakes.isFavorite = false;
  await recipes.put(recipe);
});
```

### Objekt löschen

Willst du ein Objekt in Isar loswerden? Verwende `collection.delete(id)`. Die delete-Methode gibt zurück, ob ein Objekt mit der angegebenen ID gefunden und gelöscht wurde. Lass uns z.B. das Objekt mit der ID `123` löschen:

```dart
await isar.writeTxn(() async {
  final success = await recipes.delete(123);
  print('Recipe deleted: $success');
});
```

Ähnlich wie bei `get()` und `put()` gibt es auch einen Massenlöschvorgang, der die Anzahl der gelöschten Objekte zurückgibt:

```dart
await isar.writeTxn(() async {
  final count = await recipes.deleteAll([1, 2, 3]);
  print('We deleted $count recipes');
});
```

Wenn du die IDs der zu löschenden Objekte nicht kennst ist es auch möglich eine Abfrage zu verwenden:

```dart
await isar.writeTxn(() async {
  final count = await recipes.filter()
    .isFavoriteEqualTo(false)
    .deleteAll();
  print('We deleted $count recipes');
});
```


================================================
FILE: docs/docs/de/faq.md
================================================
---
title: FAQ
---

# Häufig gestellte Fragen

Eine zufällige Zusammenstellung an häufig gestellten Fragen zu Isar und Flutter-Datenbanken.

### Warum brauche ich eine Datenbank?

> Ich speichere meine Daten in einer Backend-Datenbank, warum benötige ich Isar?

Sogar heute kommt es vor, dass du keine Internetverbindung hast, wenn du in einer U-Bahn, einem Flugzeug oder zu Besuch bei deiner Oma bist, die kein WLAN und einen sehr schlechten Mobilfunkempfang hat. Du solltest deine App nicht durch schlechte Verbindung lahmlegen lassen.

### Isar vs Hive

Die Antwort ist leicht: Isar wurde [als Ersatz für Hive begonnen](https://github.com/hivedb/hive/issues/246) und ist nun an einem Punkt, wo ich immer empfehlen würde, Isar statt Hive zu benutzen.

### Where-Klauseln?!

> Warum muss **_ich_** wählen, welcher Index genutzt wird?

Es gibt mehrere Gründe. Viele Datenbanken benutzen Heuristik um den besten Index für eine bestimmte Abfrage zu nutzen. Die Datenbank muss zusätzliche Nutzungsdaten sammeln (-> Overhead) und verwendet möglicherweise immer noch den falschen Index. Es dauert dadurch auch länger eine Abfrage zu starten.

Niemand kennt deine Daten besser, als du, der Entwickler. Also kannst du den besten Index wählen und z.B. entscheiden, ob du einen Index zum Abfragen oder Sortieren verwenden willst.

### Muss ich Indizes / Where-Klauseln benutzen?

Nö! Isar ist vermutlich schnell genug, auch wenn du nur Filter verwendest.

### Ist Isar schnell genug?

Isar ist unter den schnellsten Datenbanken für Mobilgeräte, also sollte es in den meisten Fällen schnellgenug sein. Wenn du auf Leistungsprobleme stößt, besteht die Möglichkeit, dass du was falschmachst.

### Steigert Isar die Größe meiner App?

Ja, ein bisschen. Isar wird die Download-Größe deiner App um 1 - 1,5 MB erhöhen. Isar Web fügt nur wenige KB hinzu.

### Die Docs sind falsch / Da ist ein Tippfehler

Oh nein, sorry. Bitte [öffne ein Issue](https://github.com/isar-community/isar/issues/new/choose), oder noch besser, mach einen PR um den Fehler zu beheben 💪.


================================================
FILE: docs/docs/de/indexes.md
================================================
---
title: Indizes
---

# Indizes

Indizes sind Isars mächtigstes Feature. Viele eingebettete Datenbanken bieten "normale" Indizes (wenn überhaupt), aber Isar hat auch Komposit- und Mehrfach-Indizes. Zu verstehen, wie Indizes funktionieren ist grundlegend um die Abfrageleistung zu optimieren. Isar lässt dich wählen welchen Index du verwenden möchtest und wie du ihn benutzen willst. Wir beginnen mit einer schnellen Einführung was Indizes sind.

## Was sind Indizes?

Wenn eine Collection nicht indiziert ist, wird die Reihenfolge der Zeilen von der Abfrage aus sicherlich nicht als in irgendeiner Weise optimiert erkennbar sein. Daher muss die Abfrage linear alle Objekte durchsuchen. In anderen Worten, die Abfrage muss alle Objekte durchsuchen, um diejenigen zu finden, die zu den Bedingungen passen. Wie du dir bestimmt vorstellen kannst, kann das seine Zeit dauern. Durch jedes einzelne Objekt zu gucken ist nicht sehr effizient.

Zum Beispiel ist diese `Product`-Collection komplett unsortiert.

```dart
@collection
class Product {
  Id? id;

  late String name;

  late int price;
}
```

**Daten:**

| id  | name      | price |
| --- | --------- | ----- |
| 1   | Book      | 15    |
| 2   | Table     | 55    |
| 3   | Chair     | 25    |
| 4   | Pencil    | 3     |
| 5   | Lightbulb | 12    |
| 6   | Carpet    | 60    |
| 7   | Pillow    | 30    |
| 8   | Computer  | 650   |
| 9   | Soap      | 2     |

Eine Abfrage, die versucht alle Produkte zu finden, die mehr als 30€ kosten, muss alle neun Zeilen durchsuchen. Das ist kein Problem für nur neun Zeilen, aber könnte ein Problem für 100k Zeilen werden.

```dart
final expensiveProducts = await isar.products.filter()
  .priceGreaterThan(30)
  .findAll();
```

Um die Leistung dieser Abfrage zu verbessern, indizieren wir die Eigenschaft `price`. Ein Index ist wie eine sortierte Nachschlagetabelle.

```dart
@collection
class Product {
  Id? id;

  late String name;

  @Index()
  late int price;
}
```

**Generierter Index:**

| price                | id                 |
| -------------------- | ------------------ |
| 2                    | 9                  |
| 3                    | 4                  |
| 12                   | 5                  |
| 15                   | 1                  |
| 25                   | 3                  |
| 30                   | 7                  |
| <mark>**55**</mark>  | <mark>**2**</mark> |
| <mark>**60**</mark>  | <mark>**6**</mark> |
| <mark>**650**</mark> | <mark>**8**</mark> |

Jetzt kann die Abfrage deutlich schneller durchgeführt werden. Es kann direkt zu den letzten drei Indexzeilen gesprungen werden und die entsprechenden Objekte anhand ihrer ID gefunden werden.

### Sortierung

Eine andere coole Sache: Indizes können superschnell sortieren. Sortierte Abfragen sind kostenintensiv, weil die Datenbank alle Ergebnisse in den Speicher laden muss, bevor sie sortiert werden. Sogar wenn du einen Offset oder eine Limitierung angibst, werden diese erst nach dem Sortieren angewandt.

Stell dir vor, wir wollten die vier günstigsten Produkte finden. Wir könnten die folgende Abfrage verwenden:

```dart
final cheapest = await isar.products.filter()
  .sortByPrice()
  .limit(4)
  .findAll();
```

In diesem Beispiel müsste die Datenbank alle (!) Objekte laden, sie nach dem Preis sortieren und die vier Produkte mit dem niedrigsten Preis zurückgeben.

Wie du dir vermutlich vorstellen kannst, kann das mit dem vorherigen Index sehr viel effizienter gemacht werden. Die Datenbank nimmt die ersten vier Zeilen des Indexes und gibt die zugehörigen Objekte zurück, da sie schon in der korrekten Reihenfolge sind.

Um einen Index zum Sortieren zu verwenden würden wir die Abfrage so schreiben:

```dart
final cheapestFast = await isar.products.where()
  .anyPrice()
  .limit(4)
  .findAll();
```

Die `.anyX()` Where-Klausel teilt Isar mit, einen Index nur zum Sortieren zu verwenden. Du kannst also eine Where-Klausel wie `.priceGreaterThan()` benutzen und sortierte Ergenisse erhalten.

## Eindeutige Indizes

Ein eindeutiger Index stellt sicher, dass der Index keine doppelten Werte enthält. Er kann aus einem oder mehreren Eigenschaften bestehen. Wenn ein eindeutiger Index eine Eigenschaft hat, sind die Werte dieser Eigenschaft eindeutig. Wenn ein eindeutiger Index mehr als eine Eigenschaft hat, dann ist die Kombination der Werte dieser Eigenschaften eindeutig.

```dart
@collection
class User {
  Id? id;

  @Index(unique: true)
  late String username;

  late int age;
}
```

Jeder Versuch Daten in einen eindeutigen Index einzufügen oder zu aktualisieren, die ein Dukplikat verursachen würden, resultieren in einem Fehler:

```dart
final user1 = User()
  ..id = 1
  ..username = 'user1'
  ..age = 25;

await isar.users.put(user1); // -> Ok

final user2 = User()
  ..id = 2;
  ..username = 'user1'
  ..age = 30;

// Versucht einen Benutzer mit dem gleichen Benutzernamen einzufügen
await isar.users.put(user2); // -> Fehler: Eindeutigkeitsbeschränkung verletzt
print(await isar.user.where().findAll());
// > [{id: 1, username: 'user1', age: 25}]
```

## Indizes ersetzen

Manchmal ist es nicht von Vorteil einen Fehler zu verursachen, wenn eine Eindeutigkeitsbeschränkung verletzt wird. Stattdessen möchtest du vielleicht das vorhandene Objekt mit dem Neuen ersetzen. Das kann erreicht werden, indem die Eigenschaft `replace` des Indexes auf `true` gesetzt wird.

```dart
@collection
class User {
  Id? id;

  @Index(unique: true, replace: true)
  late String username;
}
```

Jetzt, wenn wir versuchen einen Benutzer mit einem vorhandenen Benutzernamen einzufügen, wird Isar den Vorhandenen mit dem neuen Benutzer ersetzen.

```dart
final user1 = User()
  ..id = 1
  ..username = 'user1'
  ..age = 25;

await isar.users.put(user1);
print(await isar.user.where().findAll());
// > [{id: 1, username: 'user1', age: 25}]

final user2 = User()
  ..id = 2;
  ..username = 'user1'
  ..age = 30;

await isar.users.put(user2);
print(await isar.user.where().findAll());
// > [{id: 2, username: 'user1' age: 30}]
```

Ersetzbare Indizes generieren auch `putBy()`-Methoden, die es dir ermöglichen Objekte zu aktualisieren statt sie zu ersetzen. Die vorhandene ID wird wiederverwendet und Links bleiben erhalten.

```dart
final user1 = User()
  ..id = 1
  ..username = 'user1'
  ..age = 25;

// Nutzer existiert nicht, also ist es das gleiche wie put()
await isar.users.putByUsername(user1);
await isar.user.where().findAll(); // -> [{id: 1, username: 'user1', age: 25}]

final user2 = User()
  ..id = 2;
  ..username = 'user1'
  ..age = 30;

await isar.users.put(user2);
await isar.user.where().findAll(); // -> [{id: 1, username: 'user1' age: 30}]
```

Wie du sehen kannst, wird die ID des zuerst eingefügten Benutzers wiederverwendet.

## Indizes ohne Berücksichtigung auf Groß-/Kleinschreibung

Alle Indizes auf `String`- und `List<String>`-Eigenschaften beachten standardmäßig die Groß-/Kleinschreibung. Wenn du einen Index erstellen willst, der die Groß-/Kleinschreibung nicht berücksichtigt, kannst du die `caseSensitive`-Option verwenden:

```dart
@collection
class Person {
  Id? id;

  @Index(caseSensitive: false)
  late String name;

  @Index(caseSensitive: false)
  late List<String> tags;
}
```

## Index-Typen

Es gibt verschiedene Typen von Indizes. Meistens wirst du einen `IndexType.value`-Index verwenden wollen, aber Hash-Indizes sind effizienter.

### Wert-Index

Wert-Indizes sind der Standardtyp und der Einzige, der für alle Eigenschaften erlaubt ist, die nicht Strings oder Listen enthalten. Eigenschaftswerte werden verwendet, um den Index zu erstellen. Im Fall von Listen, werden die Elemente der Liste verwendet. Es ist der flexibelste, aber auch platzraubendste der drei Index-Typen.

:::tip
Benutze `IndexType.value` für Primitives, Strings, wenn du `startsWith()`-Where-Klauseln brauchst, und Listen, wenn du nach einzelnen Elementen suchst.
:::

### Hash-Index

Strings und Listen können gehasht werden um den für den Index benötigten Speicher drastisch zu verringern. Der Nachteil eines Hash-Indexes ist, dass sie nicht für Präfixsuchen (`startsWith()`-Where-Klauseln) verwendet werden können.

:::tip
Verwende `IndexType.hash` für Strings und Listen, wenn du die `startsWith`- und `elementEqualTo`-Where-Klauseln nicht benötigst.
:::

### HashElements-Index

Stringlisten können als Ganzes gehasht werden (indem man `IndexType.hash` verwendet) oder die Elemente der Liste können seperat gehasht werden (indem man `IndexType.hashElements` nutzt) wodurch ein Mehreintragsindex mit gehashten Elementen erzeugt wird.

:::tip
Nutze `IndexType.hashElements` für `List<String>` bei denen du `elementEqualTo`-Where-Klauseln benötigst.
:::

## Komposit-Indizes

Ein Komposit-Index ist ein Index auf mehrere Eigenschaften. Isar erlaubt es dir zusammengesetzte Indizes mit bis zu drei Eigenschaften zu erstellen.

Komposit-Indizes sind auch als Mehr-Spalten-Indizes bekannt.

Es ist vermutlich am besten mit einem Beispiel zu starten. Wir erstellen eine Personen-Collection und definieren einen zusammengesetzten Index auf die Alters- und Namenseigenschaften:

```dart
@collection
class Person {
  Id? id;

  late String name;

  @Index(composite: [CompositeIndex('name')])
  late int age;

  late String hometown;
}
```

**Daten:**

| id  | name   | age | hometown  |
| --- | ------ | --- | --------- |
| 1   | Daniel | 20  | Berlin    |
| 2   | Anne   | 20  | Paris     |
| 3   | Carl   | 24  | San Diego |
| 4   | Simon  | 24  | Munich    |
| 5   | David  | 20  | New York  |
| 6   | Carl   | 24  | London    |
| 7   | Audrey | 30  | Prague    |
| 8   | Anne   | 24  | Paris     |

**Generierter Index:**

| age | name   | id  |
| --- | ------ | --- |
| 20  | Anne   | 2   |
| 20  | Daniel | 1   |
| 20  | David  | 5   |
| 24  | Anne   | 8   |
| 24  | Carl   | 3   |
| 24  | Carl   | 6   |
| 24  | Simon  | 4   |
| 30  | Audrey | 7   |

Der generierte zusammengesetzte Index enthält alle Personen sortiert nach ihrem Alter und ihrem Namen.

Komposit-Indizes sind super, wenn du effiziente Abfragen, sortiert nach mehreren Eigenschaften, stellen willst. Sie erlauben auch anspruchsvolle Where-Klauseln mit mehreren Eigenschaften:

```dart
final result = await isar.where()
  .ageNameEqualTo(24, 'Carl')
  .hometownProperty()
  .findAll() // -> ['San Diego', 'London']
```

Die letzte Eigenschaft eines zusammengesetzten Index unterstützt auch Bedingungen wie `startsWith()` oder `lessThan()`:

```dart
final result = await isar.where()
  .ageEqualToNameStartsWith(20, 'Da')
  .findAll() // -> [Daniel, David]
```

## Mehrfach-Indizes

Wenn du eine Liste mit `IndexType.value` indizierst, wird Isar automatische einen Mehrfach-Index erzeugen und jeder Eintrag in der Liste wird mit dem Objekt indiziert. Das funktioniert für alle Listentypen.

Zu sinnvollen Anwendungen für Mehrfach-Indizes zählen das Indizieren einer Liste an Tags oder einen Volltext-Index zu erstellen.

```dart
@collection
class Product {
  Id? id;

  late String description;

  @Index(type: IndexType.value, caseSensitive: false)
  List<String> get descriptionWords => Isar.splitWords(description);
}
```

`Isar.splitWords()` trennt einen String nach der [Unicode Annex #29](https://unicode.org/reports/tr29/)-Spezifikation in Worte, sodass es für fast alle Sprachen richtig funktioniert.

**Daten:**

| id  | description                  | descriptionWords             |
| --- | ---------------------------- | ---------------------------- |
| 1   | comfortable blue t-shirt     | [comfortable, blue, t-shirt] |
| 2   | comfortable, red pullover!!! | [comfortable, red, pullover] |
| 3   | plain red t-shirt            | [plain, red, t-shirt]        |
| 4   | red necktie (super red)      | [red, necktie, super, red]   |

Einträge mit doppelten Worten tauchen nur einmal im Index auf.

**Generierter Index:**

| descriptionWords | id        |
| ---------------- | --------- |
| comfortable      | [1, 2]    |
| blue             | 1         |
| necktie          | 4         |
| plain            | 3         |
| pullover         | 2         |
| red              | [2, 3, 4] |
| super            | 4         |
| t-shirt          | [1, 3]    |

Dieser Index kann nun für (Gleichheits- oder) Präfix-Where-Klauseln der individuellen Worte der Beschreibung verwendet werden.

:::tip
Statt Worte direkt zu speichern kannst du auch in Betracht ziehen das Ergebnis einer [Phonetischen Suche](https://de.wikipedia.org/wiki/Phonetische_Suche) wie von dem Algorithmus [Soundex](https://de.wikipedia.org/wiki/Soundex) zu verwenden.
:::


================================================
FILE: docs/docs/de/limitations.md
================================================
---
title: Limitationen
---

# Limitationen

Wie du weißt, funktioniert Isar auf Mobilgeräten und Desktops und läuft sowohl auf der VM, als auch im Web. Die beiden Plattformen sind sehr verschieden und haben unterschiedliche Limitationen.

## VM Limitationen

- Nur die ersten 1024 Bytes eines Strings können für eine Präfix-Where-Klausel verwendet werden
- Objekte können höchstens 16MB groß sein

## Web Limitationen

Weil Isar Web auf IndexedDB beruht, gibt es dort mehr Limitationen, aber sie sind kaum zu merken, während du Isar benutzt.

- Synchrone Methoden werden nicht unterstützt
- Zurzeit sind die `Isar.splitWords()`- und `.matches()`-Filter noch nicht implementiert
- Schemaänderungen werden nicht so genau wie in der VM überprüft, also achte darauf die Regeln einzuhalten
- Alle Zahlen-Typen werden als Double (dem einzigen JS Zahlen-Typ) gespeichert, also hat `@Size32` keine Wirkung
- Indizes werden anders dargestellt, wodurch Hash-Indizes nicht weniger Platz benötigen (auch wenn sie gleich funktionieren)
- `col.delete()` und `col.deleteAll()` funktionieren korrekt, aber der Rückgabewert ist nicht richtig
- `col.clear()` setzt den auto-increment-Wert nicht zurück
- `NaN` wird als Wert nicht unterstützt


================================================
FILE: docs/docs/de/links.md
================================================
---
title: Links
---

# Links

Links ermöglichen es dir Verhältnisse zwischen Objekten, wie z.B. dem Autor (Benutzer) eines Kommentars, auszudrücken. Du kannst `1:1`, `1:n`, `n:m` Verhältnisse mit Isar-Links modellieren. Links zu nutzen ist unpraktischer als eingebettete Objekte zu benutzen, und du solltest eingebettete Objekte, wann immer möglich, verwenden.

Stell dir den Link wie eine separate Tabelle vor, die die Beziehung enthält. Links ähneln SQL-Beziehungen, haben aber einen anderen Funktionsumfang und eine andere API.

## IsarLink

`IsarLink<T>` kann keines oder ein zugehöriges Objekt enthalten und kann genutzt werden um eine zu-einem-Relation darzustellen. `IsarLink` hat eine einzige Eigenschaft genannt `value`, die das verlinkte Objekt enthält.

Links sind lazy, also musst du dem `IsarLink` explizit sagen den `value` zu Laden oder zu Speichern. Das kannst du erreichen, indem du `linkProperty.load()` und `linkProperty.save()` aufrufst.

:::tip
Die ID-Eigenschaft der Quell- und Ziel-Collections sollte nicht-final sein.
:::

Für nicht-Web-Ziele werden Links automatisch geladen, wenn du sie zum ersten Mal verwendest. Fangen wir damit an einen IsarLink zu einer Collection hinzuzufügen:

```dart
@collection
class Teacher {
  Id? id;

  late String subject;
}

@collection
class Student {
  Id? id;

  late String name;

  final teacher = IsarLink<Teacher>();
}
```

Wir haben einen Link zwischen Lehrern und Schülern definiert. Jeder Schüler kann in diesem Beispiel genau einen Lehrer haben.

Zuerst legen wir einen Lehrer an und fügen ihn dann einem Schüler hinzu. Wir müssen den Lehrer mit der `.put()`-Methode einfügen und den Link manuell speichern.

```dart
final mathTeacher = Teacher()..subject = 'Math';

final linda = Student()
  ..name = 'Linda'
  ..teacher.value = mathTeacher;

await isar.writeTxn(() async {
  await isar.students.put(linda);
  await isar.teachers.put(mathTeacher);
  await linda.teachers.save();
});
```

Wir können den Link jetzt nutzen:

```dart
final linda = await isar.students.where().nameEqualTo('Linda').findFirst();

final teacher = linda.teacher.value; // > Teacher(subject: 'Math')
```

Versuchen wir das gleiche mit synchronem Code. Wir brauchen den Link nicht manuell zu speichern, weil `.putSync()` automatisch alle Links speichert. Es erzeugt sogar den Lehrer für uns.

```dart
final englishTeacher = Teacher()..subject = 'English';

final david = Student()
  ..name = 'David'
  ..teacher.value = englishTeacher;

isar.writeTxnSync(() {
  isar.students.putSync(david);
});
```

## IsarLinks

Es würde mehr Sinn ergeben, wenn der Schüler aus dem vorherigen Beispiel mehrere Lehrer haben kann. Glücklicherweise hat Isar `IsarLinks<T>`, was mehrere zugehörige Objekte beinhalten kann und eine zu-vielen-Relation ausdrückt.

`IsarLinks<T>` wird von `Set<T>` erweitert und stellt alle Methoden die auf Sets angewandt werden können zur Verfügung.

`IsarLinks` verhält sich ähnlich wie `IsarLink` und ist auch lazy. Um alle verlinkten Objekte zu laden, musst du die Methode `linkProperty.load()` aufrufen. Um die Änderungen persistent zu machen, musst du `linkProperty.save()` aufrufen.

Intern werden `IsarLink` und `IsarLinks` auf die gleiche Weise dargestellt. Wir können den `IsarLink<Teacher>` von vorher zu einem `IsarLinks<Teacher>` ausbauen, um mehrere Lehrer einem einzelnen Schüler zuzuweisen (ohne Daten zu verlieren).

```dart
@collection
class Student {
  Id? id;

  late String name;

  final teacher = IsarLinks<Teacher>();
}
```

Das funktioniert, weil wir den Namen des Links (`teacher`) nicht verändert haben, weshalb sich Isar von vorher daran erinnert.

```dart
final biologyTeacher = Teacher()..subject = 'Biology';

final linda = isar.students.where()
  .filter()
  .nameEqualTo('Linda')
  .findFirst();

print(linda.teachers); // {Teacher('Math')}

linda.teachers.add(biologyTeacher);

await isar.writeTxn(() async {
  await linda.teachers.save();
});

print(linda.teachers); // {Teacher('Math'), Teacher('Biology')}
```

## Rückverlinkungen

Ich höre dich schon, "Was, wenn wir umgekehrte Relationen ausdrücken möchten?", fragen. Mach dir keine Sorgen; wir führen jetzt Rückverlinkungen ein.

Rückverlinkungen sind Links in umgekerhrter Richtung. Jeder Link hat implizit immer eine Rückverlinkung. Du kannst sie in deiner App verfügbar machen, indem du `IsarLink` oder `IsarLinks` mit `@Backlink()` annotierst.

Rückverlinkungen benötigen keinen zusätzlichen Speicher oder Ressourcen; du kannst sie frei hinzufügen, löschen und umbenennen, ohne Daten zu verlieren.

Wir wollen wissen, welche Schüler ein spezifischer Lehrer hat, also definieren wir eine Rückverlinkung:

```dart
@collection
class Teacher {
  Id id;

  late String subject;

  @Backlink(to: 'teacher')
  final student = IsarLinks<Student>();
}
```

Wir müssen angeben, auf welchen Link die Rückverlinkung zeigt. Es ist möglich, mehrere verschiedene Links zwischen zwei Objekten zu haben.

## Links initialisieren

`IsarLink` und `IsarLinks` haben Konstruktoren ohne Argumente und sollten verwendet werden um die Link-Eigenschaft anzugeben, wenn das Objekt erstellt wird. Es hat sich bewährt Link-Eigenschaften `final` zu setzen.

Wenn du dein Objekt zum ersten Mal mit der `put()`-Methode speicherst, wird der Link mit Quell- und Ziel-Collection initialisiert und du kannst Methoden wie `load()` und `save()` benutzen. Ein Link fängt sofort an Änderungen zu verfolgen, nachdem er erzeugt wurde, sodass du Relationen sogar anlegen oder entfernen kannst, bevor der Link initialisiert wurde.

:::danger
Es ist verboten einen Link zu einem anderen Objekt zu übertragen.
:::


================================================
FILE: docs/docs/de/queries.md
================================================
---
title: Abfragen
---

# Abfragen

Mit Abfragen kannst du Einträge finden, die bestimmten Bedingungen entsprechen, zum Beispiel:

- Finde alle markierten Kontakte
- Finde eindeutige Vornamen in den Kontakten
- Lösche alle Kontakte, die keinen Nachnamen definiert haben

Weil Abfragen nicht in Dart, sondern auf der Datenbank ausgeführt werden, sind sie sehr schnell. Wenn du Indizes sinnvoll benutzt, kannst du deine Abfrageleistung sogar weiter steigern. Als nächstes lernst du, wie man Abfragen schreibt und wie du sie so schnell wie möglich machen kannst.

Es gibt zwei verschiedene Methoden um Einträge zu filtern: Filter und Where-Klauseln. Wir beginnen indem wir uns die Funktionsweise von Filtern ansehen.

## Filter

Filter sind leicht zu benutzen und zu verstehen. Abhängig von den Typen deiner Eigenschaften gibt es verschiedene verfügbare Filteroperationen mit größtenteils selbsterklärenden Namen.

Filter funktionieren, indem sie einen Ausdruck für jedes Objekt der zu filternden Collection auswerten. Wenn der Ausdruck `true` ergibt, fügt Isar das Objekt zu den Ergebnissen hinzu.
Filter haben keinen Einfluss auf die Reihenfolge der Ergebnisse.

Wir benutzen das folgende Modell für die Beispiele weiter unten:

```dart
@collection
class Shoe {
  Id? id;

  int? size;

  late String model;

  late bool isUnisex;
}
```

### Abfragebedingungen

Abhängig vom Feld-Typen gibt es verschiedene mögliche Bedingungen.

| Bedingung                | Beschreibung                                                                                                                                        |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.equalTo(value)`        | Trifft auf Werte zu, die mit dem angegebenen `value` übereinstimmen.                                                                                |
| `.between(lower, upper)` | Trifft auf Werte zu, die zwischen `lower` und `upper` liegen.                                                                                       |
| `.greaterThan(bound)`    | Trifft auf Werte zu, de größer als `bound` sind.                                                                                                    |
| `.lessThan(bound)`       | Trifft auf Werte zu, die kleiner als `bound` sind. `null`-Werte werden eingeschlossen, da `null` als kleiner als jeder andere Wert betrachtet wird. |
| `.isNull()`              | Trifft auf Werte zu, die `null` sind.                                                                                                               |
| `.isNotNull()`           | Trifft auf Werte zu, die nicht `null` sind.                                                                                                         |
| `.length()`              | Abfragen nach Längen von Listen, Strings und Links filtern Objekte basierend auf der Anzahl der Elemente in einer Liste oder in einem Link.         |

Nehmen wir an, dass die Datenbank vier Schuhe mit den Gößen 39, 40, 46 und einen mit einer nicht festgelegten Größe (`null`) hat. Wenn du keine Sortierung durchführst, werden die Werte nach ID geordnet zurückgegeben.

```dart

isar.shoes.filter()
  .sizeLessThan(40)
  .findAll() // -> [39, null]

isar.shoes.filter()
  .sizeLessThan(40, include: true)
  .findAll() // -> [39, null, 40]

isar.shoes.filter()
  .sizeBetween(39, 46, includeLower: false)
  .findAll() // -> [40, 46]

```

### Logische Operatoren

Du kannst Bedingungen verbinden, indem du die folgenden logischen Operatoren verwendest:

| Operator   | Beschreibung                                                                         |
| ---------- | ------------------------------------------------------------------------------------ |
| `.and()`   | Ergibt `true`, wenn von linkem und rechtem Ausdruck beide `true` ergeben.            |
| `.or()`    | Ergibt `true`, wenn mindestens einer von beiden Ausdrücken `true` ergibt.            |
| `.xor()`   | Ergibt `true`, wenn genau einer von beiden Ausdrücken `true` ergibt.                 |
| `.not()`   | Negiert das Ergebnis des nachfolgenden Ausdrucks.                                    |
| `.group()` | Gruppiert Bedingungen und ermöglicht es eine Reihenfolge der Auswertung festzulegen. |

Wenn du alle Schuhe mit der Größe 46 finden möchstest, kannst du die folgende Abfrage verwenden:

```dart
final result = await isar.shoes.filter()
  .sizeEqualTo(46)
  .findAll();
```

Wenn du mehr als eine Bedingung angeben möchtest, kannst du mehrere Filter verbinden, indem du sie mit logischem **und** `.and()`, logischem **oder** `.or()` oder logischem **exklusiven oder** `.xor()` verbindest.

```dart
final result = await isar.shoes.filter()
  .sizeEqualTo(46)
  .and() // Optional. Filter werden implizit mit einem logischen UND verbunden.
  .isUnisexEqualTo(true)
  .findAll();
```

Diese Abfrage ist äquivalent zu: `size == 46 && isUnisex == true`.

Du kannst auch Bedingungen gruppieren, indem du `.group()` benutzt:

```dart
final result = await isar.shoes.filter()
  .sizeBetween(43, 46)
  .and()
  .group((q) => q
    .modelNameContains('Nike')
    .or()
    .isUnisexEqualTo(false)
  )
  .findAll()
```

Diese Abfrage ist äquivalent zu: `size >= 43 && size <= 46 && (modelName.contains('Nike') || isUnisex == false)`.

Um eine Bedingung oder Gruppe zu negieren kannst du das logische **oder** `.not()` verwenden:

```dart
final result = await isar.shoes.filter()
  .not().sizeEqualTo(46)
  .and()
  .not().isUnisexEqualTo(true)
  .findAll();
```

Diese Abfrage ist äquivalent zu: `size != 46 && isUnisex != true`.

### String-Bedingungen

Zusätzlich zu den vorher genannten Abfragebedingungen, bieten String-Werte ein paar mehr Bedingungen. Platzhalter, ähnlich zu beispielsweise Regex, erlauben mehr Flexibilität beim Suchen.

| Bedingung            | Beschreibung                                                                   |
| -------------------- | ------------------------------------------------------------------------------ |
| `.startsWith(value)` | Trifft auf String-Werte zu, die mit dem angegebenen `value` beginnen.          |
| `.contains(value)`   | Trifft auf String-Werte zu, die das angegebene `value` enthalten.              |
| `.endsWith(value)`   | Trifft auf String-Werte zu, die mit dem angegebenen `value` enden.             |
| `.matches(wildcard)` | Trifft auf String-Werte zu, die dem angegebenen `wildcard`-Muster entsprechen. |

**Groß-/Kleinschreibung**  
Alle String-Operationen haben eine optionale `caseSensitive`-Eigenschaft, die standardmäßig `true` ist.

**Platzhalter**  
Der [Ausdruck eines Platzhalter-Strings](https://de.wikipedia.org/wiki/Wildcard_(Informatik)) ist ein String, der normale Zeichen mit zwei speziellen Platzhalter-Zeichen verwendet:

- Der `*` Platzhalter trifft auf keines oder mehr von jedem Zeichen zu.
- Der `?` Platzhalter trifft auf jedes Einzelzeichen zu.  
  Zum Beispiel trifft der Platzhalter-String `"d?g"` auf `"dog"`, `"dig"` und `"dug"` zu, nicht aber auf `"ding"`, `"dg"` oder `"a dog"`.

### Abfragemodifikatoren

Manchmal ist es notwendig eine Abfrage auf Bedingungen aufzubauen oder für verschiedene Werte zu bauen. Isar hat ein sehr mächtiges Werkzeug um bedingte Abfragen zu bauen:

| Modifikator           | Beschreibung                                                                                                                                                                                      |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `.optional(cond, qb)` | Erweitert die Abfrage nur, wenn die Bedingung `cond`, `true` ist. Das kann fast überall in einer Abfrage verwendet werden, beispielsweise um sie über eine Bedingung zu sortieren oder begrenzen. |
| `.anyOf(list, qb)`    | Erweitert die Abfrage für jeden Wert in `values` und verbindet die Bedingungen mit einem logischen **oder**.                                                                                      |
| `.allOf(list, qb)`    | Erweitert die Abfrage für jeden Wert in `values` und verbindet die Bedingungen mit einem logischen **und**.                                                                                       |

In diesem Beispiel bauen wir eine Methode, die Schuhe mit einem optionale Filter finden kann:

```dart
Future<List<Shoe>> findShoes(Id? sizeFilter) {
  return isar.shoes.filter()
    .optional(
      sizeFilter != null, // Wendet den Filter nur an, wenn sizeFilter != null ist
      (q) => q.sizeEqualTo(sizeFilter!),
    ).findAll();
}
```

Wenn du alle Schuhe finden möchtest, die eine von mehreren Schuhgrößen haben, kannst du entweder eine konventionelle Abfrage schreiben oder den `anyOf()` Modifikator verwenden:

```dart
final shoes1 = await isar.shoes.filter()
  .sizeEqualTo(38)
  .or()
  .sizeEqualTo(40)
  .or()
  .sizeEqualTo(42)
  .findAll();

final shoes2 = await isar.shoes.filter()
  .anyOf(
    [38, 40, 42],
    (q, int size) => q.sizeEqualTo(size)
  ).findAll();

// shoes1 == shoes2
```

Abfragemodifikatoren sind besonders dann sinnvoll, wenn du dynamische Abfragen bauen möchtest.

### Listen

Abfragen können sogar auf Listen gestellt werden:

```dart
class Tweet {
  Id? id;

  String? text;

  List<String> hashtags = [];
}
```

Du kannst eine Abfrage auf Basis der Listenlänge bauen:

```dart
final tweetsWithoutHashtags = await isar.tweets.filter()
  .hashtagsIsEmpty()
  .findAll();

final tweetsWithManyHashtags = await isar.tweets.filter()
  .hashtagsLengthGreaterThan(5)
  .findAll();
```

Diese sind äquivalent zu dem Dart-Code `tweets.where((t) => t.hashtags.isEmpty);` und `tweets.where((t) => t.hashtags.length > 5);`. Du kannst auch Abfragen basierend auf Listenelementen stellen:

```dart
final flutterTweets = await isar.tweets.filter()
  .hashtagsElementEqualTo('flutter')
  .findAll();
```

Das ist äquivalent zum Dart-Code `tweets.where((t) => t.hashtags.contains('flutter'));`.

### Eingebettete Objekte

Eingebettete Objekte sind eines von Isars nützlichsten Features. Sie können sehr einfach abgefragt werden mit gleichen Bedingungen für Objekte der obersten Ebene. Nehmen wir an, dass wir das folgende Modell haben:

```dart
@collection
class Car {
  Id? id;

  Brand? brand;
}

@embedded
class Brand {
  String? name;

  String? country;
}
```

Wir wollen alle Autos abfragen, die eine Marke mit dem Namen `"BMW"` und dem Land `"Germany"` haben. Wir können das mit der folgenden Abfrage erreichen:

```dart
final germanCars = await isar.cars.filter()
  .brand((q) => q
    .nameEqualTo('BMW')
    .and()
    .countryEqualTo('Germany')
  ).findAll();
```

Versuche immer verschachtelte Abfragen zu gruppieren. Die vorherige Abfrage ist effizienter als die folgende, auch wenn das Ergebnis gleich ist:

```dart
final germanCars = await isar.cars.filter()
  .brand((q) => q.nameEqualTo('BMW'))
  .and()
  .brand((q) => q.countryEqualTo('Germany'))
  .findAll();
```

### Links

Wenn dein Modell [Links oder Rückverlinkungen](links) enthält, kannst du deine Abfrage auf Basis der verlinkten Objekte oder der Anzahl an verlinkten Objekten filtern.

:::warning
Beachte, dass Link-Abfragen teuer sein können, weil Isar die verlinkten Objekte abrufen muss. Versuche stattdessen eingebettete Objekte zu verwenden.
:::

```dart
@collection
class Teacher {
  Id? id;

  late String subject;
}

@collection
class Student {
  Id? id;

  late String name;

  final teachers = IsarLinks<Teacher>();
}
```

Wir wollen alle Schüler finden, die einen Mathe- oder Englischlehrer haben:

```dart
final result = await isar.students.filter()
  .teachers((q) {
    return q.subjectEqualTo('Math')
      .or()
      .subjectEqualTo('English');
  }).findAll();
```

Link-Filter resultieren in `true`, wenn mindestens eines der verlinkten Objekte den Bedingungen entspricht.

Suchen wir nach allen Schülern, die keine Lehrer haben:

```dart
final result = await isar.students.filter().teachersLengthEqualTo(0).findAll();
```

oder alternativ:

```dart
final result = await isar.students.filter().teachersIsEmpty().findAll();
```

## Where-Klauseln

Where-Klauseln sind eine sehr mächtiges Werkzeug, aber es kann ein bisschen herausfordernd sein sie zu meistern.

Im Gegensatz zu Filtern nutzen Where-Klauseln die Indizes, die du im Schema definiert hast, um die Abfragebedingungen zu überprüfen. Einen Index abzufragen ist deutlich schneller als jeden Eintrag einzeln zu filtern.

➡️ Lerne mehr: [Indizes](indexes)

:::tip
Als eine einfache Regel solltest du immer versuchen die Einträge so weit wie möglich mit Where-Klauseln einzugrenzen und das restliche Filtern mit Filtern machen.
:::

Du kannst Where-Klauseln nur mit logischem **oder** verbinden. In anderen Worten, kannst du mehrere Where-Klauseln zusammenfügen, aber nicht die Überschneidung mehrerer Where-Klauseln abfragen.

Lass uns Indizes zu der Schuh-Collection hinzufügen:

```dart
@collection
class Shoe with IsarObject {
  Id? id;

  @Index()
  Id? size;

  late String model;

  @Index(composite: [CompositeIndex('size')])
  late bool isUnisex;
}
```

Hier gibt es zwei Indizes. Der Index auf `size` erlaubt es uns Where-Klauseln wie `.sizeEqualTo()` zu verwenden. Der zusammengesetzte Index auf `isUnisex` erlaubt es uns Where-Klauseln wie `.isUnisexSizeEqualTo()` zu nutzen. Aber auch `.isUnisexEqualTo()` ist möglich, weil du immer jedes Präfix eines Indexes benutzen kannst.

Wir können unsere Abfrage von vorher, die Unisex-Schuhe der Größe 46 findet, also mithilfe des zusammengesetzten Indexes umschreiben. Diese Abfrage sollte deutlich schneller sein, als die vorherige:

```dart
final result = isar.shoes.where()
  .isUnisexSizeEqualTo(true, 46)
  .findAll();
```

Where-Klauseln haben zwei weitere Superkräfte: Sie geben dir "kostenloses" Sortieren und eine superschnelle Eindeutigkeitsoperation.

### Where-Klauseln und Filter verbinden

Erinnerst du dich an die `shoes.filter()`-Abfragen? Das ist in Wirklichkeit nur eine Kurzform für `shoes.where().filter()`. Du kannst (und solltest) Where-Klauseln und Filter in der gleichen Abfrage verbinden, um die Vorteile beider zu nutzen:

```dart
final result = isar.shoes.where()
  .isUnisexEqualTo(true)
  .filter()
  .modelContains('Nike')
  .findAll();
```

Die Where-Klausel wird zuerst angewendet, um die Anzahl an Objekten, die gefiltert werden müssen, zu reduzieren. Dann wird der Filter auf die übrig gebliebenen Objekte angewendet.

## Sortierung

Du kannst definieren, wie Ergebnisse deiner Abfrage sortiert werden sollen, indem du die Methoden `.sortBy()`, `.sortByDesc()`, `.thenBy()` und `.thenByDesc()` nutzt.

Um alle Schuhe nach Modellnamen in aufsteigender und nach der Größe in absteigender Reihenfolge sortiert zu bekommen, ohne einen Index zu benutzen, aknnst du die folgende Abfrage stellen:

```dart
final sortedShoes = isar.shoes.filter()
  .sortByModel()
  .thenBySizeDesc()
  .findAll();
```

Viele Ergebnisse zu sortieren kann teuer sein, besonders, weil das Sortieren vor dem Offset und vor der Limitierung stattfindet. Die Sortiermethoden benutzen niemals Indizes. Glücklicherweise können wir wieder Sortierung mit Where-Klauseln verwenden und so unsere Abfrage blitzschnell machen, auch wenn wir eine Million Objekte sortieren müssen.

### Sortierung mit Where-Klauseln

Wenn du eine **einzige** Where-Klausel in deiner Abfrage nutzt, sind die Ergebnisse schon nach dem Index sortiert. Das ist eine große Sache!

Nehmen wir an, wir haben Schuhe in den Größen `[43, 39, 48, 40, 42, 45]` und wir wollen alle Schuhe mit einer Größe größer als `42` haben und sie auch nach Größe sortiert haben:

```dart
final bigShoes = isar.shoes.where()
  .sizeGreaterThan(42) // Sortiert die Ergebnisse auch nach Größe
  .findAll(); // -> [43, 45, 48]
```

Wie du sehen kannst, sind die Ergebnisse nach dem `size`-Index sortiert. Wenn du die Reihenfolge der Where-Klausel umkehren möchtest, kannst du `sort` auf `Sort.desc` setzen:

```dart
final bigShoesDesc = await isar.shoes.where(sort: Sort.desc)
  .sizeGreaterThan(42)
  .findAll(); // -> [48, 45, 43]
```

Manchmal willst du keine Where-Klausel verwenden, aber trotzdem von der impliziten Sortierung profitieren. Dann kannst du die Where-Klausel `any` verwenden:

```dart
final shoes = await isar.shoes.where()
  .anySize()
  .findAll(); // -> [39, 40, 42, 43, 45, 48]
```

Wenn du einen Komposit-Index verwendest, werden die Ergebnisse nach allen Feldern des Indexes sortiert.

:::tip
Für den Fall, dass deine Ergebnisse sortiert sein müssen, versuche einen Index zu benutzen. Besonders wenn du mit `offset()` oder `limit()` arbeitest:
:::

Manchmal ist es nicht möglich oder sinnvoll einen Index zum Sortieren zu nutzen. Für solche Fälle solltest du Indizes benutzen, um zumindest die Anzahl an zu sortierenden Einträgen so weit wie möglich einzugrenzen.

## Eindeutige Werte

Um nur Einträge mit eindeutigen Werten zurückzubekommen, kannst du das Unterscheidbarkeitsprädikat verwenden. Zum Beispiel, um herauszufinden, wie viele unterscheidbare Schuhmodelle es in deiner Isar-Datenbank gibt:

```dart
final shoes = await isar.shoes.filter()
  .distinctByModel()
  .findAll();
```

Du kannst auch mehrere Unterscheidbarkeitsbedingungen verketten, um alle Schuhe mit unterscheidbaren Modell-Größe-Kombinationen zu finden:

```dart
final shoes = await isar.shoes.filter()
  .distinctByModel()
  .distinctBySize()
  .findAll();
```

Nur das erste Ergebnis jeder Unterscheidbarkeitskombination wird zurückgegeben. Um das zu überprüfen kannst du Where-Klauseln und Sortieroperationen verwenden.

### Unterscheidbare Where-Klauseln

Wenn du einen nicht eindeutigen Index hast, kann es sein, dass du alle seine unterscheidbaren Werte haben möchtest. Du könntest die `distinctBy`-Operation des vorherigen Abschnitts verwenden, aber sie wird erst nach dem Sortieren und Filtern angewandt, sodass ein bisschen Overhead entsteht.
Wenn du nur eine einzelne Where-Klausel verwendest, kannst du stattdessen dem Index vertrauen die Unterscheidbarkeitsoperation durchzuführen.

```dart
final shoes = await isar.shoes.where(distinct: true)
  .anySize()
  .findAll();
```

:::tip
Theoretisch könntest du sogar mehrere Where-Klauseln für Sortierung und Unterscheidbarkeit nutzen. Die einzige Einschränkung besteht darin, dass sich diese Where-Klauseln nicht überschneiden, also nicht denselben Index verwenden dürfen. Für die richtige Sortierung müssen sie auch in Sortierreihenfolge angewandt werden. Sei sehr vorsichtig, wenn du dich darauf verlässt.
:::

## Offset & Limitierung

Es ist oft eine gute Idee die Anzahl an Ergebnissen einer Abfrage zu beschränken, für beispielsweise lazy Listenansichten. Du kannst das erreichen, indem du ein `limit()` setzt:

```dart
final firstTenShoes = await isar.shoes.where()
  .limit(10)
  .findAll();
```

Indem du ein `offset()` setzt, kannst du die Ergebnisse deiner Abfrage in mehrere Auflistungen aufteilen.

```dart
final firstTenShoes = await isar.shoes.where()
  .offset(20)
  .limit(10)
  .findAll();
```

Weil das instanziieren eines Dart-Objekts meistens der teuerste Teil beim Ausführen einer Abfrage ist, ist es eine gute Idee nur die Objekte zu laden, die du benötigst.

## Reihenfolge der Ausführung

Isar führt Abfragen immer in der gleichen Reihenfolge aus:

1. Primär- oder Sekundärindex durchlaufen, um Objekte zu finden (Where-Klauseln anwenden)
2. Objekte filtern
3. Ergebnisse sortieren
4. Unterscheidbarkeitsoperation durchführen
5. Offset & Limit auf Ergebnisse anwenden
6. Ergebnisse zurückgeben

## Abfrageoperationen

In den vorangegangenen Beispielen haben wir `.findAll()` verwendet, um alle passenden Objekte zu erhalten. Es sind jedoch mehr Operationen verfügbar:

| Operation        | Beschreibung                                                                                                                                           |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `.findFirst()`   | Erhalte nur das erste passende Objekt oder `null` wenn kein passendes gefunden wird.                                                                   |
| `.findAll()`     | Erhalte alle passenden Objekte.                                                                                                                        |
| `.count()`       | Zählt, wieviele Objekte der Abfrage entsprechen.                                                                                                       |
| `.deleteFirst()` | Löscht das erste passende Objekt aus der Collection.                                                                                                   |
| `.deleteAll()`   | Löscht alle passenden Objekte aus der Collection.                                                                                                      |
| `.build()`       | Konstruiert eine Abfrage um sie später wiederzuverwenden. Das erspart die Kosten, eine Abfrage erneut zu bauen, wenn du sie mehrfach ausführen willst. |

## Abfragen auf Eigenschaften

Wenn du nur an den Werten einer bestimmten Eigenschaft interessiert bist, kannst du Abfragen auf Eigenschaften machen. Baue einfach eine normale Abfrage und wähle eine Eigenschaft:

```dart
List<String> models = await isar.shoes.where()
  .modelProperty()
  .findAll();

List<int> sizes = await isar.shoes.where()
  .sizeProperty()
  .findAll();
```

Nur eine einzige Eigenschaft zu nutzen erspart Zeit bei der Deserialisierung. Abfragen auf Eigenschaften funktionieren auch bei eingebetteten Objekten und Listen.

## Aggregation

Isar unterstützt die Aggregation der Werte einer Abfrage auf Eigenschaften. Die folgenden Aggregatoroperationen sind verfügbar:

| Operation    | Beschreibung                                                         |
| ------------ | -------------------------------------------------------------------- |
| `.min()`     | Findet den minimalen Wert oder `null`, wenn keiner passt.            |
| `.max()`     | Findet den maximalen Wert oder `null`, wenn keiner passt.            |
| `.sum()`     | Addiert alle Werte.                                                  |
| `.average()` | Berechnet den Durchschnitt aller Werte oder `NaN` wenn keiner passt. |

Aggregatoren zu nutzen ist deutlich schneller, als alle passenden Objekte zu finden und die Aggregation manuell durchzuführen.

## Dynamische Abfragen

:::danger
Dieser Abschnitt ist höchstwahrscheinlich nicht wichtig für dich. Es ist davon abzuraten dynamische Abfragen zu nutzen, es sei denn du benötigst sie wirklich (was selten vorkommt).
:::

Alle der vorherigen Beispiele haben den QueryBuilder und seine statischen Erweiterungsmethoden genutzt. Vielleicht möchtest du dynamische Abfragen oder eine benutzerdefinierte Abfragesprache (wie den Isar Inspektor) bauen. In dem Fall kannst du die Methode `buildQuery()` verwenden:

| Parameter       | Beschreibung                                                                                               |
| --------------- | ---------------------------------------------------------------------------------------------------------- |
| `whereClauses`  | Die Where-Klauseln der Abfrage.                                                                            |
| `whereDistinct` | Ob Where-Klauseln nur unterscheidbare Werte zurückgeben sollen (nur sinnvoll für einzelne Where-Klauseln). |
| `whereSort`     | Die Durchlaufreihenfolge der Where-Klauseln (nur sinnvoll für einzelne Where-Klauseln).                    |
| `filter`        | Die Filter, die auf die Ergebnisse angewendet werden sollen.                                               |
| `sortBy`        | Eine Liste an Eigenschaften nach denen sortiert werden soll.                                               |
| `distinctBy`    | Eine Liste an Eigenschaften, an denen die Unterscheidbarkeit festgemacht wird.                             |
| `offset`        | Der Offset der Ergebnisse.                                                                                 |
| `limit`         | Die maximale Anzahl an Ergebnissen, die zurückgegeben werden.                                              |
| `property`      | Wenn nicht-null, werden nur die Werte dieser Eigenschaft zurückgegeben.                                    |

Bauen wir eine dynamische Abfrage:

```dart
final shoes = await isar.shoes.buildQuery(
  whereClauses: [
    WhereClause(
      indexName: 'size',
      lower: [42],
      includeLower: true,
      upper: [46],
      includeUpper: true,
    )
  ],
  filter: FilterGroup.and([
    FilterCondition(
      type: ConditionType.contains,
      property: 'model',
      value: 'nike',
      caseSensitive: false,
    ),
    FilterGroup.not(
      FilterCondition(
        type: ConditionType.contains,
        property: 'model',
        value: 'adidas',
        caseSensitive: false,
      ),
    ),
  ]),
  sortBy: [
    SortProperty(
      property: 'model',
      sort: Sort.desc,
    )
  ],
  offset: 10,
  limit: 10,
).findAll();
```

Die folgende Abfrage ist äquivalent:

```dart
final shoes = await isar.shoes.where()
  .sizeBetween(42, 46)
  .filter()
  .modelContains('nike', caseSensitive: false)
  .not()
  .modelContains('adidas', caseSensitive: false)
  .sortByModelDesc()
  .offset(10).limit(10)
  .findAll();
```


================================================
FILE: docs/docs/de/recipes/data_migration.md
================================================
---
title: Migration von Daten
---

# Migration vron Daten

Isar migriert deine Datenbankschemas automatisch, wenn du Collections, Felder oder Indizes hinzufügst oder entfernst. Manchmal möchtest du möglicherweise auch deine Daten migrieren. Isar liefert keine eingebaute Lösung, weil das willkürliche Migrationsbeschränkungen festlegen würde. Es ist leicht eine passende Migrationslogik zu implementieren.

Wir wollen in diesem Beispiel eine einzige Version für die gesamte Datenbank verwenden. Wir benutzen Shared Preferences um die derzeitige Version zu speichern und vergleichen diese mit der Version zu der wir unsere Daten migrieren wollen. Wenn die Versionen nicht übereinstimmen, migrieren wir die Daten und aktualisieren die Version.

:::tip
Du kannst auch jeder Collection seine eigene Version zuweisen und sie individuell migrieren.
:::

Stell dir vor, wie haben eine Benutzer-Collection mit einem Feld Geburtstag. In Version 2 unserer App benötigen wir ein zusätzliches Feld Geburtsjahr um Benutzer anhand des Alters abzufragen.

Version 1:
```dart
@collection
class User {
  Id? id;

  late String name;

  late DateTime birthday;
}
```

Version 2:
```dart
@collection
class User {
  Id? id;

  late String name;

  late DateTime birthday;

  short get birthYear => birthday.year;
}
```

Das Problem ist, dass vorhandene Benutzermodelle ein leeres `birthYear`-Feld haben werden, weil es in Version 1 nicht existiert hat. Wir müssen die Daten migrieren, um das `birthYear`-Feld zu setzen.

```dart
import 'package:isar/isar.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  final dir = await getApplicationDocumentsDirectory();
  
  final isar = await Isar.open(
    [UserSchema],
    directory: dir.path,
  );

  await performMigrationIfNeeded(isar);

  runApp(MyApp(isar: isar));
}

Future<void> performMigrationIfNeeded(Isar isar) async {
  final prefs = await SharedPreferences.getInstance();
  final currentVersion = prefs.getInt('version') ?? 2;
  switch(currentVersion) {
    case 1:
      await migrateV1ToV2(isar);
      break;
    case 2:
      // Wenn die Version nicht gesetzt (neue Installation), oder schon 2 ist, müssen wir nicht migrieren
      return;
    default:
      throw Exception('Unknown version: $currentVersion');
  }

  // Version aktualisieren
  await prefs.setInt('version', 2);
}

Future<void> migrateV1ToV2(Isar isar) async {
  final userCount = await isar.users.count();

  // Wir paginieren durch die Benutzer, um zu vermeiden, dass wir alle Benutzer gleichzeitig in den Speicher laden
  for (var i = 0; i < userCount; i += 50) {
    final users = await isar.users.where().offset(i).limit(50).findAll();
    await isar.writeTxn((isar) async {
      // Wir müssen nichts aktualisieren, weil der birthYear-Getter verwendet wird
      await isar.users.putAll(users);
    });
  }
}
```

:::warning
Wenn du viele Daten migrieren musst, solltest du überlegen einen Hintergrund-Isolate zu verwenden, um eine Belastung des UI-Threads zu verhindern.
:::


================================================
FILE: docs/docs/de/recipes/full_text_search.md
================================================
---
title: Volltextsuche
---

# Volltextsuche

Volltextsuche ist ein mächtiges Werkzeug um Text in der Datenbank zu suchen. Du solltest schon damit vertraut sein, wie [Indizes](/indexes) funktionieren, aber wir schauen uns die Grundlagen an.

Ein Index funktioniert wie eine Nachschlagetabelle, die es der Abfrage-Engine ermöglicht Einträge mit einem bestimmten Wert schnell zu finden. Zum Beispiel, wenn du ein `title`-Feld in deinem Objekt hast, kannst du einen Index auf das Feld anlegen, um die Geschwindigkeit zu erhöhen, ein Objekt mit bestimmtem Titel zu finden.

## Warum ist Volltextsuche sinnvoll?

Du kannst Text leicht durchsuchen, indem du Filter verwendest. Es gibt mehrere unterschiedliche String-Operationen, zum Beispiel `.startsWith()`, `.contains()` und `.matches()`. Das Problem mit Filtern ist, dass ihre Laufzeit `O(n)` ist, wobei `n` die Anzahl der Einträge in der Collection ist. String-Operationen wie `.matches()` sind besonders teuer.

:::tip
Volltextsuche ist deutlich schneller als Filter, aber Indizes haben ein paar Einschränkungen. In diesem Rezept wollen wir uns angucken, wie man diese Limitationen umgeht.
:::

## Grundlegendes Beispiel

Die Idee ist immer die Gleiche: Anstatt den ganzen Text zu indizieren, indizieren wir die Worte im Text, sodass wir individuell nach ihnen suchen können.

Bauen wir den grundlegendsten Volltext-Index:

```dart
class Message {
  Id? id;

  late String content;

  @Index()
  List<String> get contentWords => content.split(' ');
}
```

Wir können jetzt nach Nachrichten suchen, die spezifische Worte enthalten:

```dart
final posts = await isar.messages
  .where()
  .contentWordsAnyEqualTo('hello')
  .findAll();
```

Diese Abfrage ist superschnell, aber es gibt ein paar Probleme:

1. Wir können nur nach ganzen Worten suchen
2. Wir missachten Zeichensetzung
3. Wir unterstützen keine anderen Leerzeichen

## Text richtig trennen

Versuchen wir das vorherige Beispiel zu verbessern. Wir könnten versuchen einen komplizierten Regex zu entwickeln, um Worte zu trennen, aber das ist vermutlich langsam und in Grenzfällen falsch.

Der [Unicode Annex #29](https://unicode.org/reports/tr29/) definiert wie man, für fast alle Sprachen, Text richtig in Worte trennt. Das ist ziemlich kompliziert, aber glücklicherweise macht Isar den schwierigsten Teil der Arbeit für uns:

```dart
Isar.splitWords('hello world'); // -> ['hello', 'world']

Isar.splitWords('The quick (“brown”) fox can’t jump 32.3 feet, right?');
// -> ['The', 'quick', 'brown', 'fox', 'can’t', 'jump', '32.3', 'feet', 'right']
```

## Ich will mehr Kontrolle

Das ist kinderleicht! Wir können unseren Index so ändern, dass er auch Präfixe findet und Groß-/Kleinschreibung ignoriert:

```dart
class Post {
  Id? id;

  late String title;

  @Index(type: IndexType.value, caseSensitive: false)
  List<String> get titleWords => title.split(' ');
}
```

Isar speichert die Worte standardmäßig als gehashte Werte, was schnell und platzsparend ist. Aber Hashes können nicht für die Präfixüberprüfung verwendet werden. Wenn wir `IndexType.value` verwenden, können wir den Index ändern, um direkt Worte zu benutzen. Das ermöglicht uns die `.titleWordsAnyStartsWith()`-Where-Klausel benutzen zu können:

```dart
final posts = await isar.posts
  .where()
  .titleWordsAnyStartsWith('hel')
  .or()
  .titleWordsAnyStartsWith('welco')
  .or()
  .titleWordsAnyStartsWith('howd')
  .findAll();
```

## Ich brauche auch `.endsWith()`

Klar! Wir werden einen Trick verwenden, um `.endsWith()` verwenden zu können:

```dart
class Post {
    Id? id;

    late String title;

    @Index(type: IndexType.value, caseSensitive: false)
    List<String> get revTitleWords {
        return Isar.splitWords(title).map(
          (word) => word.reversed).toList()
        );
    }
}
```

Vergiss nicht das Wortende umzukehren nach dem du suchen willst:

```dart
final posts = await isar.posts
  .where()
  .revTitleWordsAnyStartsWith('lcome'.reversed)
  .findAll();
```

## Abstammungsalgorithmen

Leider unterstützen Indizes nicht die `.contains()`-Methode (das stimmt auch für andere Datenbanken). Aber es gibt ein paar Alternativen, die es wert sind, erkundet zu werden. Eine Wahl hängt stark von deinem Verwendungszweck ab. Ein Beispiel ist, den Ursprung von Worten, statt ganzer Worte, zu indizieren.

Ein Abstammungsalgorithmus ist der Prozess einer linguistischen Normalisierung, bei dem die Varianten eines Wortes in eine gleichmäßige Form reduziert werden:

```
connection
connections
connective          --->   connect
connected
connecting
```

Beliebte Algorithmen sind der [Porter stemming algorithm](https://tartarus.org/martin/PorterStemmer/) und der [Snowball stemming algorithms](https://snowballstem.org/algorithms/).

Es gibt auch fortgeschrittenere Formen wie der [Lemmatisierung](https://de.wikipedia.org/wiki/Lemma_(Lexikographie)#Lemmatisierung).

## Phonetische Suche

Eine [Phonetische Suche](https://de.wikipedia.org/wiki/Phonetische_Suche) ist ein Algorithmus, um Worte nach ihrer Aussprache zu indizieren. Anders augedrückt, erlaubt es dir Worte zu finden, die ähnlich zu den Gesuchten klingen.

:::warning
Die meisten phonetischen Algorithmen unterstützen nur eine einzige Sprache.
:::

### Soundex

[Soundex](https://de.wikipedia.org/wiki/Soundex) ist ein phonetischer Algorithmus um Namen danach zu indizieren, wie sie im Englischen ausgesprochen werden. Das Ziel ist es Homophone in die gleiche Repräsentation zu übertragen, sodass sie gefunden werden, trotz der kleinen Unterschiede in der Rechtschreibung. Es ist ein unkomplizierter Algorithmus, von dem es mehrere verbesserte Versionen gibt.

Wenn du diesen Algorithmus verwendest, wegeben `"Robert"` und `"Rupert"` beide den String `"R163"`, während `"Rubin"` `"R150"` ergibt. `"Ashcraft"` und `"Ashcroft"` erzeugen beide `"A261"`.

### Double Metaphone

Der phonetische Umwandlungsalgorithmus [Double Metaphone](https://en.wikipedia.org/wiki/Metaphone) ist die zweite Generation dieses Algorithmus. Er macht mehrere fundamentale Designverbesserungen gegenüber dem originalen Metaphone-Algorithmus.

Double Metaphone klärt verschiedene Unregelmäßigkeiten im Englischen aufgrund von slawischer, germanischer, keltischer, griechischer, französischer, italienischer, spanischer, chinesischer und anderer Herkunft.


================================================
FILE: docs/docs/de/recipes/multi_isolate.md
================================================
---
title: Nutzung von mehreren Isolates
---

# Nutzung von mehreren Isolates

Statt in Threads, läuft der gesamte Dart-Code innerhalb von Isolates. Jeder Isolate hat einen eigenen Memory-Heap, was dafür sorgt, dass der Status eines Isolates von keinem anderen Isolate erreichbar ist.

Auf Isar kann von mehreren Isolates gleichzeitig zugegriffen werden und sogar Watcher funktionieren über Isolates hinweg. In diesem Rezept werden wir prüfen, wie man Isar in einem Umfeld mit mehreren Isolates nutzt.

## Wann man mehrere Isolates benutzt

Isar-Transaktionen werden parallel ausgeführt, auch wenn sie im gleichen Isolate laufen. In manchen Fällen ist es dennoch von Vorteil von mehreren Isolates auf Isar zuzugreifen.

Der Grund ist, dass Isar einige Zeit benötigt, um Daten von und zu Dart-Objekten zu codieren und decodieren. Du kannst es dir vorstellen, als würdest du JSON codieren und decodieren (nur effizienter). Diese Operationen laufen innerhalb des Isolates, von dem auf die Daten zugegriffen wird und blockieren daher natürlich anderen Code in dem Isolate. In anderen Worten: Isar führt einen Teil der Arbeit in deinem Dart-Isolate aus.

Wenn du nur ein paar hundert Objekte gleichzeitig lesen oder schreiben musst, ist es kein Problem, das im UI-Isolate zu tun. Aber für riesige Transaktionen oder wenn dein UI-Thread schon zu tun hat, solltest du überlegen ein seperates Isolate zu verwenden.

## Beispiel

Die erste Sache, die wir machen müssen, ist Isar in einem neuen Isolate zu öffnen. Weil eine Instanz von Isar schon im zentralen Isolate offen ist, wird `Isar.open()` diese Instanz zurückgeben.

:::warning
Stelle sicher, dass du die gleichen Schemas wie im zentralen Isolate zur Verfügung stellst. Sonst wirst du einen Fehler erhalten.
:::

`compute()` startet ein neues Isolate in Flutter und führt die angegebene Funktion in ihm aus.

```dart
void main() {
  // Isar im UI-Isolate öffnen
  final dir = await getApplicationDocumentsDirectory();

  final isar = await Isar.open(
    [MessageSchema],
    directory: dir.path,
    name: 'myInstance',
  );

  // Auf Änderungen in der Datenbank warten
  isar.messages.watchLazy(() {
    print('omg the messages changed!');
  });

  // Startet ein neues Isolate und erzeugt 10000 Nachrichten
  compute(createDummyMessages, 10000).then(() {
    print('isolate finished');
  });

  // Nach einiger Zeit:
  // > omg the messages changed!
  // > isolate finished
}

// Funktion, die im neuen Isolate ausgeführt werden soll
Future createDummyMessages(int count) async {
  // Wir benötigen hier keinen Pfad, weil die Instanz schon offen ist
  final dir = await getApplicationDocumentsDirectory();
  
  final isar = await Isar.open(
    [PostSchema],
    directory: dir.path,
    name: 'myInstance',
  );

  final messages = List.generate(count, (i) => Message()..content = 'Message $i');
  // Wir benutzen synchrone Transaktionen in Isolates
  isar.writeTxnSync(() {
    isar.messages.insertAllSync(messages);
  });
}
```

Es gibt ein paar interessante Dinge, die in dem Beispiel von eben auffallen:

- `isar.messages.watchLazy()` wird im UI-Isolate aufgerufen und wird über Änderungen durch ein anderes Isolate benachrichtigt.
- Instanzen werden über den Namen referenziert. Der Standardname ist `default`, aber in diesem Beispiel haben wir ihn auf `myInstance` gesetzt.
- Wir haben eine synchrone Transaktion benutzt, um die Nachrichten zu erzeugen. Unser neues Isolate zu blockieren ist kein Problem und synchrone Transaktionen sind ein bisschen schneller.


================================================
FILE: docs/docs/de/recipes/string_ids.md
================================================
---
title: String-IDs
---

# String-IDs

Das hier ist eine der häufigsten Anfragen, die ich erhalte, daher ist hier ein Tutorial zur Verwendung von String-IDs.

Isar unterstützt String-IDs nicht nativ, was einen guten Grund hat: Integer-IDs sind viel effizienter und schneller. Besonders bei Links ist der Overhead einer String-ID zu signifikant.

Ich verstehe, dass du manchmal externe Daten speichern musst, die UUIDs oder andere nicht-Integer-IDs verwenden. Ich empfehle, die String-ID als Eigenschaft in deinem Objekt zu speichern und eine schnelle Hash-Implementation um 64-bit Integer zu generieren und als ID zu verwenden.

```dart
@collection
class User {
  String? id;

  Id get isarId => fastHash(id!);

  String? name;

  int? age;
}
```

Mit diesem Ansatz bekommst du das Beste aus beiden Welten: Effiziente Integer-IDs für Links und die Fähigkeit String-IDs zu nutzen.

## Schnelle Hash-Funktion

Idealerweise sollte deine Hash-Funktion eine hohe Qualität haben (du willst keine Kollisionen) und schnell sein. Ich empfehle die folgende Implementation:

```dart
/// FNV-1a 64bit Hash-Algorithmus optimiert für Dart-Strings
int fastHash(String string) {
  var hash = 0xcbf29ce484222325;

  var i = 0;
  while (i < string.length) {
    final codeUnit = string.codeUnitAt(i++);
    hash ^= codeUnit >> 8;
    hash *= 0x100000001b3;
    hash ^= codeUnit & 0xFF;
    hash *= 0x100000001b3;
  }

  return hash;
}
```

Wenn du eine andere Hash-Funktion wählst, stelle sicher, dass sie einen 64-bit Integer zurückgibt und vermeide kryptographische Hash-Funktionen, weil die sehr viel langsamer sind.

:::warning
Vermeide es `string.hashCode` zu verwenden, weil nicht garantiert werden kann, dass die Methode über verschiedenen Plattformen und Versionen von Dart hinweg stabil ist.
:::


================================================
FILE: docs/docs/de/schema.md
================================================
---
title: Schema
---

# Schema

Wenn du Isar benutzt, um deine App-Daten zu speichern, dann hast du mit Collections zu tun. Eine Collection ist wie die Tabelle einer Datenbank in der angeschlossenen Isar-Datenbank und kann nur einen einzigen Typen von Dart Objekt enthalten. Jedes Collection-Objekt repräsentiert eine Zeile mit Daten in der zugehörigen Collection.

Die Definition einer Collection wird "Schema" genannt. Der Isar-Generator macht die meiste Arbeit für dich und generiert den Großteil des Codes den du benötigst, um die Collection zu benutzen.

## Aufbau einer Collection

Jede Collection in Isar wird über die Annotation `@collection` oder `@Collection()` an einer Klasse definiert. Eine Isar-Collection enthält Felder für jede Spalte in der zugehörigen Tabelle der Datenbank, auch eine, die dem Primärschlüssel entspricht.

Der folgende Code ist ein Beispiel einer simplen Collection, welche eine `User`-Tabelle mit den Spalten ID, Vorname und Nachname definiert:

```dart
@collection
class User {
  Id? id;

  String? firstName;

  String? lastName;
}
```

:::tip
Um ein Feld persistent zu machen, muss Isar Zugriff auf das Feld haben. Du kannst sicherstellen, dass Isar Zugriff auf ein Feld hat, indem du es öffentlich machst, oder indem du Getter- und Setter-Methoden definierst.
:::

Es gibt ein paar optionale Parameter, um die Collection anzupassen:

| Konfiguration | Beschreibung                                                                                                                        |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `inheritance` | Steuert, ob Felder von Elternklassen und Mixins in Isar gespeichert werden. Standardmäßig aktiviert.                                |
| `accessor`    | Erlaubt dir den Standardnamen des Collection-Accessors umzubenennen (zum Beispiel zu `isar.contacts` für die `Contact`-Collection). |
| `ignore`      | Erlaubt es bestimmte Eigenschaften zu ignorieren. Diese werden auch bei Superklassen angewendet.                                    |

### Isar ID

Jede Collection-Klasse muss eine ID-Eigenschaft vom Typen `Id` definieren, die ein Objekt eindeutig identifiziert. `Id` ist eigentlich nur ein Alias für `int`, der es dem Isar Generator ermöglicht die ID-Eigenschaft zu erkennen.

Isar indiziert ID Felder automatisch, was dir ermöglicht Objekte effizient anhand ihrer ID zu erhalten und modifizieren.

Du kannst eintweder IDs selbst zuweisen oder Isar fragen eine sich automatisch erhöhende ID festzulegen. Wenn das `id`-Feld `null` und nicht `final` ist, wird Isar eine auto-increment ID setzen. Wenn du eine nicht null-bare auto-increment ID haben möchtest, kannst du `Isar.autoIncrement` anstatt von `null` verwenden.

:::tip
Auto-increment IDs werden nicht wiederverwendet, wenn ein Objekt gelöscht wird. Der einzige Weg auto-increment IDs zurückzusetzen ist die Datenbank zu leeren.
:::

### Collections und Felder umbenennen

Isar benutzt standardmäßig den Klassennamen als Collectionnamen. Genauso verwendet Isar in der Datenbank Feldnamen als Spaltennamen. Wenn du willst, dass eine Collection oder ein Feld einen anderen Namen hat, dann füge die Annotation `@Name` hinzu. Das folgende Beispiel demonstriert angepasste Namen für Collections und Felder:

```dart
@collection
@Name("User")
class MyUserClass1 {

  @Name("id")
  Id myObjectId;

  @Name("firstName")
  String theFirstName;

  @Name("lastName")
  String familyNameOrWhatever;
}
```

Du solltest besonders dann, wenn du Dart-Felder oder -Klassen umbenennen willst, überlegen, die `@Name`-Annotation zu verwenden. Sonst wird die Datenbank das Feld oder die Collection löschen und neu erzeugen.

### Felder ignorieren

Isar stell sicher, dass alle öffentlichen Felder einer Collecion-Klasse erhalten bleiben. Wenn du eine Eigenschaft oder einen Getter mit `@ignore` annotierst, kannst du diese von der Sicherstellung ausschließen, wie im folgenden Code-Schnipsel gezeigt:

```dart
@collection
class User {
  Id? id;

  String? firstName;

  String? lastName;

  @ignore
  String? password;
}
```

In Fällen, in denen deine Collection Felder von der Eltern-Collection erhält, ist es meist leichter die `ignore`-Eigenschaft der `@Collection`-Annotation zu verwenden:

```dart
@collection
class User {
  Image? profilePicture;
}

@Collection(ignore: {'profilePicture'})
class Member extends User {
  Id? id;

  String? firstName;

  String? lastName;
}
```

Wenn eine Collection ein Feld mit einem Typen enthält, der nicht von Isar unterstützt wird, musst du das Feld ignorieren.

:::warning
Beachte, dass es keine gute Vorgehensweise ist, Informationen in Isar-Objekten zu speichern, die nicht gesichert werden.
:::

## Unterstützte Typen

Isar unterstützt die folgenden Datentypen:

- `bool`
- `byte`
- `short`
- `int`
- `float`
- `double`
- `DateTime`
- `String`
- `List<bool>`
- `List<byte>`
- `List<short>`
- `List<int>`
- `List<float>`
- `List<double>`
- `List<DateTime>`
- `List<String>`

Zusätzlich sind eingebettete Objekte und Enums unterstützt. Wir behandeln diese weiter unten.

## byte, short, float

In vielen Fällen benötigst du nicht den gesamten Bereich eines 64-bit Integers oder Doubles. Isar unterstützt zusätzliche Typen, die es dir erlauben Speicherpaltz beim Speichern kleinerer Zahlen zu sparen.

| Typ        | Größe in bytes | Bereich                                                  |
| ---------- | -------------- | -------------------------------------------------------- |
| **byte**   | 1              | 0 bis 255                                                |
| **short**  | 4              | -2.147.483.647 bis 2.147.483.647                         |
| **int**    | 8              | -9.223.372.036.854.775.807 bis 9.223.372.036.854.775.807 |
| **float**  | 4              | -3,4e38 bis 3,4e38                                       |
| **double** | 8              | -1,7e308 bis 1,7e308                                     |

Die zusätzlichen Zahl-Typen sind nur Aliase für die nativen Dart-Typen, also beispielsweise `short` zu benutzen funktioniert genau, wie wenn du `int` nutzen würdest.

Hier ist eine Beispiel-Collection, welche alle der eben genannten Typen enthält:

```dart
@collection
class TestCollection {
  Id? id;

  late byte byteValue;

  short? shortValue;

  int? intValue;

  float? floatValue;

  double? doubleValue;
}
```

Alle Zahlen-Typen können auch in Listen verwendet werden. Um Bytes zu speichern solltest du `List<byte>` benutzen.

## Null-bare Typen

Zu verstehen wie Null-barkeit in Isar funktioniert ist essentiell: Zahlen-Typen haben **KEINE** gemeinsame festgelegte `null`-Darstellung. Stattdessen wird ein bestimmter Wert genutzt:

| Typ        | VM            |
| ---------- | ------------- |
| **short**  | `-2147483648` |
| **int**    | `int.MIN`     |
| **float**  | `double.NaN`  |
| **double** | `double.NaN`  |

`bool`, `String`, und `List` haben eine seperate `null`-Darstellung.

Dieses Verhalten erlaubt Leistungsverbesserungen, und ermöglicht es die Null-barkeit deiner Felder frei zu ändern, ohne eine Migration oder speziellen Code zum handhaben von `null`-Werten zu benötigen.

:::warning
Der `byte`-Typ unterstützt keine Null-Werte.
:::

## DateTime

Isar speichert keine Zeitzoneninformationen von deinen Daten. Stattdessen wandelt es `DateTime`s zu UTC um, bervor es diese speichert. Isar gibt jedes Datum in lokaler Zeit zurück.

`DateTime`s werden mit Mikrosekunden-Präzision gespeichert. In Browsern ist, aufgrund von JavaScript-Limitationen, nur Millisekunden-Präzision möglich.

## Enum

Isar ermöglicht es Enums wie andere Isar-Typen zu nutzen und zu speichern. Du musst aber wählen, wie Isar den Enum auf dem Datenträger abbilden soll. Isar unterstützt vier verschiedene Strategien:

| Enum-Typ     | Beschreibung                                                                                                   |
| ------------ | -------------------------------------------------------------------------------------------------------------- |
| `ordinal`    | Der Index des Enums wird als `byte` gespeichert. Das ist sehr effizienzt, aber erlaubt keine Null-baren Enums. |
| `ordinal32`  | Der Index des Enums wird als `short` (4-Byte-Integer) gespeichert. Erlaubt keine Null-baren Enums.             |
| `name`       | Der Name des Enums wird als `String` gespeichert.                                                              |
| `value`      | Eine angepasste Eigenschaft wird genutzt, um den Enum-Wert abzurufen.                                          |

:::warning
`ordinal` und `ordinal32` basieren auf der Reihenfolge der Enum-Werte. Wenn du die Reihenfolge änderst, werden existierende Datenbanken falsche Werte zurückgeben.
:::

Schauen wir uns ein Beispiel für jede Strategie an.

```dart
@collection
class EnumCollection {
  Id? id;

  @enumerated // entspricht EnumType.ordinal
  late TestEnum byteIndex; // ist nicht Null-bar

  @Enumerated(EnumType.ordinal)
  late TestEnum byteIndex2; // ist nicht Null-bar

  @Enumerated(EnumType.ordinal32)
  TestEnum? shortIndex;

  @Enumerated(EnumType.name)
  TestEnum? name;

  @Enumerated(EnumType.value, 'myValue')
  TestEnum? myValue;
}

enum TestEnum {
  first(10),
  second(100),
  third(1000);

  const TestEnum(this.myValue);

  final short myValue;
}
```

Natürlich können Enums auch in Listen benutzt werden.

## Eingebettete Objekte

Es ist oft hilfreich verschachtelte Objekte in deinem Collection-Modell zu haben. Daher gibt es keine Begrenzung, wie tief die Verschachtelung von Objekten sein kann. Beachte jedoch, dass der gesamte Objekt-Baum in die Datenbank geschrieben werden muss, um ein sehr tief verschachteltes Objekt zu aktualisieren.

```dart
@collection
class Email {
  Id? id;

  String? title;

  Recepient? recipient;
}

@embedded
class Recepient {
  String? name;

  String? address;
}
```

Eingebettete Objekte können Null-bar sein und andere Objekte erweitern. Die einzige Voraussetzung ist, dass sie mit `@embedded` annotiert werden und einen Standardkonstruktor ohne erforderliche Parameter haben.


================================================
FILE: docs/docs/de/transactions.md
================================================
---
title: Transaktionen
---

# Transaktionen

In Isar verbinden Transaktionen mehrere Datenbankoperationen in einen einzigen Arbeitsvorgang. Die meisten Interaktionen mit Isar nutzen implizit Transaktionen. Lese- & Schreibzugriff ist in Isar [ACID](https://de.wikipedia.org/wiki/ACID)-konform. Transaktionen werden automatisch zurückgesetzt, wenn ein Fehler auftritt.

## Explizite Transaktionen

In einer expliziten Transaktion kannst du einen konsistenten Schnappschuss der Datenbank erhalten. Versuche die Dauer einer Transaktion zu minimieren. Es ist verboten Netzwerkabfragen oder andere lang andauernde Operationen in einer Transaktion zu machen.

Transaktionen (besonders Schreib-Transaktionen) sind sehr teuer. Du solltest immer versuchen aufeinander folgende Operationen in eine einzelne Transaktion zu vereinen.

Transaktionen können entweder synchron oder asynchron sein. In synchronen Transaktionen kannst du nur synchrone Operationen verwenden. In asynchronen Transaktionen sind nur asynchrone Operationen möglich.

|           | Lesen        | Lesen & Schreiben |
| --------- | ------------ | ----------------- |
| Synchron  | `.txnSync()` | `.writeTxnSync()` |
| Asynchron | `.txn()`     | `.writeTxn()`     |

### Lese-Transaktionen

Explizite Lese-Transaktionen sind optional, aber sie erlauben es atomare Lesevorgänge durchzuführen und auf einem konsistenten Status der Datenbank innerhalb der Transaktion zu arbeiten. Intern nutzt Isar für alle Lese-Operationen immer Lese-Transaktionen.

:::tip
Asynchrone Lese-Transaktionen laufen parallel zu anderen Lese- und Schreib-Transaktionen. Ziemlich cool, oder?
:::

### Schreib-Transaktionen

Anders als Lese-Operationen müssen Schreib-Operationen in Isar in einer expliziten Transaktion ausgeführt werden.

Wenn eine Schreib-Transaktion erfolgreich beendet wird, wird sie automatisch festgesetzt und alle Änderungen werden auf den Datenträger geschrieben. Wenn ein Fehler auftritt, wird die Transaktion abgebrochen und alle Änderungen werden zurückgesetzt. Transaktionen sind „Alles oder Nichts”: Entweder sind alle Schreibvorgänge in der Transaktion erfolgreich oder keine von ihnen findet statt. Somit ist sichergestellt, dass die Daten konsistent sind.

:::warning
Wenn eine Datenbankoperation fehlschlägt, wird die Transaktion abgeborchen und darf nicht mehr verwendet werden, auch wenn der Fehler in Dart aufgefangen wird.
:::

```dart
@collection
class Contact {
  Id? id;

  String? name;
}

// GUT
await isar.writeTxn(() async {
  for (var contact in getContacts()) {
    await isar.contacts.put(contact);
  }
});

// SCHLECHT: Bewege die Schleife in die Transaktion
for (var contact in getContacts()) {
  await isar.writeTxn(() async {
    await isar.contacts.put(contact);
  });
}
```


================================================
FILE: docs/docs/de/tutorials/quickstart.md
================================================
---
title: Schnellstart
---

# Schnellstart

Holla, die Waldfee! Du bist bestimmt hier um mit der coolsten Flutter-Datenbank zu starten...

Dieser Schnellstart wird wenig um den heißen Brei herumreden und direkt mit dem Coden beginnen.

## 1. Abhängigkeiten hinzufügen

Bevor es losgeht, müssen wir ein paar Pakete zur `pubspec.yaml` hinzufügen. Damit es schneller geht lassen wir pub das für uns erledigen.

```bash
dart pub add isar:^0.0.0-placeholder isar_flutter_libs:^0.0.0-placeholder --hosted-url=https://pub.isar-community.dev
dart pub add dev:isar_generator:^0.0.0-placeholder --hosted-url=https://pub.isar-community.dev
```

## 2. Klassen annotieren

Annotiere deine Collection-Klassen mit `@collection` und wähle ein `Id`-Feld.

```dart
part 'user.g.dart';

@collection
class User {
  Id id = Isar.autoIncrement; // Für auto-increment kannst du auch id = null zuweisen 

  String? name;

  int? age;
}
```

IDs identifizieren Objekte in einer Collection eindeutig und erlauben es dir, sie später wiederzufinden.

## 3. Code-Generator ausführen

Führe den folgenden Befehl aus, um den `build_runner` zu starten:

```
dart run build_runner build
```

Wenn du Flutter verwendest:

```
flutter pub run build_runner build
```

## 4. Isar-Instanz öffnen

Öffne eine neue Isar-Instanz und übergebe alle Collection-Schemata. Optional kannst du einen Instanznamen und ein Verzeichnis angeben.

```dart
final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.open(
  [UserSchema],
  directory: dir.path,
);
```

## 5. Schreiben und lesen

Wenn deine Instanz geöffnet ist, hast du Zugriff auf die Collections.

Alle grundlegenden CRUD-Operationen sind über die `IsarCollection` verfügbar .

```dart
final newUser = User()..name = 'Jane Doe'..age = 36;

await isar.writeTxn(() async {
  await isar.users.put(newUser); // Einfügen & akualisieren
});

final existingUser = await isar.users.get(newUser.id); // Erhalten

await isar.writeTxn(() async {
  await isar.users.delete(existingUser.id!); // Löschen
});
```

## Weitere Ressourcen

Du lernst am besten visuell? Schau dir diese Videos an, um mit Isar zu starten:

<div class="video-block">
  <iframe max-width=100% height=auto src="https://www.youtube.com/embed/CwC9-a9hJv4" title="Isar Database" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<br>
<div class="video-block">
  <iframe max-width=100% height=auto src="https://www.youtube.com/embed/videoseries?list=PLKKf8l1ne4_hMBtRykh9GCC4MMyteUTyf" title="Isar Database" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>
<br>
<div class="video-block">
  <iframe max-width=100% height=auto src="https://www.youtube.com/embed/pdKb8HLCXOA " title="Isar Database" frameborder="0" allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>


================================================
FILE: docs/docs/de/watchers.md
================================================
---
title: Watcher
---

# Watcher

Isar ermöglicht es dir zu Änderungen in der Datenbank zu abbonieren. Du kannst Änderungen in einem Objekt, einer ganzen Collection oder einer Abfrage "beobachten".

Watcher erlauben es dir auf Änderungen in der Datenbank effizient zu reagieren. Du kannst z.B. dein UI neuladen, wenn ein Kontakt hinzugefügt wurde, eine Netzwerkabfrage machen, wenn ein Dokument aktualisiert wurde, etc.

Ein Watcher wird benachrichtigt, wenn eine Transaktion efolgreich stattfindet, und das Ziel sich wirklich ändert.

## Objekte beobachten

Wenn du benachrichtigt werden möchtest, wenn ein spezifisches Objekt erstellt, aktualisiert oder gelöscht wird, solltest du ein Objekt beobachten:

```dart
Stream<User> userChanged = isar.users.watchObject(5);
userChanged.listen((newUser) {
  print('User changed: ${newUser?.name}');
});

final user = User(id: 5)..name = 'David';
await isar.users.put(user);
// Ausgabe: User changed: David

final user2 = User(id: 5)..name = 'Mark';
await isar.users.put(user);
// Ausgabe: User changed: Mark

await isar.users.delete(5);
// Ausgabe: User changed: null
```

Wie du im eben gezeigten Beispiel sehen kannst, muss das Objekt noch nicht existieren. Der Watcher wird benachrichtigt, wenn es erzeugt wird.

Es gibt den zusätzlichen Parameter `fireImmediately`. Wenn du ihn auf `true` gesetzt hast, wird Isar sofort die Werte des aktuellen Objekts in den Stream geben.

### Lazy Beobachtung

Vielleicht möchtest du gar nicht den neuen Wert erhalten, sondern nur über die Änderungen informiert werden. Das erspart es Isar die Objekte abrufen zu müssen:

```dart
Stream<void> userChanged = isar.users.watchObjectLazy(5);
userChanged.listen(() {
  print('User 5 changed');
});

final user = User(id: 5)..name = 'David';
await isar.users.put(user);
// Ausgabe: User 5 changed
```

## Collections beobachten

Statt ein einzelnes Objekt zu beobachten kannst du auch eine ganze Collection beobachten und benachrichtigt werden, wenn irgendein Objekt hinzugefügt, geändert oder gelöscht wird:

```dart
Stream<void> userChanged = isar.users.watchLazy();
userChanged.listen(() {
  print('A User changed');
});

final user = User()..name = 'David';
await isar.users.put(user);
// Ausgabe: A User changed
```

## Abfragen beobachten

Es ist sogar möglich ganze Abfragen zu beobachten. Isar versucht sein Bestes dich nur zu benachrichtigen, wenn das Abfrageergebnis sich wirklich ändert. Du wirst nicht informiert, wenn Links darin resultieren, dass deine Abfrageergebnisse sich ändern. Benutze einen Collection-Watcher, wenn du über Linkänderungen benachrichtigt werden willst.

```dart
Query<User> usersWithA = isar.users.filter()
    .nameStartsWith('A')
    .build();

Stream<List<User>> queryChanged = usersWithA.watch(fireImmediately: true);
queryChanged.listen((users) {
  print('Users with A are: $users');
});
// Ausgabe: Users with A are: []

await isar.users.put(User()..name = 'Albert');
// Ausgabe: Users with A are: [User(name: Albert)]

await isar.users.put(User()..name = 'Monika');
// keine Ausgabe

await isar.users.put(User()..name = 'Antonia');
// Ausgabe: Users with A are: [User(name: Albert), User(name: Antonia)]
```

:::warning
Wenn du einen Offset mit Limitierung oder Eindeutigkeitsabfragen benutzt, wird Isar dich auch informieren, wenn Ergebnisse innerhalb der Abfrage, aber außerhalb der Abfragegrenzen stattfinden.
:::

Genau wie bei `watchObject()` kannst du `watchLazy()` verwenden, um über Änderungen in den Abfrageergebnissen benachrichtigt zu werden, ohne die Ergebnisse zu erhalten.

:::danger
Abfragen für jede Änderung erneut ablaufen zu lassen ist sehr ineffizient. Es wäre besser, wenn du stattdessen einen lazy Collection-Watcher verwenden würdest.
:::


================================================
FILE: docs/docs/es/README.md
================================================
---
home: true
title: Home
heroImage: /isar.svg
actions:
  - text: Empecemos!
    link: /es/tutorials/quickstart.html
    type: primary
features:
  - title: 💙 Hecho para Flutter
    details: Mínima inicialización, fácil de usar, sin configuración, sin repetición. Solo agrega algunas líneas de código para comenzar.
  - title: 🚀 Altamente escalable
    details: Almacena cientos de miles de registros en una sola base de datos NoSQL y consúltalos de forma eficiente y asíncrona.
  - title: 🍭 Múltiples características
    details: Isar posee una gran cantidad de características para ayudarte a administrar tus datos. Índices compuestos y multi-entrada, modificadores de consultas, soporte para JSON, y mucho más.
  - title: 🔎 Búsqueda de texto completo
    details: Isar tiene incorporado un buscador de texto completo. Crea un índice multi-entrada y busca texto de forma fácil.
  - title: 🧪 Semántica ACID
    details: Isar es compatible con ACID y maneja las transacciones automáticamente. Retrocede los cambios en caso de error.
  - title: 💃 Tipeado estático
    details: Las consultas de Isar son tipeadas estáticamente y verificadas en tiempo de compilación. No hay necesidad de preocuparse por errores en tiempo de ejecución.
  - title: 📱 Multiplataforma
    details: Soporte completo para iOS, Android, Desktop, WEB!
  - title: ⏱ Asíncrona
    details: Isar incluye operaciones de consulta en paralelo y soporte multi-isolate.
  - title: 🦄 Código abierto
    details: Completamente de código abierto y libre para siempre!

footer: Apache Licensed | Copyright © 2022 Simon Leier
---


================================================
FILE: docs/docs/es/crud.md
================================================
---
title: Crear, Leer, Actualizar, Eliminar
---

# Crear, Leer, Actualizar, Eliminar (CRUD)

Cuando ya has definido tus colecciones, aprende cómo manipularlas!

## Abriendo Isar

Antes de hacer nada, necesitamos una instancia Isar. Cada instancia requiere un directorio con permisos de escritura donde el archivo de la base de datos pueda ser almacenado. Si no defines un directorio, Isar encontrará un directorio por defecto apropiado para la plataforma en uso.

Provee todos los esquemas que quieras usar con la instancia Isar. Si abres múltiples instancias, aún tienes que proveer todos los esquemas a cada instancia.

```dart
final dir = await getApplicationDocumentsDirectory();
final isar = await Isar.open(
  [ContactSchema],
  directory: dir.path,
);
```

Puedes usar la configuración por defecto o proveer algunos de los siguientes parámetros:

| Configuración       | Descripción                                                                                                                                                                                                                     |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`              | Abre múltiples instancias con distinto nombre. `"default"` es el nomre usado por defecto.                                                                                                                                       |
| `directory`         | La ubicación de almacenamiento para esta instancia. Puedes usar una ruta relativa o absoluta. `NSDocumentDirectory` para iOS y `getDataDirectory` para Android son los usados por defecto. No se requiere para web.             |
| `relaxedDurability` | Relaja la garantía de durabilidad para incrementar el rendimiento de escritura. En caso de falla del sistema (no de la aplicación), es posible perder la última transacción ejecutada. La corrupción de los datos no es posible |
| `compactOnLaunch`   | Condiciones a verificar cuando la base de datos deba ser compactada cuando se abra la instancia.                                                                                                                                |
| `inspector`         | Habilita el inspector para las compilaciones de depuración. Esta opción se ignora para las compilaciones de perfil y entrega.                                                                                                   |

Si existiera una instancia ya abierta al momento de llamar a `Isar.open()`, ésta retornará la instancia existente independientemente de los parámetros especificados. Ésto es útil para usar Isar en un isolate.

:::tip
Considera usar el paquete [path_provider](https://pub.dev/packages/path_provider) para obtener una ruta válida en todas las plataformas.
:::

La ubicación de almacenamiento del archivo de la base de datos Isar es `directory/name.isar`

## Leyendo la base de datos

Usa instancias `IsarCollection` para buscar, consultar y crear nuevos objetos de un tipo dado en Isar.

Para los ejemplos siguientes, asumimos que tenemos una colección `Recipe` definida como sigue:

```dart
@collection
class Recipe {
  Id? id;

  String? name;

  DateTime? lastCooked;

  bool? isFavorite;
}
```

### Obtener una colección

Todas tus colecciones viven en la instancia Isar. Puedes obtener tu colección Recipes con:

```dart
final recipes = isar.recipes;
```

Eso fue fácil! Si no quieres usar los accesores de la colección, puedes usar el método `collection()`:

```dart
final recipes = isar.collection<Recipe>();
```

### Obtener un objeto (por su id)

Todavía no tenemos datos en la colección, pero pretendamos que tenemos así podemos obtener un objeto imaginario dado su id `123`

```dart
final recipe = await recipes.get(123);
```

`get()` retorna un `Future` con el objeto o `null` si éste no existe. Por defecto todas las operaciones Isar son asíncronas, y la mayoría de ellas tienen su versión síncrona:

```dart
final recipe = recipes.getSync(123);
```

:::warning
En tus isolate de UI, por defecto deberías usar los métodos en su versión asíncrona. Debido a que Isar es súper rápido, a menudo es aceptable usar la versión síncrona.
:::

Si quieres obtener múltiples objetos de una vez, utiliza `getAll()` o `getAllSync()`:

```dart
final recipe = await recipes.getAll([1, 2]);
```

### Consulta de objectos

En lugar de obtener objetos por su id, puedes también consultar una lista objetos que coincidan con ciertas condiciones usando `.where()` y `.filter()`:

```dart
final allRecipes = await recipes.where().findAll();

final favouires = await recipes.filter()
  .isFavoriteEqualTo(true)
  .findAll();
```

➡️ Ver más en: [Consultas](queries)

## Modificando los datos

Finalmente es momento de modificar los datos en nuestra colección! Para crear, actualizar o eliminar objectos, usa las respectivas operaciones juntas en una transacción de escritura:

```dart
await isar.writeTxn(() async {
  final recipe = await recipes.get(123)

  recipe.isFavorite = false;
  await recipes.put(recipe); // perform update operations

  await recipes.delete(123); // or delete operations
});
```

➡️ Ver más en: [Transacciones](transactions)

### Insertar objectos

Para almacenar un objeto en Isar, insértalo en una colección. El método `put()` de Isar insertará o actualizará el objecto dependiendo si el mismo ya existe o no en la colección.

Si el campo id es `null` o `Isar.autoIncrement`, Isar usará un id auto incrementable.

```dart
final pancakes = Recipe()
  ..name = 'Pancakes'
  ..lastCooked = DateTime.now()
  ..isFavorite = true;

await isar.writeTxn(() async {
  await recipes.put(pancakes);
})
```

Isar asignará automáticamente el id al objeto si el campo id es no-final.

Insertar múltiples objetos de una sola vez es muy fácil:

```dart
await isar.writeTxn(() async {
  await recipes.putAll([pancakes, pizza]);
})
```

### Actualizar objectos

Crear y actualizar objetos funcionan ambos con `collection.put(object)`. Si el id es `null` (o no existe), el object se crea; de otra manera será actualizado.

Entonces si queremos quitar los pancakes de los favoritos, podemos hacer los siguiente:

```dart
await isar.writeTxn(() async {
  pancakes.isFavorite = false;
  await recipes.put(recipe);
});
```

### Eliminar objetos

Quieres eliminar un objeto en Isar? Usa `collection.delete(id)`. El método delete retorna verdadero si el objeto con el id especificado fue encontrado y eliminado. Por ejemplo, si quieres eliminar el objeto con el id `123`, puedes hacer:

```dart
await isar.writeTxn(() async {
  final success = await recipes.delete(123);
  print('Recipe deleted: $success');
});
```

De manera similar a get y put, también existe una operación para eliminar múltiples objetos de una vez que retorna la cantidad de objetos eliminados:

```dart
await isar.writeTxn(() async {
  final count = await recipes.deleteAll([1, 2, 3]);
  print('We deleted $count recipes');
});
```

Si no conoces los ids de los objetos que quieres eliminar, puedes utilizar una consulta:

```dart
await isar.writeTxn(() async {
  final count = await recipes.filter()
    .isFavoriteEqualTo(false)
    .deleteAll();
  print('We deleted $count recipes');
});
```


================================================
FILE: docs/docs/es/faq.md
================================================
---
title: FAQ
---

# Preguntas frecuentes

Una colección aleatoria de preguntas frecuentes sobre Isar y bases de datos en Flutter.

### Porqué necesito una base de datos?

> Estoy almacenando mis datos es una base datos en mi backend, porqué necesito Isar?.

Incluso hoy en día, es muy común no tener conexión a internet si estás en el subterráneo o en un avión o si visitaste a tu abuela, que no tiene WiFi y muy mala señal de celular. No deberías dejar que la mala conexión afectua a tu aplicación!

### Isar versus Hive

La respuesta es fácil: Isar [inició como un reemplazo para Hive](https://github.com/hivedb/hive/issues/246) y está en un estado de madurez tal que se recomienda siempre usar Isar en lugar de Hive.

### Cláusulas `where`?!

> Porqué **_YO_** tengo que elejir qué índice usar?

Existen muchas razones. Muchas base de datos utilizan heurística para elegir el mejor índice para una determinada consulta. La base de datos necesita recolectar datos de uso adicionales (-> overhead) y aún así podría elegir un índice incorrecto. Además crear la consulta es más lento.

Nadie conoce tus datos mejor que tú, el desarrollador. Entonces tú puedes elegir el índice óptimo y decidir por ejemplo si quieres usar un índice para consultas u ordenamiento.

### Tengo que usar índices / cláusulas `where`?

No! Isar es lo suficientemente rápida si solo quieres confiar en filtros.

### Isar es lo suficientemente rápida?

Isar está entre las bases de datos más rápidas para dispositivos móbiles, por lo que debería ser lo suficientemente rápida para las mayoría de los casos de uso. Si tienes problemas de rendimiento, hay posibilidades que estés haciendo algo mal.

### Isar incrementa el tamaño de mi aplicación?

Un poco, sí. Isar incrementará el tamaño de descarga de tu aplicaicón alrededor de 1 - 1.5 MB. Isar Web agrega solo algunos KB.

### La documentación es incorrecta / hay un error de ortografía.

Oh no, lo siento. Por favor [apunta el problema](https://github.com/isar-community/isar/issues/new/choose) o, mejor aún, un PR para solucionarlo! 💪.


================================================
FILE: docs/docs/es/indexes.md
================================================
---
title: Índices
---

# Índices

Los índices son la característica más poderosa de Isar. Muchas bases de datos embebidas ofrecen índices "normales" (o nada), pero Isar también tiene índices compuestos y multi-entrada. Entender cómo funcionan los índices es esencial para optimizar el rendimiento de las consultas. Isar te permite elegir qué índice quieres usar y cómo quieres usarlo. Comenzaremos con un inicio rápido sobre qué son los índices.

## Qué son los índices?

Cuando una colección no está indexada, el orden de las filas no será identificable por la consulta como optimizada en ninguna forma, y tu consulta tendrá que buscar entonces a través de todos los objectos de forma lineal. En otras palabras, la consulta deberá buscar a través de cada objeto para encontrar los que coincidan con las condiciones. Como puedes imaginarte, eso puede tardar mucho. Buscar a través de cada objeto no es muy eficiente.

Por ejemplo, esta colección `Product` está completamente desordenada.

```dart
@collection
class Product {
  Id? id;

  late String name;

  late int price;
}
```

**Datos:**

| id  | name      | price |
| --- | --------- | ----- |
| 1   | Book      | 15    |
| 2   | Table     | 55    |
| 3   | Chair     | 25    |
| 4   | Pencil    | 3     |
| 5   | Lightbulb | 12    |
| 6   | Carpet    | 60    |
| 7   | Pillow    | 30    |
| 8   | Computer  | 650   |
| 9   | Soap      | 2     |

Una consulta que intente buscar todos los productos que cuestan más de $30 tiene que buscar a través de todas las nueve filas. No es un problema para nueve filas, pero podría ser un problema para 100k filas.

```dart
final expensiveProducts = await isar.products.filter()
  .priceGreaterThan(30)
  .findAll();
```

Para mejorar el rendimiento de esta consulta, indexamos la propiedad `price`. Un índice es como una tabla de búsqueda ordenada:

```dart
@collection
class Product {
  Id? id;

  late String name;

  @Index()
  late int price;
}
```

**Índices generados:**

| price                | id                 |
| -------------------- | ------------------ |
| 2                    | 9                  |
| 3                    | 4                  |
| 12                   | 5                  |
| 15                   | 1                  |
| 25                   | 3                  |
| 30                   | 7                  |
| <mark>**55**</mark>  | <mark>**2**</mark> |
| <mark>**60**</mark>  | <mark>**6**</mark> |
| <mark>**650**</mark> | <mark>**8**</mark> |

Ahora, la ejecución de la consulta puede ser considerablemente más rápida. El ejecutor puede saltar directamente a los últimos 3 índices y buscar los objetos correspondientes por su id.

### Ordenando

Otra cosa genial: los índices permiten ordenar súper rápido. Las consultas ordenadas son costosas porque la base de datos tiene que cargar todos los resultados en memoria antes de ordenarlos. Incluso si especificaste un offset y un límite, éstos se aplican después de ordenar.

Imaginemos que queremos encontrar los cuatro productos más baratos. Podríamos usar la siguiente consulta:

```dart
final cheapest = await isar.products.filter()
  .sortByPrice()
  .limit(4)
  .findAll();
```

En este ejemplo, la base de datos tendría que cargar todos los objetos (!), ordenarlos por precio, y retornar los 4 productos con el menor precio.

Como puedes imaginar, ésto puede hacerse mucho más eficiente usando el índice anterior. La base de datos toma las cuatro primeras filas del índice y retorna los objetos correspondientes ya que éstos ya están en el orden correcto.

Para usar el índice para ordenar, escribiríamos la consulta como sigue:

```dart
final cheapestFast = await isar.products.where()
  .anyPrice()
  .limit(4)
  .findAll();
```

La cláusula `where` `.anyX()` le dice a Isar que use un ídice sólo para ordenar. También puedes usar una cláusula `where` como `.priceGreaterThan()` y obtener los resultados ordenados.

## Índices únicos

Un índice único asegura que el índice no contiene valores duplicados. Puede consistir en una o múltiples propiedades. Si un índice único tiene una propiedad, los valores en esta propiedad serán únicos. Si el índice único tiene más de una pro[iedad, la combinación de los valores en estas propiedades es única.

```dart
@collection
class User {
  Id? id;

  @Index(unique: true)
  late String username;

  late int age;
}
```

Cualquier intento de insertar o actualizar datos en un índice único que provoque un duplicado resultará en un error:

```dart
final user1 = User()
  ..id = 1
  ..username = 'user1'
  ..age = 25;

await isar.users.put(user1); // -> ok

final user2 = User()
  ..id = 2;
  ..username = 'user1'
  ..age = 30;

// try to insert user with same username
await isar.users.put(user2); // -> error: unique constraint violated
print(await isar.user.where().findAll());
// > [{id: 1, username: 'user1', age: 25}]
```

## Índices con reemplazo

A veces no es deseable arrojar un error si una condición de único es violada. En su lugar, podrías querer reemplazar el objeto existente con el nuevo. Ésto se puede lograr estableciendo la propiedad `replace` del índice a `true`.

```dart
@collection
class User {
  Id? id;

  @Index(unique: true, replace: true)
  late String username;
}
```

Ahora cuando querramos insertar un usuario con nombre de usuario existente, Isar reemplazará el usuario existente con el nuevo.

```dart
final user1 = User()
  ..id = 1
  ..username = 'user1'
  ..age = 25;

await isar.users.put(user1);
print(await isar.user.where().findAll());
// > [{id: 1, username: 'user1', age: 25}]

final user2 = User()
  ..id = 2;
  ..username = 'user1'
  ..age = 30;

await isar.users.put(user2);
print(await isar.user.where().findAll());
// > [{id: 2, username: 'user1' age: 30}]
```

Los índices con reemplazo también generan métodos `putBy()` que permiten actualizar los objetos en lugar de reemplazarlos. El id existente es reusado, **_and links are still populated_**.

```dart
final user1 = User()
  ..id = 1
  ..username = 'user1'
  ..age = 25;

// user does not exist so this is the same as put()
await isar.users.putByUsername(user1);
await isar.user.where().findAll(); // -> [{id: 1, username: 'user1', age: 25}]

final user2 = User()
  ..id = 2;
  ..username = 'user1'
  ..age = 30;

await isar.users.put(user2);
await isar.user.where().findAll(); // -> [{id: 1, username: 'user1' age: 30}]
```

Como puedes ver, el id del primer usuario insertado es reusado.

## Índices mayúsculas-minúsculas

Todos los índices en las propiedades `String` y `List<String>` por defecto distinguen entre mayúsculas y minúsculas. Si quieres que tu índice no haga esta distinción, puedes usar la opción `caseSensitive`:

```dart
@collection
class Person {
  Id? id;

  @Index(caseSensitive: false)
  late String name;

  @Index(caseSensitive: false)
  late List<String> tags;
}
```

## Tipos de índices

Existen diferentes tipos de índices. La mayoría del tiempo, querrás usar un índice tipo `IndexType.value`, pero los índices hash son más eficientes.

### Índice valor

El índice valor es el tipo por defecto y el único posible para todas las propiedades que no sean se tipo String o List. Para construir el índice se utilizan los valores de las propiedades. En el caso de las listas, se utilizan sus elementos. De los tres tipos de índices disponibles, es el más flexible como así también el que más espacio utiliza.

:::tip
Usa `IndexType.value` para primitivas, Strings donde necesites una cláusula `startsWith()`, y listas si quieres buscar por elementos individuales.
:::

### Índice hash

Los strings y las listas pueden reducirse para disminuir significativamente el espacio en disco que requiere el índice. La desventaja es que no puede usarse para búsqueda por prefijo (cláusulas `startsWith`).

:::tip
Usa `IndexType.hash` para strings y listas si no necesitas utilizar cláusulas `startsWith` ni `elementEqualTo`.
:::

### Índice hashElements

Las listas de string pueden reducirse como un todo (usando `IndexType.hash`), o los elementos de la lista pueden reducirse individualmente (usando `IndexType.hashElements`), creando un índice multi-entrada con los elementos reducidos.

:::tip
Usa `IndexType.hashElements` para `List<String>` sin nevesitas aplicar cláusulas `elementEqualTo`.
:::

## Índices compuestos

Un índice compuesto es un índice con múltiples propiedades. Isar te permite crear índices compuestos de hasta tres propiedades.

Los índices compuestos también son conocidos como índices multi-columna.

Probablemente sea mejor comenzar con un ejemplo. Creamos una colleción person y definimos un índice compuesto en las propiedades age y name:

```dart
@collection
class Person {
  Id? id;

  late String name;

  @Index(composite: [CompositeIndex('name')])
  late int age;

  late String hometown;
}
```

**Datos:**

| id  | name   | age | hometown  |
| --- | ------ | --- | --------- |
| 1   | Daniel | 20  | Berlin    |
| 2   | Anne   | 20  | Paris     |
| 3   | Carl   | 24  | San Diego |
| 4   | Simon  | 24  | Munich    |
| 5   | David  | 20  | New York  |
| 6   | Carl   | 24  | London    |
| 7   | Audrey | 30  | Prague    |
| 8   | Anne   | 24  | Paris     |

**Índice generado:**

| age | name   | id  |
| --- | ------ | --- |
| 20  | Anne   | 2   |
| 20  | Daniel | 1   |
| 20  | David  | 5   |
| 24  | Anne   | 8   |
| 24  | Carl   | 3   |
| 24  | Carl   | 6   |
| 24  | Simon  | 4   |
| 30  | Audrey | 7   |

El índice compuesto generado contiene a todas las personas ordenadas por su edad y su nombre.

Los índices compuestos son geniales si necesitas crear consultas eficientes ordenadas por propiedades múltiples. También te pemiten utilizar cláusulas `where` avanzadas:

```dart
final result = await isar.where()
  .ageNameEqualTo(24, 'Carl')
  .hometownProperty()
  .findAll() // -> ['San Diego', 'London']
```

La última propiedad del índice compuesto también soporta condiciones como `startsWith()` o `lessThan()`:

```dart
final result = await isar.where()
  .ageEqualToNameStartsWith(20, 'Da')
  .findAll() // -> [Daniel, David]
```

## Índices multi-entrada

Si indexas una lista usando `IndexType.value`, Isar automáticamente creará un índice multi-entrada, y cada elemento en la lista será indexado hacia el objeto, Funciona para cualquier tipo de lista.

Aplicaciones prácticas del uso de índices multi-entrada incluyen indexar una lista de etiquetas o crear un índice de texto completo.

```dart
@collection
class Product {
  Id? id;

  late String description;

  @Index(type: IndexType.value, caseSensitive: false)
  List<String> get descriptionWords => Isar.splitWords(description);
}
```

`Isar.splitWords()` divide la cadena en palabras de acuerdo con la especificación [Unicode Annex #29](https://unicode.org/reports/tr29/), por lo tanto funciona correctamente para cualquier idioma.

**Data:**

| id  | description                  | descriptionWords             |
| --- | ---------------------------- | ---------------------------- |
| 1   | comfortable blue t-shirt     | [comfortable, blue, t-shirt] |
| 2   | comfortable, red pullover!!! | [comfortable, red, pullover] |
| 3   | plain red t-shirt            | [plain, red, t-shirt]        |
| 4   | red necktie (super red)      | [red, necktie, super, red]   |

Entradas con palabras duplicadas paraecen sólo una vez en el índice.

**Índice generado:**

| descriptionWords | id        |
| ---------------- | --------- |
| comfortable      | [1, 2]    |
| blue             | 1         |
| necktie          | 4         |
| plain            | 3         |
| pullover         | 2         |
| red              | [2, 3, 4] |
| super            | 4         |
| t-shirt          | [1, 3]    |

Este índice ahora puede usarse para cláusulas por prefijo (o igualdad) de las palabras individuales de la descripción.

:::tip
En lugar de guardar las palabaras directamente, considera usar los resultados de un [algoritmo de fonética](https://en.wikipedia.org/wiki/Phonetic_algorithm) como [Soundex](https://es.wikipedia.org/wiki/Soundex).
:::


================================================
FILE: docs/docs/es/limitations.md
================================================
# Limitaciones

Como ya sabes, Isar funciona en dispositivos móbiles y de escritorio corriendo en la VM así como en la web. Ambas plataformas son muy diferentes y tienen distintas limitaciones.

## Limitaciones de la VM

- Para consultas `where` de prefijo sólo se pueden usar los primeros 1024 bytes
- Los objetos pueden ser de 16MB en tamaño como máximo

## Limitaciones de la Web

Dado que Isar Web confía en IndexedDB, hay más limitaciones pero apenas son notadas mientras se usa Isar.

- No hay soporte para métodos síncronos
- Actualmente, los filtros `Isar.splitWords()` y `.matches()` aún no están implementados
- Los cambios en los esquemas no son estrechamente verificados como en la VM entonces sé cuidadoso de cumplir con las reglas
- Todos los tipos numéricos se almacenan como `double` (el único tipo numérico de js) por lo tanto `@Size32` no tiene efecto
- Lo índices se representan de forma diferente entonces los índices hash no usan menos espacio (pero funcionan de la misma manera)
- `col.delete()` y `col.deleteAll()` funcionan correctamente pero el valor retornado es incorrecto
- `col.clear()` no resetea el valor de auto incrementado
- `NaN` no está soportado como valor


================================================
FILE: docs/docs/es/links.md
================================================
---
title: Enlaces
---

# Enlaces

Los enlaces permiten establecer relaciones entre objetos, como ser el autor de un comentario (User). Con los enlaces de Isar, se pueden modelar relaciones `1:1`, `1:n`, y `n:n`. Usar enlaces es menos ergonómico que usar objetos embebidos y se deberían usar los últimos siempre que sea posible.

Piensa en el enlace como una tabla separada que contiene la relación. Es similar a las relaciones de SQL pero tiene una API y características diferentes.

## IsarLink

`IsarLink<T>` puede contener uno o nigún objeto relacionado, y puede ser usado para expresar una relación a uno. `IsarLink` tiene una sola propiedad llamada `value` que contiene el objeto enlazado.

Los enlaces son perezosos, entonces tienes que decirle explícitamente al `IsarLink` que cargue o guarde el valor `value`. Puedes hacer esto llamando a `linkProperty.load()` y `linkProperty.save()` respectivamente.

:::tip
La propiedad id de las colecciones de origen y destino de un enlace deberían ser no final.
:::

En las plataformas no web, los enlaces se cargan automáticamente cuando los usas por primera vez. Comencemos agregando un IsarLink a la colección:

```dart
@collection
class Teacher {
  Id? id;

  late String subject;
}

@collection
class Student {
  Id? id;

  late String name;

  final teacher = IsarLink<Teacher>();
}
```

Definimos un enlace entre maestros y estudiante. En este ejemplo, cada estudiante puede tener exactamente un maestro.

Primero, creamos el maestro y lo asignamos a un estudiante. Tendremos que insertar el maestro y guardar el enlace manualmente.

```dart
final mathTeacher = Teacher()..subject = 'Math';

final linda = Student()
  ..name = 'Linda'
  ..teacher.value = mathTeacher;

await isar.writeTxn(() async {
  await isar.students.put(linda);
  await isar.teachers.put(mathTeacher);
  await linda.teacher.save();
});
```

Ahora podemos usar el enlace:

```dart
final linda = await isar.students.where().nameEqualTo('Linda').findFirst();

final teacher = linda.teacher.value; // > Teacher(subject: 'Math')
```

Probemos hacer los mismo usando código síncrono. No necesitamos guardar el enlace porque `.putSync()` guarda todos los enlaces automáticamente. Incluso crea el maestro por nosotros.

```dart
final englishTeacher = Teacher()..subject = 'English';

final david = Student()
  ..name = 'David'
  ..teacher.value = englishTeacher;

isar.writeTxnSync(() {
  isar.students.putSync(david);
});
```

## IsarLinks

Tendría más sentido si un estudiante del ejemplo anterior pudiera tener más de un maestro. Afortunadamente, Isar tiene `IsarLinks<T>`, que pueden tener múltiples objetos relacionados y expresar relaciones `to-many`.

`IsarLinks<T>` extiende `Set<T>` y expone todos los métodos que están permitidos para los sets.

El comportamiento de `IsarLinks` es similar a `IsarLink` y también es perezoso. Para cargar todos los objetos enlazados se debe llamar a `linkProperty.load()`. Para guardar los cambios, llama a `linkProperty.save()`.

Internamente ambos `IsarLink` y `IsarLinks` se representan de la misma forma. Podemos actualizar el `IsarLink<Teacher>` anterior a un `IsarLinks<Teacher>` para asignar múltiples maestros a un estudiante (sin perder datos).

```dart
@collection
class Student {
  Id? id;

  late String name;

  final teachers = IsarLinks<Teacher>();
}
```

Esto funciona porque no cambiamos el nombre del enlace (`teacher`), entonces Isar lo recuerda de antes.

```dart
final biologyTeacher = Teacher()..subject = 'Biology';

final linda = isar.students.where()
  .filter()
  .nameEqualTo('Linda')
  .findFirst();

print(linda.teachers); // {Teacher('Math')}

linda.teachers.add(biologyTeacher);

await isar.writeTxn(() async {
  await linda.teachers.save();
});

print(linda.teachers); // {Teacher('Math'), Teacher('Biology')}
```

## Backlinks

Te escuché decir, "Y si necesito expresar relaciones a la inversa?". No te precupes! Te presento a los `backlinks`.

Los backlinks son enlaces en la dirección inversa. Cada enlace tiene un backlink implícito. Puedes hacer que esté disponible para tu aplicación anotando un `IsarLink` o `IsarLinks` con `@Backlink()`.

Los backlinks no requieren memoria o recursos adicionales; puedes agregarlos libremente, puedes borrarlos o renombrarlos sin perder datos.

Queremos saber qué estudiantes tiene un maestro, entonces definimos un backlink:

```dart
@collection
class Teacher {
  Id id;

  late String subject;

  @Backlink(to: 'teacher')
  final student = IsarLinks<Student>();
}
```

Necesitamos especificar el enlace al cual apunta el backlink. Es posible tener múltiples enlaces diferentes entre dos objetos.

## Inicializar enlaces

Los `IsarLink` y `IsarLinks` tienen un constructor de cero argumentos,que debería ser usado para asignar la propiedad enlace que se crea el objeto. Es buena práctica hacer que las propiedades de los enlaces sean `final`.

Cuando insertas (`put()`) tus objectos por primera vez, el enlace se inicializa con las collecciones origen y destino, y puedes llamar métodos como `load()` y `save()`. Un enlace comienza a serguir los cambios inmediatamente después de su creación, entonces puede agregar o quitar relaciones incluso antes que el enlace sea inicializado.

:::danger
Es ilegal mover un enlace a otro objeto.
:::


================================================
FILE: docs/docs/es/queries.md
================================================
---
title: Consultas
---

# Consultas

Las consultas se utilizan para buscar registros que coincidan con ciertas condiciones, por ejemplo:

- Buscar todos los contactos favoritos
- Buscar contactos con nombre distinto
- Borrar todos los contactos que no tengan definido
Download .txt
gitextract_p8q538ro/

├── .all-contributorsrc
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.md
│   │   ├── config.yml
│   │   └── feature_request.md
│   ├── actions/
│   │   └── prepare-build/
│   │       └── action.yaml
│   ├── dependabot.yaml
│   └── workflows/
│       ├── cron_test.yaml
│       ├── docs.yaml
│       ├── release.yaml
│       ├── skynet.yaml
│       ├── test.yaml
│       └── testlab.yaml
├── .gitignore
├── Cargo.toml
├── LICENSE
├── TODO.md
├── docs/
│   ├── .gitignore
│   ├── README.md
│   ├── docs/
│   │   ├── .vuepress/
│   │   │   ├── config.ts
│   │   │   ├── locales.ts
│   │   │   ├── redirect.ts
│   │   │   └── styles/
│   │   │       └── index.scss
│   │   ├── README.md
│   │   ├── crud.md
│   │   ├── de/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── es/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── faq.md
│   │   ├── fr/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── indexes.md
│   │   ├── it/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── ja/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── ko/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── limitations.md
│   │   ├── links.md
│   │   ├── pt/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── queries.md
│   │   ├── recipes/
│   │   │   ├── data_migration.md
│   │   │   ├── full_text_search.md
│   │   │   ├── multi_isolate.md
│   │   │   └── string_ids.md
│   │   ├── schema.md
│   │   ├── transactions.md
│   │   ├── tutorials/
│   │   │   └── quickstart.md
│   │   ├── ur/
│   │   │   ├── README.md
│   │   │   ├── crud.md
│   │   │   ├── faq.md
│   │   │   ├── indexes.md
│   │   │   ├── limitations.md
│   │   │   ├── links.md
│   │   │   ├── queries.md
│   │   │   ├── recipes/
│   │   │   │   ├── data_migration.md
│   │   │   │   ├── full_text_search.md
│   │   │   │   ├── multi_isolate.md
│   │   │   │   └── string_ids.md
│   │   │   ├── schema.md
│   │   │   ├── transactions.md
│   │   │   ├── tutorials/
│   │   │   │   └── quickstart.md
│   │   │   └── watchers.md
│   │   ├── watchers.md
│   │   └── zh/
│   │       ├── README.md
│   │       ├── crud.md
│   │       ├── faq.md
│   │       ├── indexes.md
│   │       ├── limitations.md
│   │       ├── links.md
│   │       ├── queries.md
│   │       ├── recipes/
│   │       │   ├── data_migration.md
│   │       │   ├── full_text_search.md
│   │       │   ├── multi_isolate.md
│   │       │   └── string_ids.md
│   │       ├── schema.md
│   │       ├── transactions.md
│   │       ├── tutorials/
│   │       │   └── quickstart.md
│   │       └── watchers.md
│   └── package.json
├── examples/
│   └── pub/
│       ├── .gitignore
│       ├── .metadata
│       ├── README.md
│       ├── analysis_options.yaml
│       ├── lib/
│       │   ├── asset_loader.dart
│       │   ├── main.dart
│       │   ├── models/
│       │   │   ├── api/
│       │   │   │   ├── metrics.dart
│       │   │   │   └── package.dart
│       │   │   ├── asset.dart
│       │   │   └── package.dart
│       │   ├── package_manager.dart
│       │   ├── provider.dart
│       │   ├── repository.dart
│       │   └── ui/
│       │       ├── app_bar.dart
│       │       ├── detail_page.dart
│       │       ├── home_page.dart
│       │       ├── markdown_viewer.dart
│       │       ├── package_metadata.dart
│       │       ├── package_versions.dart
│       │       ├── publisher.dart
│       │       ├── search.dart
│       │       └── search_page.dart
│       └── pubspec.yaml
├── packages/
│   ├── isar/
│   │   ├── .gitignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── example/
│   │   │   └── README.md
│   │   ├── lib/
│   │   │   ├── isar.dart
│   │   │   └── src/
│   │   │       ├── annotations/
│   │   │       │   ├── backlink.dart
│   │   │       │   ├── collection.dart
│   │   │       │   ├── embedded.dart
│   │   │       │   ├── enumerated.dart
│   │   │       │   ├── ignore.dart
│   │   │       │   ├── index.dart
│   │   │       │   ├── name.dart
│   │   │       │   └── type.dart
│   │   │       ├── common/
│   │   │       │   ├── isar_common.dart
│   │   │       │   ├── isar_link_base_impl.dart
│   │   │       │   ├── isar_link_common.dart
│   │   │       │   ├── isar_links_common.dart
│   │   │       │   └── schemas.dart
│   │   │       ├── isar.dart
│   │   │       ├── isar_collection.dart
│   │   │       ├── isar_connect.dart
│   │   │       ├── isar_connect_api.dart
│   │   │       ├── isar_error.dart
│   │   │       ├── isar_link.dart
│   │   │       ├── isar_reader.dart
│   │   │       ├── isar_writer.dart
│   │   │       ├── native/
│   │   │       │   ├── bindings.dart
│   │   │       │   ├── encode_string.dart
│   │   │       │   ├── index_key.dart
│   │   │       │   ├── isar_collection_impl.dart
│   │   │       │   ├── isar_core.dart
│   │   │       │   ├── isar_impl.dart
│   │   │       │   ├── isar_link_impl.dart
│   │   │       │   ├── isar_reader_impl.dart
│   │   │       │   ├── isar_writer_impl.dart
│   │   │       │   ├── open.dart
│   │   │       │   ├── query_build.dart
│   │   │       │   ├── query_impl.dart
│   │   │       │   ├── split_words.dart
│   │   │       │   └── txn.dart
│   │   │       ├── query.dart
│   │   │       ├── query_builder.dart
│   │   │       ├── query_builder_extensions.dart
│   │   │       ├── query_components.dart
│   │   │       ├── schema/
│   │   │       │   ├── collection_schema.dart
│   │   │       │   ├── index_schema.dart
│   │   │       │   ├── link_schema.dart
│   │   │       │   ├── property_schema.dart
│   │   │       │   └── schema.dart
│   │   │       └── web/
│   │   │           ├── bindings.dart
│   │   │           ├── isar_collection_impl.dart
│   │   │           ├── isar_impl.dart
│   │   │           ├── isar_link_impl.dart
│   │   │           ├── isar_reader_impl.dart
│   │   │           ├── isar_web.dart
│   │   │           ├── isar_writer_impl.dart
│   │   │           ├── open.dart
│   │   │           ├── query_build.dart
│   │   │           ├── query_impl.dart
│   │   │           └── split_words.dart
│   │   ├── pubspec.yaml
│   │   ├── test/
│   │   │   └── isar_reader_writer_test.dart
│   │   └── tool/
│   │       ├── get_version.dart
│   │       └── verify_release_version.dart
│   ├── isar_core/
│   │   ├── Cargo.toml
│   │   ├── README.md
│   │   ├── src/
│   │   │   ├── collection.rs
│   │   │   ├── cursor.rs
│   │   │   ├── error.rs
│   │   │   ├── index/
│   │   │   │   ├── index_key.rs
│   │   │   │   ├── index_key_builder.rs
│   │   │   │   └── mod.rs
│   │   │   ├── instance.rs
│   │   │   ├── legacy/
│   │   │   │   ├── isar_object_v1.rs
│   │   │   │   └── mod.rs
│   │   │   ├── lib.rs
│   │   │   ├── link.rs
│   │   │   ├── mdbx/
│   │   │   │   ├── cursor.rs
│   │   │   │   ├── db.rs
│   │   │   │   ├── env.rs
│   │   │   │   ├── mod.rs
│   │   │   │   └── txn.rs
│   │   │   ├── object/
│   │   │   │   ├── data_type.rs
│   │   │   │   ├── id.rs
│   │   │   │   ├── isar_object.rs
│   │   │   │   ├── json_encode_decode.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── object_builder.rs
│   │   │   │   └── property.rs
│   │   │   ├── query/
│   │   │   │   ├── fast_wild_match.rs
│   │   │   │   ├── filter.rs
│   │   │   │   ├── id_where_clause.rs
│   │   │   │   ├── index_where_clause.rs
│   │   │   │   ├── link_where_clause.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── query_builder.rs
│   │   │   │   └── where_clause.rs
│   │   │   ├── schema/
│   │   │   │   ├── collection_schema.rs
│   │   │   │   ├── index_schema.rs
│   │   │   │   ├── link_schema.rs
│   │   │   │   ├── migrate_v1.rs
│   │   │   │   ├── mod.rs
│   │   │   │   ├── property_schema.rs
│   │   │   │   └── schema_manager.rs
│   │   │   ├── txn.rs
│   │   │   └── watch/
│   │   │       ├── change_set.rs
│   │   │       ├── isar_watchers.rs
│   │   │       ├── mod.rs
│   │   │       └── watcher.rs
│   │   └── tests/
│   │       ├── binary_golden.json
│   │       ├── test_binary.rs
│   │       └── test_hash.rs
│   ├── isar_core_ffi/
│   │   ├── .cargo/
│   │   │   └── config.toml
│   │   ├── Cargo.toml
│   │   ├── build.rs
│   │   └── src/
│   │       ├── c_object_set.rs
│   │       ├── crud.rs
│   │       ├── dart.rs
│   │       ├── error.rs
│   │       ├── filter.rs
│   │       ├── index_key.rs
│   │       ├── instance.rs
│   │       ├── lib.rs
│   │       ├── link.rs
│   │       ├── query.rs
│   │       ├── query_aggregation.rs
│   │       ├── txn.rs
│   │       └── watchers.rs
│   ├── isar_flutter_libs/
│   │   ├── .pubignore
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── android/
│   │   │   ├── .gitignore
│   │   │   ├── build.gradle
│   │   │   ├── gradle/
│   │   │   │   └── wrapper/
│   │   │   │       └── gradle-wrapper.properties
│   │   │   ├── gradle.properties
│   │   │   ├── settings.gradle
│   │   │   └── src/
│   │   │       └── main/
│   │   │           ├── AndroidManifest.xml
│   │   │           └── java/
│   │   │               └── dev/
│   │   │                   └── isar/
│   │   │                       └── isar_flutter_libs/
│   │   │                           └── IsarFlutterLibsPlugin.java
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   ├── Assets/
│   │   │   │   └── .gitkeep
│   │   │   ├── Classes/
│   │   │   │   ├── IsarFlutterLibsPlugin.h
│   │   │   │   ├── IsarFlutterLibsPlugin.m
│   │   │   │   ├── SwiftIsarFlutterLibsPlugin.swift
│   │   │   │   └── binding.h
│   │   │   ├── Resources/
│   │   │   │   └── PrivacyInfo.xcprivacy
│   │   │   └── isar_flutter_libs.podspec
│   │   ├── lib/
│   │   │   └── isar_flutter_libs.dart
│   │   ├── linux/
│   │   │   ├── CMakeLists.txt
│   │   │   ├── include/
│   │   │   │   └── isar_flutter_libs/
│   │   │   │       └── isar_flutter_libs_plugin.h
│   │   │   └── isar_flutter_libs_plugin.cc
│   │   ├── macos/
│   │   │   ├── Classes/
│   │   │   │   └── IsarFlutterLibsPlugin.swift
│   │   │   └── isar_flutter_libs.podspec
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── windows/
│   │       ├── .gitignore
│   │       ├── CMakeLists.txt
│   │       ├── include/
│   │       │   └── isar_flutter_libs/
│   │       │       └── isar_flutter_libs_plugin.h
│   │       └── isar_flutter_libs_plugin.cpp
│   ├── isar_generator/
│   │   ├── CHANGELOG.md
│   │   ├── LICENSE
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── build.yaml
│   │   ├── lib/
│   │   │   ├── isar_generator.dart
│   │   │   └── src/
│   │   │       ├── code_gen/
│   │   │       │   ├── by_index_generator.dart
│   │   │       │   ├── collection_schema_generator.dart
│   │   │       │   ├── query_distinct_by_generator.dart
│   │   │       │   ├── query_filter_generator.dart
│   │   │       │   ├── query_filter_length.dart
│   │   │       │   ├── query_link_generator.dart
│   │   │       │   ├── query_object_generator.dart
│   │   │       │   ├── query_property_generator.dart
│   │   │       │   ├── query_sort_by_generator.dart
│   │   │       │   ├── query_where_generator.dart
│   │   │       │   └── type_adapter_generator.dart
│   │   │       ├── collection_generator.dart
│   │   │       ├── helper.dart
│   │   │       ├── isar_analyzer.dart
│   │   │       ├── isar_type.dart
│   │   │       └── object_info.dart
│   │   ├── pubspec.yaml
│   │   ├── pubspec_overrides.yaml
│   │   └── test/
│   │       ├── error_test.dart
│   │       └── errors/
│   │           ├── class/
│   │           │   ├── abstract.dart
│   │           │   ├── collection_supertype.dart
│   │           │   ├── constructor_named.dart
│   │           │   ├── constructor_unknown_parameter.dart
│   │           │   ├── constructor_wrong_parameter.dart
│   │           │   ├── enum.dart
│   │           │   ├── invalid_name.dart
│   │           │   ├── mixin.dart
│   │           │   ├── private.dart
│   │           │   └── variable.dart
│   │           ├── id/
│   │           │   ├── duplicate.dart
│   │           │   └── missing.dart
│   │           ├── index/
│   │           │   ├── composite_double_not_last.dart
│   │           │   ├── composite_non_hashed_list.dart
│   │           │   ├── composite_string_value_not_last.dart
│   │           │   ├── contains_id.dart
│   │           │   ├── double_list_hashed.dart
│   │           │   ├── duplicate_name.dart
│   │           │   ├── duplicate_property.dart
│   │           │   ├── invalid_name.dart
│   │           │   ├── non_string_hashed.dart
│   │           │   ├── non_string_list_hashed_elements.dart
│   │           │   ├── non_unique_replace.dart
│   │           │   ├── object_hashed.dart
│   │           │   ├── object_list_hashed.dart
│   │           │   └── property_does_not_exist.dart
│   │           ├── link/
│   │           │   ├── backlink_target_does_no_exist.dart
│   │           │   ├── backlink_target_is_backlink.dart
│   │           │   ├── backlink_target_not_a_link.dart
│   │           │   ├── duplicate_name.dart
│   │           │   ├── invalid_name.dart
│   │           │   ├── late.dart
│   │           │   ├── nullable.dart
│   │           │   ├── target_not_a_collection.dart
│   │           │   └── type_nullable.dart
│   │           └── property/
│   │               ├── duplicate_name.dart
│   │               ├── enum_bool_type.dart
│   │               ├── enum_double_type.dart
│   │               ├── enum_duplicate.dart
│   │               ├── enum_float_type.dart
│   │               ├── enum_list_type.dart
│   │               ├── enum_not_annotated.dart
│   │               ├── enum_null_value.dart
│   │               ├── enum_object_type.dart
│   │               ├── invalid_name.dart
│   │               ├── null_byte.dart
│   │               ├── null_byte_element.dart
│   │               └── unsupported_type.dart
│   ├── isar_inspector/
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── isar_inspector.iml
│   │   ├── lib/
│   │   │   ├── collection/
│   │   │   │   ├── button_prev_next.dart
│   │   │   │   ├── button_sort.dart
│   │   │   │   ├── collection_area.dart
│   │   │   │   └── objects_list_sliver.dart
│   │   │   ├── collections_list.dart
│   │   │   ├── connect_client.dart
│   │   │   ├── connected_layout.dart
│   │   │   ├── connection_screen.dart
│   │   │   ├── error_screen.dart
│   │   │   ├── instance_selector.dart
│   │   │   ├── main.dart
│   │   │   ├── object/
│   │   │   │   ├── isar_object.dart
│   │   │   │   ├── object_view.dart
│   │   │   │   ├── property_builder.dart
│   │   │   │   ├── property_embedded_view.dart
│   │   │   │   ├── property_link_view.dart
│   │   │   │   ├── property_value.dart
│   │   │   │   └── property_view.dart
│   │   │   ├── query_builder/
│   │   │   │   ├── query_filter.dart
│   │   │   │   └── query_group.dart
│   │   │   ├── sidebar.dart
│   │   │   └── util.dart
│   │   ├── pubspec.yaml
│   │   └── web/
│   │       ├── index.html
│   │       └── manifest.json
│   ├── isar_test/
│   │   ├── .gitignore
│   │   ├── .metadata
│   │   ├── README.md
│   │   ├── analysis_options.yaml
│   │   ├── android/
│   │   │   ├── .gitignore
│   │   │   ├── app/
│   │   │   │   ├── build.gradle
│   │   │   │   └── src/
│   │   │   │       ├── androidTest/
│   │   │   │       │   └── java/
│   │   │   │       │       └── dev/
│   │   │   │       │           └── isar/
│   │   │   │       │               └── isar_test/
│   │   │   │       │                   └── MainActivityTest.java
│   │   │   │       └── main/
│   │   │   │           ├── AndroidManifest.xml
│   │   │   │           ├── kotlin/
│   │   │   │           │   └── dev/
│   │   │   │           │       └── isar/
│   │   │   │           │           └── isar_test/
│   │   │   │           │               └── MainActivity.kt
│   │   │   │           └── res/
│   │   │   │               ├── drawable/
│   │   │   │               │   └── launch_background.xml
│   │   │   │               └── values/
│   │   │   │                   └── styles.xml
│   │   │   ├── build.gradle
│   │   │   ├── gradle/
│   │   │   │   └── wrapper/
│   │   │   │       └── gradle-wrapper.properties
│   │   │   ├── gradle.properties
│   │   │   ├── settings.gradle
│   │   │   └── settings_aar.gradle
│   │   ├── integration_test/
│   │   │   └── integration_test.dart
│   │   ├── ios/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   ├── AppFrameworkInfo.plist
│   │   │   │   ├── Debug.xcconfig
│   │   │   │   └── Release.xcconfig
│   │   │   ├── Podfile
│   │   │   ├── Runner/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   ├── AppIcon.appiconset/
│   │   │   │   │   │   └── Contents.json
│   │   │   │   │   └── LaunchImage.imageset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Base.lproj/
│   │   │   │   │   ├── LaunchScreen.storyboard
│   │   │   │   │   └── Main.storyboard
│   │   │   │   ├── Info.plist
│   │   │   │   └── Runner-Bridging-Header.h
│   │   │   ├── Runner.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace/
│   │   │   │   │   ├── contents.xcworkspacedata
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       ├── IDEWorkspaceChecks.plist
│   │   │   │   │       └── WorkspaceSettings.xcsettings
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           └── Runner.xcscheme
│   │   │   └── Runner.xcworkspace/
│   │   │       ├── contents.xcworkspacedata
│   │   │       └── xcshareddata/
│   │   │           ├── IDEWorkspaceChecks.plist
│   │   │           └── WorkspaceSettings.xcsettings
│   │   ├── lib/
│   │   │   ├── isar_test.dart
│   │   │   └── src/
│   │   │       ├── common.dart
│   │   │       ├── init_native.dart
│   │   │       ├── init_web.dart
│   │   │       ├── isar_web_src.dart
│   │   │       ├── listener.dart
│   │   │       ├── matchers.dart
│   │   │       ├── sync_async_helper.dart
│   │   │       ├── sync_future.dart
│   │   │       └── twitter/
│   │   │           ├── entities.dart
│   │   │           ├── geo.dart
│   │   │           ├── media.dart
│   │   │           ├── tweet.dart
│   │   │           ├── user.dart
│   │   │           └── util.dart
│   │   ├── linux/
│   │   │   ├── .gitignore
│   │   │   ├── CMakeLists.txt
│   │   │   ├── flutter/
│   │   │   │   ├── CMakeLists.txt
│   │   │   │   ├── generated_plugin_registrant.cc
│   │   │   │   ├── generated_plugin_registrant.h
│   │   │   │   └── generated_plugins.cmake
│   │   │   ├── main.cc
│   │   │   ├── my_application.cc
│   │   │   └── my_application.h
│   │   ├── macos/
│   │   │   ├── .gitignore
│   │   │   ├── Flutter/
│   │   │   │   ├── Flutter-Debug.xcconfig
│   │   │   │   └── Flutter-Release.xcconfig
│   │   │   ├── Podfile
│   │   │   ├── Runner/
│   │   │   │   ├── AppDelegate.swift
│   │   │   │   ├── Assets.xcassets/
│   │   │   │   │   └── AppIcon.appiconset/
│   │   │   │   │       └── Contents.json
│   │   │   │   ├── Base.lproj/
│   │   │   │   │   └── MainMenu.xib
│   │   │   │   ├── Configs/
│   │   │   │   │   ├── AppInfo.xcconfig
│   │   │   │   │   ├── Debug.xcconfig
│   │   │   │   │   ├── Release.xcconfig
│   │   │   │   │   └── Warnings.xcconfig
│   │   │   │   ├── DebugProfile.entitlements
│   │   │   │   ├── Info.plist
│   │   │   │   ├── MainFlutterWindow.swift
│   │   │   │   └── Release.entitlements
│   │   │   ├── Runner.xcodeproj/
│   │   │   │   ├── project.pbxproj
│   │   │   │   ├── project.xcworkspace/
│   │   │   │   │   └── xcshareddata/
│   │   │   │   │       └── IDEWorkspaceChecks.plist
│   │   │   │   └── xcshareddata/
│   │   │   │       └── xcschemes/
│   │   │   │           └── Runner.xcscheme
│   │   │   └── Runner.xcworkspace/
│   │   │       ├── contents.xcworkspacedata
│   │   │       └── xcshareddata/
│   │   │           └── IDEWorkspaceChecks.plist
│   │   ├── pubspec.yaml
│   │   ├── test/
│   │   │   ├── clear_test.dart
│   │   │   ├── collection_size_test.dart
│   │   │   ├── compact_on_launch_test.dart
│   │   │   ├── constructor_test.dart
│   │   │   ├── copy_to_file_test.dart
│   │   │   ├── crud_test.dart
│   │   │   ├── default_value/
│   │   │   │   ├── common.dart
│   │   │   │   ├── default_test.dart
│   │   │   │   ├── no_default_test.dart
│   │   │   │   └── nullable_test.dart
│   │   │   ├── embedded_test.dart
│   │   │   ├── enum_test.dart
│   │   │   ├── filter/
│   │   │   │   ├── filter_bool_list_test.dart
│   │   │   │   ├── filter_bool_test.dart
│   │   │   │   ├── filter_byte_list_test.dart
│   │   │   │   ├── filter_byte_test.dart
│   │   │   │   ├── filter_date_time_list_test.dart
│   │   │   │   ├── filter_date_time_test.dart
│   │   │   │   ├── filter_embedded_list_test.dart
│   │   │   │   ├── filter_embedded_test.dart
│   │   │   │   ├── filter_float_list_test.dart
│   │   │   │   ├── filter_float_test.dart
│   │   │   │   ├── filter_id_test.dart
│   │   │   │   ├── filter_int_test.dart
│   │   │   │   ├── filter_list_length_test.dart
│   │   │   │   ├── filter_string_list_test.dart
│   │   │   │   ├── filter_string_test.dart
│   │   │   │   └── link/
│   │   │   │       ├── filter_backlink_test.dart
│   │   │   │       ├── filter_backlinks_test.dart
│   │   │   │       ├── filter_link_circular_direct_test.dart
│   │   │   │       ├── filter_link_circular_indirect_test.dart
│   │   │   │       ├── filter_link_nested_test.dart
│   │   │   │       ├── filter_link_self_test.dart
│   │   │   │       ├── filter_link_test.dart
│   │   │   │       ├── filter_links_self_test.dart
│   │   │   │       └── filter_links_test.dart
│   │   │   ├── id_test.dart
│   │   │   ├── index/
│   │   │   │   ├── composite2_test.dart
│   │   │   │   ├── composite3_test.dart
│   │   │   │   ├── composite_string_test.dart
│   │   │   │   ├── get_by_delete_by_test.dart
│   │   │   │   ├── multi_entry_test.dart
│   │   │   │   ├── put_by_test.dart
│   │   │   │   ├── where_bool_list_test.dart
│   │   │   │   ├── where_bool_test.dart
│   │   │   │   ├── where_byte_list_test.dart
│   │   │   │   ├── where_byte_test.dart
│   │   │   │   ├── where_date_time_list_test.dart
│   │   │   │   ├── where_date_time_test.dart
│   │   │   │   ├── where_float_list_test.dart
│   │   │   │   ├── where_float_test.dart
│   │   │   │   ├── where_id_test.dart
│   │   │   │   ├── where_int_test.dart
│   │   │   │   ├── where_string_list_test.dart
│   │   │   │   └── where_string_test.dart
│   │   │   ├── inheritance_test.dart
│   │   │   ├── instance_test.dart
│   │   │   ├── isolate_test.dart
│   │   │   ├── json_test.dart
│   │   │   ├── link_test.dart
│   │   │   ├── links/
│   │   │   │   ├── backlink_test.dart
│   │   │   │   ├── link_test.dart
│   │   │   │   └── links_test.dart
│   │   │   ├── max_size_test.dart
│   │   │   ├── migration/
│   │   │   │   ├── add_remove_collection_test.dart
│   │   │   │   ├── add_remove_embedded_field_test.dart
│   │   │   │   ├── add_remove_field_test.dart
│   │   │   │   ├── add_remove_index_test.dart
│   │   │   │   ├── add_remove_link_test.dart
│   │   │   │   ├── change_field_embedded_test.dart
│   │   │   │   ├── change_field_nullability_test.dart
│   │   │   │   ├── change_field_type_test.dart
│   │   │   │   └── change_link_links_test.dart
│   │   │   ├── mutli_type_model.dart
│   │   │   ├── name_test.dart
│   │   │   ├── open_close_isar_listener_test.dart
│   │   │   ├── other_test.dart
│   │   │   ├── query/
│   │   │   │   ├── aggregation_test.dart
│   │   │   │   ├── embedded_test.dart
│   │   │   │   ├── group_test.dart
│   │   │   │   ├── is_empty_is_not_empty_test.dart
│   │   │   │   ├── multi_filter_test.dart
│   │   │   │   ├── offset_limit_test.dart
│   │   │   │   ├── property_test.dart
│   │   │   │   ├── sort_by_distinct_by_test.dart
│   │   │   │   └── where_sort_distinct_test.dart
│   │   │   ├── regression/
│   │   │   │   └── issue_235_rename_field_test.dart
│   │   │   ├── schema_test.dart
│   │   │   ├── stress/
│   │   │   │   ├── long_string_test.dart
│   │   │   │   └── twitter_test.dart
│   │   │   ├── transaction_test.dart
│   │   │   ├── type_models.dart
│   │   │   ├── user_model.dart
│   │   │   └── watcher_test.dart
│   │   ├── tool/
│   │   │   ├── generate_all_tests.dart
│   │   │   └── generate_long_double_test.dart
│   │   ├── web/
│   │   │   ├── index.html
│   │   │   └── manifest.json
│   │   └── windows/
│   │       ├── .gitignore
│   │       ├── CMakeLists.txt
│   │       ├── flutter/
│   │       │   ├── CMakeLists.txt
│   │       │   ├── generated_plugin_registrant.cc
│   │       │   ├── generated_plugin_registrant.h
│   │       │   └── generated_plugins.cmake
│   │       └── runner/
│   │           ├── CMakeLists.txt
│   │           ├── Runner.rc
│   │           ├── flutter_window.cpp
│   │           ├── flutter_window.h
│   │           ├── main.cpp
│   │           ├── resource.h
│   │           ├── runner.exe.manifest
│   │           ├── utils.cpp
│   │           ├── utils.h
│   │           ├── win32_window.cpp
│   │           └── win32_window.h
│   ├── isar_web/
│   │   ├── .eslintrc.yml
│   │   ├── .gitignore
│   │   ├── .prettierrc
│   │   ├── README.md
│   │   ├── package.json
│   │   ├── src/
│   │   │   ├── bulk-delete.ts
│   │   │   ├── collection.ts
│   │   │   ├── cursor.ts
│   │   │   ├── index.ts
│   │   │   ├── instance.ts
│   │   │   ├── link.ts
│   │   │   ├── open.ts
│   │   │   ├── query.ts
│   │   │   ├── schema.ts
│   │   │   ├── txn.ts
│   │   │   └── watcher.ts
│   │   ├── tsconfig.json
│   │   └── webpack.config.js
│   └── mdbx_sys/
│       ├── .gitignore
│       ├── Cargo.toml
│       ├── build.rs
│       └── src/
│           └── lib.rs
└── tool/
    ├── build.sh
    ├── build_android.sh
    ├── build_ios.sh
    ├── build_linux.sh
    ├── build_macos.sh
    ├── build_windows.sh
    ├── cbindgen.toml
    ├── download_binaries.sh
    ├── ffigen.yaml
    ├── generate_bindings.sh
    ├── prepare_tests.sh
    ├── publish.sh
    └── replace-versions.sh
Download .txt
Showing preview only (201K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (2530 symbols across 358 files)

FILE: docs/docs/.vuepress/config.ts
  function getSidebar (line 159) | function getSidebar({ locale, tutorials, concepts, recipes, sampleApps, ...
  function getSidebarChildren (line 209) | function getSidebarChildren(locale: string, children: string[]) {

FILE: docs/docs/.vuepress/locales.ts
  type LocalConfig (line 1) | interface LocalConfig {
  function getLocalePath (line 25) | function getLocalePath(code: string): string {

FILE: docs/docs/.vuepress/redirect.ts
  method enhance (line 5) | enhance({ app, router, siteData }) {

FILE: examples/pub/lib/asset_loader.dart
  class PackageAndVersion (line 11) | class PackageAndVersion {
  function loadAssets (line 18) | Future<void> loadAssets(PackageAndVersion p)

FILE: examples/pub/lib/main.dart
  function main (line 8) | void main()
  class PubApp (line 14) | class PubApp extends ConsumerWidget {
    method build (line 46) | Widget build(BuildContext context, WidgetRef ref)

FILE: examples/pub/lib/models/api/metrics.dart
  class ApiPackageMetrics (line 5) | @JsonSerializable(createToJson: false)

FILE: examples/pub/lib/models/api/package.dart
  class ApiPackage (line 6) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class ApiPackageVersion (line 24) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)

FILE: examples/pub/lib/models/asset.dart
  class Asset (line 5) | @collection
  type AssetKind (line 34) | enum AssetKind { readme, changelog }

FILE: examples/pub/lib/models/package.dart
  class Package (line 9) | @CopyWith()
    method fromApiPackage (line 76) | List<Package> fromApiPackage(ApiPackage package)
    method copyWithMetrics (line 99) | Package copyWithMetrics(ApiPackageMetrics metrics)
  class Dependency (line 137) | @embedded
    method fromDependencies (line 145) | List<Dependency> fromDependencies(
  type SupportedPlatform (line 165) | enum SupportedPlatform {

FILE: examples/pub/lib/package_manager.dart
  class PackageManager (line 8) | class PackageManager {
    method watchPackage (line 14) | Stream<Package> watchPackage(String name, {String? version})
    method watchPackageVersions (line 30) | Stream<List<Package>> watchPackageVersions(String name)
    method watchLatestVersion (line 44) | Stream<String> watchLatestVersion(String name)
    method watchPreReleaseVersion (line 60) | Stream<String?> watchPreReleaseVersion(String name)
    method loadPackage (line 83) | Future<void> loadPackage(
    method watchPackageAssets (line 127) | Stream<Map<AssetKind, String>> watchPackageAssets(
    method loadPackageAssets (line 165) | Future<void> loadPackageAssets(String name, String version)
    method search (line 169) | Future<List<String>> search(String query, int page, {bool online = true})
    method bulkLoad (line 187) | Future<void> bulkLoad(String query)
    method watchFavoriteNames (line 201) | Stream<List<String>> watchFavoriteNames()

FILE: examples/pub/lib/provider.dart
  class PackageNameVersion (line 74) | class PackageNameVersion {
  class QueryPage (line 90) | class QueryPage {

FILE: examples/pub/lib/repository.dart
  class Repository (line 10) | class Repository {
    method getPackageVersions (line 15) | Future<List<Package>> getPackageVersions(String name)
    method getPackageMetrics (line 22) | Future<ApiPackageMetrics> getPackageMetrics(
    method downloadPackage (line 32) | Future<List<int>> downloadPackage(String name, String version)
    method search (line 40) | Future<List<String>> search(String query, int page)

FILE: examples/pub/lib/ui/app_bar.dart
  class PubAppBar (line 8) | class PubAppBar extends ConsumerWidget implements PreferredSizeWidget {
    method build (line 14) | Widget build(BuildContext context, WidgetRef ref)

FILE: examples/pub/lib/ui/detail_page.dart
  class DetailPage (line 11) | class DetailPage extends ConsumerWidget {
    method build (line 22) | Widget build(BuildContext context, WidgetRef ref)
  class PackageBody (line 57) | class PackageBody extends StatefulWidget {
    method createState (line 63) | State<PackageBody> createState()
  class _PackageBodyState (line 66) | class _PackageBodyState extends State<PackageBody> {
    method build (line 70) | Widget build(BuildContext context)
  type _BodyPage (line 136) | enum _BodyPage {
  class PackageAsset (line 143) | class PackageAsset extends ConsumerWidget {
    method build (line 156) | Widget build(BuildContext context, WidgetRef ref)

FILE: examples/pub/lib/ui/home_page.dart
  class HomePage (line 9) | class HomePage extends ConsumerStatefulWidget {
    method createState (line 13) | ConsumerState<HomePage> createState()
  class _HomePageState (line 16) | class _HomePageState extends ConsumerState<HomePage> {
    method initState (line 20) | void initState()
    method build (line 32) | Widget build(BuildContext context)
  class Favorites (line 72) | class Favorites extends ConsumerWidget {
    method build (line 76) | Widget build(BuildContext context, WidgetRef ref)
  class PackageCard (line 110) | class PackageCard extends ConsumerWidget {
    method build (line 116) | Widget build(BuildContext context, WidgetRef ref)

FILE: examples/pub/lib/ui/markdown_viewer.dart
  class MarkdownViewer (line 17) | class MarkdownViewer extends ConsumerWidget {
    method build (line 23) | Widget build(BuildContext context, WidgetRef ref)

FILE: examples/pub/lib/ui/package_metadata.dart
  class PackageHeader (line 10) | class PackageHeader extends ConsumerWidget {
    method build (line 16) | Widget build(BuildContext context, WidgetRef ref)
  class Platforms (line 62) | class Platforms extends StatelessWidget {
    method build (line 69) | Widget build(BuildContext context)
  class Scores (line 115) | class Scores extends ConsumerWidget {
    method build (line 126) | Widget build(BuildContext context, WidgetRef ref)
  class ScoreItem (line 190) | class ScoreItem extends StatelessWidget {
    method build (line 203) | Widget build(BuildContext context)

FILE: examples/pub/lib/ui/package_versions.dart
  class PackageVersions (line 7) | class PackageVersions extends ConsumerWidget {
    method build (line 13) | Widget build(BuildContext context, WidgetRef ref)

FILE: examples/pub/lib/ui/publisher.dart
  class Publisher (line 3) | class Publisher extends StatelessWidget {
    method build (line 9) | Widget build(BuildContext context)

FILE: examples/pub/lib/ui/search.dart
  class Search (line 5) | class Search extends StatefulWidget {
    method createState (line 12) | State<Search> createState()
  class _SearchState (line 15) | class _SearchState extends State<Search> {
    method build (line 19) | Widget build(BuildContext context)

FILE: examples/pub/lib/ui/search_page.dart
  class SearchPage (line 8) | class SearchPage extends ConsumerStatefulWidget {
    method createState (line 14) | ConsumerState<SearchPage> createState()
  class _SearchPageState (line 17) | class _SearchPageState extends ConsumerState<SearchPage> {
    method initState (line 26) | void initState()
    method build (line 37) | Widget build(BuildContext context)
    method _loadMore (line 92) | Future<void> _loadMore()
  class SearchResult (line 109) | class SearchResult extends ConsumerWidget {
    method build (line 115) | Widget build(BuildContext context, WidgetRef ref)

FILE: packages/isar/lib/isar.dart
  type IsarUint8List (line 46) | @protected

FILE: packages/isar/lib/src/annotations/backlink.dart
  class Backlink (line 4) | @Target({TargetKind.field})

FILE: packages/isar/lib/src/annotations/collection.dart
  class Collection (line 7) | @Target({TargetKind.classType})

FILE: packages/isar/lib/src/annotations/embedded.dart
  class Embedded (line 7) | @Target({TargetKind.classType})

FILE: packages/isar/lib/src/annotations/enumerated.dart
  class Enumerated (line 7) | @Target({TargetKind.field, TargetKind.getter})
  type EnumType (line 20) | enum EnumType {

FILE: packages/isar/lib/src/annotations/ignore.dart
  class Ignore (line 7) | @Target({TargetKind.field, TargetKind.getter})

FILE: packages/isar/lib/src/annotations/index.dart
  type IndexType (line 4) | enum IndexType {
  class Index (line 19) | @Target({TargetKind.field, TargetKind.getter})
  class CompositeIndex (line 60) | class CompositeIndex {

FILE: packages/isar/lib/src/annotations/name.dart
  class Name (line 6) | @Target({TargetKind.classType, TargetKind.field, TargetKind.getter})

FILE: packages/isar/lib/src/annotations/type.dart
  type Id (line 6) | typedef Id = int;
  type byte (line 11) | typedef byte = int;
  type short (line 17) | typedef short = int;
  type float (line 20) | typedef float = double;

FILE: packages/isar/lib/src/common/isar_common.dart
  class IsarCommon (line 10) | abstract class IsarCommon extends Isar {
    method _requireNotInTxn (line 19) | void _requireNotInTxn()
    method beginTxn (line 29) | Future<Transaction> beginTxn(bool write, bool silent)
    method _beginTxn (line 31) | Future<T> _beginTxn<T>(
    method txn (line 74) | Future<T> txn<T>(Future<T> Function() callback)
    method writeTxn (line 79) | Future<T> writeTxn<T>(Future<T> Function() callback, {bool silent = fa...
    method getTxn (line 84) | Future<R> getTxn<R, T extends Transaction>(
    method beginTxnSync (line 113) | Transaction beginTxnSync(bool write, bool silent)
    method _beginTxnSync (line 115) | T _beginTxnSync<T>(bool write, bool silent, T Function() callback)
    method txnSync (line 147) | T txnSync<T>(T Function() callback)
    method writeTxnSync (line 152) | T writeTxnSync<T>(T Function() callback, {bool silent = false})
    method getTxnSync (line 157) | R getTxnSync<R, T extends Transaction>(
    method close (line 178) | Future<bool> close({bool deleteFromDisk = false})
    method performClose (line 188) | bool performClose(bool deleteFromDisk)
  class Transaction (line 192) | abstract class Transaction {
    method commit (line 209) | Future<void> commit()
    method commitSync (line 212) | void commitSync()
    method abort (line 215) | Future<void> abort()
    method abortSync (line 218) | void abortSync()
    method free (line 221) | void free()

FILE: packages/isar/lib/src/common/isar_link_base_impl.dart
  class IsarLinkBaseImpl (line 4) | abstract class IsarLinkBaseImpl<OBJ> implements IsarLinkBase<OBJ> {
    method attach (line 24) | void attach(
    method requireAttached (line 51) | Id requireAttached()
    method requireGetId (line 67) | Id requireGetId(OBJ object)
    method filter (line 80) | QueryBuilder<OBJ, OBJ, QAfterFilterCondition> filter()
    method update (line 96) | Future<void> update({
    method updateSync (line 103) | void updateSync({

FILE: packages/isar/lib/src/common/isar_link_common.dart
  class IsarLinkCommon (line 7) | abstract class IsarLinkCommon<OBJ> extends IsarLinkBaseImpl<OBJ>
    method load (line 33) | Future<void> load()
    method loadSync (line 40) | void loadSync()
    method save (line 47) | Future<void> save()
    method saveSync (line 60) | void saveSync()
    method reset (line 73) | Future<void> reset()
    method resetSync (line 81) | void resetSync()
    method toString (line 89) | String toString()

FILE: packages/isar/lib/src/common/isar_links_common.dart
  class IsarLinksCommon (line 9) | abstract class IsarLinksCommon<OBJ> extends IsarLinkBaseImpl<OBJ>
    method attach (line 33) | void attach(
    method load (line 45) | Future<void> load({bool overrideChanges = false})
    method loadSync (line 51) | void loadSync({bool overrideChanges = false})
    method _applyLoaded (line 56) | void _applyLoaded(List<OBJ> objects, bool overrideChanges)
    method _applyAddedRemoved (line 75) | void _applyAddedRemoved()
    method save (line 92) | Future<void> save()
    method saveSync (line 105) | void saveSync()
    method reset (line 118) | Future<void> reset()
    method resetSync (line 125) | void resetSync()
    method add (line 132) | bool add(OBJ value)
    method contains (line 148) | bool contains(Object? element)
    method lookup (line 167) | OBJ? lookup(Object? element)
    method remove (line 180) | bool remove(Object? value)
    method toSet (line 200) | Set<OBJ> toSet()
    method clear (line 211) | void clear()
    method toString (line 218) | String toString()

FILE: packages/isar/lib/src/common/schemas.dart
  function getSchemas (line 4) | List<Schema<dynamic>> getSchemas(

FILE: packages/isar/lib/src/isar.dart
  type IsarOpenCallback (line 4) | typedef IsarOpenCallback = void Function(Isar isar);
  type IsarCloseCallback (line 7) | typedef IsarCloseCallback = void Function(String isarName);
  class Isar (line 10) | abstract class Isar {
    method _checkOpen (line 57) | void _checkOpen(String name, List<CollectionSchema<dynamic>> schemas)
    method open (line 88) | Future<Isar> open(
    method openSync (line 118) | Isar openSync(
    method requireOpen (line 152) | void requireOpen()
    method txn (line 159) | Future<T> txn<T>(Future<T> Function() callback)
    method writeTxn (line 165) | Future<T> writeTxn<T>(Future<T> Function() callback, {bool silent = fa...
    method txnSync (line 168) | T txnSync<T>(T Function() callback)
    method writeTxnSync (line 174) | T writeTxnSync<T>(T Function() callback, {bool silent = false})
    method attachCollections (line 178) | void attachCollections(Map<Type, IsarCollection<dynamic>> collections)
    method collection (line 188) | IsarCollection<T> collection<T>()
    method getCollectionByNameInternal (line 199) | IsarCollection<dynamic>? getCollectionByNameInternal(String name)
    method clear (line 204) | Future<void> clear()
    method clearSync (line 211) | void clearSync()
    method getSize (line 221) | Future<int> getSize({bool includeIndexes = false, bool includeLinks = ...
    method getSizeSync (line 227) | int getSizeSync({bool includeIndexes = false, bool includeLinks = false})
    method copyToFile (line 236) | Future<void> copyToFile(String targetPath)
    method close (line 245) | Future<bool> close({bool deleteFromDisk = false})
    method verify (line 262) | Future<void> verify()
    method getInstance (line 269) | Isar? getInstance([String name = defaultName])
    method addOpenListener (line 274) | void addOpenListener(IsarOpenCallback callback)
    method removeOpenListener (line 279) | void removeOpenListener(IsarOpenCallback callback)
    method addCloseListener (line 285) | void addCloseListener(IsarCloseCallback callback)
    method removeCloseListener (line 290) | void removeCloseListener(IsarCloseCallback callback)
    method initializeIsarCore (line 305) | Future<void> initializeIsarCore({
    method splitWords (line 317) | List<String> splitWords(String input)
  class CompactCondition (line 326) | class CompactCondition {

FILE: packages/isar/lib/src/isar_collection.dart
  type IndexKey (line 4) | typedef IndexKey = List<Object?>;
  class IsarCollection (line 11) | abstract class IsarCollection<OBJ> {
    method get (line 24) | Future<OBJ?> get(Id id)
    method getSync (line 29) | OBJ? getSync(Id id)
    method getAll (line 37) | Future<List<OBJ?>> getAll(List<Id> ids)
    method getAllSync (line 40) | List<OBJ?> getAllSync(List<Id> ids)
    method getByIndex (line 50) | Future<OBJ?> getByIndex(String indexName, IndexKey key)
    method getByIndexSync (line 57) | OBJ? getByIndexSync(String indexName, IndexKey key)
    method getAllByIndex (line 69) | Future<List<OBJ?>> getAllByIndex(String indexName, List<IndexKey> keys)
    method getAllByIndexSync (line 73) | List<OBJ?> getAllByIndexSync(String indexName, List<IndexKey> keys)
    method put (line 81) | Future<Id> put(OBJ object)
    method putSync (line 86) | Id putSync(OBJ object, {bool saveLinks = true})
    method putAll (line 98) | Future<List<Id>> putAll(List<OBJ> objects)
    method putAllSync (line 101) | List<Id> putAllSync(List<OBJ> objects, {bool saveLinks = true})
    method putByIndex (line 117) | Future<Id> putByIndex(String indexName, OBJ object)
    method putByIndexSync (line 123) | Id putByIndexSync(String indexName, OBJ object, {bool saveLinks = true})
    method putAllByIndex (line 142) | Future<List<Id>> putAllByIndex(String indexName, List<OBJ> objects)
    method putAllByIndexSync (line 146) | List<Id> putAllByIndexSync(
    method delete (line 158) | Future<bool> delete(Id id)
    method deleteSync (line 163) | bool deleteSync(Id id)
    method deleteAll (line 173) | Future<int> deleteAll(List<Id> ids)
    method deleteAllSync (line 176) | int deleteAllSync(List<Id> ids)
    method deleteByIndex (line 185) | Future<bool> deleteByIndex(String indexName, IndexKey key)
    method deleteByIndexSync (line 191) | bool deleteByIndexSync(String indexName, IndexKey key)
    method deleteAllByIndex (line 202) | Future<int> deleteAllByIndex(String indexName, List<IndexKey> keys)
    method deleteAllByIndexSync (line 206) | int deleteAllByIndexSync(String indexName, List<IndexKey> keys)
    method clear (line 211) | Future<void> clear()
    method clearSync (line 214) | void clearSync()
    method importJsonRaw (line 222) | Future<void> importJsonRaw(Uint8List jsonBytes)
    method importJsonRawSync (line 225) | void importJsonRawSync(Uint8List jsonBytes)
    method importJson (line 233) | Future<void> importJson(List<Map<String, dynamic>> json)
    method importJsonSync (line 236) | void importJsonSync(List<Map<String, dynamic>> json)
    method where (line 242) | QueryBuilder<OBJ, OBJ, QWhere> where({
    method filter (line 257) | QueryBuilder<OBJ, OBJ, QFilterCondition> filter()
    method buildQuery (line 268) | Query<R> buildQuery<R>({
    method count (line 286) | Future<int> count()
    method countSync (line 289) | int countSync()
    method getSize (line 297) | Future<int> getSize({bool includeIndexes = false, bool includeLinks = ...
    method getSizeSync (line 300) | int getSizeSync({bool includeIndexes = false, bool includeLinks = false})
    method watchLazy (line 305) | Stream<void> watchLazy({bool fireImmediately = false})
    method watchObject (line 312) | Stream<OBJ?> watchObject(Id id, {bool fireImmediately = false})
    method watchObjectLazy (line 317) | Stream<void> watchObjectLazy(Id id, {bool fireImmediately = false})
    method verify (line 327) | Future<void> verify(List<OBJ> objects)
    method verifyLink (line 337) | Future<void> verifyLink(

FILE: packages/isar/lib/src/isar_connect.dart
  class _IsarConnect (line 6) | abstract class _IsarConnect {
    method initialize (line 26) | void initialize(List<CollectionSchema<dynamic>> schemas)
    method _printConnection (line 61) | void _printConnection()
    method line (line 77) | String line(String text, String fill)
    method _getSchema (line 95) | Future<dynamic> _getSchema(Map<String, dynamic> _)
    method _listInstances (line 99) | Future<dynamic> _listInstances(Map<String, dynamic> _)
    method _watchInstance (line 103) | Future<bool> _watchInstance(Map<String, dynamic> params)
    method _sendCollectionInfo (line 126) | void _sendCollectionInfo(IsarCollection<dynamic> collection)
    method _executeQuery (line 144) | Future<Map<String, dynamic>> _executeQuery(
    method _removeQuery (line 212) | Future<bool> _removeQuery(Map<String, dynamic> params)
    method _importJson (line 218) | Future<void> _importJson(Map<String, dynamic> params)
    method _exportJson (line 228) | Future<List<dynamic>> _exportJson(Map<String, dynamic> params)
    method _editProperty (line 233) | Future<void> _editProperty(Map<String, dynamic> params)

FILE: packages/isar/lib/src/isar_connect_api.dart
  type ConnectAction (line 6) | enum ConnectAction {
  type ConnectEvent (line 21) | enum ConnectEvent {
  class ConnectQuery (line 31) | class ConnectQuery {
    method toJson (line 62) | Map<String, dynamic> toJson()
    method _filterFromJson (line 74) | FilterOperation? _filterFromJson(Map<String, dynamic>? json)
    method _filterToJson (line 99) | Map<String, dynamic> _filterToJson(FilterOperation filter)
    method toQuery (line 120) | Query<dynamic> toQuery()
  class ConnectEdit (line 150) | class ConnectEdit {
    method toJson (line 175) | Map<String, dynamic> toJson()
  class ConnectCollectionInfo (line 186) | class ConnectCollectionInfo {
    method toJson (line 207) | Map<String, dynamic> toJson()

FILE: packages/isar/lib/src/isar_error.dart
  class IsarError (line 4) | class IsarError extends Error {
    method toString (line 13) | String toString()
  class IsarUniqueViolationError (line 19) | class IsarUniqueViolationError extends IsarError {

FILE: packages/isar/lib/src/isar_link.dart
  class IsarLinkBase (line 4) | @sealed
    method load (line 18) | Future<void> load()
    method loadSync (line 21) | void loadSync()
    method save (line 29) | Future<void> save()
    method saveSync (line 32) | void saveSync()
    method reset (line 39) | Future<void> reset()
    method resetSync (line 42) | void resetSync()
    method attach (line 46) | void attach(
  class IsarLink (line 56) | abstract class IsarLink<OBJ> implements IsarLinkBase<OBJ> {
  class IsarLinks (line 70) | abstract class IsarLinks<OBJ> implements IsarLinkBase<OBJ>, Set<OBJ> {
    method load (line 76) | Future<void> load({bool overrideChanges = true})
    method loadSync (line 79) | void loadSync({bool overrideChanges = true})
    method update (line 87) | Future<void> update({
    method updateSync (line 94) | void updateSync({
    method filter (line 101) | QueryBuilder<OBJ, OBJ, QAfterFilterCondition> filter()
    method count (line 109) | Future<int> count()
    method countSync (line 112) | int countSync()

FILE: packages/isar/lib/src/isar_reader.dart
  class IsarReader (line 6) | @protected
    method readBool (line 8) | bool readBool(int offset)
    method readBoolOrNull (line 10) | bool? readBoolOrNull(int offset)
    method readByte (line 12) | int readByte(int offset)
    method readByteOrNull (line 14) | int? readByteOrNull(int offset)
    method readInt (line 16) | int readInt(int offset)
    method readIntOrNull (line 18) | int? readIntOrNull(int offset)
    method readFloat (line 20) | double readFloat(int offset)
    method readFloatOrNull (line 22) | double? readFloatOrNull(int offset)
    method readLong (line 24) | int readLong(int offset)
    method readLongOrNull (line 26) | int? readLongOrNull(int offset)
    method readDouble (line 28) | double readDouble(int offset)
    method readDoubleOrNull (line 30) | double? readDoubleOrNull(int offset)
    method readDateTime (line 32) | DateTime readDateTime(int offset)
    method readDateTimeOrNull (line 34) | DateTime? readDateTimeOrNull(int offset)
    method readString (line 36) | String readString(int offset)
    method readStringOrNull (line 38) | String? readStringOrNull(int offset)
    method readObjectOrNull (line 40) | T? readObjectOrNull<T>(
    method readBoolList (line 46) | List<bool>? readBoolList(int offset)
    method readBoolOrNullList (line 48) | List<bool?>? readBoolOrNullList(int offset)
    method readByteList (line 50) | List<int>? readByteList(int offset)
    method readIntList (line 52) | List<int>? readIntList(int offset)
    method readIntOrNullList (line 54) | List<int?>? readIntOrNullList(int offset)
    method readFloatList (line 56) | List<double>? readFloatList(int offset)
    method readFloatOrNullList (line 58) | List<double?>? readFloatOrNullList(int offset)
    method readLongList (line 60) | List<int>? readLongList(int offset)
    method readLongOrNullList (line 62) | List<int?>? readLongOrNullList(int offset)
    method readDoubleList (line 64) | List<double>? readDoubleList(int offset)
    method readDoubleOrNullList (line 66) | List<double?>? readDoubleOrNullList(int offset)
    method readDateTimeList (line 68) | List<DateTime>? readDateTimeList(int offset)
    method readDateTimeOrNullList (line 70) | List<DateTime?>? readDateTimeOrNullList(int offset)
    method readStringList (line 72) | List<String>? readStringList(int offset)
    method readStringOrNullList (line 74) | List<String?>? readStringOrNullList(int offset)
    method readObjectList (line 76) | List<T>? readObjectList<T>(
    method readObjectOrNullList (line 83) | List<T?>? readObjectOrNullList<T>(

FILE: packages/isar/lib/src/isar_writer.dart
  class IsarWriter (line 6) | @protected
    method writeBool (line 8) | void writeBool(int offset, bool? value)
    method writeByte (line 10) | void writeByte(int offset, int value)
    method writeInt (line 12) | void writeInt(int offset, int? value)
    method writeFloat (line 14) | void writeFloat(int offset, double? value)
    method writeLong (line 16) | void writeLong(int offset, int? value)
    method writeDouble (line 18) | void writeDouble(int offset, double? value)
    method writeDateTime (line 20) | void writeDateTime(int offset, DateTime? value)
    method writeString (line 22) | void writeString(int offset, String? value)
    method writeObject (line 24) | void writeObject<T>(
    method writeByteList (line 31) | void writeByteList(int offset, List<int>? values)
    method writeBoolList (line 33) | void writeBoolList(int offset, List<bool?>? values)
    method writeIntList (line 35) | void writeIntList(int offset, List<int?>? values)
    method writeFloatList (line 37) | void writeFloatList(int offset, List<double?>? values)
    method writeLongList (line 39) | void writeLongList(int offset, List<int?>? values)
    method writeDoubleList (line 41) | void writeDoubleList(int offset, List<double?>? values)
    method writeDateTimeList (line 43) | void writeDateTimeList(int offset, List<DateTime?>? values)
    method writeStringList (line 45) | void writeStringList(int offset, List<String?>? values)
    method writeObjectList (line 47) | void writeObjectList<T>(

FILE: packages/isar/lib/src/native/bindings.dart
  class IsarCoreBindings (line 8) | class IsarCoreBindings {
    method isar_find_word_boundaries (line 23) | ffi.Pointer<ffi.Uint32> isar_find_word_boundaries(
    method isar_free_word_boundaries (line 44) | void isar_free_word_boundaries(
    method isar_free_string (line 61) | void isar_free_string(
    method isar_get_error (line 75) | ffi.Pointer<ffi.Char> isar_get_error(
    method isar_free_c_object_set (line 89) | void isar_free_c_object_set(
    method isar_get (line 103) | int isar_get(
    method isar_get_by_index (line 123) | int isar_get_by_index(
    method isar_get_all (line 151) | int isar_get_all(
    method isar_get_all_by_index (line 171) | int isar_get_all_by_index(
    method isar_put (line 199) | int isar_put(
    method isar_put_by_index (line 219) | int isar_put_by_index(
    method isar_put_all (line 244) | int isar_put_all(
    method isar_put_all_by_index (line 264) | int isar_put_all_by_index(
    method isar_delete (line 289) | int isar_delete(
    method isar_delete_by_index (line 314) | int isar_delete_by_index(
    method isar_delete_all (line 342) | int isar_delete_all(
    method isar_delete_all_by_index (line 370) | int isar_delete_all_by_index(
    method isar_clear (line 407) | int isar_clear(
    method isar_json_import (line 424) | int isar_json_import(
    method isar_count (line 452) | int isar_count(
    method isar_get_size (line 472) | int isar_get_size(
    method isar_verify (line 500) | int isar_verify(
    method isar_connect_dart_api (line 520) | void isar_connect_dart_api(
    method isar_filter_static (line 534) | void isar_filter_static(
    method isar_filter_and_or_xor (line 551) | void isar_filter_and_or_xor(
    method isar_filter_not (line 579) | void isar_filter_not(
    method isar_filter_object (line 596) | int isar_filter_object(
    method isar_filter_link (line 624) | int isar_filter_link(
    method isar_filter_link_length (line 649) | int isar_filter_link_length(
    method isar_filter_list_length (line 677) | int isar_filter_list_length(
    method isar_filter_null (line 708) | int isar_filter_null(
    method isar_filter_id (line 733) | void isar_filter_id(
    method isar_filter_long (line 756) | int isar_filter_long(
    method isar_filter_double (line 793) | int isar_filter_double(
    method isar_filter_string (line 824) | int isar_filter_string(
    method isar_filter_string_starts_with (line 872) | int isar_filter_string_starts_with(
    method isar_filter_string_ends_with (line 909) | int isar_filter_string_ends_with(
    method isar_filter_string_contains (line 946) | int isar_filter_string_contains(
    method isar_filter_string_matches (line 983) | int isar_filter_string_matches(
    method isar_key_create (line 1020) | void isar_key_create(
    method isar_key_increase (line 1035) | bool isar_key_increase(
    method isar_key_decrease (line 1049) | bool isar_key_decrease(
    method isar_key_add_byte (line 1063) | void isar_key_add_byte(
    method isar_key_add_int (line 1080) | void isar_key_add_int(
    method isar_key_add_long (line 1097) | void isar_key_add_long(
    method isar_key_add_float (line 1114) | void isar_key_add_float(
    method isar_key_add_double (line 1131) | void isar_key_add_double(
    method isar_key_add_string (line 1148) | void isar_key_add_string(
    method isar_key_add_string_hash (line 1167) | void isar_key_add_string_hash(
    method isar_key_add_string_list_hash (line 1187) | void isar_key_add_string_list_hash(
    method isar_key_add_byte_list_hash (line 1213) | void isar_key_add_byte_list_hash(
    method isar_key_add_int_list_hash (line 1233) | void isar_key_add_int_list_hash(
    method isar_key_add_long_list_hash (line 1253) | void isar_key_add_long_list_hash(
    method isar_version (line 1273) | ffi.Pointer<ffi.Char> isar_version()
    method isar_instance_create (line 1283) | int isar_instance_create(
    method isar_instance_create_async (line 1331) | void isar_instance_create_async(
    method isar_instance_close (line 1384) | bool isar_instance_close(
    method isar_instance_close_and_delete (line 1398) | bool isar_instance_close_and_delete(
    method isar_instance_get_path (line 1413) | ffi.Pointer<ffi.Char> isar_instance_get_path(
    method isar_instance_get_collection (line 1428) | int isar_instance_get_collection(
    method isar_instance_get_size (line 1451) | int isar_instance_get_size(
    method isar_instance_copy_to_file (line 1479) | void isar_instance_copy_to_file(
    method isar_instance_verify (line 1500) | int isar_instance_verify(
    method isar_get_offsets (line 1517) | int isar_get_offsets(
    method isar_link (line 1537) | int isar_link(
    method isar_link_unlink (line 1565) | int isar_link_unlink(
    method isar_link_unlink_all (line 1593) | int isar_link_unlink_all(
    method isar_link_update_all (line 1618) | int isar_link_update_all(
    method isar_link_verify (line 1655) | int isar_link_verify(
    method isar_qb_create (line 1683) | ffi.Pointer<CQueryBuilder> isar_qb_create(
    method isar_qb_add_id_where_clause (line 1698) | int isar_qb_add_id_where_clause(
    method isar_qb_add_index_where_clause (line 1717) | int isar_qb_add_index_where_clause(
    method isar_qb_add_link_where_clause (line 1749) | int isar_qb_add_link_where_clause(
    method isar_qb_set_filter (line 1775) | void isar_qb_set_filter(
    method isar_qb_add_sort_by (line 1792) | int isar_qb_add_sort_by(
    method isar_qb_add_distinct_by (line 1811) | int isar_qb_add_distinct_by(
    method isar_qb_set_offset_limit (line 1830) | void isar_qb_set_offset_limit(
    method isar_qb_build (line 1849) | ffi.Pointer<CQuery> isar_qb_build(
    method isar_q_free (line 1864) | void isar_q_free(
    method isar_q_find (line 1878) | int isar_q_find(
    method isar_q_delete (line 1900) | int isar_q_delete(
    method isar_q_export_json (line 1928) | int isar_q_export_json(
    method isar_free_json (line 1964) | void isar_free_json(
    method isar_q_aggregate (line 1981) | int isar_q_aggregate(
    method isar_q_aggregate_long_result (line 2018) | int isar_q_aggregate_long_result(
    method isar_q_aggregate_double_result (line 2033) | double isar_q_aggregate_double_result(
    method isar_txn_begin (line 2049) | int isar_txn_begin(
    method isar_txn_finish (line 2080) | int isar_txn_finish(
    method isar_watch_collection (line 2097) | ffi.Pointer<CWatchHandle> isar_watch_collection(
    method isar_watch_object (line 2119) | ffi.Pointer<CWatchHandle> isar_watch_object(
    method isar_watch_query (line 2144) | ffi.Pointer<CWatchHandle> isar_watch_query(
    method isar_stop_watching (line 2169) | void isar_stop_watching(
  class CObject (line 2184) | class CObject extends ffi.Struct {
  class CObjectSet (line 2194) | class CObjectSet extends ffi.Struct {
  class CIsarCollection (line 2201) | class CIsarCollection extends ffi.Opaque {}
  class CIsarTxn (line 2203) | class CIsarTxn extends ffi.Opaque {}
  class CIndexKey (line 2205) | class CIndexKey extends ffi.Opaque {}
  type DartPostCObjectFnType (line 2207) | typedef DartPostCObjectFnType = ffi.Pointer<
  type DartPort (line 2209) | typedef DartPort = ffi.Int64;
  class CDartCObject (line 2211) | class CDartCObject extends ffi.Opaque {}
  class CFilter (line 2213) | class CFilter extends ffi.Opaque {}
  class CIsarInstance (line 2215) | class CIsarInstance extends ffi.Opaque {}
  class CQueryBuilder (line 2217) | class CQueryBuilder extends ffi.Opaque {}
  class CQuery (line 2219) | class CQuery extends ffi.Opaque {}
  class CAggregationResult (line 2221) | class CAggregationResult extends ffi.Opaque {}
  class CWatchHandle (line 2223) | class CWatchHandle extends ffi.Opaque {}

FILE: packages/isar/lib/src/native/encode_string.dart
  function encodeString (line 14) | int encodeString(String str, Uint8List buffer, int offset)
  function toCString (line 47) | Pointer<Char> toCString(Allocator alloc)

FILE: packages/isar/lib/src/native/index_key.dart
  function buildIndexKey (line 14) | Pointer<CIndexKey> buildIndexKey(
  function buildLowerUnboundedIndexKey (line 40) | Pointer<CIndexKey> buildLowerUnboundedIndexKey()
  function buildUpperUnboundedIndexKey (line 45) | Pointer<CIndexKey> buildUpperUnboundedIndexKey()
  function _addKeyValue (line 53) | void _addKeyValue(
  function _strToNative (line 197) | Pointer<Char> _strToNative(String? str)
  function _freeStr (line 205) | void _freeStr(Pointer<Char> strPtr)
  function adjustFloatBound (line 211) | double? adjustFloatBound({

FILE: packages/isar/lib/src/native/isar_collection_impl.dart
  class IsarCollectionImpl (line 21) | class IsarCollectionImpl<OBJ> extends IsarCollection<OBJ> {
    method deserializeObject (line 39) | OBJ deserializeObject(CObject cObj)
    method deserializeObjectOrNull (line 53) | OBJ? deserializeObjectOrNull(CObject cObj)
    method deserializeObjects (line 62) | List<OBJ> deserializeObjects(CObjectSet objectSet)
    method deserializeObjectsOrNull (line 73) | List<OBJ?> deserializeObjectsOrNull(CObjectSet objectSet)
    method _getKeysPtr (line 85) | Pointer<Pointer<CIndexKey>> _getKeysPtr(
    method deserializeProperty (line 97) | List<T> deserializeProperty<T>(CObjectSet objectSet, int? propertyId)
    method serializeObjects (line 122) | void serializeObjects(
    method getAll (line 159) | Future<List<OBJ?>> getAll(List<int> ids)
    method getAllSync (line 173) | List<OBJ?> getAllSync(List<int> ids)
    method getAllByIndex (line 190) | Future<List<OBJ?>> getAllByIndex(String indexName, List<IndexKey> keys)
    method getAllByIndexSync (line 207) | List<OBJ?> getAllByIndexSync(String indexName, List<IndexKey> keys)
    method putSync (line 226) | int putSync(OBJ object, {bool saveLinks = true})
    method putByIndexSync (line 237) | int putByIndexSync(String indexName, OBJ object, {bool saveLinks = true})
    method putByIndexSyncInternal (line 248) | int putByIndexSyncInternal({
    method putAll (line 291) | Future<List<int>> putAll(List<OBJ> objects)
    method putAllSync (line 296) | List<int> putAllSync(List<OBJ> objects, {bool saveLinks = true})
    method putAllByIndex (line 301) | Future<List<int>> putAllByIndex(String? indexName, List<OBJ> objects)
    method putAllByIndexSync (line 330) | List<int> putAllByIndexSync(
    method deleteAll (line 351) | Future<int> deleteAll(List<int> ids)
    method deleteAllSync (line 365) | int deleteAllSync(List<int> ids)
    method deleteAllByIndex (line 381) | Future<int> deleteAllByIndex(String indexName, List<IndexKey> keys)
    method deleteAllByIndexSync (line 401) | int deleteAllByIndexSync(String indexName, List<IndexKey> keys)
    method clear (line 421) | Future<void> clear()
    method clearSync (line 429) | void clearSync()
    method importJson (line 436) | Future<void> importJson(List<Map<String, dynamic>> json)
    method importJsonRaw (line 442) | Future<void> importJsonRaw(Uint8List jsonBytes)
    method importJsonSync (line 460) | void importJsonSync(List<Map<String, dynamic>> json)
    method importJsonRawSync (line 466) | void importJsonRawSync(Uint8List jsonBytes)
    method count (line 485) | Future<int> count()
    method countSync (line 495) | int countSync()
    method getSize (line 504) | Future<int> getSize({
    method getSizeSync (line 517) | int getSizeSync({bool includeIndexes = false, bool includeLinks = false})
    method watchLazy (line 534) | Stream<void> watchLazy({bool fireImmediately = false})
    method watchObject (line 555) | Stream<OBJ?> watchObject(Id id, {bool fireImmediately = false})
    method watchObjectLazy (line 561) | Stream<void> watchObjectLazy(Id id, {bool fireImmediately = false})
    method buildQuery (line 586) | Query<T> buildQuery<T>({
    method verify (line 613) | Future<void> verify(List<OBJ> objects)
    method verifyLink (line 625) | Future<void> verifyLink(

FILE: packages/isar/lib/src/native/isar_core.dart
  type IsarAbi (line 18) | typedef IsarAbi = Abi;
  type FinalizerFunction (line 47) | typedef FinalizerFunction = void Function(Pointer<Void> token);
  function initializeCoreBinary (line 51) | FutureOr<void> initializeCoreBinary({
  function _initializePath (line 87) | void _initializePath(String? libraryPath)
  function _getLibraryDownloadPath (line 113) | String _getLibraryDownloadPath(Map<Abi, String> libraries)
  function _downloadIsarCore (line 133) | Future<void> _downloadIsarCore(String libraryPath)
  function isarErrorFromResult (line 151) | IsarError? isarErrorFromResult(int result)
  function nCall (line 171) | void nCall(int result)
  function wrapIsarPort (line 178) | Stream<void> wrapIsarPort(ReceivePort port)

FILE: packages/isar/lib/src/native/isar_impl.dart
  class IsarImpl (line 14) | class IsarImpl extends IsarCommon implements Finalizable {
    method beginTxn (line 46) | Future<Transaction> beginTxn(bool write, bool silent)
    method beginTxnSync (line 66) | Transaction beginTxnSync(bool write, bool silent)
    method performClose (line 72) | bool performClose(bool deleteFromDisk)
    method getSize (line 82) | Future<int> getSize({
    method getSizeSync (line 101) | int getSizeSync({bool includeIndexes = false, bool includeLinks = false})
    method copyToFile (line 118) | Future<void> copyToFile(String targetPath)
    method verify (line 133) | Future<void> verify()

FILE: packages/isar/lib/src/native/isar_link_impl.dart
  function update (line 28) | Future<void> update({
  function updateSync (line 64) | void updateSync({
  class IsarLinkImpl (line 117) | class IsarLinkImpl<OBJ> extends IsarLinkCommon<OBJ>
  class IsarLinksImpl (line 120) | class IsarLinksImpl<OBJ> extends IsarLinksCommon<OBJ>

FILE: packages/isar/lib/src/native/isar_reader_impl.dart
  class IsarReaderImpl (line 11) | @protected
    method _readBool (line 25) | bool _readBool(int offset)
    method readBool (line 36) | bool readBool(int offset)
    method _readBoolOrNull (line 44) | bool? _readBoolOrNull(int offset)
    method readBoolOrNull (line 57) | bool? readBoolOrNull(int offset)
    method readByte (line 66) | int readByte(int offset)
    method readByteOrNull (line 75) | int? readByteOrNull(int offset)
    method readInt (line 84) | int readInt(int offset)
    method _readIntOrNull (line 92) | int? _readIntOrNull(int offset)
    method readIntOrNull (line 103) | int? readIntOrNull(int offset)
    method readFloat (line 112) | double readFloat(int offset)
    method _readFloatOrNull (line 120) | double? _readFloatOrNull(int offset)
    method readFloatOrNull (line 131) | double? readFloatOrNull(int offset)
    method readLong (line 140) | int readLong(int offset)
    method _readLongOrNull (line 148) | int? _readLongOrNull(int offset)
    method readLongOrNull (line 159) | int? readLongOrNull(int offset)
    method readDouble (line 168) | double readDouble(int offset)
    method _readDoubleOrNull (line 176) | double? _readDoubleOrNull(int offset)
    method readDoubleOrNull (line 187) | double? readDoubleOrNull(int offset)
    method readDateTime (line 196) | DateTime readDateTime(int offset)
    method readDateTimeOrNull (line 205) | DateTime? readDateTimeOrNull(int offset)
    method _readUint24 (line 215) | int _readUint24(int offset)
    method readString (line 223) | String readString(int offset)
    method readStringOrNull (line 229) | String? readStringOrNull(int offset)
    method readObjectOrNull (line 247) | T? readObjectOrNull<T>(
    method readBoolList (line 272) | List<bool>? readBoolList(int offset)
    method readBoolOrNullList (line 293) | List<bool?>? readBoolOrNullList(int offset)
    method readByteList (line 314) | List<int>? readByteList(int offset)
    method readIntList (line 331) | List<int>? readIntList(int offset)
    method readIntOrNullList (line 352) | List<int?>? readIntOrNullList(int offset)
    method readFloatList (line 373) | List<double>? readFloatList(int offset)
    method readFloatOrNullList (line 394) | List<double?>? readFloatOrNullList(int offset)
    method readLongList (line 415) | List<int>? readLongList(int offset)
    method readLongOrNullList (line 436) | List<int?>? readLongOrNullList(int offset)
    method readDoubleList (line 457) | List<double>? readDoubleList(int offset)
    method readDoubleOrNullList (line 478) | List<double?>? readDoubleOrNullList(int offset)
    method readDateTimeList (line 499) | List<DateTime>? readDateTimeList(int offset)
    method readDateTimeOrNullList (line 510) | List<DateTime?>? readDateTimeOrNullList(int offset)
    method readDynamicList (line 518) | List<T>? readDynamicList<T>(
    method readStringList (line 550) | List<String>? readStringList(int offset)
    method readStringOrNullList (line 557) | List<String?>? readStringOrNullList(int offset)
    method readObjectList (line 564) | List<T>? readObjectList<T>(
    method readObjectOrNullList (line 579) | List<T?>? readObjectOrNullList<T>(

FILE: packages/isar/lib/src/native/isar_writer_impl.dart
  class IsarWriterImpl (line 12) | @protected
    method writeBool (line 36) | void writeBool(int offset, bool? value)
    method writeByte (line 42) | void writeByte(int offset, int value)
    method writeInt (line 49) | void writeInt(int offset, int? value)
    method writeFloat (line 57) | void writeFloat(int offset, double? value)
    method writeLong (line 63) | void writeLong(int offset, int? value)
    method writeDouble (line 69) | void writeDouble(int offset, double? value)
    method writeDateTime (line 75) | void writeDateTime(int offset, DateTime? value)
    method _writeUint24 (line 80) | void _writeUint24(int offset, int value)
    method writeString (line 88) | void writeString(int offset, String? value)
    method writeObject (line 101) | void writeObject<T>(
    method _writeListOffset (line 122) | void _writeListOffset(int offset, int? length)
    method writeByteList (line 134) | void writeByteList(int offset, List<int>? values)
    method writeBoolList (line 145) | void writeBoolList(int offset, List<bool?>? values)
    method writeIntList (line 156) | void writeIntList(int offset, List<int?>? values)
    method writeFloatList (line 170) | void writeFloatList(int offset, List<double?>? values)
    method writeLongList (line 186) | void writeLongList(int offset, List<int?>? values)
    method writeDoubleList (line 202) | void writeDoubleList(int offset, List<double?>? values)
    method writeDateTimeList (line 218) | void writeDateTimeList(int offset, List<DateTime?>? values)
    method writeStringList (line 224) | void writeStringList(int offset, List<String?>? values)
    method writeObjectList (line 244) | void writeObjectList<T>(

FILE: packages/isar/lib/src/native/open.dart
  function _getOffsets (line 19) | List<int> _getOffsets(
  function _initializeInstance (line 32) | void _initializeInstance(
  function openIsar (line 73) | Future<Isar> openIsar({
  function openIsarSync (line 119) | Isar openIsarSync({

FILE: packages/isar/lib/src/native/query_build.dart
  function buildNativeQuery (line 17) | Query<T> buildNativeQuery<T>(
  function _addIdWhereClause (line 100) | void _addIdWhereClause(
  function _buildLowerIndexBound (line 116) | Pointer<CIndexKey>? _buildLowerIndexBound(
  function _buildUpperIndexBound (line 151) | Pointer<CIndexKey>? _buildUpperIndexBound(
  function _addIndexWhereClause (line 191) | void _addIndexWhereClause(
  function _addLinkWhereClause (line 225) | void _addLinkWhereClause(
  function _buildFilter (line 237) | Pointer<CFilter>? _buildFilter(
  function _buildFilterGroup (line 256) | Pointer<CFilter>? _buildFilterGroup(
  function _buildLink (line 296) | Pointer<CFilter>? _buildLink(
  function _buildObject (line 342) | Pointer<CFilter>? _buildObject(
  function _prepareValue (line 374) | Object _prepareValue(
  function _buildCondition (line 419) | Pointer<CFilter> _buildCondition(
  function _buildConditionIsNull (line 561) | void _buildConditionIsNull({
  function _buildConditionIsNotNull (line 581) | void _buildConditionIsNotNull({
  function _buildConditionElementIsNull (line 604) | void _buildConditionElementIsNull({
  function _buildConditionElementIsNotNull (line 633) | void _buildConditionElementIsNotNull({
  function _buildConditionEqual (line 666) | void _buildConditionEqual({
  function _buildConditionBetween (line 738) | void _buildConditionBetween({
  function _buildConditionLessThan (line 813) | void _buildConditionLessThan({
  function _buildConditionGreaterThan (line 880) | void _buildConditionGreaterThan({
  function _buildConditionStringOp (line 947) | void _buildConditionStringOp({
  function _buildListLength (line 1018) | void _buildListLength({

FILE: packages/isar/lib/src/native/query_impl.dart
  type QueryDeserialize (line 15) | typedef QueryDeserialize<T> = List<T> Function(CObjectSet);
  class QueryImpl (line 17) | class QueryImpl<T> extends Query<T> implements Finalizable {
    method findFirst (line 32) | Future<T?> findFirst()
    method findAll (line 43) | Future<List<T>> findAll()
    method findInternal (line 45) | Future<List<T>> findInternal(int limit)
    method findFirstSync (line 59) | T? findFirstSync()
    method findAllSync (line 69) | List<T> findAllSync()
    method findSyncInternal (line 71) | List<T> findSyncInternal(int limit)
    method deleteFirst (line 84) | Future<bool> deleteFirst()
    method deleteAll (line 88) | Future<int> deleteAll()
    method deleteInternal (line 90) | Future<int> deleteInternal(int limit)
    method deleteFirstSync (line 100) | bool deleteFirstSync()
    method deleteAllSync (line 103) | int deleteAllSync()
    method deleteSyncInternal (line 105) | int deleteSyncInternal(int limit)
    method watch (line 114) | Stream<List<T>> watch({bool fireImmediately = false})
    method watchLazy (line 120) | Stream<void> watchLazy({bool fireImmediately = false})
    method exportJsonRaw (line 145) | Future<R> exportJsonRaw<R>(R Function(Uint8List) callback)
    method exportJsonRawSync (line 173) | R exportJsonRawSync<R>(R Function(Uint8List) callback)
    method aggregate (line 199) | Future<R?> aggregate<R>(AggregationOp op)
    method aggregateSync (line 218) | R? aggregateSync<R>(AggregationOp op)
    method _convertAggregatedResult (line 236) | R? _convertAggregatedResult<R>(

FILE: packages/isar/lib/src/native/split_words.dart
  function isarSplitWords (line 9) | List<String> isarSplitWords(String input)

FILE: packages/isar/lib/src/native/txn.dart
  class Txn (line 12) | class Txn extends Transaction {
    method getCObject (line 44) | Pointer<CObject> getCObject()
    method getCObjectsSet (line 50) | Pointer<CObjectSet> getCObjectsSet()
    method newCObjectSet (line 56) | Pointer<CObjectSet> newCObjectSet(int length)
    method getBuffer (line 65) | Pointer<Uint8> getBuffer(int size)
    method wait (line 75) | Future<void> wait()
    method commit (line 82) | Future<void> commit()
    method commitSync (line 90) | void commitSync()
    method abort (line 96) | Future<void> abort()
    method abortSync (line 104) | void abortSync()
    method free (line 110) | void free()

FILE: packages/isar/lib/src/query.dart
  class Query (line 4) | abstract class Query<T> {
    method findFirst (line 15) | Future<T?> findFirst()
    method findFirstSync (line 18) | T? findFirstSync()
    method findAll (line 23) | Future<List<T>> findAll()
    method findAllSync (line 26) | List<T> findAllSync()
    method aggregate (line 30) | Future<R?> aggregate<R>(AggregationOp op)
    method aggregateSync (line 34) | R? aggregateSync<R>(AggregationOp op)
    method count (line 41) | Future<int> count()
    method countSync (line 45) | int countSync()
    method isEmpty (line 52) | Future<bool> isEmpty()
    method isEmptySync (line 56) | bool isEmptySync()
    method isNotEmpty (line 63) | Future<bool> isNotEmpty()
    method isNotEmptySync (line 67) | bool isNotEmptySync()
    method deleteFirst (line 73) | Future<bool> deleteFirst()
    method deleteFirstSync (line 76) | bool deleteFirstSync()
    method deleteAll (line 82) | Future<int> deleteAll()
    method deleteAllSync (line 85) | int deleteAllSync()
    method watch (line 95) | Stream<List<T>> watch({bool fireImmediately = false})
    method watchLazy (line 101) | Stream<void> watchLazy({bool fireImmediately = false})
    method exportJsonRaw (line 109) | Future<R> exportJsonRaw<R>(R Function(Uint8List) callback)
    method exportJsonRawSync (line 112) | R exportJsonRawSync<R>(R Function(Uint8List) callback)
    method exportJson (line 117) | Future<List<Map<String, dynamic>>> exportJson()
    method exportJsonSync (line 125) | List<Map<String, dynamic>> exportJsonSync()
  type AggregationOp (line 134) | @protected
  function min (line 160) | Future<T?> min()
  function minSync (line 163) | T? minSync()
  function max (line 168) | Future<T?> max()
  function maxSync (line 171) | T? maxSync()
  function average (line 176) | Future<double> average()
  function averageSync (line 180) | double averageSync()
  function sum (line 185) | Future<T> sum()
  function sumSync (line 188) | T sumSync()
  function min (line 194) | Future<DateTime?> min()
  function minSync (line 197) | DateTime? minSync()
  function max (line 200) | Future<DateTime?> max()
  function maxSync (line 203) | DateTime? maxSync()

FILE: packages/isar/lib/src/query_builder.dart
  type FilterQuery (line 4) | @protected
  class QueryBuilder (line 12) | class QueryBuilder<OBJ, R, S> {
    method apply (line 21) | QueryBuilder<OBJ, R, S> apply<OBJ, R, S>(
  class QueryBuilderInternal (line 31) | @protected
    method addFilterCondition (line 86) | QueryBuilderInternal<OBJ> addFilterCondition(FilterOperation cond)
    method addWhereClause (line 124) | QueryBuilderInternal<OBJ> addWhereClause(WhereClause where)
    method group (line 129) | QueryBuilderInternal<OBJ> group(FilterQuery<OBJ> q)
    method listLength (line 136) | QueryBuilderInternal<OBJ> listLength<E>(
    method object (line 163) | QueryBuilderInternal<OBJ> object<E>(
    method link (line 175) | QueryBuilderInternal<OBJ> link<E>(
    method linkLength (line 187) | QueryBuilderInternal<OBJ> linkLength<E>(
    method addSortBy (line 214) | QueryBuilderInternal<OBJ> addSortBy(String propertyName, Sort sort)
    method addDistinctBy (line 224) | QueryBuilderInternal<OBJ> addDistinctBy(
    method addPropertyName (line 240) | QueryBuilderInternal<OBJ> addPropertyName<E>(String propertyName)
    method copyWith (line 245) | QueryBuilderInternal<OBJ> copyWith({
    method build (line 280) | Query<R> build<R>()
  class QWhere (line 298) | @protected
  class QAfterWhere (line 312) | @protected
  class QWhereClause (line 317) | @protected
  class QAfterWhereClause (line 321) | @protected
  class QWhereOr (line 333) | @protected
  class QFilter (line 337) | @protected
  class QFilterCondition (line 341) | @protected
  class QAfterFilterCondition (line 345) | @protected
  class QFilterOperator (line 357) | @protected
  class QAfterFilterOperator (line 361) | @protected
  class QSortBy (line 365) | @protected
  class QAfterSortBy (line 369) | @protected
  class QSortThenBy (line 374) | @protected
  class QDistinct (line 378) | @protected
  class QOffset (line 382) | @protected
  class QAfterOffset (line 386) | @protected
  class QLimit (line 390) | @protected
  class QAfterLimit (line 394) | @protected
  class QQueryProperty (line 398) | @protected
  class QQueryOperations (line 402) | @protected

FILE: packages/isar/lib/src/query_builder_extensions.dart
  function or (line 6) | QueryBuilder<OBJ, R, QWhereClause> or()
  type WhereRepeatModifier (line 12) | @protected
  function anyOf (line 23) | QueryBuilder<OBJ, R, QAfterWhereClause> anyOf<E, RS>(
  function filter (line 38) | QueryBuilder<OBJ, R, QFilterCondition> filter()
  type FilterRepeatModifier (line 44) | @protected
  function and (line 54) | QueryBuilder<OBJ, R, QFilterCondition> and()
  function or (line 62) | QueryBuilder<OBJ, R, QFilterCondition> or()
  function xor (line 70) | QueryBuilder<OBJ, R, QFilterCondition> xor()
  function not (line 81) | QueryBuilder<OBJ, R, QFilterCondition> not()
  function anyOf (line 93) | QueryBuilder<OBJ, R, QAfterFilterCondition> anyOf<E, RS>(
  function allOf (line 113) | QueryBuilder<OBJ, R, QAfterFilterCondition> allOf<E, RS>(
  function oneOf (line 133) | QueryBuilder<OBJ, R, QAfterFilterCondition> oneOf<E, RS>(
  function group (line 149) | QueryBuilder<OBJ, R, QAfterFilterCondition> group(FilterQuery<OBJ> q)
  function offset (line 157) | QueryBuilder<OBJ, R, QAfterOffset> offset(int offset)
  function limit (line 165) | QueryBuilder<OBJ, R, QAfterLimit> limit(int limit)
  type QueryOption (line 171) | @protected
  function optional (line 179) | QueryBuilder<OBJ, OBJ, RS> optional<RS>(
  function build (line 194) | Query<R> build()
  function findFirst (line 197) | Future<R?> findFirst()
  function findFirstSync (line 200) | R? findFirstSync()
  function findAll (line 203) | Future<List<R>> findAll()
  function findAllSync (line 206) | List<R> findAllSync()
  function count (line 209) | Future<int> count()
  function countSync (line 212) | int countSync()
  function isEmpty (line 215) | Future<bool> isEmpty()
  function isEmptySync (line 218) | bool isEmptySync()
  function isNotEmpty (line 221) | Future<bool> isNotEmpty()
  function isNotEmptySync (line 224) | bool isNotEmptySync()
  function deleteFirst (line 227) | Future<bool> deleteFirst()
  function deleteFirstSync (line 230) | bool deleteFirstSync()
  function deleteAll (line 233) | Future<int> deleteAll()
  function deleteAllSync (line 236) | int deleteAllSync()
  function watch (line 239) | Stream<List<R>> watch({bool fireImmediately = false})
  function watchLazy (line 243) | Stream<void> watchLazy({bool fireImmediately = false})
  function exportJsonRaw (line 247) | Future<T> exportJsonRaw<T>(T Function(Uint8List) callback)
  function exportJsonRawSync (line 251) | T exportJsonRawSync<T>(T Function(Uint8List) callback)
  function exportJson (line 255) | Future<List<Map<String, dynamic>>> exportJson()
  function exportJsonSync (line 258) | List<Map<String, dynamic>> exportJsonSync()
  function min (line 265) | Future<T?> min()
  function minSync (line 268) | T? minSync()
  function max (line 271) | Future<T?> max()
  function maxSync (line 274) | T? maxSync()
  function average (line 277) | Future<double> average()
  function averageSync (line 280) | double averageSync()
  function sum (line 283) | Future<T> sum()
  function sumSync (line 286) | T sumSync()
  function min (line 293) | Future<DateTime?> min()
  function minSync (line 296) | DateTime? minSync()
  function max (line 299) | Future<DateTime?> max()
  function maxSync (line 302) | DateTime? maxSync()

FILE: packages/isar/lib/src/query_components.dart
  class WhereClause (line 4) | abstract class WhereClause {
  class IdWhereClause (line 9) | class IdWhereClause extends WhereClause {
  class IndexWhereClause (line 68) | class IndexWhereClause extends WhereClause {
  class LinkWhereClause (line 153) | class LinkWhereClause extends WhereClause {
  class FilterOperation (line 172) | @protected
  type FilterConditionType (line 178) | enum FilterConditionType {
  class FilterCondition (line 220) | class FilterCondition extends FilterOperation {
  type FilterGroupType (line 460) | enum FilterGroupType {
  class FilterGroup (line 475) | class FilterGroup extends FilterOperation {
  type Sort (line 520) | enum Sort {
  class SortProperty (line 529) | class SortProperty {
  class DistinctProperty (line 541) | class DistinctProperty {
  class ObjectFilter (line 553) | class ObjectFilter extends FilterOperation {
  class LinkFilter (line 568) | class LinkFilter extends FilterOperation {

FILE: packages/isar/lib/src/schema/collection_schema.dart
  class CollectionSchema (line 4) | class CollectionSchema<OBJ> extends Schema<OBJ> {
    method toCollection (line 92) | void toCollection(void Function<OBJ>() callback)
    method index (line 96) | IndexSchema index(String indexName)
    method link (line 107) | LinkSchema link(String linkName)
    method toJson (line 119) | Map<String, dynamic> toJson()
  type GetId (line 143) | @protected
  type GetLinks (line 147) | @protected
  type Attach (line 151) | @protected

FILE: packages/isar/lib/src/schema/index_schema.dart
  class IndexSchema (line 4) | class IndexSchema {
    method toJson (line 46) | Map<String, dynamic> toJson()
  class IndexPropertySchema (line 61) | class IndexPropertySchema {
    method toJson (line 91) | Map<String, dynamic> toJson()

FILE: packages/isar/lib/src/schema/link_schema.dart
  class LinkSchema (line 4) | class LinkSchema {
    method toJson (line 48) | Map<String, dynamic> toJson()

FILE: packages/isar/lib/src/schema/property_schema.dart
  class PropertySchema (line 4) | class PropertySchema {
    method toJson (line 44) | Map<String, dynamic> toJson()
  type IsarType (line 63) | enum IsarType {

FILE: packages/isar/lib/src/schema/schema.dart
  class Schema (line 4) | class Schema<OBJ> {
    method property (line 65) | PropertySchema property(String propertyName)
    method toJson (line 76) | Map<String, dynamic> toJson()
  type EstimateSize (line 94) | @protected
  type Serialize (line 102) | @protected
  type Deserialize (line 111) | @protected
  type DeserializeProp (line 120) | @protected

FILE: packages/isar/lib/src/web/bindings.dart
  function stringify (line 11) | String stringify(dynamic value)
  function idbCmp (line 14) | int idbCmp(dynamic value1, dynamic value2)
  function objectKeys (line 17) | List<String> objectKeys(dynamic obj)
  function jsMapToDart (line 19) | Map<String, dynamic> jsMapToDart(Object obj)
  class Promise (line 28) | @JS('Promise')
  function wait (line 32) | Future<T> wait<T>()
  function openIsarJs (line 36) | Promise openIsarJs(
  class IsarTxnJs (line 42) | @JS('IsarTxn')
    method commit (line 44) | Promise commit()
    method abort (line 46) | void abort()
  class IsarInstanceJs (line 51) | @JS('IsarInstance')
    method beginTxn (line 53) | IsarTxnJs beginTxn(bool write)
    method getCollection (line 55) | IsarCollectionJs getCollection(String name)
    method close (line 57) | Promise close(bool deleteFromDisk)
  type ChangeCallbackJs (line 60) | typedef ChangeCallbackJs = void Function();
  type ObjectChangeCallbackJs (line 62) | typedef ObjectChangeCallbackJs = void Function(Object? object);
  type QueryChangeCallbackJs (line 64) | typedef QueryChangeCallbackJs = void Function(List<dynamic> results);
  type StopWatchingJs (line 66) | typedef StopWatchingJs = JsFunction;
  class IsarCollectionJs (line 68) | @JS('IsarCollection')
    method getLink (line 70) | IsarLinkJs getLink(String name)
    method getAll (line 72) | Promise getAll(IsarTxnJs txn, List<Id> ids)
    method getAllByIndex (line 74) | Promise getAllByIndex(
    method putAll (line 80) | Promise putAll(IsarTxnJs txn, List<dynamic> objects)
    method deleteAll (line 82) | Promise deleteAll(IsarTxnJs txn, List<Id> ids)
    method deleteAllByIndex (line 84) | Promise deleteAllByIndex(
    method clear (line 90) | Promise clear(IsarTxnJs txn)
    method watchLazy (line 92) | StopWatchingJs watchLazy(ChangeCallbackJs callback)
    method watchObject (line 94) | StopWatchingJs watchObject(Id id, ObjectChangeCallbackJs callback)
    method watchQuery (line 96) | StopWatchingJs watchQuery(
    method watchQueryLazy (line 101) | StopWatchingJs watchQueryLazy(
  class IsarLinkJs (line 107) | @JS('IsarLink')
    method update (line 109) | Promise update(
    method clear (line 117) | Promise clear(IsarTxnJs txn, Id id, bool backlink)
  class IdWhereClauseJs (line 120) | @JS('IdWhereClause')
  class IndexWhereClauseJs (line 126) | @JS('IndexWhereClause')
  class LinkWhereClauseJs (line 133) | @JS('LinkWhereClause')
  class FilterJs (line 142) | @JS('Function')
  class SortCmpJs (line 147) | @JS('Function')
  class DistinctValueJs (line 152) | @JS('Function')
  class QueryJs (line 157) | @JS('IsarQuery')
    method findFirst (line 171) | Promise findFirst(IsarTxnJs txn)
    method findAll (line 173) | Promise findAll(IsarTxnJs txn)
    method deleteFirst (line 175) | Promise deleteFirst(IsarTxnJs txn)
    method deleteAll (line 177) | Promise deleteAll(IsarTxnJs txn)
    method min (line 179) | Promise min(IsarTxnJs txn, String propertyName)
    method max (line 181) | Promise max(IsarTxnJs txn, String propertyName)
    method sum (line 183) | Promise sum(IsarTxnJs txn, String propertyName)
    method average (line 185) | Promise average(IsarTxnJs txn, String propertyName)
    method count (line 187) | Promise count(IsarTxnJs txn)

FILE: packages/isar/lib/src/web/isar_collection_impl.dart
  class IsarCollectionImpl (line 18) | class IsarCollectionImpl<OBJ> extends IsarCollection<OBJ> {
    method deserializeObject (line 38) | OBJ deserializeObject(Object object)
    method deserializeObjects (line 45) | List<OBJ?> deserializeObjects(dynamic objects)
    method getAll (line 55) | Future<List<OBJ?>> getAll(List<Id> ids)
    method getAllByIndex (line 63) | Future<List<OBJ?>> getAllByIndex(String indexName, List<IndexKey> keys)
    method getAllSync (line 73) | List<OBJ?> getAllSync(List<Id> ids)
    method getAllByIndexSync (line 76) | List<OBJ?> getAllByIndexSync(String indexName, List<IndexKey> keys)
    method putAll (line 80) | Future<List<Id>> putAll(List<OBJ> objects)
    method putAllSync (line 85) | List<int> putAllSync(List<OBJ> objects, {bool saveLinks = true})
    method putAllByIndex (line 89) | Future<List<Id>> putAllByIndex(String? indexName, List<OBJ> objects)
    method putAllByIndexSync (line 111) | List<Id> putAllByIndexSync(
    method deleteAll (line 119) | Future<int> deleteAll(List<Id> ids)
    method deleteAllByIndex (line 127) | Future<int> deleteAllByIndex(String indexName, List<IndexKey> keys)
    method deleteAllSync (line 134) | int deleteAllSync(List<Id> ids)
    method deleteAllByIndexSync (line 137) | int deleteAllByIndexSync(String indexName, List<IndexKey> keys)
    method clear (line 141) | Future<void> clear()
    method clearSync (line 148) | void clearSync()
    method importJson (line 151) | Future<void> importJson(List<Map<String, dynamic>> json)
    method importJsonRaw (line 158) | Future<void> importJsonRaw(Uint8List jsonBytes)
    method importJsonSync (line 164) | void importJsonSync(List<Map<String, dynamic>> json)
    method importJsonRawSync (line 167) | void importJsonRawSync(Uint8List jsonBytes)
    method count (line 170) | Future<int> count()
    method countSync (line 173) | int countSync()
    method getSize (line 176) | Future<int> getSize({
    method getSizeSync (line 183) | int getSizeSync({
    method watchLazy (line 190) | Stream<void> watchLazy({bool fireImmediately = false})
    method watchObject (line 205) | Stream<OBJ?> watchObject(
    method watchObjectLazy (line 227) | Stream<void> watchObjectLazy(Id id, {bool fireImmediately = false})
    method buildQuery (line 231) | Query<T> buildQuery<T>({
    method verify (line 257) | Future<void> verify(List<OBJ> objects)
    method verifyLink (line 260) | Future<void> verifyLink(

FILE: packages/isar/lib/src/web/isar_impl.dart
  class IsarImpl (line 13) | class IsarImpl extends Isar {
    method requireNotInTxn (line 23) | void requireNotInTxn()
    method _txn (line 31) | Future<T> _txn<T>(
    method txn (line 72) | Future<T> txn<T>(Future<T> Function() callback)
    method writeTxn (line 77) | Future<T> writeTxn<T>(Future<T> Function() callback, {bool silent = fa...
    method txnSync (line 82) | T txnSync<T>(T Function() callback)
    method writeTxnSync (line 85) | T writeTxnSync<T>(T Function() callback, {bool silent = false})
    method getTxn (line 88) | Future<T> getTxn<T>(bool write, Future<T> Function(IsarTxnJs txn) call...
    method getSize (line 107) | Future<int> getSize({
    method getSizeSync (line 114) | int getSizeSync({
    method copyToFile (line 121) | Future<void> copyToFile(String targetPath)
    method close (line 124) | Future<bool> close({bool deleteFromDisk = false})
    method verify (line 134) | Future<void> verify()

FILE: packages/isar/lib/src/web/isar_link_impl.dart
  function update (line 31) | Future<void> update({
  function updateSync (line 63) | void updateSync({
  class IsarLinkImpl (line 71) | class IsarLinkImpl<OBJ> extends IsarLinkCommon<OBJ>
  class IsarLinksImpl (line 74) | class IsarLinksImpl<OBJ> extends IsarLinksCommon<OBJ>

FILE: packages/isar/lib/src/web/isar_reader_impl.dart
  class IsarReaderImpl (line 11) | class IsarReaderImpl implements IsarReader {
    method readBool (line 18) | bool readBool(int offset)
    method readBoolOrNull (line 25) | bool? readBoolOrNull(int offset)
    method readByte (line 36) | int readByte(int offset)
    method readByteOrNull (line 43) | int? readByteOrNull(int offset)
    method readInt (line 50) | int readInt(int offset)
    method readIntOrNull (line 57) | int? readIntOrNull(int offset)
    method readFloat (line 64) | double readFloat(int offset)
    method readFloatOrNull (line 71) | double? readFloatOrNull(int offset)
    method readLong (line 78) | int readLong(int offset)
    method readLongOrNull (line 85) | int? readLongOrNull(int offset)
    method readDouble (line 92) | double readDouble(int offset)
    method readDoubleOrNull (line 99) | double? readDoubleOrNull(int offset)
    method readDateTime (line 106) | DateTime readDateTime(int offset)
    method readDateTimeOrNull (line 115) | DateTime? readDateTimeOrNull(int offset)
    method readString (line 124) | String readString(int offset)
    method readStringOrNull (line 131) | String? readStringOrNull(int offset)
    method readObjectOrNull (line 138) | T? readObjectOrNull<T>(
    method readBoolList (line 154) | List<bool>? readBoolList(int offset)
    method readBoolOrNullList (line 161) | List<bool?>? readBoolOrNullList(int offset)
    method readByteList (line 178) | List<int>? readByteList(int offset)
    method readIntList (line 187) | List<int>? readIntList(int offset)
    method readIntOrNullList (line 196) | List<int?>? readIntOrNullList(int offset)
    method readFloatList (line 205) | List<double>? readFloatList(int offset)
    method readFloatOrNullList (line 214) | List<double?>? readFloatOrNullList(int offset)
    method readLongList (line 223) | List<int>? readLongList(int offset)
    method readLongOrNullList (line 232) | List<int?>? readLongOrNullList(int offset)
    method readDoubleList (line 241) | List<double>? readDoubleList(int offset)
    method readDoubleOrNullList (line 250) | List<double?>? readDoubleOrNullList(int offset)
    method readDateTimeList (line 259) | List<DateTime>? readDateTimeList(int offset)
    method readDateTimeOrNullList (line 275) | List<DateTime?>? readDateTimeOrNullList(int offset)
    method readStringList (line 291) | List<String>? readStringList(int offset)
    method readStringOrNullList (line 300) | List<String?>? readStringOrNullList(int offset)
    method readObjectList (line 309) | List<T>? readObjectList<T>(
    method readObjectOrNullList (line 330) | List<T?>? readObjectOrNullList<T>(

FILE: packages/isar/lib/src/web/isar_web.dart
  function unsupportedOnWeb (line 21) | Never unsupportedOnWeb()
  class _WebAbi (line 25) | class _WebAbi {
  type IsarAbi (line 41) | @protected
  function initializeCoreBinary (line 44) | FutureOr<void> initializeCoreBinary({

FILE: packages/isar/lib/src/web/isar_writer_impl.dart
  class IsarWriterImpl (line 8) | class IsarWriterImpl implements IsarWriter {
    method writeBool (line 15) | void writeBool(int offset, bool? value)
    method writeByte (line 26) | void writeByte(int offset, int value)
    method writeInt (line 32) | void writeInt(int offset, int? value)
    method writeFloat (line 38) | void writeFloat(int offset, double? value)
    method writeLong (line 44) | void writeLong(int offset, int? value)
    method writeDouble (line 50) | void writeDouble(int offset, double? value)
    method writeDateTime (line 56) | void writeDateTime(int offset, DateTime? value)
    method writeString (line 66) | void writeString(int offset, String? value)
    method writeObject (line 72) | void writeObject<T>(
    method writeByteList (line 88) | void writeByteList(int offset, List<int>? values)
    method writeBoolList (line 94) | void writeBoolList(int offset, List<bool?>? values)
    method writeIntList (line 109) | void writeIntList(int offset, List<int?>? values)
    method writeFloatList (line 116) | void writeFloatList(int offset, List<double?>? values)
    method writeLongList (line 123) | void writeLongList(int offset, List<int?>? values)
    method writeDoubleList (line 130) | void writeDoubleList(int offset, List<double?>? values)
    method writeDateTimeList (line 137) | void writeDateTimeList(int offset, List<DateTime?>? values)
    method writeStringList (line 146) | void writeStringList(int offset, List<String?>? values)
    method writeObjectList (line 153) | void writeObjectList<T>(

FILE: packages/isar/lib/src/web/open.dart
  function initializeIsarWeb (line 16) | Future<void> initializeIsarWeb([String? jsUrl])
  function doNotInitializeIsarWeb (line 37) | void doNotInitializeIsarWeb()
  function openIsar (line 41) | Future<Isar> openIsar({
  function openIsarSync (line 74) | Isar openIsarSync({

FILE: packages/isar/lib/src/web/query_build.dart
  function buildWebQuery (line 12) | Query<T> buildWebQuery<T, OBJ>(
  function _valueToJs (line 60) | dynamic _valueToJs(dynamic value)
  function _buildIdWhereClause (line 76) | IdWhereClauseJs _buildIdWhereClause(IdWhereClause wc)
  function _buildIndexWhereClause (line 86) | IndexWhereClauseJs _buildIndexWhereClause(
  function _buildLinkWhereClause (line 120) | LinkWhereClauseJs _buildLinkWhereClause(
  function _buildKeyRange (line 135) | KeyRange? _buildKeyRange(
  function _buildFilter (line 168) | FilterJs? _buildFilter(
  function _buildFilterOperation (line 180) | String? _buildFilterOperation(
  function _buildFilterGroup (line 195) | String? _buildFilterGroup(CollectionSchema<dynamic> schema, FilterGroup ...
  function _buildCondition (line 219) | String _buildCondition(
  function _prepareFilterValue (line 223) | dynamic _prepareFilterValue(dynamic value)
  function _buildConditionInternal (line 257) | String _buildConditionInternal({
  function _buildSort (line 357) | SortCmpJs _buildSort(List<SortProperty> properties)
  function _buildDistinct (line 366) | DistinctValueJs _buildDistinct(List<DistinctProperty> properties)

FILE: packages/isar/lib/src/web/query_impl.dart
  type QueryDeserialize (line 14) | typedef QueryDeserialize<T> = T Function(Object);
  class QueryImpl (line 16) | class QueryImpl<T> extends Query<T> {
    method findFirst (line 27) | Future<T?> findFirst()
    method findFirstSync (line 38) | T? findFirstSync()
    method findAll (line 41) | Future<List<T>> findAll()
    method findAllSync (line 49) | List<T> findAllSync()
    method aggregate (line 52) | Future<R?> aggregate<R>(AggregationOp op)
    method aggregateSync (line 96) | R? aggregateSync<R>(AggregationOp op)
    method deleteFirst (line 99) | Future<bool> deleteFirst()
    method deleteFirstSync (line 106) | bool deleteFirstSync()
    method deleteAll (line 109) | Future<int> deleteAll()
    method deleteAllSync (line 116) | int deleteAllSync()
    method watch (line 119) | Stream<List<T>> watch({bool fireImmediately = false})
    method watchLazy (line 141) | Stream<void> watchLazy({bool fireImmediately = false})
    method exportJsonRaw (line 158) | Future<R> exportJsonRaw<R>(R Function(Uint8List) callback)
    method exportJson (line 167) | Future<List<Map<String, dynamic>>> exportJson()
    method exportJsonRawSync (line 175) | R exportJsonRawSync<R>(R Function(Uint8List) callback)
    method exportJsonSync (line 178) | List<Map<String, dynamic>> exportJsonSync({bool primitiveNull = true})

FILE: packages/isar/lib/src/web/split_words.dart
  function isarSplitWords (line 5) | List<String> isarSplitWords(String input)

FILE: packages/isar/test/isar_reader_writer_test.dart
  function main (line 15) | void main()
  type Type (line 63) | enum Type {
  class BinaryTest (line 87) | class BinaryTest {
  function _expectIgnoreNull (line 105) | void _expectIgnoreNull(
  function _readBool (line 127) | bool? _readBool(IsarReader reader, int offset, bool nullable)
  function _writeBool (line 135) | void _writeBool(IsarWriter writer, int offset, dynamic value)
  function _readByte (line 139) | int? _readByte(IsarReader reader, int offset, bool nullable)
  function _writeByte (line 143) | void _writeByte(IsarWriter writer, int offset, dynamic value)
  function _readInt (line 147) | int? _readInt(IsarReader reader, int offset, bool nullable)
  function _writeInt (line 155) | void _writeInt(IsarWriter writer, int offset, dynamic value)
  function _readFloat (line 159) | double? _readFloat(IsarReader reader, int offset, bool nullable)
  function _writeFloat (line 167) | void _writeFloat(IsarWriter writer, int offset, dynamic value)
  function _readLong (line 171) | int? _readLong(IsarReader reader, int offset, bool nullable)
  function _writeLong (line 179) | void _writeLong(IsarWriter writer, int offset, dynamic value)
  function _readDouble (line 183) | double? _readDouble(IsarReader reader, int offset, bool nullable)
  function _writeDouble (line 191) | void _writeDouble(IsarWriter writer, int offset, dynamic value)
  function _readString (line 195) | String? _readString(IsarReader reader, int offset, bool nullable)
  function _writeString (line 203) | void _writeString(IsarWriter writer, int offset, dynamic value)
  function _readBoolList (line 208) | List<bool?>? _readBoolList(IsarReader reader, int offset, bool nullable)
  function _writeBoolList (line 216) | void _writeBoolList(IsarWriter writer, int offset, dynamic value)
  function _readByteList (line 220) | List<int>? _readByteList(IsarReader reader, int offset, bool nullable)
  function _writeByteList (line 224) | void _writeByteList(IsarWriter writer, int offset, dynamic value)
  function _readIntList (line 229) | List<int?>? _readIntList(IsarReader reader, int offset, bool nullable)
  function _writeIntList (line 237) | void _writeIntList(IsarWriter writer, int offset, dynamic value)
  function _readFloatList (line 241) | List<double?>? _readFloatList(IsarReader reader, int offset, bool nullable)
  function _writeFloatList (line 249) | void _writeFloatList(IsarWriter writer, int offset, dynamic value)
  function _readLongList (line 253) | List<int?>? _readLongList(IsarReader reader, int offset, bool nullable)
  function _writeLongList (line 261) | void _writeLongList(IsarWriter writer, int offset, dynamic value)
  function _readDoubleList (line 265) | List<double?>? _readDoubleList(IsarReader reader, int offset, bool nulla...
  function _writeDoubleList (line 273) | void _writeDoubleList(IsarWriter writer, int offset, dynamic value)
  function _readStringList (line 277) | List<String?>? _readStringList(IsarReader reader, int offset, bool nulla...
  function _writeStringList (line 285) | void _writeStringList(IsarWriter writer, int offset, dynamic value)

FILE: packages/isar/tool/get_version.dart
  function main (line 3) | void main()

FILE: packages/isar/tool/verify_release_version.dart
  function main (line 3) | void main(List<String> args)

FILE: packages/isar_core/src/collection.rs
  type IsarCollection (line 23) | pub struct IsarCollection {
    method new (line 45) | pub(crate) fn new(
    method new_object_builder (line 70) | pub fn new_object_builder(&self, buffer: Option<Vec<u8>>) -> ObjectBui...
    method new_query_builder (line 74) | pub fn new_query_builder(&self) -> QueryBuilder {
    method init_auto_increment (line 78) | pub(crate) fn init_auto_increment(&self, cursors: &IsarCursors) -> Res...
    method update_auto_increment (line 87) | pub(crate) fn update_auto_increment(&self, id: i64) {
    method auto_increment (line 93) | pub fn auto_increment(&self, _: &mut IsarTxn) -> Result<i64> {
    method auto_increment_internal (line 97) | pub(crate) fn auto_increment_internal(&self) -> Result<i64> {
    method get (line 107) | pub fn get<'txn>(&self, txn: &'txn mut IsarTxn, id: i64) -> Result<Opt...
    method get_index_by_id (line 117) | pub(crate) fn get_index_by_id(&self, index_id: u64) -> Result<&IsarInd...
    method get_by_index (line 124) | pub fn get_by_index<'txn>(
    method put (line 145) | pub fn put(&self, txn: &mut IsarTxn, id: Option<i64>, object: IsarObje...
    method put_by_index (line 151) | pub fn put_by_index(
    method put_internal (line 170) | fn put_internal(
    method delete (line 204) | pub fn delete(&self, txn: &mut IsarTxn, id: i64) -> Result<bool> {
    method delete_by_index (line 210) | pub fn delete_by_index(
    method delete_internal (line 227) | fn delete_internal(
    method get_link_backlink (line 258) | pub(crate) fn get_link_backlink(&self, link_id: u64) -> Result<&IsarLi...
    method link (line 268) | pub fn link(&self, txn: &mut IsarTxn, link_id: u64, id: i64, target_id...
    method unlink (line 275) | pub fn unlink(&self, txn: &mut IsarTxn, link_id: u64, id: i64, target_...
    method unlink_all (line 282) | pub fn unlink_all(&self, txn: &mut IsarTxn, link_id: u64, id: i64) -> ...
    method clear (line 289) | pub fn clear(&self, txn: &mut IsarTxn) -> Result<()> {
    method count (line 311) | pub fn count(&self, txn: &mut IsarTxn) -> Result<u64> {
    method get_size (line 315) | pub fn get_size(
    method import_json (line 340) | pub fn import_json(&self, txn: &mut IsarTxn, id_name: Option<&str>, js...
    method fill_indexes (line 371) | pub(crate) fn fill_indexes(&self, index_ids: &[u64], cursors: &IsarCur...
    method verify (line 399) | pub fn verify(&self, txn: &mut IsarTxn, objects: &IntMap<IsarObject>) ...
    method verify_link (line 443) | pub fn verify_link(&self, txn: &mut IsarTxn, link_id: u64, links: &[(i...

FILE: packages/isar_core/src/cursor.rs
  type IsarCursors (line 9) | pub(crate) struct IsarCursors<'txn, 'env> {
  function new (line 16) | pub fn new(
  function get_cursor (line 27) | pub fn get_cursor<'a>(&'a self, db: Db) -> Result<IsarCursor<'a, 'txn, '...
  function db_stat (line 46) | pub fn db_stat(&self, db: Db) -> Result<(u64, u64)> {
  function clear_db (line 50) | pub fn clear_db(&self, db: Db) -> Result<()> {
  function close (line 54) | pub fn close(self) -> Vec<UnboundCursor> {
  type IsarCursor (line 63) | pub(crate) struct IsarCursor<'a, 'txn, 'env> {
  type Target (line 70) | type Target = Cursor<'txn>;
  method deref (line 72) | fn deref(&self) -> &Self::Target {
  method deref_mut (line 78) | fn deref_mut(&mut self) -> &mut Self::Target {
  method drop (line 84) | fn drop(&mut self) {

FILE: packages/isar_core/src/error.rs
  type Result (line 3) | pub type Result<T> = std::result::Result<T, IsarError>;
  type IsarError (line 6) | pub enum IsarError {
  function illegal_arg (line 64) | pub fn illegal_arg<T>(msg: &str) -> Result<T> {
  function schema_error (line 70) | pub fn schema_error<T>(msg: &str) -> Result<T> {

FILE: packages/isar_core/src/index/index_key.rs
  type IndexKey (line 9) | pub struct IndexKey {
    method new (line 14) | pub fn new() -> Self {
    method from_bytes (line 18) | pub fn from_bytes(bytes: Vec<u8>) -> Self {
    method add_byte (line 22) | pub fn add_byte(&mut self, value: u8) {
    method add_int (line 26) | pub fn add_int(&mut self, value: i32) {
    method add_long (line 32) | pub fn add_long(&mut self, value: i64) {
    method add_float (line 38) | pub fn add_float(&mut self, value: f32) {
    method add_double (line 52) | pub fn add_double(&mut self, value: f64) {
    method add_string (line 66) | pub fn add_string(&mut self, value: Option<&str>, case_sensitive: bool) {
    method add_hash (line 89) | pub fn add_hash(&mut self, value: u64) {
    method len (line 95) | pub fn len(&self) -> usize {
    method truncate (line 99) | pub fn truncate(&mut self, len: usize) {
    method increase (line 103) | pub fn increase(&mut self) -> bool {
    method decrease (line 118) | pub fn decrease(&mut self) -> bool {
    method partial_cmp (line 151) | fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
  method as_bytes (line 135) | fn as_bytes(&self) -> Cow<[u8]> {
  method cmp_bytes (line 139) | fn cmp_bytes(&self, other: &[u8]) -> Ordering {
  method cmp (line 157) | fn cmp(&self, other: &Self) -> Ordering {
  function test_add_byte (line 170) | fn test_add_byte() {
  function test_add_int (line 186) | fn test_add_int() {
  function test_add_long (line 206) | fn test_add_long() {
  function test_add_float (line 229) | fn test_add_float() {
  function test_add_double (line 253) | fn test_add_double() {
  function test_add_string (line 292) | fn test_add_string() {

FILE: packages/isar_core/src/index/index_key_builder.rs
  type IndexKeyBuilder (line 8) | pub(crate) struct IndexKeyBuilder<'a> {
  function new (line 13) | pub fn new(properties: &'a [IndexProperty]) -> Self {
  function create_keys (line 17) | pub fn create_keys(
  function create_primitive_key (line 33) | pub fn create_primitive_key(&self, object: IsarObject) -> IndexKey {
  function create_list_keys (line 67) | fn create_list_keys(

FILE: packages/isar_core/src/index/mod.rs
  type IndexProperty (line 17) | pub struct IndexProperty {
    method new (line 24) | pub(crate) fn new(property: Property, index_type: IndexType, case_sens...
    method get_string_with_case (line 32) | pub fn get_string_with_case(&self, object: IsarObject) -> Option<Strin...
    method is_multi_entry (line 42) | fn is_multi_entry(&self) -> bool {
  type IsarIndex (line 48) | pub(crate) struct IsarIndex {
    constant MAX_STRING_INDEX_SIZE (line 59) | pub const MAX_STRING_INDEX_SIZE: usize = 1024;
    method new (line 61) | pub fn new(
    method create_for_object (line 81) | pub fn create_for_object<F>(
    method delete_for_object (line 112) | pub fn delete_for_object(
    method iter_between (line 134) | pub fn iter_between<'txn, 'env>(
    method get_id (line 154) | pub fn get_id<'txn, 'env>(
    method get_size (line 167) | pub fn get_size(&self, cursors: &IsarCursors) -> Result<u64> {
    method clear (line 171) | pub fn clear(&self, cursors: &IsarCursors) -> Result<()> {
    method verify (line 175) | pub fn verify(&self, cursors: &IsarCursors, objects: &IntMap<IsarObjec...

FILE: packages/isar_core/src/instance.rs
  type CompactCondition (line 27) | pub struct CompactCondition {
  type IsarInstance (line 33) | pub struct IsarInstance {
    method open (line 45) | pub fn open(
    method get_isar_path (line 79) | fn get_isar_path(name: &str, dir: &str) -> String {
    method move_old_database (line 88) | fn move_old_database(name: &str, dir: &str, new_path: &str) {
    method open_internal (line 102) | fn open_internal(
    method compact (line 183) | fn compact(self, compact_condition: CompactCondition) -> Result<Option...
    method get_instance (line 215) | pub fn get_instance(name: &str) -> Option<Arc<Self>> {
    method begin_txn (line 220) | pub fn begin_txn(&self, write: bool, silent: bool) -> Result<IsarTxn> {
    method get_size (line 234) | pub fn get_size(
    method copy_to_file (line 249) | pub fn copy_to_file(&self, path: &str) -> Result<()> {
    method new_watcher (line 253) | fn new_watcher(&self, start: WatcherModifier, stop: WatcherModifier) -...
    method watch_collection (line 262) | pub fn watch_collection(
    method watch_object (line 280) | pub fn watch_object(
    method watch_query (line 300) | pub fn watch_query(
    method close_internal (line 319) | fn close_internal(self: Arc<Self>, delete_from_disk: bool) -> bool {
    method close (line 340) | pub fn close(self: Arc<Self>) -> bool {
    method close_and_delete (line 344) | pub fn close_and_delete(self: Arc<Self>) -> bool {
    method verify (line 348) | pub fn verify(&self, txn: &mut IsarTxn) -> Result<()> {

FILE: packages/isar_core/src/legacy/isar_object_v1.rs
  type LegacyProperty (line 5) | pub struct LegacyProperty {
    method new (line 11) | pub const fn new(data_type: DataType, offset: usize) -> Self {
  type LegacyIsarObject (line 17) | pub struct LegacyIsarObject<'a> {
  function from_bytes (line 23) | pub fn from_bytes(bytes: &'a [u8]) -> Self {
  function contains_offset (line 29) | pub(crate) fn contains_offset(&self, offset: usize) -> bool {
  function contains_property (line 34) | pub fn contains_property(&self, property: LegacyProperty) -> bool {
  function is_null (line 38) | pub fn is_null(&self, property: LegacyProperty) -> bool {
  function read_byte (line 49) | pub fn read_byte(&self, property: LegacyProperty) -> u8 {
  function read_bool (line 57) | pub fn read_bool(&self, property: LegacyProperty) -> bool {
  function read_int (line 61) | pub fn read_int(&self, property: LegacyProperty) -> i32 {
  function read_float (line 69) | pub fn read_float(&self, property: LegacyProperty) -> f32 {
  function read_long (line 77) | pub fn read_long(&self, property: LegacyProperty) -> i64 {
  function read_double (line 85) | pub fn read_double(&self, property: LegacyProperty) -> f64 {
  function get_offset_length (line 93) | fn get_offset_length(&self, offset: usize, dynamic_offset: bool) -> Opti...
  function read_string_at (line 104) | fn read_string_at(&self, offset: usize, dynamic_offset: bool) -> Option<...
  function read_string (line 110) | pub fn read_string(&'a self, property: LegacyProperty) -> Option<&'a str> {
  function read_byte_list (line 114) | pub fn read_byte_list(&self, property: LegacyProperty) -> Option<&'a [u8...
  function read_int_list (line 119) | pub fn read_int_list(&self, property: LegacyProperty) -> Option<Vec<i32>> {
  function read_float_list (line 129) | pub fn read_float_list(&self, property: LegacyProperty) -> Option<Vec<f3...
  function read_long_list (line 139) | pub fn read_long_list(&self, property: LegacyProperty) -> Option<Vec<i64...
  function read_double_list (line 149) | pub fn read_double_list(&self, property: LegacyProperty) -> Option<Vec<f...
  function read_string_list (line 159) | pub fn read_string_list(&self, property: LegacyProperty) -> Option<Vec<O...

FILE: packages/isar_core/src/link.rs
  type IsarLink (line 11) | pub(crate) struct IsarLink {
    method new (line 21) | pub fn new(
    method iter_ids (line 43) | pub fn iter_ids<F>(&self, cursors: &IsarCursors, id: i64, mut callback...
    method iter (line 53) | pub fn iter<'txn, 'env, F>(
    method create (line 74) | pub fn create(&self, cursors: &IsarCursors, source_id: i64, target_id:...
    method delete (line 92) | pub fn delete(&self, cursors: &IsarCursors, source_id: i64, target_id:...
    method delete_all_for_object (line 117) | pub fn delete_all_for_object(&self, cursors: &IsarCursors, id: i64) ->...
    method get_size (line 138) | pub fn get_size(&self, cursors: &IsarCursors) -> Result<u64> {
    method clear (line 142) | pub fn clear(&self, cursors: &IsarCursors) -> Result<()> {
    method verify (line 147) | pub fn verify(&self, cursors: &IsarCursors, links: &[(i64, i64)]) -> R...

FILE: packages/isar_core/src/mdbx/cursor.rs
  type UnboundCursor (line 9) | pub struct UnboundCursor {
    method new (line 14) | pub(crate) fn new() -> Self {
    method bind (line 20) | pub fn bind<'txn>(self, txn: &'txn Txn, db: Db) -> Result<Cursor<'txn>> {
  method drop (line 33) | fn drop(&mut self) {
  type Cursor (line 38) | pub struct Cursor<'txn> {
  function unbind (line 44) | pub fn unbind(self) -> UnboundCursor {
  function op_get (line 49) | fn op_get(
  function move_to (line 74) | pub fn move_to<K: Key>(&mut self, key: &K) -> Result<Option<KeyVal<'txn>...
  function move_to_key_val (line 82) | pub fn move_to_key_val<K: Key>(&mut self, key: &K, val: &[u8]) -> Result...
  function move_to_gte (line 90) | fn move_to_gte<K: Key>(&mut self, key: &K) -> Result<Option<KeyVal<'txn>...
  function move_to_next_dup (line 98) | fn move_to_next_dup(&mut self) -> Result<Option<KeyVal<'txn>>> {
  function move_to_last_dup (line 102) | fn move_to_last_dup(&mut self) -> Result<Option<KeyVal<'txn>>> {
  function move_to_prev_no_dup (line 106) | fn move_to_prev_no_dup(&mut self) -> Result<Option<KeyVal<'txn>>> {
  function move_to_next (line 110) | pub fn move_to_next(&mut self) -> Result<Option<KeyVal<'txn>>> {
  function move_to_first (line 114) | pub fn move_to_first(&mut self) -> Result<Option<KeyVal<'txn>>> {
  function move_to_last (line 118) | pub fn move_to_last(&mut self) -> Result<Option<KeyVal<'txn>>> {
  function put (line 122) | pub fn put<K: Key>(&mut self, key: &K, data: &[u8]) -> Result<()> {
  function delete_current (line 134) | pub fn delete_current(&mut self) -> Result<()> {
  function iter (line 140) | fn iter(
  function iter_all (line 163) | pub fn iter_all(
  function iter_between_first (line 186) | fn iter_between_first<K: Key>(
  function iter_between (line 232) | pub fn iter_between<K: Key>(
  function iter_dups (line 269) | pub fn iter_dups<K: Key>(

FILE: packages/isar_core/src/mdbx/db.rs
  type Db (line 9) | pub struct Db {
    method runtime_id (line 15) | pub fn runtime_id(&self) -> u64 {
    method open (line 19) | pub fn open(
    method stat (line 52) | pub fn stat(&self, txn: &Txn) -> Result<(u64, u64)> {
    method clear (line 76) | pub fn clear(&self, txn: &Txn) -> Result<()> {
    method drop (line 81) | pub fn drop(self, txn: &Txn) -> Result<()> {

FILE: packages/isar_core/src/mdbx/env.rs
  type Env (line 7) | pub struct Env {
    method create (line 17) | pub fn create(
    method txn (line 70) | pub fn txn(&self, write: bool) -> Result<Txn> {
    method copy (line 85) | pub fn copy(&self, path: &str) -> Result<()> {
  constant MIB (line 14) | const MIB: isize = 1 << 20;
  method drop (line 92) | fn drop(&mut self) {

FILE: packages/isar_core/src/mdbx/mod.rs
  type KeyVal (line 15) | pub type KeyVal<'txn> = (&'txn [u8], &'txn [u8]);
  constant EMPTY_KEY (line 17) | pub const EMPTY_KEY: ffi::MDBX_val = ffi::MDBX_val {
  constant EMPTY_VAL (line 22) | pub const EMPTY_VAL: ffi::MDBX_val = ffi::MDBX_val {
  function from_mdb_val (line 28) | pub unsafe fn from_mdb_val<'a>(val: &ffi::MDBX_val) -> &'a [u8] {
  function to_mdb_val (line 33) | pub unsafe fn to_mdb_val(value: &[u8]) -> ffi::MDBX_val {
  function mdbx_result (line 41) | pub fn mdbx_result(err_code: c_int) -> Result<()> {
  type Key (line 59) | pub trait Key {
    method as_bytes (line 60) | fn as_bytes(&self) -> Cow<[u8]>;
    method cmp_bytes (line 62) | fn cmp_bytes(&self, other: &[u8]) -> Ordering;
  function str_to_os (line 70) | pub fn str_to_os(str: &str) -> Result<U16CString> {
  constant ENV_OPEN (line 76) | pub const ENV_OPEN: unsafe extern "C" fn(
  constant ENV_COPY (line 83) | pub const ENV_COPY: unsafe extern "C" fn(
  function str_to_os (line 95) | pub fn str_to_os(str: &str) -> Result<CString> {
  constant ENV_OPEN (line 101) | pub const ENV_OPEN: unsafe extern "C" fn(
  constant ENV_COPY (line 108) | pub const ENV_COPY: unsafe extern "C" fn(

FILE: packages/isar_core/src/mdbx/txn.rs
  type Txn (line 6) | pub struct Txn<'env> {
  function new (line 13) | pub(crate) fn new(txn: *mut ffi::MDBX_txn, write: bool) -> Self {
  function commit (line 21) | pub fn commit(mut self) -> Result<()> {
  function abort (line 28) | pub fn abort(self) {}
  method drop (line 32) | fn drop(&mut self) {

FILE: packages/isar_core/src/object/data_type.rs
  type DataType (line 4) | pub enum DataType {
    method is_static (line 26) | pub fn is_static(&self) -> bool {
    method is_dynamic (line 38) | pub fn is_dynamic(&self) -> bool {
    method get_static_size (line 42) | pub fn get_static_size(&self) -> usize {
    method is_scalar (line 51) | pub fn is_scalar(&self) -> bool {
    method get_element_type (line 55) | pub fn get_element_type(&self) -> Option<DataType> {

FILE: packages/isar_core/src/object/id.rs
  type BytesToId (line 5) | pub trait BytesToId {
    method to_id (line 6) | fn to_id(&self) -> i64;
    method to_id (line 10) | fn to_id(&self) -> i64 {
  type IdToBytes (line 17) | pub trait IdToBytes {
    method to_id_bytes (line 18) | fn to_id_bytes(&self) -> [u8; 8];
    method to_id_bytes (line 22) | fn to_id_bytes(&self) -> [u8; 8] {
  method as_bytes (line 29) | fn as_bytes(&self) -> Cow<[u8]> {
  method cmp_bytes (line 34) | fn cmp_bytes(&self, other: &[u8]) -> Ordering {
  function test_to_id_bytes (line 45) | fn test_to_id_bytes() {
  function test_to_id (line 59) | fn test_to_id() {

FILE: packages/isar_core/src/object/isar_object.rs
  type IsarObject (line 8) | pub struct IsarObject<'a> {
  constant NULL_BYTE (line 14) | pub const NULL_BYTE: u8 = 0;
  constant NULL_BOOL (line 15) | pub const NULL_BOOL: u8 = 0;
  constant FALSE_BOOL (line 16) | pub const FALSE_BOOL: u8 = 1;
  constant TRUE_BOOL (line 17) | pub const TRUE_BOOL: u8 = 2;
  constant NULL_INT (line 18) | pub const NULL_INT: i32 = i32::MIN;
  constant NULL_LONG (line 19) | pub const NULL_LONG: i64 = i64::MIN;
  constant NULL_FLOAT (line 20) | pub const NULL_FLOAT: f32 = f32::NAN;
  constant NULL_DOUBLE (line 21) | pub const NULL_DOUBLE: f64 = f64::NAN;
  constant MAX_SIZE (line 22) | pub const MAX_SIZE: u32 = 2 << 24;
  function from_bytes (line 24) | pub fn from_bytes(bytes: &'a [u8]) -> Self {
  function as_bytes (line 29) | pub fn as_bytes(&self) -> &'a [u8] {
  function len (line 33) | pub fn len(&self) -> usize {
  function contains_offset (line 38) | pub(crate) fn contains_offset(&self, offset: usize) -> bool {
  function is_null (line 42) | pub fn is_null(&self, offset: usize, data_type: DataType) -> bool {
  function byte_to_bool (line 55) | pub fn byte_to_bool(value: u8) -> Option<bool> {
  function read_byte (line 63) | pub fn read_byte(&self, offset: usize) -> u8 {
  function read_bool (line 71) | pub fn read_bool(&self, offset: usize) -> Option<bool> {
  function read_int (line 80) | pub fn read_int(&self, offset: usize) -> i32 {
  function read_float (line 88) | pub fn read_float(&self, offset: usize) -> f32 {
  function read_long (line 96) | pub fn read_long(&self, offset: usize) -> i64 {
  function read_double (line 104) | pub fn read_double(&self, offset: usize) -> f64 {
  function read_u24 (line 112) | fn read_u24(&self, offset: usize) -> usize {
  function get_offset_length (line 116) | fn get_offset_length(&self, offset: usize) -> Option<(usize, usize)> {
  function read_length (line 127) | pub fn read_length(&self, offset: usize) -> Option<usize> {
  function read_byte_list (line 132) | pub fn read_byte_list(&self, offset: usize) -> Option<&'a [u8]> {
  function read_string (line 137) | pub fn read_string(&'a self, offset: usize) -> Option<&'a str> {
  function read_object (line 143) | pub fn read_object(&'a self, offset: usize) -> Option<IsarObject> {
  function read_bool_list (line 148) | pub fn read_bool_list(&self, offset: usize) -> Option<Vec<Option<bool>>> {
  function read_int_list (line 157) | pub fn read_int_list(&self, offset: usize) -> Option<Vec<i32>> {
  function read_int_or_null_list (line 166) | pub fn read_int_or_null_list(&self, offset: usize) -> Option<Vec<Option<...
  function read_float_list (line 180) | pub fn read_float_list(&self, offset: usize) -> Option<Vec<f32>> {
  function read_float_or_null_list (line 189) | pub fn read_float_or_null_list(&self, offset: usize) -> Option<Vec<Optio...
  function read_long_list (line 197) | pub fn read_long_list(&self, offset: usize) -> Option<Vec<i64>> {
  function read_long_or_null_list (line 206) | pub fn read_long_or_null_list(&self, offset: usize) -> Option<Vec<Option...
  function read_double_list (line 220) | pub fn read_double_list(&self, offset: usize) -> Option<Vec<f64>> {
  function read_double_or_null_list (line 229) | pub fn read_double_or_null_list(&self, offset: usize) -> Option<Vec<Opti...
  function read_string_list (line 237) | pub fn read_string_list(&self, offset: usize) -> Option<Vec<Option<&'a s...
  function read_object_list (line 241) | pub fn read_object_list(&self, offset: usize) -> Option<Vec<Option<IsarO...
  function read_dynamic_list (line 245) | fn read_dynamic_list<T: Clone>(
  function hash_property (line 268) | pub fn hash_property(
  function hash_string (line 298) | pub fn hash_string(value: Option<&str>, case_sensitive: bool, seed: u64)...
  function hash_list (line 310) | pub fn hash_list<T>(value: Option<&[T]>, seed: u64) -> u64 {
  function hash_string_list (line 319) | pub fn hash_string_list(
  function compare_property (line 335) | pub fn compare_property(
  function test_read_non_contained_property (line 373) | fn test_read_non_contained_property() {
  function test_read_bool (line 388) | fn test_read_bool() {
  function test_read_byte (line 406) | fn test_read_byte() {
  function test_read_int (line 419) | fn test_read_int() {
  function test_read_float (line 432) | fn test_read_float() {
  function test_read_long (line 445) | fn test_read_long() {
  function test_read_double (line 458) | fn test_read_double() {
  function test_read_string (line 471) | fn test_read_string() {
  function test_read_byte_list (line 489) | fn test_read_byte_list() {
  function test_read_int_list (line 507) | fn test_read_int_list() {
  function test_read_float_list (line 525) | fn test_read_float_list() {
  function test_read_long_list (line 546) | fn test_read_long_list() {
  function test_read_double_list (line 564) | fn test_read_double_list() {
  function test_read_string_list (line 585) | fn test_read_string_list() {

FILE: packages/isar_core/src/object/json_encode_decode.rs
  type JsonEncodeDecode (line 11) | pub struct JsonEncodeDecode {}
    method encode (line 15) | pub fn encode(
    method object_to_value (line 111) | fn object_to_value(
    method decode (line 127) | pub fn decode(
    method value_to_bool (line 227) | fn value_to_bool(value: &Value) -> Result<Option<bool>> {
    method value_to_byte (line 236) | fn value_to_byte(value: &Value) -> Result<u8> {
    method value_to_int (line 247) | fn value_to_int(value: &Value) -> Result<i32> {
    method value_to_float (line 258) | fn value_to_float(value: &Value) -> Result<f32> {
    method value_to_long (line 269) | fn value_to_long(value: &Value) -> Result<i64> {
    method value_to_double (line 279) | fn value_to_double(value: &Value) -> Result<f64> {
    method value_to_string (line 289) | fn value_to_string(value: &Value) -> Result<Option<&str>> {
    method value_to_object (line 299) | fn value_to_object(
    method value_to_array (line 314) | fn value_to_array<T, F>(value: &Value, convert: F) -> Result<Option<Ve...

FILE: packages/isar_core/src/object/object_builder.rs
  type ObjectBuilder (line 33) | pub struct ObjectBuilder {
    method new (line 39) | pub fn new(properties: &[Property], buffer: Option<Vec<u8>>) -> Object...
    method write_at (line 57) | fn write_at(&mut self, offset: usize, bytes: &[u8]) {
    method write_u24 (line 65) | fn write_u24(&mut self, offset: usize, value: usize) {
    method write_null (line 72) | pub fn write_null(&mut self, offset: usize, data_type: DataType) {
    method bool_to_byte (line 93) | pub fn bool_to_byte(value: Option<bool>) -> u8 {
    method write_byte (line 105) | pub fn write_byte(&mut self, offset: usize, value: u8) {
    method write_bool (line 109) | pub fn write_bool(&mut self, offset: usize, value: Option<bool>) {
    method write_int (line 114) | pub fn write_int(&mut self, offset: usize, value: i32) {
    method write_float (line 118) | pub fn write_float(&mut self, offset: usize, value: f32) {
    method write_long (line 122) | pub fn write_long(&mut self, offset: usize, value: i64) {
    method write_double (line 126) | pub fn write_double(&mut self, offset: usize, value: f64) {
    method write_string (line 130) | pub fn write_string(&mut self, offset: usize, value: Option<&str>) {
    method write_object (line 135) | pub fn write_object(&mut self, offset: usize, value: Option<IsarObject...
    method write_bool_list (line 139) | pub fn write_bool_list(&mut self, offset: usize, value: Option<&[Optio...
    method write_byte_list (line 144) | pub fn write_byte_list(&mut self, offset: usize, value: Option<&[u8]>) {
    method write_int_list (line 148) | pub fn write_int_list(&mut self, offset: usize, value: Option<&[i32]>) {
    method write_float_list (line 152) | pub fn write_float_list(&mut self, offset: usize, value: Option<&[f32]...
    method write_long_list (line 156) | pub fn write_long_list(&mut self, offset: usize, value: Option<&[i64]>) {
    method write_double_list (line 160) | pub fn write_double_list(&mut self, offset: usize, value: Option<&[f64...
    method write_string_list (line 164) | pub fn write_string_list(&mut self, offset: usize, value: Option<&[Opt...
    method write_object_list (line 168) | pub fn write_object_list(&mut self, offset: usize, value: Option<&[Opt...
    method write_list (line 172) | fn write_list<T>(&mut self, offset: usize, list: Option<&[T]>) {
    method write_list_list (line 184) | fn write_list_list<T>(
    method get_list_bytes (line 212) | pub(crate) fn get_list_bytes<T>(list: &[T]) -> &[u8] {
    method finish (line 218) | pub fn finish(&self) -> IsarObject {
    method recycle (line 222) | pub fn recycle(self) -> Vec<u8> {
  function offset_size (line 245) | fn offset_size(value: usize) -> [u8; 3] {
  function test_write_null (line 254) | pub fn test_write_null() {
  function test_write_bool (line 301) | pub fn test_write_bool() {
  function test_write_byte (line 316) | pub fn test_write_byte() {
  function test_write_int (line 331) | pub fn test_write_int() {
  function test_write_float (line 338) | pub fn test_write_float() {
  function test_write_long (line 353) | pub fn test_write_long() {
  function test_write_double (line 362) | pub fn test_write_double() {
  function test_write_string (line 377) | pub fn test_write_string() {
  function test_write_object (line 401) | pub fn test_write_object() {
  function test_write_multiple_static_types (line 413) | pub fn test_write_multiple_static_types() {
  function test_write_byte_list (line 442) | pub fn test_write_byte_list() {
  function test_write_int_list (line 460) | pub fn test_write_int_list() {
  function test_write_float_list (line 479) | pub fn test_write_float_list() {
  function test_write_long_list (line 498) | pub fn test_write_long_list() {
  function test_write_double_list (line 517) | pub fn test_write_double_list() {
  function test_write_string_list (line 536) | pub fn test_write_string_list() {
  function test_write_object_list (line 574) | pub fn test_write_object_list() {

FILE: packages/isar_core/src/object/property.rs
  type Property (line 6) | pub struct Property {
    method new (line 14) | pub fn new(name: &str, data_type: DataType, offset: usize, target_id: ...
    method debug (line 24) | pub const fn debug(data_type: DataType, offset: usize) -> Self {

FILE: packages/isar_core/src/query/fast_wild_match.rs
  constant ASTERISK (line 1) | const ASTERISK: u8 = 42;
  constant QUESTION_MARK (line 2) | const QUESTION_MARK: u8 = 63;
  function fast_wild_match (line 4) | pub(crate) fn fast_wild_match(tame: &str, wild: &str) -> bool {
  function test_wild (line 66) | fn test_wild() {
  function test_tame (line 153) | fn test_tame() {
  function test_empty (line 258) | fn test_empty() {

FILE: packages/isar_core/src/query/filter.rs
  type Filter (line 72) | pub struct Filter(FilterCond);
    method id (line 75) | pub fn id(lower: i64, upper: i64) -> Filter {
    method byte (line 80) | pub fn byte(property: &Property, lower: u8, upper: u8) -> Result<Filte...
    method int (line 84) | pub fn int(property: &Property, lower: i32, upper: i32) -> Result<Filt...
    method long (line 88) | pub fn long(property: &Property, lower: i64, upper: i64) -> Result<Fil...
    method float (line 92) | pub fn float(property: &Property, lower: f32, upper: f32) -> Result<Fi...
    method double (line 96) | pub fn double(property: &Property, lower: f64, upper: f64) -> Result<F...
    method string_to_bytes (line 100) | pub fn string_to_bytes(str: Option<&str>, case_sensitive: bool) -> Opt...
    method string (line 108) | pub fn string(
    method byte_string (line 122) | pub fn byte_string(
    method string_starts_with (line 148) | pub fn string_starts_with(
    method string_ends_with (line 156) | pub fn string_ends_with(
    method string_contains (line 164) | pub fn string_contains(
    method string_matches (line 172) | pub fn string_matches(
    method list_length (line 180) | pub fn list_length(property: &Property, lower: usize, upper: usize) ->...
    method null (line 193) | pub fn null(property: &Property) -> Filter {
    method and (line 201) | pub fn and(filters: Vec<Filter>) -> Filter {
    method or (line 207) | pub fn or(filters: Vec<Filter>) -> Filter {
    method xor (line 213) | pub fn xor(filters: Vec<Filter>) -> Filter {
    method not (line 219) | pub fn not(filter: Filter) -> Filter {
    method stat (line 226) | pub fn stat(value: bool) -> Filter {
    method object (line 231) | pub fn object(property: &Property, filter: Option<Filter>) -> Result<F...
    method link (line 255) | pub fn link(collection: &IsarCollection, link_id: u64, filter: Filter)...
    method link_length (line 264) | pub fn link_length(
    method evaluate (line 275) | pub(crate) fn evaluate(
  type FilterCond (line 287) | enum FilterCond {
  type Condition (line 330) | trait Condition {
    method evaluate (line 331) | fn evaluate(&self, id: i64, object: IsarObject, cursors: Option<&IsarC...
    method evaluate (line 341) | fn evaluate(&self, id: i64, _object: IsarObject, _: Option<&IsarCursor...
    method evaluate (line 409) | fn evaluate(&self, _id: i64, object: IsarObject, _: Option<&IsarCursor...
    method evaluate (line 524) | fn evaluate(&self, _id: i64, object: IsarObject, _: Option<&IsarCursor...
    method evaluate (line 537) | fn evaluate(&self, _id: i64, object: IsarObject, _: Option<&IsarCursor...
    method evaluate (line 644) | fn evaluate(
    method evaluate (line 665) | fn evaluate(
    method evaluate (line 681) | fn evaluate(&self, id: i64, object: IsarObject, cursors: Option<&IsarC...
    method evaluate (line 697) | fn evaluate(&self, id: i64, object: IsarObject, cursors: Option<&IsarC...
    method evaluate (line 713) | fn evaluate(&self, id: i64, object: IsarObject, cursors: Option<&IsarC...
    method evaluate (line 734) | fn evaluate(&self, id: i64, object: IsarObject, cursors: Option<&IsarC...
    method evaluate (line 745) | fn evaluate(&self, _id: i64, _: IsarObject, _: Option<&IsarCursors>) -...
    method evaluate (line 757) | fn evaluate(
    method evaluate (line 778) | fn evaluate(
    method evaluate (line 813) | fn evaluate(
    method evaluate (line 841) | fn evaluate(
  type IdBetweenCond (line 335) | struct IdBetweenCond {
  type StringBetweenCond (line 474) | struct StringBetweenCond {
  type AnyStringBetweenCond (line 482) | struct AnyStringBetweenCond {
  function string_between (line 489) | fn string_between(
  type ListLengthCond (line 637) | struct ListLengthCond {
  type NullCond (line 659) | struct NullCond {
  type AndCond (line 676) | struct AndCond {
  type OrCond (line 692) | struct OrCond {
  type XorCond (line 708) | struct XorCond {
  type NotCond (line 729) | struct NotCond {
  type StaticCond (line 740) | struct StaticCond {
  type ObjectCond (line 751) | struct ObjectCond {
  type AnyObjectCond (line 772) | struct AnyObjectCond {
  type AnyLinkCond (line 807) | struct AnyLinkCond {
  type LinkLengthCond (line 834) | struct LinkLengthCond {

FILE: packages/isar_core/src/query/id_where_clause.rs
  type IdWhereClause (line 10) | pub(crate) struct IdWhereClause {
    method new (line 18) | pub(crate) fn new(db: Db, lower: i64, upper: i64, sort: Sort) -> Self {
    method is_empty (line 27) | pub fn is_empty(&self) -> bool {
    method id_matches (line 31) | pub(crate) fn id_matches(&self, id: i64) -> bool {
    method iter (line 35) | pub(crate) fn iter<'txn, 'env, F>(
    method is_overlapping (line 64) | pub(crate) fn is_overlapping(&self, other: &Self) -> bool {

FILE: packages/isar_core/src/query/index_where_clause.rs
  type IndexWhereClause (line 12) | pub(crate) struct IndexWhereClause {
    method new (line 22) | pub fn new(
    method object_matches (line 40) | pub fn object_matches(&self, object: IsarObject) -> bool {
    method iter_ids (line 52) | pub fn iter_ids<'txn, 'env, F>(
    method iter (line 70) | pub fn iter<'txn, 'env, F>(
    method is_overlapping (line 97) | pub fn is_overlapping(&self, other: &Self) -> bool {
    method has_duplicates (line 103) | pub fn has_duplicates(&self) -> bool {

FILE: packages/isar_core/src/query/link_where_clause.rs
  type LinkWhereClause (line 8) | pub(crate) struct LinkWhereClause {
    method new (line 14) | pub fn new(link: IsarLink, id: i64) -> Result<Self> {
    method iter (line 18) | pub fn iter<'txn, 'env, F>(

FILE: packages/isar_core/src/query/mod.rs
  type Sort (line 24) | pub enum Sort {
  type Case (line 29) | pub enum Case {
  type Query (line 35) | pub struct Query {
    method new (line 48) | pub(crate) fn new(
    method check_where_clauses_duplicates (line 70) | fn check_where_clauses_duplicates(where_clauses: &[WhereClause]) -> bo...
    method execute_raw (line 84) | pub(crate) fn execute_raw<'env, F>(
    method execute_unsorted (line 117) | fn execute_unsorted<'env, F>(
    method hash_properties (line 135) | fn hash_properties(object: IsarObject, properties: &[(Property, bool)]...
    method add_distinct_unsorted (line 143) | fn add_distinct_unsorted<F>(
    method add_offset_limit_unsorted (line 162) | fn add_offset_limit_unsorted<F>(
    method execute_sorted (line 182) | fn execute_sorted<'env>(
    method add_distinct_sorted (line 213) | fn add_distinct_sorted(
    method add_offset_limit_sorted (line 228) | fn add_offset_limit_sorted(
    method maybe_matches_wc_filter (line 235) | pub(crate) fn maybe_matches_wc_filter(&self, id: i64, object: IsarObje...
    method find_while (line 251) | pub fn find_while<F>(&self, txn: &'txn mut IsarTxn, mut callback: F) -...
    method find_all_vec (line 274) | pub fn find_all_vec(&self, txn: &'txn mut IsarTxn) -> Result<Vec<(i64,...
    method count (line 283) | pub fn count(&self, txn: &mut IsarTxn) -> Result<u32> {
    method export_json (line 292) | pub fn export_json(

FILE: packages/isar_core/src/query/query_builder.rs
  type QueryBuilder (line 12) | pub struct QueryBuilder<'a> {
  function new (line 23) | pub(crate) fn new(collection: &'a IsarCollection) -> QueryBuilder {
  function init_where_clauses (line 35) | fn init_where_clauses(&mut self) {
  function add_id_where_clause (line 41) | pub fn add_id_where_clause(&mut self, start: i64, end: i64) -> Result<()> {
  function add_index_where_clause (line 58) | pub fn add_index_where_clause(
  function add_link_where_clause (line 84) | pub fn add_link_where_clause(
  function set_filter (line 101) | pub fn set_filter(&mut self, filter: Filter) {
  function add_sort (line 105) | pub fn add_sort(&mut self, property: &Property, sort: Sort) -> Result<()> {
  function add_distinct (line 114) | pub fn add_distinct(&mut self, property: &Property, case_sensitive: bool) {
  function set_offset (line 118) | pub fn set_offset(&mut self, offset: usize) {
  function set_limit (line 122) | pub fn set_limit(&mut self, limit: usize) {
  function build (line 126) | pub fn build(mut self) -> Query {

FILE: packages/isar_core/src/query/where_clause.rs
  type WhereClause (line 10) | pub(crate) enum WhereClause {
    method maybe_matches (line 17) | pub fn maybe_matches(&self, id: i64, object: IsarObject) -> bool {
    method iter (line 25) | pub fn iter<'txn, 'env, 'a, F>(
    method is_overlapping (line 41) | pub(crate) fn is_overlapping(&self, other: &Self) -> bool {
    method has_duplicates (line 49) | pub(crate) fn has_duplicates(&self) -> bool {

FILE: packages/isar_core/src/schema/collection_schema.rs
  type CollectionSchema (line 13) | pub struct CollectionSchema {
    method new (line 33) | pub fn new(
    method verify_name (line 50) | fn verify_name(name: &str) -> Result<()> {
    method verify (line 60) | pub(crate) fn verify(&self, collections: &[CollectionSchema]) -> Resul...
    method merge_properties (line 196) | pub(crate) fn merge_properties(&mut self, existing: &Self) -> Result<V...
    method get_properties (line 216) | pub fn get_properties(&self) -> Vec<Property> {
    method to_json_bytes (line 231) | pub fn to_json_bytes(&self) -> Result<Vec<u8>> {
  method eq (line 27) | fn eq(&self, other: &Self) -> bool {

FILE: packages/isar_core/src/schema/index_schema.rs
  type IndexType (line 8) | pub enum IndexType {
  type IndexPropertySchema (line 15) | pub struct IndexPropertySchema {
    method new (line 24) | pub fn new(name: &str, index_type: IndexType, case_sensitive: bool) ->...
  type IndexSchema (line 34) | pub struct IndexSchema {
    method new (line 43) | pub fn new(
    method as_index (line 57) | pub(crate) fn as_index(&self, db: Db, properties: &[Property]) -> Isar...

FILE: packages/isar_core/src/schema/link_schema.rs
  type LinkSchema (line 4) | pub struct LinkSchema {
    method new (line 11) | pub fn new(name: &str, target_collection_name: &str) -> Self {

FILE: packages/isar_core/src/schema/migrate_v1.rs
  function migrate_v1 (line 13) | pub fn migrate_v1(txn: &Txn, schema: &mut CollectionSchema) -> Result<()> {

FILE: packages/isar_core/src/schema/mod.rs
  type Schema (line 15) | pub struct Schema {
    method new (line 20) | pub fn new(collections: Vec<CollectionSchema>) -> Result<Schema> {
    method from_json (line 33) | pub fn from_json(json: &[u8]) -> Result<Schema> {
    method get_collection (line 41) | pub(crate) fn get_collection(&self, name: &str, embedded: bool) -> Opt...
    method count_dbs (line 47) | pub(crate) fn count_dbs(&self) -> usize {

FILE: packages/isar_core/src/schema/property_schema.rs
  type PropertySchema (line 6) | pub struct PropertySchema {
    method new (line 16) | pub fn new(
    method as_property (line 28) | pub(crate) fn as_property(&self, offset: usize) -> Option<Property> {
  method eq (line 39) | fn eq(&self, other: &Self) -> bool {

FILE: packages/isar_core/src/schema/schema_manager.rs
  type SchemaManager (line 32) | pub(crate) struct SchemaManager {
    constant ISAR_FILE_VERSION (line 39) | pub const ISAR_FILE_VERSION: u8 = 2;
    method create (line 41) | pub fn create(instance_id: u64, txn: &Txn) -> Result<Self> {
    method migrate_old_info (line 56) | fn migrate_old_info(info_cursor: &mut Cursor) -> Result<()> {
    method get_schemas (line 82) | fn get_schemas(info_cursor: &mut Cursor) -> Result<Vec<CollectionSchem...
    method save_schema (line 96) | fn save_schema(info_cursor: &mut Cursor, schema: &CollectionSchema) ->...
    method delete_schema (line 103) | fn delete_schema(info_cursor: &mut Cursor, schema: &CollectionSchema) ...
    method open_collection_db (line 111) | pub fn open_collection_db(txn: &Txn, col: &CollectionSchema) -> Result...
    method open_index_db (line 115) | pub fn open_index_db(txn: &Txn, col: &CollectionSchema, index: &IndexS...
    method open_link_dbs (line 120) | pub fn open_link_dbs(txn: &Txn, col: &CollectionSchema, link: &LinkSch...
    method delete_collection (line 128) | fn delete_collection(txn: &Txn, col: &CollectionSchema) -> Result<()> {
    method delete_index (line 140) | fn delete_index(txn: &Txn, col: &CollectionSchema, index: &IndexSchema...
    method delete_link (line 145) | fn delete_link(txn: &Txn, col: &CollectionSchema, link: &LinkSchema) -...
    method perform_migration (line 151) | fn perform_migration(
    method migrate_schema (line 192) | pub fn migrate_schema(&mut self, txn: &Txn, schemas: &mut Schema) -> R...
    method open_collection (line 222) | pub fn open_collection(
    method get_embedded_properties (line 259) | fn get_embedded_properties(
    method open_indexes (line 280) | fn open_indexes(
    method open_links (line 294) | fn open_links(
    method open_backlinks (line 321) | fn open_backlinks(
    method delete_unopened_collections (line 349) | pub fn delete_unopened_collections(&self, txn: &Txn) -> Result<()> {

FILE: packages/isar_core/src/txn.rs
  type IsarTxn (line 9) | pub struct IsarTxn<'env> {
  function new (line 18) | pub(crate) fn new(
  function is_active (line 33) | pub fn is_active(&self) -> bool {
  function verify_instance_id (line 37) | fn verify_instance_id(&self, instance_id: u64) -> Result<()> {
  function read (line 45) | pub(crate) fn read<'txn, T, F>(&'txn mut self, instance_id: u64, job: F)...
  function write (line 60) | pub(crate) fn write<'txn, T, F>(&'txn mut self, instance_id: u64, job: F...
  function commit (line 85) | pub fn commit(self) -> Result<()> {
  function abort (line 99) | pub fn abort(self) {
  function db_names (line 103) | pub(crate) fn db_names(&mut self) -> Result<Vec<String>> {

FILE: packages/isar_core/src/watch/change_set.rs
  type ChangeSet (line 7) | pub(crate) struct ChangeSet<'a> {
  function new (line 13) | pub fn new(watchers: MutexGuard<'a, IsarWatchers>) -> Self {
  function register_watchers (line 20) | fn register_watchers(changed_watchers: &mut IntMap<Arc<Watcher>>, watche...
  function register_change (line 31) | pub fn register_change(&mut self, col_id: u64, id: i64, object: IsarObje...
  function register_all (line 47) | pub fn register_all(&mut self, col_id: u64) {
  function notify_watchers (line 58) | pub fn notify_watchers(self) {

FILE: packages/isar_core/src/watch/isar_watchers.rs
  type WatcherModifier (line 8) | pub(crate) type WatcherModifier = Box<dyn FnOnce(&mut IsarWatchers) + Se...
  type IsarWatchers (line 10) | pub(crate) struct IsarWatchers {
    method new (line 16) | pub fn new(modifiers: Receiver<WatcherModifier>) -> Self {
    method get_col_watchers (line 23) | pub(crate) fn get_col_watchers(&mut self, col_id: u64) -> &mut IsarCol...
    method sync (line 31) | pub(crate) fn sync(&mut self) {
  type IsarCollectionWatchers (line 39) | pub struct IsarCollectionWatchers {
    method new (line 46) | fn new() -> Self {
    method add_watcher (line 54) | pub fn add_watcher(&mut self, watcher_id: u64, callback: WatcherCallba...
    method remove_watcher (line 59) | pub fn remove_watcher(&mut self, watcher_id: u64) {
    method add_object_watcher (line 68) | pub fn add_object_watcher(&mut self, watcher_id: u64, id: i64, callbac...
    method remove_object_watcher (line 77) | pub fn remove_object_watcher(&mut self, id: i64, watcher_id: u64) {
    method add_query_watcher (line 86) | pub fn add_query_watcher(&mut self, watcher_id: u64, query: Query, cal...
    method remove_query_watcher (line 91) | pub fn remove_query_watcher(&mut self, watcher_id: u64) {

FILE: packages/isar_core/src/watch/mod.rs
  type WatchHandle (line 5) | pub struct WatchHandle {
    method new (line 10) | pub(crate) fn new(stop_callback: Box<dyn FnOnce()>) -> Self {
    method stop (line 16) | pub fn stop(self) {}
  method drop (line 20) | fn drop(&mut self) {

FILE: packages/isar_core/src/watch/watcher.rs
  type WatcherCallback (line 1) | pub type WatcherCallback = Box<dyn Fn() + Send + Sync + 'static>;
  type Watcher (line 3) | pub(super) struct Watcher {
    method new (line 9) | pub fn new(id: u64, callback: WatcherCallback) -> Self {
    method get_id (line 13) | pub fn get_id(&self) -> u64 {
    method notify (line 17) | pub fn notify(&self) {

FILE: packages/isar_core/tests/test_binary.rs
  type BinaryTest (line 15) | pub struct BinaryTest {
    method create (line 22) | fn create(data: &[(DataType, Value)]) -> Self {
    method create_properties (line 36) | fn create_properties(types: &[DataType]) -> Vec<Property> {
    method create_temp_json (line 46) | fn create_temp_json(properties: &[Property], values: &[Value]) -> Value {
  function generate_binary_golden (line 56) | fn generate_binary_golden() -> Vec<BinaryTest> {
  function normalize (line 277) | fn normalize(blocks: &[(DataType, Vec<Value>)]) -> Vec<(DataType, Value)> {
  function overwrite_binary_golden (line 285) | fn overwrite_binary_golden() {
  function test_binary_serialize (line 292) | fn test_binary_serialize() {
  function test_binary_parse (line 309) | fn test_binary_parse() {

FILE: packages/isar_core/tests/test_hash.rs
  constant PRIME32 (line 3) | const PRIME32: u64 = 2654435761;
  constant PRIME64 (line 4) | const PRIME64: u64 = 11400714785074694797;
  function test_xxh3 (line 7) | fn test_xxh3() {

FILE: packages/isar_core_ffi/build.rs
  function main (line 3) | fn main() {

FILE: packages/isar_core_ffi/src/c_object_set.rs
  type CObject (line 5) | pub struct CObject {
    method new (line 14) | pub fn new() -> Self {
    method get_object (line 23) | pub fn get_object(&self) -> IsarObject {
    method get_id (line 28) | pub fn get_id(&mut self) -> i64 {
    method set_id (line 32) | pub fn set_id(&mut self, id: i64) {
    method set_object (line 36) | pub fn set_object(&mut self, object: Option<IsarObject>) {
  type CObjectSet (line 51) | pub struct CObjectSet {
    method fill_from_vec (line 59) | pub fn fill_from_vec(&mut self, objects: Vec<CObject>) {
    method get_objects (line 67) | pub unsafe fn get_objects(&self) -> &mut [CObject] {
    method get_length (line 71) | pub fn get_length(&self) -> usize {
  function isar_free_c_object_set (line 77) | pub unsafe extern "C" fn isar_free_c_object_set(ros: &mut CObjectSet) {

FILE: packages/isar_core_ffi/src/crud.rs
  function isar_get (line 12) | pub unsafe extern "C" fn isar_get(
  function isar_get_by_index (line 26) | pub unsafe extern "C" fn isar_get_by_index(
  function isar_get_all (line 47) | pub unsafe extern "C" fn isar_get_all(
  function isar_get_all_by_index (line 63) | pub unsafe extern "C" fn isar_get_all_by_index(
  function isar_put (line 87) | pub unsafe extern "C" fn isar_put(
  function isar_put_by_index (line 105) | pub unsafe extern "C" fn isar_put_by_index(
  function isar_put_all (line 119) | pub unsafe extern "C" fn isar_put_all(
  function isar_put_all_by_index (line 139) | pub unsafe extern "C" fn isar_put_all_by_index(
  function isar_delete (line 155) | pub unsafe extern "C" fn isar_delete(
  function isar_delete_by_index (line 169) | pub unsafe extern "C" fn isar_delete_by_index(
  function isar_delete_all (line 185) | pub unsafe extern "C" fn isar_delete_all(
  function isar_delete_all_by_index (line 207) | pub unsafe extern "C" fn isar_delete_all_by_index(
  function isar_clear (line 231) | pub unsafe extern "C" fn isar_clear(
  function isar_json_import (line 239) | pub unsafe extern "C" fn isar_json_import(
  function isar_count (line 255) | pub unsafe extern "C" fn isar_count(
  function isar_get_size (line 267) | pub unsafe extern "C" fn isar_get_size(
  function isar_verify (line 281) | pub unsafe extern "C" fn isar_verify(

FILE: packages/isar_core_ffi/src/dart.rs
  function dart_post_int (line 5) | pub fn dart_post_int(port: DartPort, value: i64) {
  type DartPort (line 10) | pub type DartPort = i64;
  type DartPostCObjectFnType (line 12) | pub type DartPostCObjectFnType = extern "C" fn(port_id: DartPort, messag...
  type DartCObject (line 15) | pub struct DartCObject {
    method new (line 21) | fn new(value: i64) -> Self {
  function isar_connect_dart_api (line 36) | pub unsafe extern "C" fn isar_connect_dart_api(ptr: DartPostCObjectFnTyp...

FILE: packages/isar_core_ffi/src/error.rs
  type ErrCounter (line 7) | type ErrCounter = (Vec<(i64, String)>, i64);
  type DartErrCode (line 10) | pub trait DartErrCode {
    method into_dart_result_code (line 11) | fn into_dart_result_code(self) -> i64;
    method into_dart_result_code (line 15) | fn into_dart_result_code(self) -> i64 {
  function isar_get_error (line 59) | pub unsafe extern "C" fn isar_get_error(err_code: i64) -> *mut c_char {

FILE: packages/isar_core_ffi/src/filter.rs
  function isar_filter_static (line 12) | pub unsafe extern "C" fn isar_filter_static(filter: *mut *const Filter, ...
  function isar_filter_and_or_xor (line 19) | pub unsafe extern "C" fn isar_filter_and_or_xor(
  function isar_filter_not (line 42) | pub unsafe extern "C" fn isar_filter_not(filter: *mut *const Filter, con...
  function get_property (line 49) | pub fn get_property(
  function isar_filter_object (line 71) | pub unsafe extern "C" fn isar_filter_object(
  function isar_filter_link (line 92) | pub unsafe extern "C" fn isar_filter_link(
  function isar_filter_link_length (line 107) | pub unsafe extern "C" fn isar_filter_link_length(
  function isar_filter_list_length (line 122) | pub unsafe extern "C" fn isar_filter_list_length(
  function isar_filter_null (line 139) | pub unsafe extern "C" fn isar_filter_null(
  function isar_filter_id (line 175) | pub unsafe extern "C" fn isar_filter_id(
  function isar_filter_long (line 194) | pub unsafe extern "C" fn isar_filter_long(
  function isar_filter_double (line 241) | pub unsafe extern "C" fn isar_filter_double(
  function get_lower_str (line 271) | unsafe fn get_lower_str(lower: Option<Vec<u8>>, include_lower: bool) -> ...
  function get_upper_str (line 291) | unsafe fn get_upper_str(upper: Option<Vec<u8>>, include_upper: bool) -> ...
  function isar_filter_string (line 313) | pub unsafe extern "C" fn isar_filter_string(

FILE: packages/isar_core_ffi/src/index_key.rs
  function isar_key_create (line 8) | pub unsafe extern "C" fn isar_key_create(key: *mut *const IndexKey) {
  function isar_key_increase (line 15) | pub unsafe extern "C" fn isar_key_increase(key: &mut IndexKey) -> bool {
  function isar_key_decrease (line 20) | pub unsafe extern "C" fn isar_key_decrease(key: &mut IndexKey) -> bool {
  function isar_key_add_byte (line 25) | pub extern "C" fn isar_key_add_byte(key: &mut IndexKey, value: u8) {
  function isar_key_add_int (line 30) | pub extern "C" fn isar_key_add_int(key: &mut IndexKey, value: i32) {
  function isar_key_add_long (line 35) | pub extern "C" fn isar_key_add_long(key: &mut IndexKey, value: i64) {
  function isar_key_add_float (line 40) | pub extern "C" fn isar_key_add_float(key: &mut IndexKey, value: f64) {
  function isar_key_add_double (line 50) | pub extern "C" fn isar_key_add_double(key: &mut IndexKey, value: f64) {
  function isar_key_add_string (line 55) | pub unsafe extern "C" fn isar_key_add_string(
  function isar_key_add_string_hash (line 65) | pub unsafe extern "C" fn isar_key_add_string_hash(
  function isar_key_add_string_list_hash (line 76) | pub unsafe extern "C" fn isar_key_add_string_list_hash(

FILE: packages/isar_core_ffi/src/instance.rs
  type IsarInstanceSend (line 17) | struct IsarInstanceSend(*mut *const IsarInstance);
  function isar_version (line 22) | pub unsafe extern "C" fn isar_version() -> *const c_char {
  function isar_instance_create (line 27) | pub unsafe extern "C" fn isar_instance_create(
  function isar_instance_create_async (line 70) | pub unsafe extern "C" fn isar_instance_create_async(
  function isar_instance_close (line 107) | pub unsafe extern "C" fn isar_instance_close(isar: *const IsarInstance) ...
  function isar_instance_close_and_delete (line 113) | pub unsafe extern "C" fn isar_instance_close_and_delete(isar: *const Isa...
  function isar_instance_get_path (line 119) | pub unsafe extern "C" fn isar_instance_get_path(isar: &'static IsarInsta...
  function isar_instance_get_collection (line 124) | pub unsafe extern "C" fn isar_instance_get_collection<'a>(
  function isar_instance_get_size (line 140) | pub unsafe extern "C" fn isar_instance_get_size(
  function isar_instance_copy_to_file (line 154) | pub unsafe extern "C" fn isar_instance_copy_to_file(
  function isar_instance_verify (line 169) | pub unsafe extern "C" fn isar_instance_verify(
  function isar_get_offsets (line 177) | pub unsafe extern "C" fn isar_get_offsets(

FILE: packages/isar_core_ffi/src/lib.rs
  function from_c_str (line 25) | pub unsafe fn from_c_str<'a>(str: *const c_char) -> Result<Option<&'a st...
  type UintSend (line 36) | pub struct UintSend(&'static mut u32);
  type BoolSend (line 40) | pub struct BoolSend(&'static mut bool);
  type CharsSend (line 44) | pub struct CharsSend(*const c_char);
  function isar_find_word_boundaries (line 49) | pub unsafe extern "C" fn isar_find_word_boundaries(
  function isar_free_word_boundaries (line 69) | pub unsafe extern "C" fn isar_free_word_boundaries(boundaries: *mut u32,...
  function isar_free_string (line 75) | pub unsafe extern "C" fn isar_free_string(string: *mut c_char) {

FILE: packages/isar_core_ffi/src/link.rs
  function isar_link (line 7) | pub unsafe extern "C" fn isar_link(
  function isar_link_unlink (line 21) | pub unsafe extern "C" fn isar_link_unlink(
  function isar_link_unlink_all (line 35) | pub unsafe extern "C" fn isar_link_unlink_all(
  function isar_link_update_all (line 48) | pub unsafe extern "C" fn isar_link_update_all(
  function isar_link_verify (line 78) | pub unsafe extern "C" fn isar_link_verify(

FILE: packages/isar_core_ffi/src/query.rs
  function isar_qb_create (line 13) | pub extern "C" fn isar_qb_create(collection: &IsarCollection) -> *mut Qu...
  function isar_qb_add_id_where_clause (line 19) | pub unsafe extern "C" fn isar_qb_add_id_where_clause(
  function isar_qb_add_index_where_clause (line 30) | pub unsafe extern "C" fn isar_qb_add_index_where_clause(
  function isar_qb_add_link_where_clause (line 57) | pub unsafe extern "C" fn isar_qb_add_link_where_clause(
  function isar_qb_set_filter (line 69) | pub unsafe extern "C" fn isar_qb_set_filter(builder: &mut QueryBuilder, ...
  function isar_qb_add_sort_by (line 75) | pub unsafe extern "C" fn isar_qb_add_sort_by(
  function isar_qb_add_distinct_by (line 92) | pub unsafe extern "C" fn isar_qb_add_distinct_by(
  function isar_qb_set_offset_limit (line 104) | pub unsafe extern "C" fn isar_qb_set_offset_limit(
  function isar_qb_build (line 120) | pub unsafe extern "C" fn isar_qb_build(builder: *mut QueryBuilder) -> *m...
  function isar_q_free (line 126) | pub unsafe extern "C" fn isar_q_free(query: *mut Query) {
  function isar_q_find (line 131) | pub unsafe extern "C" fn isar_q_find(
  function isar_q_delete (line 155) | pub unsafe extern "C" fn isar_q_delete(
  type JsonBytes (line 178) | struct JsonBytes(*mut *mut u8);
  type JsonLen (line 181) | struct JsonLen(*mut u32);
  function isar_q_export_json (line 185) | pub unsafe extern "C" fn isar_q_export_json(
  function isar_free_json (line 210) | pub unsafe extern "C" fn isar_free_json(json_bytes: *mut u8, json_length...

FILE: packages/isar_core_ffi/src/query_aggregation.rs
  type AggregationResult (line 12) | pub enum AggregationResult {
  type AggregationOp (line 20) | pub enum AggregationOp {
    method from_u8 (line 30) | fn from_u8(index: u8) -> AggregationOp {
  constant EMPTY_PROP (line 43) | const EMPTY_PROP: &Property = &Property {
  function aggregate (line 50) | fn aggregate(
  type AggregationResultSend (line 166) | pub struct AggregationResultSend(*mut *const AggregationResult);
  function isar_q_aggregate (line 171) | pub unsafe extern "C" fn isar_q_aggregate(
  function isar_q_aggregate_long_result (line 195) | pub unsafe extern "C" fn isar_q_aggregate_long_result(result: &Aggregati...
  function isar_q_aggregate_double_result (line 204) | pub unsafe extern "C" fn isar_q_aggregate_double_result(result: &Aggrega...

FILE: packages/isar_core_ffi/src/txn.rs
  function run_async (line 17) | pub fn run_async<F: FnOnce() + Send + 'static>(job: F) {
  type AsyncJob (line 21) | type AsyncJob = (Box<dyn FnOnce() + Send + 'static>, bool);
  function isar_txn_begin (line 24) | pub unsafe extern "C" fn isar_txn_begin(
  function isar_txn_finish (line 44) | pub unsafe extern "C" fn isar_txn_finish(txn: *mut CIsarTxn, commit: boo...
  type IsarTxnSend (line 51) | pub struct IsarTxnSend(IsarTxn<'static>);
  type CIsarTxn (line 55) | pub enum CIsarTxn {
    method begin_sync (line 67) | fn begin_sync(isar: &'static IsarInstance, write: bool, silent: bool) ...
    method begin_async (line 74) | fn begin_async(
    method exec_async_internal (line 106) | pub fn exec_async_internal<F: FnOnce() -> Result<()> + Send + 'static>(
    method exec (line 119) | pub fn exec(
    method finish (line 147) | pub fn finish(self, commit: bool) -> Result<()> {

FILE: packages/isar_core_ffi/src/watchers.rs
  function isar_watch_collection (line 8) | pub extern "C" fn isar_watch_collection(
  function isar_watch_object (line 23) | pub unsafe extern "C" fn isar_watch_object(
  function isar_watch_query (line 40) | pub extern "C" fn isar_watch_query(
  function isar_stop_watching (line 57) | pub unsafe extern "C" fn isar_stop_watching(handle: *mut WatchHandle) {

FILE: packages/isar_flutter_libs/android/src/main/java/dev/isar/isar_flutter_libs/IsarFlutterLibsPlugin.java
  class IsarFlutterLibsPlugin (line 7) | public class IsarFlutterLibsPlugin implements FlutterPlugin {
    method onAttachedToEngine (line 8) | @Override
    method onDetachedFromEngine (line 11) | @Override

FILE: packages/isar_flutter_libs/linux/include/isar_flutter_libs/isar_flutter_libs_plugin.h
  type IsarFlutterLibsPlugin (line 14) | typedef struct _IsarFlutterLibsPlugin IsarFlutterLibsPlugin;
  type IsarFlutterLibsPluginClass (line 15) | typedef struct {

FILE: packages/isar_flutter_libs/linux/isar_flutter_libs_plugin.cc
  type _IsarFlutterLibsPlugin (line 13) | struct _IsarFlutterLibsPlugin {
  function isar_flutter_libs_plugin_handle_method_call (line 20) | static void isar_flutter_libs_plugin_handle_method_call(
  function isar_flutter_libs_plugin_dispose (line 40) | static void isar_flutter_libs_plugin_dispose(GObject* object) {
  function isar_flutter_libs_plugin_class_init (line 44) | static void isar_flutter_libs_plugin_class_init(IsarFlutterLibsPluginCla...
  function isar_flutter_libs_plugin_init (line 48) | static void isar_flutter_libs_plugin_init(IsarFlutterLibsPlugin* self) {}
  function method_call_cb (line 50) | static void method_call_cb(FlMethodChannel* channel, FlMethodCall* metho...
  function isar_flutter_libs_plugin_register_with_registrar (line 56) | void isar_flutter_libs_plugin_register_with_registrar(FlPluginRegistrar*...

FILE: packages/isar_flutter_libs/windows/isar_flutter_libs_plugin.cpp
  class IsarFlutterLibsPlugin (line 19) | class IsarFlutterLibsPlugin : public flutter::Plugin {
  function IsarFlutterLibsPluginRegisterWithRegistrar (line 77) | void IsarFlutterLibsPluginRegisterWithRegistrar(

FILE: packages/isar_generator/lib/isar_generator.dart
  function getIsarGenerator (line 5) | Builder getIsarGenerator(BuilderOptions options)

FILE: packages/isar_generator/lib/src/code_gen/by_index_generator.dart
  function generateByIndexExtension (line 4) | String generateByIndexExtension(ObjectInfo oi)
  function generateSingleByIndex (line 29) | String generateSingleByIndex(ObjectInfo oi, ObjectIndex index)
  function generateAllByIndex (line 53) | String generateAllByIndex(ObjectInfo oi, ObjectIndex index)
  function valsName (line 54) | String valsName(ObjectProperty p)
  function generatePutByIndex (line 101) | String generatePutByIndex(ObjectInfo oi, ObjectIndex index)

FILE: packages/isar_generator/lib/src/code_gen/collection_schema_generator.dart
  function generateSchema (line 7) | String generateSchema(ObjectInfo object)
  function _generatePropertySchema (line 58) | String _generatePropertySchema(ObjectInfo object, int index)
  function _generateIndexSchema (line 79) | String _generateIndexSchema(ObjectIndex index)
  function _generateLinkSchema (line 99) | String _generateLinkSchema(ObjectInfo object, ObjectLink link)

FILE: packages/isar_generator/lib/src/code_gen/query_distinct_by_generator.dart
  function generateDistinctBy (line 6) | String generateDistinctBy(ObjectInfo oi)

FILE: packages/isar_generator/lib/src/code_gen/query_filter_generator.dart
  class FilterGenerator (line 7) | class FilterGenerator {
    method generate (line 12) | String generate()
    method mPrefix (line 54) | String mPrefix(ObjectProperty p, [bool listElement = true])
    method generateEqualTo (line 60) | String generateEqualTo(ObjectProperty p)
    method generateGreaterThan (line 78) | String generateGreaterThan(ObjectProperty p)
    method generateLessThan (line 98) | String generateLessThan(ObjectProperty p)
    method generateBetween (line 118) | String generateBetween(ObjectProperty p)
    method generateIsNull (line 141) | String generateIsNull(ObjectProperty p)
    method generateElementIsNull (line 152) | String generateElementIsNull(ObjectProperty p)
    method generateIsNotNull (line 163) | String generateIsNotNull(ObjectProperty p)
    method generateElementIsNotNull (line 175) | String generateElementIsNotNull(ObjectProperty p)
    method generateStringStartsWith (line 187) | String generateStringStartsWith(ObjectProperty p)
    method generateStringEndsWith (line 200) | String generateStringEndsWith(ObjectProperty p)
    method generateStringContains (line 213) | String generateStringContains(ObjectProperty p)
    method generateStringMatches (line 226) | String generateStringMatches(ObjectProperty p)
    method generateStringIsEmpty (line 239) | String generateStringIsEmpty(ObjectProperty p)
    method generateStringIsNotEmpty (line 251) | String generateStringIsNotEmpty(ObjectProperty p)
    method generateListLength (line 263) | String generateListLength(ObjectProperty p)

FILE: packages/isar_generator/lib/src/code_gen/query_filter_length.dart
  function generateLength (line 3) | String generateLength(

FILE: packages/isar_generator/lib/src/code_gen/query_link_generator.dart
  function generateQueryLinks (line 5) | String generateQueryLinks(ObjectInfo oi)

FILE: packages/isar_generator/lib/src/code_gen/query_object_generator.dart
  function generateQueryObjects (line 6) | String generateQueryObjects(ObjectInfo oi)

FILE: packages/isar_generator/lib/src/code_gen/query_property_generator.dart
  function generatePropertyQuery (line 3) | String generatePropertyQuery(ObjectInfo oi)

FILE: packages/isar_generator/lib/src/code_gen/query_sort_by_generator.dart
  function generateSortBy (line 7) | String generateSortBy(ObjectInfo oi)

FILE: packages/isar_generator/lib/src/code_gen/query_where_generator.dart
  class WhereGenerator (line 5) | class WhereGenerator {
    method generate (line 14) | String generate()
    method getMethodName (line 72) | String getMethodName(ObjectIndex index, int propertyCount, [String? me...
    method propertyName (line 73) | String propertyName(ObjectIndexProperty p)
    method paramType (line 106) | String paramType(ObjectIndexProperty p)
    method paramName (line 114) | String paramName(ObjectIndexProperty p)
    method joinToParams (line 122) | String joinToParams(List<ObjectIndexProperty> properties)
    method joinToValues (line 128) | String joinToValues(List<ObjectIndexProperty> properties)
    method generateAnyId (line 138) | String generateAnyId()
    method generateAny (line 148) | String generateAny(ObjectIndex index)
    method generateWhereIdEqualTo (line 166) | String generateWhereIdEqualTo()
    method generateWhereEqualTo (line 180) | String generateWhereEqualTo(ObjectIndex index, int propertyCount)
    method generateWhereIdNotEqualTo (line 202) | String generateWhereIdNotEqualTo()
    method generateWhereNotEqualTo (line 225) | String generateWhereNotEqualTo(ObjectIndex index, int propertyCount)
    method generateWhereIdGreaterThan (line 279) | String generateWhereIdGreaterThan()
    method generateWhereGreaterThan (line 292) | String generateWhereGreaterThan(ObjectIndex index, int propertyCount)
    method generateWhereIdLessThan (line 318) | String generateWhereIdLessThan()
    method generateWhereLessThan (line 331) | String generateWhereLessThan(ObjectIndex index, int propertyCount)
    method generateWhereIdBetween (line 357) | String generateWhereIdBetween()
    method generateWhereBetween (line 375) | String generateWhereBetween(ObjectIndex index, int propertyCount)
    method generateWhereIsNull (line 420) | String generateWhereIsNull(ObjectIndex index, int propertyCount)
    method generateWhereIsNotNull (line 444) | String generateWhereIsNotNull(ObjectIndex index, int propertyCount)
    method generateWhereStartsWith (line 470) | String generateWhereStartsWith(ObjectIndex index, int propertyCount)
    method generateStringIsEmpty (line 503) | String generateStringIsEmpty(ObjectIndex index, int propertyCount)
    method generateStringIsNotEmpty (line 527) | String generateStringIsNotEmpty(ObjectIndex index, int propertyCount)

FILE: packages/isar_generator/lib/src/code_gen/type_adapter_generator.dart
  function _prepareSerialize (line 5) | String _prepareSerialize(
  function _prepareSerializeList (line 25) | String _prepareSerializeList(
  function generateEstimateSerialize (line 60) | String generateEstimateSerialize(ObjectInfo object)
  function generateSerialize (line 151) | String generateSerialize(ObjectInfo object)
  function generateDeserialize (line 244) | String generateDeserialize(ObjectInfo object)
  function generateDeserializeProp (line 287) | String generateDeserializeProp(ObjectInfo object)
  function _deserializeProperty (line 313) | String _deserializeProperty(
  function _deserialize (line 351) | String _deserialize(ObjectProperty property, String propertyOffset)
  function generateGetId (line 409) | String generateGetId(ObjectInfo object)
  function generateGetLinks (line 418) | String generateGetLinks(ObjectInfo object)
  function generateAttach (line 426) | String generateAttach(ObjectInfo object)
  function generateEnumMaps (line 446) | String generateEnumMaps(ObjectInfo object)

FILE: packages/isar_generator/lib/src/collection_generator.dart
  class IsarCollectionGenerator (line 39) | class IsarCollectionGenerator extends GeneratorForAnnotation<Collection> {
    method generateForAnnotatedElement (line 41) | Future<String> generateForAnnotatedElement(
  class IsarEmbeddedGenerator (line 80) | class IsarEmbeddedGenerator extends GeneratorForAnnotation<Embedded> {
    method generateForAnnotatedElement (line 82) | Future<String> generateForAnnotatedElement(

FILE: packages/isar_generator/lib/src/helper.dart
  function checkIsarName (line 176) | void checkIsarName(String name, Element element)
  function err (line 182) | Never err(String msg, [Element? element])

FILE: packages/isar_generator/lib/src/isar_analyzer.dart
  class IsarAnalyzer (line 11) | class IsarAnalyzer {
    method analyzeCollection (line 12) | ObjectInfo analyzeCollection(Element element)
    method analyzeEmbedded (line 61) | ObjectInfo analyzeEmbedded(Element element)
    method _checkValidClass (line 102) | ConstructorElement _checkValidClass(Element modelClass)
    method _checkValidPropertiesConstructor (line 141) | void _checkValidPropertiesConstructor(
    method _getEmbeddedDartNames (line 164) | Map<String, String> _getEmbeddedDartNames(ClassElement element)
    method _fillNames (line 165) | void _fillNames(Map<String, String> names, ClassElement element)
    method analyzeObjectProperty (line 183) | ObjectProperty analyzeObjectProperty(
    method analyzeObjectLink (line 337) | ObjectLink analyzeObjectLink(PropertyInducingElement property)
    method analyzeObjectIndex (line 384) | Iterable<ObjectIndex> analyzeObjectIndex(
    method _verifyObjectIndex (line 448) | void _verifyObjectIndex(ObjectIndex index, Element element)

FILE: packages/isar_generator/lib/src/isar_type.dart
  function _isDateTime (line 8) | bool _isDateTime(Element element)

FILE: packages/isar_generator/lib/src/object_info.dart
  class ObjectInfo (line 9) | class ObjectInfo {
  type PropertyDeser (line 50) | enum PropertyDeser {
  class ObjectProperty (line 57) | class ObjectProperty {
    method enumValueMapName (line 142) | String enumValueMapName(ObjectInfo object)
    method valueEnumMapName (line 146) | String valueEnumMapName(ObjectInfo object)
  class ObjectIndexProperty (line 151) | class ObjectIndexProperty {
  class ObjectIndex (line 167) | class ObjectIndex {
  class ObjectLink (line 183) | class ObjectLink {
    method id (line 204) | int id(String objectIsarName)

FILE: packages/isar_generator/test/error_test.dart
  function main (line 8) | void main()

FILE: packages/isar_generator/test/errors/class/abstract.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/class/collection_supertype.dart
  class Supertype (line 5) | @collection
  class Subtype (line 10) | class Subtype implements Supertype {
  class Model (line 15) | @collection

FILE: packages/isar_generator/test/errors/class/constructor_named.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/class/constructor_unknown_parameter.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/class/constructor_wrong_parameter.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/class/enum.dart
  type Test (line 6) | @collection

FILE: packages/isar_generator/test/errors/class/invalid_name.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/class/private.dart
  class _Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/id/duplicate.dart
  class Test (line 5) | @collection

FILE: packages/isar_generator/test/errors/id/missing.dart
  class Test (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/composite_double_not_last.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/composite_non_hashed_list.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/composite_string_value_not_last.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/contains_id.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/double_list_hashed.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/duplicate_name.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/duplicate_property.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/invalid_name.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/non_string_hashed.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/non_string_list_hashed_elements.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/non_unique_replace.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/index/object_hashed.dart
  class Model (line 5) | @collection
  class EmbeddedModel (line 13) | @embedded

FILE: packages/isar_generator/test/errors/index/object_list_hashed.dart
  class Model (line 5) | @collection
  class EmbeddedModel (line 13) | @embedded

FILE: packages/isar_generator/test/errors/index/property_does_not_exist.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/link/backlink_target_does_no_exist.dart
  class Model1 (line 5) | @collection
  class Model2 (line 13) | @collection

FILE: packages/isar_generator/test/errors/link/backlink_target_is_backlink.dart
  class Model1 (line 5) | @collection
  class Model2 (line 13) | @collection

FILE: packages/isar_generator/test/errors/link/backlink_target_not_a_link.dart
  class Model1 (line 5) | @collection
  class Model2 (line 13) | @collection

FILE: packages/isar_generator/test/errors/link/duplicate_name.dart
  class Model (line 5) | @collection
  class Model2 (line 15) | @collection

FILE: packages/isar_generator/test/errors/link/invalid_name.dart
  class Model (line 5) | @collection
  class Model2 (line 13) | @collection

FILE: packages/isar_generator/test/errors/link/late.dart
  class Model (line 5) | @collection
  class Model2 (line 12) | @collection

FILE: packages/isar_generator/test/errors/link/nullable.dart
  class Model (line 5) | @collection
  class Model2 (line 12) | @collection

FILE: packages/isar_generator/test/errors/link/target_not_a_collection.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/link/type_nullable.dart
  class Model (line 5) | @collection
  class Model2 (line 12) | @collection

FILE: packages/isar_generator/test/errors/property/duplicate_name.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/property/enum_bool_type.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_double_type.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_duplicate.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_float_type.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_list_type.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_not_annotated.dart
  class Model (line 5) | @collection
  type MyEnum (line 12) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_null_value.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {

FILE: packages/isar_generator/test/errors/property/enum_object_type.dart
  class Model (line 5) | @collection
  type MyEnum (line 13) | enum MyEnum {
  class EmbeddedModel (line 19) | @embedded

FILE: packages/isar_generator/test/errors/property/invalid_name.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/property/null_byte.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/property/null_byte_element.dart
  class Model (line 5) | @collection

FILE: packages/isar_generator/test/errors/property/unsupported_type.dart
  class Model (line 5) | @collection

FILE: packages/isar_inspector/lib/collection/button_prev_next.dart
  class PrevNextButtons (line 4) | class PrevNextButtons extends StatelessWidget {
    method build (line 17) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/collection/button_sort.dart
  class SortButtons (line 4) | class SortButtons extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/collection/collection_area.dart
  class CollectionArea (line 22) | class CollectionArea extends StatefulWidget {
    method createState (line 40) | State<CollectionArea> createState()
  class _CollectionAreaState (line 43) | class _CollectionAreaState extends State<CollectionArea> {
    method initState (line 55) | void initState()
    method dispose (line 64) | void dispose()
    method _runQuery (line 69) | Future<void> _runQuery()
    method build (line 93) | Widget build(BuildContext context)
    method _onUpdate (line 212) | void _onUpdate(String collection, int id, String path, dynamic value)
    method _onDelete (line 223) | void _onDelete(int id)
    method _onCreate (line 235) | Future<void> _onCreate()
    method _onImport (line 258) | Future<void> _onImport()
    method _onDeleteAll (line 277) | void _onDeleteAll()
    method _onDownload (line 286) | Future<void> _onDownload()

FILE: packages/isar_inspector/lib/collection/objects_list_sliver.dart
  class ObjectsListSliver (line 9) | class ObjectsListSliver extends StatelessWidget {
    method build (line 33) | Widget build(BuildContext context)
    method _copyObject (line 97) | void _copyObject(IsarObject object)

FILE: packages/isar_inspector/lib/collections_list.dart
  class CollectionsList (line 7) | class CollectionsList extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)
  function _formatSize (line 92) | String _formatSize(int bytes)

FILE: packages/isar_inspector/lib/connect_client.dart
  class ConnectClient (line 13) | class ConnectClient {
    method connect (line 33) | Future<ConnectClient> connect(String port, String secret)
    method _call (line 71) | Future<T> _call<T>(
    method getSchema (line 91) | Future<List<CollectionSchema<dynamic>>> getSchema()
    method listInstances (line 100) | Future<List<String>> listInstances()
    method watchInstance (line 105) | Future<void> watchInstance(String instance)
    method executeQuery (line 113) | Future<Map<String, Object?>> executeQuery(ConnectQuery query)
    method removeQuery (line 121) | Future<void> removeQuery(ConnectQuery query)
    method importJson (line 129) | Future<void> importJson(
    method exportJson (line 144) | Future<List<dynamic>> exportJson(ConnectQuery query)
    method editProperty (line 154) | Future<void> editProperty(ConnectEdit edit)
    method disconnect (line 162) | Future<void> disconnect()

FILE: packages/isar_inspector/lib/connected_layout.dart
  class ConnectedLayout (line 9) | class ConnectedLayout extends StatefulWidget {
    method createState (line 22) | State<ConnectedLayout> createState()
  class _ConnectedLayoutState (line 25) | class _ConnectedLayoutState extends State<ConnectedLayout> {
    method initState (line 31) | void initState()
    method didUpdateWidget (line 40) | void didUpdateWidget(covariant ConnectedLayout oldWidget)
    method dispose (line 48) | void dispose()
    method _selectInstance (line 53) | void _selectInstance(String instance)
    method build (line 59) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/connection_screen.dart
  class ConnectionScreen (line 9) | class ConnectionScreen extends StatefulWidget {
    method createState (line 20) | State<ConnectionScreen> createState()
  class _ConnectionPageState (line 23) | class _ConnectionPageState extends State<ConnectionScreen> {
    method initState (line 27) | void initState()
    method didUpdateWidget (line 33) | void didUpdateWidget(covariant ConnectionScreen oldWidget)
    method build (line 41) | Widget build(BuildContext context)
  class _SchemaLoader (line 57) | class _SchemaLoader extends StatefulWidget {
    method createState (line 63) | State<_SchemaLoader> createState()
  class _SchemaLoaderState (line 66) | class _SchemaLoaderState extends State<_SchemaLoader> {
    method initState (line 72) | void initState()
    method didUpdateWidget (line 84) | void didUpdateWidget(covariant _SchemaLoader oldWidget)
    method dispose (line 91) | void dispose()
    method build (line 97) | Widget build(BuildContext context)
  class Loading (line 117) | class Loading extends StatelessWidget {
    method build (line 121) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/error_screen.dart
  class ErrorScreen (line 6) | class ErrorScreen extends StatelessWidget {
    method build (line 10) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/instance_selector.dart
  class InstanceSelector (line 4) | class InstanceSelector extends StatefulWidget {
    method createState (line 17) | State<InstanceSelector> createState()
  class _InstanceSelectorState (line 20) | class _InstanceSelectorState extends State<InstanceSelector>
    method initState (line 33) | void initState()
    method dispose (line 41) | void dispose()
    method build (line 47) | Widget build(BuildContext context)
  class InstanceButton (line 101) | class InstanceButton extends StatelessWidget {
    method build (line 112) | Widget build(BuildContext context)
  class SelectedInstanceButton (line 141) | class SelectedInstanceButton extends StatelessWidget {
    method build (line 156) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/main.dart
  function main (line 9) | void main()
  class UnsupportedBrowser (line 22) | class UnsupportedBrowser extends StatelessWidget {
    method build (line 26) | Widget build(BuildContext context)
  class App (line 87) | class App extends StatelessWidget {
    method build (line 91) | Widget build(BuildContext context)
  class DarkMode (line 110) | class DarkMode extends InheritedNotifier<DarkModeNotifier> {
    method of (line 117) | DarkModeNotifier of(BuildContext context)
  class DarkModeNotifier (line 122) | class DarkModeNotifier extends ChangeNotifier {
    method toggle (line 127) | void toggle()

FILE: packages/isar_inspector/lib/object/isar_object.dart
  class IsarObject (line 1) | class IsarObject {
    method getValue (line 8) | dynamic getValue(String propertyName)
    method getNested (line 10) | IsarObject? getNested(String propertyName, {String? linkCollection})
    method getNestedList (line 19) | List<IsarObject?>? getNestedList(

FILE: packages/isar_inspector/lib/object/object_view.dart
  class ObjectView (line 8) | class ObjectView extends StatelessWidget {
    method build (line 30) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/object/property_builder.dart
  class PropertyBuilder (line 4) | class PropertyBuilder extends StatefulWidget {
    method createState (line 21) | State<PropertyBuilder> createState()
  class _PropertyBuilderState (line 24) | class _PropertyBuilderState extends State<PropertyBuilder> {
    method build (line 28) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/object/property_embedded_view.dart
  class EmbeddedPropertyView (line 8) | class EmbeddedPropertyView extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/object/property_link_view.dart
  class LinkPropertyView (line 8) | class LinkPropertyView extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/object/property_value.dart
  class PropertyValue (line 5) | class PropertyValue extends StatelessWidget {
    method build (line 20) | Widget build(BuildContext context)
  class NullValue (line 229) | class NullValue extends StatelessWidget {
    method build (line 233) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/object/property_view.dart
  class PropertyView (line 6) | class PropertyView extends StatelessWidget {
    method build (line 23) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/query_builder/query_filter.dart
  class QueryFilter (line 6) | class QueryFilter extends StatelessWidget {
    method build (line 19) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/query_builder/query_group.dart
  class QueryGroup (line 5) | class QueryGroup extends StatelessWidget {
    method build (line 22) | Widget build(BuildContext context)
    method _performUpdate (line 106) | void _performUpdate({FilterOperation? add, FilterOperation? remove})
  class _Guideline (line 126) | class _Guideline extends StatelessWidget {
    method build (line 138) | Widget build(BuildContext context)
  class GroupFilterButton (line 209) | class GroupFilterButton extends StatelessWidget {
    method build (line 224) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/sidebar.dart
  class Sidebar (line 8) | class Sidebar extends StatelessWidget {
    method build (line 30) | Widget build(BuildContext context)

FILE: packages/isar_inspector/lib/util.dart
  function propertyOrId (line 4) | PropertySchema propertyOrId(String name)

FILE: packages/isar_test/android/app/src/androidTest/java/dev/isar/isar_test/MainActivityTest.java
  class MainActivityTest (line 8) | @RunWith(FlutterTestRunner.class)

FILE: packages/isar_test/integration_test/integration_test.dart
  function main (line 12) | void main()

FILE: packages/isar_test/lib/src/common.dart
  function _prepareTest (line 22) | Future<void> _prepareTest()
  function isarTest (line 30) | void isarTest(
  function isarTestSync (line 41) | void isarTestSync(
  function isarTestAsync (line 53) | void isarTestAsync(
  function _isarTest (line 62) | void _isarTest(
  function isarTestVm (line 95) | void isarTestVm(String name, dynamic Function() body)
  function isarTestWeb (line 100) | void isarTestWeb(String name, dynamic Function() body)
  function getRandomName (line 104) | String getRandomName()
  function openTempIsar (line 110) | Future<Isar> openTempIsar(

FILE: packages/isar_test/lib/src/init_native.dart
  function init (line 7) | Future<void> init()

FILE: packages/isar_test/lib/src/init_web.dart
  function init (line 8) | Future<void> init()

FILE: packages/isar_test/lib/src/listener.dart
  class Listener (line 5) | class Listener<T> {
    method done (line 30) | Future<void> done()

FILE: packages/isar_test/lib/src/matchers.dart
  function qEqualSet (line 5) | Future<void> qEqualSet<T>(
  function qEqual (line 13) | Future<void> qEqual<T>(
  function qEqualSync (line 21) | Future<void> qEqualSync<T>(List<T> actual, List<T> target)
  function doubleListEquals (line 38) | bool doubleListEquals(List<double?>? l1, List<double?>? l2)
  function doubleEquals (line 52) | bool doubleEquals(double? d1, double? d2)
  function isIsarError (line 59) | Matcher isIsarError([String? contains])
  function throwsIsarError (line 70) | Matcher throwsIsarError([String? contains])
  function listEquals (line 86) | bool listEquals<T>(List<T>? a, List<T>? b)
  function dateTimeListEquals (line 104) | bool dateTimeListEquals(List<dynamic>? a, List<dynamic>? b)

FILE: packages/isar_test/lib/src/sync_async_helper.dart
  function tOpen (line 9) | Future<Isar> tOpen({
  function tTxn (line 42) | Future<T> tTxn<T>(Future<T> Function() callback)
  function tWriteTxn (line 50) | Future<T> tWriteTxn<T>(Future<T> Function() callback, {bool silent = fal...
  function tClear (line 58) | Future<void> tClear()
  function tGet (line 69) | Future<OBJ?> tGet(Id id)
  function tGetAll (line 77) | Future<List<OBJ?>> tGetAll(List<Id> ids)
  function tPut (line 85) | Future<Id> tPut(OBJ object, {bool saveLinks = false})
  function tPutAll (line 93) | Future<List<Id>> tPutAll(List<OBJ> objects, {bool saveLinks = false})
  function tDelete (line 101) | Future<bool> tDelete(Id id)
  function tDeleteAll (line 109) | Future<int> tDeleteAll(List<Id> ids)
  function tClear (line 117) | Future<void> tClear()
  function tImportJsonRaw (line 126) | Future<void> tImportJsonRaw(Uint8List jsonBytes)
  function tImportJson (line 135) | Future<void> tImportJson(List<Map<String, dynamic>> json)
  function tGetSize (line 144) | Future<int> tGetSize({
  function tFindFirst (line 166) | Future<R?> tFindFirst()
  function tFindAll (line 174) | Future<List<R>> tFindAll()
  function tCount (line 182) | Future<int> tCount()
  function tIsEmpty (line 190) | Future<bool> tIsEmpty()
  function tIsNotEmpty (line 198) | Future<bool> tIsNotEmpty()
  function tDeleteFirst (line 206) | Future<bool> tDeleteFirst()
  function tDeleteAll (line 214) | Future<int> tDeleteAll()
  function tExportJsonRaw (line 222) | Future<M> tExportJsonRaw<M>(M Function(Uint8List) callback)
  function tExportJson (line 230) | Future<List<Map<String, dynamic>>> tExportJson()
  function tMin (line 242) | Future<T?> tMin()
  function tMax (line 250) | Future<T?> tMax()
  function tAverage (line 258) | Future<double> tAverage()
  function tSum (line 266) | Future<T> tSum()
  function tMin (line 278) | Future<DateTime?> tMin()
  function tMax (line 286) | Future<DateTime?> tMax()
  function tLoad (line 296) | Future<void> tLoad()
  function tSave (line 305) | Future<void> tSave()
  function tReset (line 314) | Future<void> tReset()
  function tLoad (line 325) | Future<void> tLoad({bool overrideChanges = false})
  function tUpdate (line 334) | Future<void> tUpdate({
  function tCount (line 346) | Future<int> tCount()

FILE: packages/isar_test/lib/src/sync_future.dart
  class SynchronousFuture (line 3) | class SynchronousFuture<T> implements Future<T> {
    method asStream (line 9) | Stream<T> asStream()
    method catchError (line 17) | Future<T> catchError(Function onError, {bool Function(Object error)? t...
    method then (line 21) | Future<R> then<R>(
    method timeout (line 33) | Future<T> timeout(Duration timeLimit, {FutureOr<T> Function()? onTimeo...
    method whenComplete (line 38) | Future<T> whenComplete(FutureOr<dynamic> Function() action)

FILE: packages/isar_test/lib/src/twitter/entities.dart
  class Entities (line 9) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Hashtag (line 30) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Poll (line 43) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Option (line 58) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Symbol (line 70) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Url (line 82) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class UserMention (line 98) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)

FILE: packages/isar_test/lib/src/twitter/geo.dart
  class Place (line 6) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  type PlaceType (line 29) | enum PlaceType {
  class Coordinates (line 37) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)

FILE: packages/isar_test/lib/src/twitter/media.dart
  class Media (line 6) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Sizes (line 38) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Size (line 54) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class AdditionalMediaInfo (line 68) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class VideoInfo (line 85) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class Variant (line 100) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)

FILE: packages/isar_test/lib/src/twitter/tweet.dart
  class Tweet (line 11) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class CurrentUserRetweet (line 76) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class QuotedStatusPermalink (line 87) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)

FILE: packages/isar_test/lib/src/twitter/user.dart
  class User (line 8) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class UserEntities (line 59) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)
  class UserEntityUrl (line 72) | @JsonSerializable(fieldRename: FieldRename.snake, createToJson: false)

FILE: packages/isar_test/lib/src/twitter/util.dart
  function convertTwitterDateTime (line 3) | DateTime? convertTwitterDateTime(String? twitterDateString)
  function formatTwitterDateString (line 21) | String formatTwitterDateString(String twitterDateString)

FILE: packages/isar_test/linux/flutter/generated_plugin_registrant.cc
  function fl_register_plugins (line 11) | void fl_register_plugins(FlPluginRegistry* registry) {

FILE: packages/isar_test/linux/main.cc
  function main (line 3) | int main(int argc, char** argv) {

FILE: packages/isar_test/linux/my_application.cc
  type _MyApplication (line 10) | struct _MyApplication {
  function my_application_activate (line 18) | static void my_application_activate(GApplication* application) {
  function gboolean (line 66) | static gboolean my_application_local_command_line(GApplication* applicat...
  function my_application_dispose (line 85) | static void my_application_dispose(GObject* object) {
  function my_application_class_init (line 91) | static void my_application_class_init(MyApplicationClass* klass) {
  function my_application_init (line 97) | static void my_application_init(MyApplication* self) {}
  function MyApplication (line 99) | MyApplication* my_application_new() {

FILE: packages/isar_test/test/clear_test.dart
  class ModelA (line 7) | @collection
  class ModelB (line 12) | @collection
  function main (line 17) | void main()

FILE: packages/isar_test/test/collection_size_test.dart
  class ModelA (line 7) | @collection
  class ModelB (line 26) | @collection
  function main (line 33) | void main()

FILE: packages/isar_test/test/compact_on_launch_test.dart
  class Model (line 9) | @Collection()
    method toString (line 25) | String toString()
  function main (line 30) | void main()

FILE: packages/isar_test/test/constructor_test.dart
  class EmptyConstructorModel (line 7) | @collection
  class NamedConstructorModel (line 23) | @collection
  class PositionalConstructorModel (line 39) | @collection
  class OptionalConstructorModel (line 55) | @collection
    method toString (line 63) | String toString()
  class PositionalNamedConstructorModel (line 74) | @collection
  class SerializeOnlyModel (line 90) | @collection
  function main (line 106) | void main()

FILE: packages/isar_test/test/copy_to_file_test.dart
  class Model (line 10) | @collection
    method toString (line 26) | String toString()
  function main (line 31) | void main()

FILE: packages/isar_test/test/crud_test.dart
  class Message (line 9) | @collection
    method toString (line 17) | String toString()
  function main (line 32) | void main()

FILE: packages/isar_test/test/default_value/common.dart
  type MyEnum (line 5) | enum MyEnum {
  class MyEmbedded (line 11) | @embedded
  class EmptyModel (line 22) | @Name('Col')

FILE: packages/isar_test/test/default_value/default_test.dart
  class DefaultModel (line 9) | @Name('Col')
  class DefaultListModel (line 43) | @Name('Col')
  function main (line 77) | void main()

FILE: packages/isar_test/test/default_value/no_default_test.dart
  class NoDefaultModel (line 9) | @Name('Col')
  class NoDefaultListModel (line 50) | @Name('Col')
  function main (line 91) | void main()

FILE: packages/isar_test/test/default_value/nullable_test.dart
  class NullableModel (line 9) | @Name('Col')
  class NullableListModel (line 47) | @Name('Col')
  function main (line 88) | void main()

FILE: packages/isar_test/test/embedded_test.dart
  class Model (line 9) | @collection
    method toJson (line 29) | Map<String, dynamic> toJson()
  class EModel (line 39) | @embedded
    method toJson (line 48) | Map<String, dynamic> toJson()
  class NModel (line 55) | @embedded
    method toJson (line 72) | Map<String, dynamic> toJson()
  function main (line 81) | void main()

FILE: packages/isar_test/test/enum_test.dart
  type TestEnum (line 7) | enum TestEnum {
  class EnumModel (line 25) | @collection
    method toString (line 82) | String toString()
  function main (line 87) | void main()

FILE: packages/isar_test/test/filter/filter_bool_list_test.dart
  class BoolModel (line 7) | @collection
  function main (line 23) | void main()

FILE: packages/isar_test/test/filter/filter_bool_test.dart
  class BoolModel (line 7) | @collection
  function main (line 22) | void main()

FILE: packages/isar_test/test/filter/filter_byte_list_test.dart
  class ByteModel (line 7) | @collection
  function main (line 22) | void main()

FILE: packages/isar_test/test/filter/filter_byte_test.dart
  class ByteModel (line 7) | @collection
  function main (line 22) | void main()

FILE: packages/isar_test/test/filter/filter_date_time_list_test.dart
  class DateTimeModel (line 7) | @collection
  function local (line 25) | DateTime local(int year, [int month = 1, int day = 1])
  function utc (line 29) | DateTime utc(int year, [int month = 1, int day = 1])
  function main (line 33) | void main()

FILE: packages/isar_test/test/filter/filter_date_time_test.dart
  class DateTimeModel (line 7) | @collection
    method toString (line 22) | String toString()
  function local (line 25) | DateTime local(int year, [int month = 1, int day = 1])
  function utc (line 29) | DateTime utc(int year, [int month = 1, int day = 1])
  function main (line 33) | void main()

FILE: packages/isar_test/test/filter/filter_embedded_list_test.dart
  class Model (line 9) | @collection
    method toString (line 32) | String toString()
  class EmbeddedA (line 37) | @embedded
    method toString (line 57) | String toString()
  class EmbeddedB (line 62) | @embedded
    method toString (line 78) | String toString()
  function main (line 83) | void main()

FILE: packages/isar_test/test/filter/filter_embedded_test.dart
  class Model (line 9) | @collection
    method toString (line 32) | String toString()
  class EmbeddedModelA (line 37) | @embedded
    method toString (line 57) | String toString()
  class EmbeddedModelB (line 62) | @embedded
    method toString (line 78) | String toString()
  function main (line 83) | void main()

FILE: packages/isar_test/test/filter/filter_float_list_test.dart
  class FloatModel (line 7) | @collection
  function main (line 23) | void main()

FILE: packages/isar_test/test/filter/filter_float_test.dart
  class FloatModel (line 7) | @collection
  function main (line 21) | void main()

FILE: packages/isar_test/test/filter/filter_id_test.dart
  class IdModel (line 7) | @collection
    method toString (line 14) | String toString()
  function main (line 25) | void main()

FILE: packages/isar_test/test/filter/filter_int_test.dart
  class IntModel (line 7) | @collection
  function main (line 22) | void main()

FILE: packages/isar_test/test/filter/filter_list_length_test.dart
  class Model (line 7) | @collection
    method toString (line 40) | String toString()
  function main (line 45) | void main()

FILE: packages/isar_test/test/filter/filter_string_list_test.dart
  class StringModel (line 7) | @collection
    method toString (line 36) | String toString()
  function main (line 41) | void main()

FILE: packages/isar_test/test/filter/filter_string_test.dart
  class StringModel (line 7) | @collection
    method toString (line 21) | String toString()
  function main (line 26) | void main()

FILE: packages/isar_test/test/filter/link/filter_backlink_test.dart
  class SourceModel (line 7) | @collection
    method toString (line 27) | String toString()
  class TargetModel (line 32) | @collection
    method toString (line 48) | String toString()
  function main (line 53) | void main()

FILE: packages/isar_test/test/filter/link/filter_backlinks_test.dart
  class SourceModel (line 7) | @collection
    method toString (line 27) | String toString()
  class TargetModel (line 32) | @collection
    method toString (line 48) | String toString()
  function main (line 53) | void main()

FILE: packages/isar_test/test/filter/link/filter_link_circular_direct_test.dart
  class ModelA (line 7) | @collection
    method toString (line 27) | String toString()
  class ModelB (line 32) | @collection
    method toString (line 52) | String toString()
  function main (line 57) | void main()

FILE: packages/isar_test/test/filter/link/filter_link_circular_indirect_test.dart
  class ModelA (line 7) | @collection
    method toString (line 27) | String toString()
  class ModelB (line 32) | @collection
    method toString (line 52) | String toString()
  class ModelC (line 57) | @collection
    method toString (line 77) | String toString()
  function main (line 82) | void main()

FILE: packages/isar_test/test/filter/link/filter_link_nested_test.dart
  class SourceModel (line 7) | @collection
    method toString (line 26) | String toString()
  class TargetModel (line 31) | @collection
    method toString (line 54) | String toString()
  class NestedTargetModel (line 59) | @collection
    method toString (line 80) | String toString()
  function main (line 85) | void main()

FILE: packages/isar_test/test/filter/link/filter_link_self_test.dart
  class Model (line 7) | @collection
    method toString (line 27) | String toString()
  function main (line 32) | void main()

FILE: packages/isar_test/test/filter/link/filter_link_test.dart
  class SourceModel (line 7) | @collection
    method toString (line 22) | String toString()
  class TargetModel (line 27) | @collection
    method toString (line 45) | String toString()
  function main (line 50) | void main()

FILE: packages/isar_test/test/filter/link/filter_links_self_test.dart
  class Model (line 7) | @collection
    method toString (line 27) | String toString()
  function main (line 32) | void main()

FILE: packages/isar_test/test/filter/link/filter_links_test.dart
  class SourceModel (line 7) | @collection
    method toString (line 22) | String toString()
  class TargetModel (line 27) | @collection
    method toString (line 45) | String toString()
  function main (line 50) | void main()

FILE: packages/isar_test/test/id_test.dart
  class ImplicitNullableIdModel (line 7) | @collection
  class ImplicitFinalIdModel (line 12) | @collection
  class ExplicitIdModel (line 17) | @collection
  function main (line 22) | void main()

FILE: packages/isar_test/test/index/composite2_test.dart
  class Model (line 7) | @collection
    method toString (line 21) | String toString()
  function main (line 35) | void main()

FILE: packages/isar_test/test/index/composite3_test.dart
  class Model (line 7) | @collection
    method toString (line 26) | String toString()
  function main (line 41) | void main()

FILE: packages/isar_test/test/index/composite_string_test.dart
  class Model (line 9) | @collection
    method toString (line 29) | String toString()
  function main (line 43) | void main()

FILE: packages/isar_test/test/index/get_by_delete_by_test.dart
  class Model (line 7) | @collection
    method toString (line 19) | String toString()
  function main (line 33) | void main()

FILE: packages/isar_test/test/index/multi_entry_test.dart
  class MultiEntryIndexModel (line 7) | @collection
    method toString (line 39) | String toString()
  class MultiEntryNullableIndexModel (line 58) | @collection
    method toString (line 90) | String toString()
  function main (line 109) | void main()

FILE: packages/isar_test/test/index/put_by_test.dart
  class BoolIndexModel (line 7) | @collection
    method toString (line 22) | String toString()
  class IntIndexModel (line 37) | @collection
    method toString (line 52) | String toString()
  class DoubleIndexModel (line 67) | @collection
    method toString (line 82) | String toString()
  class StringValueIndexModel (line 97) | @collection
    method toString (line 112) | String toString()
  class StringHashIndexModel (line 127) | @collection
    method toString (line 142) | String toString()
  class StringInsensitiveIndexModel (line 157) | @collection
    method toString (line 172) | String toString()
  function main (line 187) | void main()
  function tPutByValue (line 365) | Future<int> tPutByValue(BoolIndexModel obj)
  function tPutAllByValue (line 372) | Future<List<int>> tPutAllByValue(List<BoolIndexModel> objs)
  function tPutByValue (line 381) | Future<int> tPutByValue(IntIndexModel obj)
  function tPutAllByValue (line 388) | Future<List<int>> tPutAllByValue(List<IntIndexModel> objs)
  function tPutByValue (line 397) | Future<int> tPutByValue(DoubleIndexModel obj)
  function tPutAllByValue (line 404) | Future<List<int>> tPutAllByValue(List<DoubleIndexModel> objs)
  function tPutByValue (line 414) | Future<int> tPutByValue(StringValueIndexModel obj)
  function tPutAllByValue (line 421) | Future<List<int>> tPutAllByValue(List<StringValueIndexModel> objs)
  function tPutByValue (line 431) | Future<int> tPutByValue(StringHashIndexModel obj)
  function tPutAllByValue (line 438) | Future<List<int>> tPutAllByValue(List<StringHashIndexModel> objs)
  function tPutByValue (line 448) | Future<int> tPutByValue(StringInsensitiveIndexModel obj)
  function tPutAllByValue (line 455) | Future<List<int>> tPutAllByValue(List<StringInsensitiveIndexModel> objs)

FILE: packages/isar_test/test/index/where_bool_list_test.dart
  class BoolModel (line 7) | @collection
  function main (line 29) | void main()

FILE: packages/isar_test/test/index/where_bool_test.dart
  class BoolModel (line 7) | @collection
  function main (line 23) | void main()

FILE: packages/isar_test/test/index/where_byte_list_test.dart
  class ByteModel (line 7) | @collection
  function main (line 29) | void main()

FILE: packages/isar_test/test/index/where_byte_test.dart
  class ByteModel (line 7) | @collection
  function main (line 23) | void main()

FILE: packages/isar_test/test/index/where_date_time_list_test.dart
  class DateTimeModel (line 7) | @collection
    method toString (line 63) | String toString()
  function main (line 68) | void main()

FILE: packages/isar_test/test/index/where_date_time_test.dart
  class DateTimeModel (line 7) | @collection
    method toString (line 21) | String toString()
  function local (line 24) | DateTime local(int year, [int month = 1, int day = 1])
  function utc (line 28) | DateTime utc(int year, [int month = 1, int day = 1])
  function main (line 32) | void main()

FILE: packages/isar_test/test/index/where_float_list_test.dart
  class FloatModel (line 7) | @collection
    method toString (line 16) | String toString()
  function main (line 26) | void main()

FILE: packages/isar_test/test/index/where_float_test.dart
  class FloatModel (line 7) | @collection
    method toString (line 21) | String toString()
  function main (line 26) | void main()

FILE: packages/isar_test/test/index/where_id_test.dart
  class IdModel (line 7) | @collection
    method toString (line 14) | String toString()
  function main (line 25) | void main()

FILE: packages/isar_test/test/index/where_int_test.dart
  class IntModel (line 7) | @collection
    method toString (line 22) | String toString()
  function main (line 27) | void main()

FILE: packages/isar_test/test/index/where_string_list_test.dart
  class StringModel (line 7) | @collection
    method toString (line 82) | String toString()
  function main (line 87) | void main()

FILE: packages/isar_test/test/index/where_string_test.dart
  class StringModel (line 7) | @collection
    method toString (line 25) | String toString()
  function main (line 30) | void main()

FILE: packages/isar_test/test/inheritance_test.dart
  class BaseModel (line 7) | abstract class BaseModel {
  class InheritingModel (line 31) | @collection
    method toString (line 42) | String toString()
  class NonInheritingModel (line 59) | @Collection(inheritance: false)
    method toString (line 75) | String toString()
  function main (line 90) | void main()

FILE: packages/isar_test/test/instance_test.dart
  class Model (line 7) | @collection
    method toString (line 15) | String toString()
  function main (line 26) | void main()

FILE: packages/isar_test/test/isolate_test.dart
  class TestModel (line 11) | @collection
  function _isolateFunc (line 34) | Future<void> _isolateFunc(SendPort port)
  function main (line 54) | void main()

FILE: packages/isar_test/test/json_test.dart
  function main (line 8) | void main()

FILE: packages/isar_test/test/link_test.dart
  class LinkModelA (line 7) | @collection
    method toString (line 32) | String toString()
  class LinkModelB (line 43) | @collection
    method toString (line 60) | String toString()
  function main (line 71) | void main()

FILE: packages/isar_test/test/links/backlink_test.dart
  class LinkModelA (line 7) | @collection
    method toString (line 23) | String toString()
  class LinkModelB (line 34) | @collection
    method toString (line 46) | String toString()
  function main (line 57) | void main()

FILE: packages/isar_test/test/links/link_test.dart
  class LinkModelA (line 7) | @collection
    method toString (line 18) | String toString()
  class LinkModelB (line 29) | @collection
    method toString (line 38) | String toString()
  function main (line 49) | void main()
  function verify (line 67) | void verify(bool attached, bool loaded, bool changed)

FILE: packages/isar_test/test/links/links_test.dart
  class LinkModelA (line 7) | @collection
    method toString (line 18) | String toString()
  class LinkModelB (line 29) | @collection
    method toString (line 38) | String toString()
  function main (line 49) | void main()

FILE: packages/isar_test/test/max_size_test.dart
  class Model (line 7) | @collection
  function main (line 14) | void main()

FILE: packages/isar_test/test/migration/add_remove_collection_test.dart
  class Model1 (line 7) | @collection
  class Model2 (line 24) | @collection
  function main (line 41) | void main()

FILE: packages/isar_test/test/migration/add_remove_embedded_field_test.dart
  class Col1 (line 7) | @collection
    method toString (line 21) | String toString()
  class Embedded1 (line 27) | @embedded
    method toString (line 39) | String toString()
  class Col2 (line 45) | @collection
    method toString (line 59) | String toString()
  class Embedded2 (line 65) | @embedded
    method toString (line 80) | String toString()
  function main (line 86) | void main()

FILE: packages/isar_test/test/migration/add_remove_field_test.dart
  class Col1 (line 7) | @collection
  class Col2 (line 21) | @collection
  function main (line 40) | void main()

FILE: packages/isar_test/test/migration/add_remove_index_test.dart
  class Col1 (line 7) | @collection
  class Col2 (line 21) | @collection
  function main (line 36) | void main()

FILE: packages/isar_test/test/migration/add_remove_link_test.dart
  class Col1 (line 7) | @collection
  class Col2 (line 20) | @collection
  function main (line 36) | void main()

FILE: packages/isar_test/test/migration/change_field_embedded_test.dart
  class Model1 (line 7) | @collection
  class Model2 (line 22) | @collection
  class Embedded1 (line 37) | @embedded
  class Embedded2 (line 44) | @embedded
  function main (line 55) | void main()

FILE: packages/isar_test/test/migration/change_field_nullability_test.dart
  class Col1 (line 7) | @collection
  class Col2 (line 21) | @collection
  function main (line 35) | void main()

FILE: packages/isar_test/test/migration/change_field_type_test.dart
  class Model1 (line 9) | @collection
  class Model2 (line 24) | @collection
  function main (line 39) | void main()

FILE: packages/isar_test/test/migration/change_link_links_test.dart
  class Col1 (line 7) | @collection
  class Col2 (line 20) | @collection
  function main (line 33) | void main()

FILE: packages/isar_test/test/mutli_type_model.dart
  class MultiTypeModel (line 7) | @collection

FILE: packages/isar_test/test/name_test.dart
  class NameModel (line 7) | @collection
  function main (line 29) | void main()

FILE: packages/isar_test/test/open_close_isar_listener_test.dart
  function main (line 9) | void main()
  function openListener (line 13) | void openListener(Isar isar)
  function closeListener (line 34) | void closeListener(String name)

FILE: packages/isar_test/test/other_test.dart
  function main (line 5) | void main()

FILE: packages/isar_test/test/query/aggregation_test.dart
  function main (line 7) | void main()
  function date (line 578) | DateTime date(int milliseconds)

FILE: packages/isar_test/test/query/embedded_test.dart
  function main (line 1) | void main()

FILE: packages/isar_test/test/query/group_test.dart
  function main (line 7) | void main()

FILE: packages/isar_test/test/query/is_empty_is_not_empty_test.dart
  class Model (line 7) | @collection
  function main (line 16) | void main()

FILE: packages/isar_test/test/query/multi_filter_test.dart
  class Model (line 9) | @collection
  function main (line 24) | void main()

FILE: packages/isar_test/test/query/offset_limit_test.dart
  class Model (line 7) | @collection
  function main (line 22) | void main()

FILE: packages/isar_test/test/query/property_test.dart
  function main (line 9) | void main()

FILE: packages/isar_test/test/query/sort_by_distinct_by_test.dart
  function main (line 7) | void main()

FILE: packages/isar_test/test/query/where_sort_distinct_test.dart
  class TestModel (line 7) | @collection
  function main (line 21) | void main()

FILE: packages/isar_test/test/regression/issue_235_rename_field_test.dart
  class Col1 (line 7) | @collection
  class Col2 (line 26) | @collection
  function main (line 56) | void main()

FILE: packages/isar_test/test/schema_test.dart
  class SchemaTestModel (line 9) | @collection
  class $Dollar$Model (line 205) | @collection
  function main (line 220) | void main()

FILE: packages/isar_test/test/stress/long_string_test.dart
  class StringModel (line 9) | @collection
  function _randomStr (line 30) | String _randomStr(int length)
  function main (line 39) | void main()

FILE: packages/isar_test/test/stress/twitter_test.dart
  function downloadTweets (line 8) | Future<List<Tweet>> downloadTweets(String dir, int index)
  function main (line 29) | void main()

FILE: packages/isar_test/test/transaction_test.dart
  class Model (line 11) | @collection
  function main (line 22) | void main()
  function errorTxn (line 240) | Future<void> errorTxn()
  function errorTxn (line 262) | void errorTxn()

FILE: packages/isar_test/test/type_models.dart
  class BoolModel (line 5) | @collection
  class ByteModel (line 18) | @collection
  class ShortModel (line 29) | @collection
  class IntModel (line 42) | @collection
  class FloatModel (line 55) | @collection
  class DoubleModel (line 68) | @collection
  class DateTimeModel (line 81) | @collection
  class StringModel (line 94) | @collection
  class EmbeddedModel (line 107) | @embedded
  class ObjectModel (line 119) | @collection
  type TestEnum (line 132) | enum TestEnum {
  class EnumModel (line 138) | @collection

FILE: packages/isar_test/test/user_model.dart
  class UserModel (line 5) | @collection
    method toString (line 21) | String toString()

FILE: packages/isar_test/test/watcher_test.dart
  class Value (line 9) | @collection
  function main (line 23) | void main()

FILE: packages/isar_test/tool/generate_all_tests.dart
  function main (line 4) | void main()

FILE: packages/isar_test/tool/generate_long_double_test.dart
  function main (line 3) | void main()

FILE: packages/isar_test/windows/flutter/generated_plugin_registrant.cc
  function RegisterPlugins (line 11) | void RegisterPlugins(flutter::PluginRegistry* registry) {

FILE: packages/isar_test/windows/runner/flutter_window.cpp
  function LRESULT (line 40) | LRESULT

FILE: packages/isar_test/windows/runner/flutter_window.h
  function class (line 12) | class FlutterWindow : public Win32Window {

FILE: packages/isar_test/windows/runner/main.cpp
  function wWinMain (line 8) | int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,

FILE: packages/isar_test/windows/runner/utils.cpp
  function CreateAndAttachConsole (line 10) | void CreateAndAttachConsole() {
  function GetCommandLineArguments (line 24) | std::vector<std::string> GetCommandLineArguments() {
  function Utf8FromUtf16 (line 44) | std::string Utf8FromUtf16(const wchar_t* utf16_string) {

FILE: packages/isar_test/windows/runner/win32_window.cpp
  function Scale (line 18) | int Scale(int source, double scale_factor) {
  function EnableFullDpiSupportIfAvailable (line 24) | void EnableFullDpiSupportIfAvailable(HWND hwnd) {
  class WindowClassRegistrar (line 41) | class WindowClassRegistrar {
    method WindowClassRegistrar (line 46) | static WindowClassRegistrar* GetInstance() {
    method WindowClassRegistrar (line 62) | WindowClassRegistrar() = default;
  function wchar_t (line 71) | const wchar_t* WindowClassRegistrar::GetWindowClass() {
  function LRESULT (line 133) | LRESULT CALLBACK Win32Window::WndProc(HWND const window,
  function LRESULT (line 152) | LRESULT
  function Win32Window (line 208) | Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
  function RECT (line 224) | RECT Win32Window::GetClientArea() {
  function HWND (line 230) | HWND Win32Window::GetHandle() {

FILE: packages/isar_test/windows/runner/win32_window.h
  type Size (line 21) | struct Size {

FILE: packages/isar_web/src/bulk-delete.ts
  function bulkDelete (line 3) | function bulkDelete(
  function bulkDeleteByIndex (line 28) | function bulkDeleteByIndex(

FILE: packages/isar_web/src/collection.ts
  type UniqueIndex (line 8) | interface UniqueIndex {
  type IndexKey (line 13) | type IndexKey = string | number | IndexKey[]
  class IsarCollection (line 15) | class IsarCollection<OBJ> extends IsarWatchable<OBJ> {
    method constructor (line 25) | constructor(
    method getLink (line 51) | getLink(name: string): IsarLink | undefined {
    method getIndexKeyPath (line 55) | getIndexKeyPath(indexName: string): string[] {
    method isMultiEntryIndex (line 59) | isMultiEntryIndex(indexName: string): boolean {
    method get (line 63) | get(txn: IsarTxn, id: number): Promise<OBJ | undefined> {
    method getAll (line 80) | getAll(txn: IsarTxn, ids: number[]): Promise<(OBJ | undefined)[]> {
    method getAllByIndex (line 104) | getAllByIndex(
    method putAll (line 145) | putAll(txn: IsarTxn, objects: OBJ[]): Promise<number[]> {
    method deleteLinks (line 183) | private deleteLinks(txn: IsarTxn, keys: IDBValidKey[]): Promise<void> {
    method deleteAll (line 196) | deleteAll(txn: IsarTxn, ids: number[]): Promise<void> {
    method deleteAllByIndex (line 206) | deleteAllByIndex(
    method clear (line 220) | clear(txn: IsarTxn): Promise<void> {

FILE: packages/isar_web/src/cursor.ts
  type CursorParams (line 3) | type CursorParams = {
  type CursorCallback (line 13) | type CursorCallback = (
  function useCursor (line 21) | function useCursor(params: CursorParams): Promise<void> {

FILE: packages/isar_web/src/instance.ts
  class IsarInstance (line 9) | class IsarInstance {
    method constructor (line 17) | constructor(db: IDBDatabase, relaxedDurability: boolean, schemas: Sche...
    method initializeCollections (line 34) | private initializeCollections(schemas: Schema[]) {
    method notifyWatchers (line 51) | notifyWatchers(
    method beginTxn (line 78) | beginTxn(write: boolean): IsarTxn {
    method getCollection (line 86) | getCollection<OBJ>(name: string): IsarCollection<OBJ> {
    method close (line 90) | close(deleteFromDisk: boolean = false): Promise<void> {
  type ChangeEvent (line 109) | type ChangeEvent = {

FILE: packages/isar_web/src/link.ts
  class IsarLink (line 6) | class IsarLink {
    method constructor (line 15) | constructor(
    method getLinkEntry (line 28) | private getLinkEntry(source: number, target: number, backlink: boolean...
    method getLinkKeyRange (line 38) | static getLinkKeyRange(id: number): IDBKeyRange {
    method update (line 42) | update(
    method clear (line 88) | clear(txn: IsarTxn, id: number, backlink: boolean): Promise<void> {

FILE: packages/isar_web/src/open.ts
  function openIsar (line 11) | function openIsar(
  function openInternal (line 19) | function openInternal(
  function performUpgrade (line 51) | function performUpgrade(
  type CollectionInfo (line 151) | type CollectionInfo = {
  type CollectionProperty (line 158) | type CollectionProperty = {

FILE: packages/isar_web/src/query.ts
  type IdWherClause (line 7) | type IdWherClause = {
  type IndexWherClause (line 11) | type IndexWherClause = {
  type LinkWherClause (line 16) | type LinkWherClause = {
  type WherClause (line 23) | type WherClause = IdWherClause | IndexWherClause | LinkWherClause
  type Filter (line 25) | type Filter = (id: number, obj: any) => boolean
  type Cmp (line 27) | type Cmp = (a: any, b: any) => number
  type DistinctValue (line 29) | type DistinctValue = (obj: any) => string
  class IsarQuery (line 31) | class IsarQuery<OBJ> {
    method constructor (line 41) | constructor(
    method getWhereClauseRange (line 71) | private getWhereClauseRange(
    method findInternal (line 77) | private async findInternal(txn: IsarTxn, limit: number): Promise<any[]> {
    method findFirst (line 184) | findFirst(txn: IsarTxn): Promise<OBJ | undefined> {
    method findAll (line 190) | findAll(txn: IsarTxn): Promise<OBJ[]> {
    method deleteFirst (line 194) | deleteFirst(txn: IsarTxn): Promise<boolean> {
    method deleteAll (line 206) | deleteAll(txn: IsarTxn): Promise<number> {
    method min (line 214) | min(txn: IsarTxn, key: string): Promise<number | undefined> {
    method max (line 227) | max(txn: IsarTxn, key: string): Promise<number | undefined> {
    method sum (line 240) | sum(txn: IsarTxn, key: string): Promise<number> {
    method average (line 253) | average(txn: IsarTxn, key: string): Promise<number> {
    method count (line 268) | count(txn: IsarTxn): Promise<number> {
    method whereClauseMatches (line 272) | private whereClauseMatches(id: number, object: OBJ) {
    method whereClauseAndFilterMatch (line 307) | whereClauseAndFilterMatch(id: number, idbObject: OBJ): boolean {

FILE: packages/isar_web/src/schema.ts
  type Schema (line 3) | type Schema = {
  type PropertySchema (line 10) | type PropertySchema = {
  type IndexSchema (line 15) | type IndexSchema = {
  type IndexPropertySchema (line 21) | type IndexPropertySchema = {
  function isIndexMultiEntry (line 28) | function isIndexMultiEntry(
  function getKeyPath (line 38) | function getKeyPath(indexSchema: IndexSchema): string | string[] {
  function matchesIndex (line 44) | function matchesIndex(
  type LinkSchema (line 58) | type LinkSchema = {
  function getStoreName (line 64) | function getStoreName(
  type IsarType (line 73) | enum IsarType {
  function isList (line 95) | function isList(type: IsarType): boolean {
  type IndexType (line 100) | enum IndexType {

FILE: packages/isar_web/src/txn.ts
  class IsarTxn (line 4) | class IsarTxn {
    method constructor (line 11) | constructor(isar: IsarInstance, txn: IDBTransaction, write: boolean) {
    method getChangeSet (line 22) | getChangeSet<OBJ>(collectionName: string): IsarChangeSet<OBJ> {
    method commit (line 31) | commit(): Promise<void> {
    method abort (line 48) | abort() {

FILE: packages/isar_web/src/watcher.ts
  type ChangeCallback (line 4) | type ChangeCallback = () => void
  type ObjectChangeCallback (line 6) | type ObjectChangeCallback<OBJ> = (object?: OBJ) => void
  type QueryChangeCallback (line 8) | type QueryChangeCallback<OBJ> = (results: OBJ[]) => void
  type StopWatching (line 10) | type StopWatching = () => void
  type QueryWatcher (line 12) | 
Condensed preview — 688 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,901K chars).
[
  {
    "path": ".all-contributorsrc",
    "chars": 5738,
    "preview": "{\n  \"files\": [\n    \"packages/isar/README.md\"\n  ],\n  \"imageSize\": 100,\n  \"commit\": false,\n  \"contributors\": [\n    {\n     "
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 13,
    "preview": "github: simc\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.md",
    "chars": 638,
    "preview": "---\nname: Bug report\nabout: Create a report to help us improve\ntitle: ''\nlabels: problem\nassignees: leisim\n\n---\n\n\n\n### S"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "chars": 194,
    "preview": "blank_issues_enabled: false\ncontact_links:\n  - name: Ask a question\n    url: https://github.com/isar-community/isar/disc"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.md",
    "chars": 638,
    "preview": "---\nname: Feature request\nabout: Suggest an idea for this project\ntitle: ''\nlabels: enhancement\nassignees: ''\n\n---\n\n**Is"
  },
  {
    "path": ".github/actions/prepare-build/action.yaml",
    "chars": 811,
    "preview": "name: \"Prepare Build\"\ndescription: \"Prepares the build for Isar Core\"\nruns:\n  using: \"composite\"\n  steps:\n    - name: In"
  },
  {
    "path": ".github/dependabot.yaml",
    "chars": 1692,
    "preview": "version: 2\nenable-beta-ecosystems: true\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule"
  },
  {
    "path": ".github/workflows/cron_test.yaml",
    "chars": 142,
    "preview": "name: Dart CI Cron\n\non:\n  schedule:\n    - cron: \"0 0 * * 0\"\n\njobs:\n  testlab:\n    uses: ./.github/workflows/testlab.yaml"
  },
  {
    "path": ".github/workflows/docs.yaml",
    "chars": 1808,
    "preview": "name: Unified Deploy Docs\n\non:\n  push:\n    branches:\n      - main\n      - v3\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest"
  },
  {
    "path": ".github/workflows/release.yaml",
    "chars": 5539,
    "preview": "name: Isar release\n\non:\n  push:\n    tags:\n      - \"*\"\n\njobs:\n  verify_version:\n    name: Verify version matches release\n"
  },
  {
    "path": ".github/workflows/skynet.yaml",
    "chars": 502,
    "preview": "name: Triggers remote jenkins\n\non:\n  push:\n    branches:\n      - main\n      - v3\n\npermissions:\n  contents: read\n  pages:"
  },
  {
    "path": ".github/workflows/test.yaml",
    "chars": 11938,
    "preview": "name: Dart CI\n\non:\n  push:\n    branches:\n      - v3\n  pull_request:\n    branches:\n      - v3\n\njobs:\n  version:\n    name:"
  },
  {
    "path": ".github/workflows/testlab.yaml",
    "chars": 2036,
    "preview": "on: workflow_call\n\njobs:\n  firebase_testlab_android:\n    name: Firebase Testlab Android\n    runs-on: ubuntu-latest\n    s"
  },
  {
    "path": ".gitignore",
    "chars": 1322,
    "preview": "# Miscellaneous\n*.class\n*.lock\n*.log\n.DS_Store\n.vscode/\n.idea\n\n# Dart related\n.dart_tool/\n.flutter-plugins\n.flutter-plug"
  },
  {
    "path": "Cargo.toml",
    "chars": 202,
    "preview": "[workspace]\nresolver = \"2\"\nmembers = [\n    \"packages/isar_core\",\n    \"packages/isar_core_ffi\",\n    \"packages/mdbx_sys\"\n]"
  },
  {
    "path": "LICENSE",
    "chars": 11357,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "TODO.md",
    "chars": 1755,
    "preview": "<h1 align=\"center\"> Roadmap and TODOs</p>\n\n\n# Documentation\n\n## API Docs\n\n- [ ] Document all public APIs\n\n## Schema\n\n- ["
  },
  {
    "path": "docs/.gitignore",
    "chars": 42,
    "preview": ".DS_Store\n\nnode_modules\n.temp\n.cache\ndist\n"
  },
  {
    "path": "docs/README.md",
    "chars": 269,
    "preview": "# Isar Docs\n\nRun the docs locally:\n\n```\nnpm install\n\nnpm run dev\n```\n\n## Create a new language\n\n1. Create a new folder i"
  },
  {
    "path": "docs/docs/.vuepress/config.ts",
    "chars": 6644,
    "preview": "import { shikiPlugin } from '@vuepress/plugin-shiki'\nimport { DefaultThemeLocaleData, defineUserConfig, LocaleConfig, Si"
  },
  {
    "path": "docs/docs/.vuepress/locales.ts",
    "chars": 8165,
    "preview": "export interface LocalConfig {\n  code: string;\n  language: string;\n  selectLanguage: string;\n  editPage: string;\n  lastU"
  },
  {
    "path": "docs/docs/.vuepress/redirect.ts",
    "chars": 933,
    "preview": "import { defineClientConfig } from '@vuepress/client'\nimport { locales } from './locales'\n\nexport default defineClientCo"
  },
  {
    "path": "docs/docs/.vuepress/styles/index.scss",
    "chars": 2830,
    "preview": ":root {\n  --c-brand: #4799fc;\n  --c-brand-light: #67abfd;\n\n  --c-text: rgb(30, 30, 30); // normal text\n  --c-text-light:"
  },
  {
    "path": "docs/docs/README.md",
    "chars": 1380,
    "preview": "---\nhome: true\ntitle: Home\nheroImage: /isar.svg\nactions:\n  - text: Let's Get Started!\n    link: /tutorials/quickstart.ht"
  },
  {
    "path": "docs/docs/crud.md",
    "chars": 7828,
    "preview": "---\ntitle: Create, Read, Update, Delete\n---\n\n# Create, Read, Update, Delete\n\nWhen you have your collections defined, lea"
  },
  {
    "path": "docs/docs/de/README.md",
    "chars": 1359,
    "preview": "---\nhome: true\ntitle: Home\nheroImage: /isar.svg\nactions:\n  - text: Auf Los geht's los!\n    link: /de/tutorials/quickstar"
  },
  {
    "path": "docs/docs/de/crud.md",
    "chars": 6974,
    "preview": "---\ntitle: Erstellen, Lesen, Aktualisieren und Löschen\n---\n\n# Erstellen, Lesen, Aktualisieren und Löschen\n\nLerne wie du "
  },
  {
    "path": "docs/docs/de/faq.md",
    "chars": 2048,
    "preview": "---\ntitle: FAQ\n---\n\n# Häufig gestellte Fragen\n\nEine zufällige Zusammenstellung an häufig gestellten Fragen zu Isar und F"
  },
  {
    "path": "docs/docs/de/indexes.md",
    "chars": 12540,
    "preview": "---\ntitle: Indizes\n---\n\n# Indizes\n\nIndizes sind Isars mächtigstes Feature. Viele eingebettete Datenbanken bieten \"normal"
  },
  {
    "path": "docs/docs/de/limitations.md",
    "chars": 1225,
    "preview": "---\ntitle: Limitationen\n---\n\n# Limitationen\n\nWie du weißt, funktioniert Isar auf Mobilgeräten und Desktops und läuft sow"
  },
  {
    "path": "docs/docs/de/links.md",
    "chars": 5621,
    "preview": "---\ntitle: Links\n---\n\n# Links\n\nLinks ermöglichen es dir Verhältnisse zwischen Objekten, wie z.B. dem Autor (Benutzer) ei"
  },
  {
    "path": "docs/docs/de/queries.md",
    "chars": 25573,
    "preview": "---\ntitle: Abfragen\n---\n\n# Abfragen\n\nMit Abfragen kannst du Einträge finden, die bestimmten Bedingungen entsprechen, zum"
  },
  {
    "path": "docs/docs/de/recipes/data_migration.md",
    "chars": 3032,
    "preview": "---\ntitle: Migration von Daten\n---\n\n# Migration vron Daten\n\nIsar migriert deine Datenbankschemas automatisch, wenn du Co"
  },
  {
    "path": "docs/docs/de/recipes/full_text_search.md",
    "chars": 6301,
    "preview": "---\ntitle: Volltextsuche\n---\n\n# Volltextsuche\n\nVolltextsuche ist ein mächtiges Werkzeug um Text in der Datenbank zu such"
  },
  {
    "path": "docs/docs/de/recipes/multi_isolate.md",
    "chars": 3521,
    "preview": "---\ntitle: Nutzung von mehreren Isolates\n---\n\n# Nutzung von mehreren Isolates\n\nStatt in Threads, läuft der gesamte Dart-"
  },
  {
    "path": "docs/docs/de/recipes/string_ids.md",
    "chars": 1789,
    "preview": "---\ntitle: String-IDs\n---\n\n# String-IDs\n\nDas hier ist eine der häufigsten Anfragen, die ich erhalte, daher ist hier ein "
  },
  {
    "path": "docs/docs/de/schema.md",
    "chars": 10144,
    "preview": "---\ntitle: Schema\n---\n\n# Schema\n\nWenn du Isar benutzt, um deine App-Daten zu speichern, dann hast du mit Collections zu "
  },
  {
    "path": "docs/docs/de/transactions.md",
    "chars": 2762,
    "preview": "---\ntitle: Transaktionen\n---\n\n# Transaktionen\n\nIn Isar verbinden Transaktionen mehrere Datenbankoperationen in einen ein"
  },
  {
    "path": "docs/docs/de/tutorials/quickstart.md",
    "chars": 2997,
    "preview": "---\ntitle: Schnellstart\n---\n\n# Schnellstart\n\nHolla, die Waldfee! Du bist bestimmt hier um mit der coolsten Flutter-Daten"
  },
  {
    "path": "docs/docs/de/watchers.md",
    "chars": 3734,
    "preview": "---\ntitle: Watcher\n---\n\n# Watcher\n\nIsar ermöglicht es dir zu Änderungen in der Datenbank zu abbonieren. Du kannst Änderu"
  },
  {
    "path": "docs/docs/es/README.md",
    "chars": 1590,
    "preview": "---\nhome: true\ntitle: Home\nheroImage: /isar.svg\nactions:\n  - text: Empecemos!\n    link: /es/tutorials/quickstart.html\n  "
  },
  {
    "path": "docs/docs/es/crud.md",
    "chars": 7367,
    "preview": "---\ntitle: Crear, Leer, Actualizar, Eliminar\n---\n\n# Crear, Leer, Actualizar, Eliminar (CRUD)\n\nCuando ya has definido tus"
  },
  {
    "path": "docs/docs/es/faq.md",
    "chars": 2067,
    "preview": "---\ntitle: FAQ\n---\n\n# Preguntas frecuentes\n\nUna colección aleatoria de preguntas frecuentes sobre Isar y bases de datos "
  },
  {
    "path": "docs/docs/es/indexes.md",
    "chars": 11993,
    "preview": "---\ntitle: Índices\n---\n\n# Índices\n\nLos índices son la característica más poderosa de Isar. Muchas bases de datos embebid"
  },
  {
    "path": "docs/docs/es/limitations.md",
    "chars": 1194,
    "preview": "# Limitaciones\n\nComo ya sabes, Isar funciona en dispositivos móbiles y de escritorio corriendo en la VM así como en la w"
  },
  {
    "path": "docs/docs/es/links.md",
    "chars": 5275,
    "preview": "---\ntitle: Enlaces\n---\n\n# Enlaces\n\nLos enlaces permiten establecer relaciones entre objetos, como ser el autor de un com"
  },
  {
    "path": "docs/docs/es/queries.md",
    "chars": 24265,
    "preview": "---\ntitle: Consultas\n---\n\n# Consultas\n\nLas consultas se utilizan para buscar registros que coincidan con ciertas condici"
  },
  {
    "path": "docs/docs/es/recipes/data_migration.md",
    "chars": 2870,
    "preview": "---\ntitle: Migración de datos\n---\n\n# Migración de datos\n\nIsar migra automáticamente tus esquemas de la base de datos si "
  },
  {
    "path": "docs/docs/es/recipes/full_text_search.md",
    "chars": 6081,
    "preview": "---\ntitle: Full-text search\n---\n\n# Full-text search\n\nFull-text search es una manera poderosa de buscar texto en la base "
  },
  {
    "path": "docs/docs/es/recipes/multi_isolate.md",
    "chars": 3294,
    "preview": "---\ntitle: Uso de múltiples Isolates\n---\n\n# Uso de múltiples Isolates\n\nEn lugar de tareas, todo el código de Dart corre "
  },
  {
    "path": "docs/docs/es/recipes/string_ids.md",
    "chars": 1696,
    "preview": "---\ntitle: Ids de texto\n---\n\n# Ids de texto\n\nEsta es uno de los pedidos más frecuentes para Isar, por eso les dejamos es"
  },
  {
    "path": "docs/docs/es/schema.md",
    "chars": 9861,
    "preview": "---\ntitle: Esquema\n---\n\n# Esquema\n\nCuando usas Isar para almacenar los datos de tu aplicación, estás tratando con colecc"
  },
  {
    "path": "docs/docs/es/transactions.md",
    "chars": 2695,
    "preview": "---\ntitle: Transacciones\n---\n\n# Transacciones\n\nEn Isar, las transacciones combinan múltiples operaciones en una sola uni"
  },
  {
    "path": "docs/docs/es/tutorials/quickstart.md",
    "chars": 3090,
    "preview": "---\ntitle: Inicio rápido\n---\n\n# Inicio rápido\n\nIncreíble!, estás aquí! Vamos a empezar a usar la base de datos más genia"
  },
  {
    "path": "docs/docs/es/watchers.md",
    "chars": 3429,
    "preview": "---\ntitle: Watchers\n---\n\n# Watchers\n\nIsar te permite suscribirte a los cambios en la base de datos. Puedes \"observar\" lo"
  },
  {
    "path": "docs/docs/faq.md",
    "chars": 1800,
    "preview": "---\ntitle: FAQ\n---\n\n# Frequently Asked Questions\n\nA random collection of frequently asked questions about Isar and Flutt"
  },
  {
    "path": "docs/docs/fr/README.md",
    "chars": 1553,
    "preview": "---\nhome: true\ntitle: Acceuil\nheroImage: /isar.svg\nactions:\n  - text: Commençons !\n    link: /fr/tutorials/quickstart.ht"
  },
  {
    "path": "docs/docs/fr/crud.md",
    "chars": 7873,
    "preview": "---\ntitle: Création, lecture, modification, suppression\n---\n\n# Création, lecture, modification, suppression\n\nMaintenant "
  },
  {
    "path": "docs/docs/fr/faq.md",
    "chars": 2288,
    "preview": "---\ntitle: FAQ\n---\n\n# Foire aux questions\n\nUne compilation de questions fréquemment posées sur les bases de données Isar"
  },
  {
    "path": "docs/docs/fr/indexes.md",
    "chars": 12788,
    "preview": "---\ntitle: Indices\n---\n\n# Indices\n\nLes indices (`index`) sont la fonctionnalité la plus puissante d'Isar. De nombreuses "
  },
  {
    "path": "docs/docs/fr/limitations.md",
    "chars": 1323,
    "preview": "# Limitations\n\nComme vous le savez, Isar fonctionne sur les appareils mobiles et les ordinateurs de bureau fonctionnant "
  },
  {
    "path": "docs/docs/fr/links.md",
    "chars": 5607,
    "preview": "---\ntitle: Liens\n---\n\n# Liens\n\nLes liens nous permettent d'exprimer des relations entre objets, comme l'auteur d'un comm"
  },
  {
    "path": "docs/docs/fr/queries.md",
    "chars": 25862,
    "preview": "---\ntitle: Requêtes\n---\n\n# Requêtes\n\nLes requêtes nous permettent de trouver des enregistrements correspondant à certain"
  },
  {
    "path": "docs/docs/fr/recipes/data_migration.md",
    "chars": 3171,
    "preview": "---\ntitle: Migration des données\n---\n\n# Migration des données\n\nIsar migre automatiquement les schémas de notre base de d"
  },
  {
    "path": "docs/docs/fr/recipes/full_text_search.md",
    "chars": 6586,
    "preview": "---\ntitle: Recherche plein texte\n---\n\n# Recherche plein texte\n\nLa recherche plein texte est un moyen puissant de recherc"
  },
  {
    "path": "docs/docs/fr/recipes/multi_isolate.md",
    "chars": 3579,
    "preview": "---\ntitle: Utilisation multi-isolats\n---\n\n# Utilisation multi-isolats\n\nAu lieu de threads, tout code Dart s'exécute dans"
  },
  {
    "path": "docs/docs/fr/recipes/string_ids.md",
    "chars": 1990,
    "preview": "---\ntitle: Identifiants en chaîne de caractères\n---\n\n# Identifiants en chaîne de caractères\n\nC'est l'une des demandes le"
  },
  {
    "path": "docs/docs/fr/schema.md",
    "chars": 10065,
    "preview": "---\ntitle: Schéma\n---\n\n# Schéma\n\nLorsque vous utilisez Isar pour stocker les données de votre application, vous devez ut"
  },
  {
    "path": "docs/docs/fr/transactions.md",
    "chars": 2929,
    "preview": "---\ntitle: Transactions\n---\n\n# Transactions\n\nDans Isar, les transactions combinent plusieurs opérations de base de donné"
  },
  {
    "path": "docs/docs/fr/tutorials/quickstart.md",
    "chars": 3079,
    "preview": "---\ntitle: Démarrage rapide\n---\n\n# Démarrage rapide\n\nVous revoilà! Commençons à utiliser la base de données Flutter la p"
  },
  {
    "path": "docs/docs/fr/watchers.md",
    "chars": 3684,
    "preview": "---\ntitle: Observateurs\n---\n\n# Observateurs\n\nIsar nous permet de nous abonner aux changements dans la base de données. N"
  },
  {
    "path": "docs/docs/indexes.md",
    "chars": 11383,
    "preview": "---\ntitle: Indexes\n---\n\n# Indexes\n\nIndexes are Isar's most powerful feature. Many embedded databases offer \"normal\" inde"
  },
  {
    "path": "docs/docs/it/README.md",
    "chars": 1568,
    "preview": "---\nhome: true\ntitle: Home\nheroImage: /isar.svg\nactions:\n  - text: Iniziamo!\n    link: /it/tutorials/quickstart.html\n   "
  },
  {
    "path": "docs/docs/it/crud.md",
    "chars": 6551,
    "preview": "---\ntitle: Create, Read, Update, Delete\n---\n\n# Create, Read, Update, Delete\n\nQuando hai definito le tue collezioni, impa"
  },
  {
    "path": "docs/docs/it/faq.md",
    "chars": 2034,
    "preview": "---\ntitle: FAQ\n---\n\n# Domande frequenti\n\nUna raccolta casuale di domande frequenti sui database Isar e Flutter.\n\n### Per"
  },
  {
    "path": "docs/docs/it/indexes.md",
    "chars": 12078,
    "preview": "---\ntitle: Indici\n---\n\n# Indici\n\nGli indici sono la caratteristica più potente di Isar. Molti database incorporati offro"
  },
  {
    "path": "docs/docs/it/limitations.md",
    "chars": 1207,
    "preview": "# Limitazioni\n\nCome sapete, Isar funziona su dispositivi mobili e desktop in esecuzione su VM oltre che su Web. Entrambe"
  },
  {
    "path": "docs/docs/it/links.md",
    "chars": 5353,
    "preview": "---\ntitle: Collegamenti\n---\n\n# Collegamenti\n\nI collegamenti consentono di esprimere relazioni tra oggetti, come l'autore"
  },
  {
    "path": "docs/docs/it/queries.md",
    "chars": 22606,
    "preview": "---\ntitle: Query\n---\n\n# Query\n\nLa query è il modo in cui trovi i record che soddisfano determinate condizioni, ad esempi"
  },
  {
    "path": "docs/docs/it/recipes/data_migration.md",
    "chars": 2909,
    "preview": "---\ntitle: Migrazione dei dati\n---\n\n# Migrazione dei dati\n\nIsar migra automaticamente gli schemi del database se aggiung"
  },
  {
    "path": "docs/docs/it/recipes/full_text_search.md",
    "chars": 6117,
    "preview": "---\ntitle: Ricerca full-text\n---\n\n# Ricerca full-text\n\nLa ricerca full-text è un modo efficace per cercare il testo nel "
  },
  {
    "path": "docs/docs/it/recipes/multi_isolate.md",
    "chars": 3340,
    "preview": "---\ntitle: Utilizzo multi-isolate\n---\n\n# Utilizzo multi-isolate\n\nInvece dei thread, tutto il codice Dart viene eseguito "
  },
  {
    "path": "docs/docs/it/recipes/string_ids.md",
    "chars": 1717,
    "preview": "---\ntitle: ID stringa\n---\n\n# ID stringa\n\nQuesta è una delle richieste più frequenti che ricevo, quindi ecco un tutorial "
  },
  {
    "path": "docs/docs/it/schema.md",
    "chars": 9803,
    "preview": "---\ntitle: Schema\n---\n\n# Schema\n\nQuando utilizzi Isar per archiviare i dati della tua app, hai a che fare con le raccolt"
  },
  {
    "path": "docs/docs/it/transactions.md",
    "chars": 2765,
    "preview": "---\ntitle: Transazioni\n---\n\n# Transazioni\n\nIn Isar, le transazioni combinano più operazioni di database in un'unica unit"
  },
  {
    "path": "docs/docs/it/tutorials/quickstart.md",
    "chars": 2952,
    "preview": "---\ntitle: Avvio rapido\n---\n\n# Avvio rapido\n\nSanti numi, sei qui! Iniziamo a usare il database Flutter più interessante "
  },
  {
    "path": "docs/docs/it/watchers.md",
    "chars": 3554,
    "preview": "---\ntitle: Osservatori\n---\n\n# Osservatori\n\nIsar permette di sottoscrivere le modifiche al database. Puoi \"osservare\" le "
  },
  {
    "path": "docs/docs/ja/README.md",
    "chars": 916,
    "preview": "---\nhome: true\ntitle: ホーム\nheroImage: /isar.svg\nactions:\n  - text: さっそく始めよう!\n    link: /ja/tutorials/quickstart.html\n    "
  },
  {
    "path": "docs/docs/ja/crud.md",
    "chars": 4469,
    "preview": "---\ntitle: CRUD操作\n---\n\n# CRUD操作\n\nコレクションを定義したら、それを操作する方法を学びましょう。\n\n## Isarを開く\n\n何をするにしても、まずはIsarのインスタンスが必要です。各インスタンスには、データベ"
  },
  {
    "path": "docs/docs/ja/faq.md",
    "chars": 1186,
    "preview": "---\ntitle: よくある質問\n---\n\n# よくある質問\n\nIsarとFlutterのデータベースについてよくある質問を無作為に集めました。\n\n### 何でデータベースが必要なの?\n\n> 私はバックエンドDBにデータを保存しているけど"
  },
  {
    "path": "docs/docs/ja/indexes.md",
    "chars": 8791,
    "preview": "---\ntitle: インデックス\n---\n\n# インデックス\n\nインデックスは、Isarの最も強力な機能です。多くの組み込み型データベースは、\"通常の\"インデックスを提供していますが、Isarは複合インデックスやマルチエントリーインデック"
  },
  {
    "path": "docs/docs/ja/limitations.md",
    "chars": 637,
    "preview": "# 制限事項\n\nご存知のように、Isarはモバイル端末や VM上で動作するデスクトップ、そしてWeb上で動作します。この2つのプラットフォームは非常に異なっており、それぞれ異なる制限事項があります。\n\n## VMの制限事項\n\n- 文字列の最"
  },
  {
    "path": "docs/docs/ja/links.md",
    "chars": 3634,
    "preview": "---\ntitle: リンク\n---\n\n# リンク\n\nリンクは、例えばコメントの作成者(User)のようなオブジェクト間の関係を表現することができ、 `1:1`、`1:n`、`n:n`の関係を IsarLinkで表現することができます。リン"
  },
  {
    "path": "docs/docs/ja/queries.md",
    "chars": 15604,
    "preview": "---\ntitle: クエリ\n---\n\n# クエリ\n\nクエリとは、ある条件に合致するレコードを探し出す方法です。例えば:\n\n- 星付きの連絡先をすべて検索\n- 連絡先の名前を個別に検索する\n- 姓が定義されていないすべての連絡先を削除する\n"
  },
  {
    "path": "docs/docs/ja/recipes/data_migration.md",
    "chars": 2134,
    "preview": "---\ntitle: データの移行\n---\n\n# データの移行\n\nコレクション、フィールド、インデックスを追加または削除すると、Isarは自動的にデータベーススキーマを移行(マイグレート)します。時には、データも一緒に移行したい場合もあるで"
  },
  {
    "path": "docs/docs/ja/recipes/full_text_search.md",
    "chars": 4010,
    "preview": "---\ntitle: 全文検索\n---\n\n# 全文検索\n\n全文検索は、データベース内のテキストを検索する強力な方法です。[インデックス](../indexes.md)がどのように機能するかについては既にご存じだとは思いますが、基本的なことを"
  },
  {
    "path": "docs/docs/ja/recipes/multi_isolate.md",
    "chars": 2191,
    "preview": "---\ntitle: Multi-Isolateの使用法\n---\n\n# Multi-Isolateの使用法\n\nスレッドの代わりに、すべてのDartのコードはアイソレートの内部で実行されます。それぞれのアイソレートは独自のメモリヒープを持ち、"
  },
  {
    "path": "docs/docs/ja/recipes/string_ids.md",
    "chars": 1076,
    "preview": "---\ntitle: 文字列のID\n---\n\n# 文字列のID\n\nこのチュートリアルは、私が最も頻繁に受け取るリクエストの一つです。\n\nIsarはString IDを標準サポートしていませんが、それには理由があります。特にリンクの場合、St"
  },
  {
    "path": "docs/docs/ja/schema.md",
    "chars": 7100,
    "preview": "---\ntitle: スキーマとは\n---\n\n# スキーマとは\n\nIsar を使用してアプリのデータを保存する場合、コレクションを扱うことになります。コレクションとは、関連付けられた IsarDB 内のテーブルのようなもので、単一型の Da"
  },
  {
    "path": "docs/docs/ja/transactions.md",
    "chars": 1638,
    "preview": "---\ntitle: トランザクション\n---\n\n# トランザクション\n\nIsarにおいて、トランザクションは複数のデータベース操作を1つの作業単位にまとめます。Isarの大半の処理は、暗黙のうちにトランザクションを利用しています。Isar"
  },
  {
    "path": "docs/docs/ja/tutorials/quickstart.md",
    "chars": 2432,
    "preview": "---\ntitle: クイックスタート\n---\n\n# クイックスタート\n\nお待たせしました。さあ、最高にクールなFlutterのデータベースを使い始めましょう!\n\nこの記事では、簡潔にコードを書いていきます。\n\n\n## 1. 依存関係を追加"
  },
  {
    "path": "docs/docs/ja/watchers.md",
    "chars": 2505,
    "preview": "---\ntitle: ウォッチャー\n---\n\n# ウォッチャー\n\nIsar では、データベースの変更を監視することができます。特定のオブジェクトやコレクション全体、あるいはクエリの変更を \"監視\" することができます。\n\nウォッチャーを使う"
  },
  {
    "path": "docs/docs/ko/README.md",
    "chars": 991,
    "preview": "---\nhome: true\ntitle: 홈\nheroImage: /isar.svg\nactions:\n  - text: 시작하기!\n    link: /tutorials/quickstart.html\n    type: pri"
  },
  {
    "path": "docs/docs/ko/crud.md",
    "chars": 5701,
    "preview": "---\ntitle: CRUD 조작\n---\n\n# CRUD 조작\n\n컬렉션이 정의되었다면, 이제 조작하는 방법을 배워봅시다!\n\n## Isar 열기\n\n무엇을 하든 우선 Isar 인스턴스가 필요합니다. 각 인스턴스에는 데이터"
  },
  {
    "path": "docs/docs/ko/faq.md",
    "chars": 1093,
    "preview": "---\ntitle: 자주 묻는 질문들\n---\n\n# 자주 묻는 질문들\n\nIsar 와 Flutter 데이터베이스에 대해서 자주 물어보는 질문들을 랜덤으로 뽑아봤습니다.\n\n### 데이터베이스가 왜 필요하죠?\n\n> 저는 백"
  },
  {
    "path": "docs/docs/ko/indexes.md",
    "chars": 9881,
    "preview": "---\ntitle: 인덱스\n---\n\n# 인덱스\n\n인덱스는 Isar 의 가장 강력한 기능입니다. 대부분의 내장 데이터베이스는 \"일반적인\" 인덱스만을 제공하지만(인덱스가 있다면요), Isar 에는 복합 및 다중 항목 인"
  },
  {
    "path": "docs/docs/ko/limitations.md",
    "chars": 816,
    "preview": "# 제한 사항\n\n아시다시피 Isar 는 VM 에서 실행되는 모바일 장치 및 데스크톱과 웹에서 작동합니다. 두 플랫폼은 매우 다르고 다른 한계점을 가지고 있습니다.\nAs you know, Isar works on mo"
  },
  {
    "path": "docs/docs/ko/links.md",
    "chars": 3664,
    "preview": "---\ntitle: 링크\n---\n\n# 링크\n\n링크를 사용해서 댓글 작성자(사용자) 같은 객체 간의 관계를 나타낼 수 있습니다. Isar 링크를 사용해서 `1:1`, `1:n`, 과 `n:n` 관계를 모델링할 수 있습"
  },
  {
    "path": "docs/docs/ko/queries.md",
    "chars": 17198,
    "preview": "---\ntitle: 쿼리\n---\n\n# 쿼리\n\n쿼리는 특정 조건들에 맞는 레코드들을 찾는 방법입니다. 예:\n\n- 별표로 표시된 모든 연락처를 찾습니다.\n- 연락처에서 고유한 이름들을 찾습니다.\n- 성이 정의되지 않은 "
  },
  {
    "path": "docs/docs/ko/recipes/data_migration.md",
    "chars": 2199,
    "preview": "---\ntitle: 데이터 마이그레이션 (Data migration)\n---\n\n# 데이터 마이그레이션\n\nIsar 는 컬렉션, 속성, 인덱스를 추가하거나 삭제하면 데이터베이스 스키마를 자동으로 마이그레이션합니다. 가끔"
  },
  {
    "path": "docs/docs/ko/recipes/full_text_search.md",
    "chars": 5631,
    "preview": "---\ntitle: Full-text search\n---\n\n# Full-text search\n\nFull-text search is a powerful way to search text in the database. "
  },
  {
    "path": "docs/docs/ko/recipes/multi_isolate.md",
    "chars": 3044,
    "preview": "---\ntitle: 다중-Isolate 사용법\n---\n\n# 다중-Isolate 사용법\n\n스레드 대신, 모든 다트 코드는 isolate 안에서 돌아갑니다. 각 isolate 에는 고유한 메모리 힙이 있으므로, isol"
  },
  {
    "path": "docs/docs/ko/recipes/string_ids.md",
    "chars": 1630,
    "preview": "---\ntitle: String ids\n---\n\n# String ids\n\nThis is one of the most frequent requests I get, so here is a tutorial on using"
  },
  {
    "path": "docs/docs/ko/schema.md",
    "chars": 6590,
    "preview": "---\ntitle: 스키마\n---\n\n# 스키마\n\n앱의 데이터를 저장하기 위해 Isar를 사용할 때마다, 컬렉션을 이용하게 됩니다. 컬렉션은 연관된 Isar 데이터베이스의 데이터베이스 테이블과 같고, 하나의 다트 객체"
  },
  {
    "path": "docs/docs/ko/transactions.md",
    "chars": 1591,
    "preview": "---\ntitle: 트랜잭션\n---\n\n# 트랜잭션 (Transactions)\n\nIsar 에서 트랜잭션은 단일 작업 단위 안에서 여러 데이터베이스 작업들을 합치게 됩니다. Isar 와의 대부분의 상호작용은 암묵적으로 "
  },
  {
    "path": "docs/docs/ko/tutorials/quickstart.md",
    "chars": 2427,
    "preview": "---\ntitle: 빠른 시작\n---\n\n# 빠른 시작\n\n세상에, 이제야 왔군요! 가장 멋진 플러터 데이터베이스를 사용해 보겠습니다...\n\n이 빠른 시작에서는 말은 줄이고 바로 코드를 보겠습니다.\n\n## 1. 의존성 "
  },
  {
    "path": "docs/docs/ko/watchers.md",
    "chars": 2398,
    "preview": "---\ntitle: 감시자(Watchers)\n---\n\n# 감시자\n\nIsar 에서는 데이터 변경을 구독할 수 있습니다. 특정 객체, 전체 컬렉션 또는 쿼리의 변경 내용을 \"감시\" 할 수 있습니다.\n\n감시자(Watche"
  },
  {
    "path": "docs/docs/limitations.md",
    "chars": 1059,
    "preview": "---\ntitle: Limitations\n---\n\n# Limitations\n\nAs you know, Isar works on mobile devices and desktops running on the VM as w"
  },
  {
    "path": "docs/docs/links.md",
    "chars": 4969,
    "preview": "---\ntitle: Links\n---\n\n# Links\n\nLinks allow you to express relationships between objects, such as a comment's author (Use"
  },
  {
    "path": "docs/docs/pt/README.md",
    "chars": 1563,
    "preview": "---\nhome: true\ntitle: Home\nheroImage: /isar.svg\nactions:\n  - text: Vamos Começar!\n    link: /pt/tutorials/quickstart.htm"
  },
  {
    "path": "docs/docs/pt/crud.md",
    "chars": 6359,
    "preview": "---\ntitle: Criar, Ler, Atualizar, Apagar\n---\n\n# Criar, Ler, Atualizar, Apagar\n\nQuando você tiver suas coleções definidas"
  },
  {
    "path": "docs/docs/pt/faq.md",
    "chars": 2020,
    "preview": "---\ntitle: QF\n---\n\n# Questões Frequentes\n\nUma coleção aleatória de questões frequentes sobre bancos de dados Isar e Flut"
  },
  {
    "path": "docs/docs/pt/indexes.md",
    "chars": 11991,
    "preview": "---\ntitle: Índices\n---\n\n# Índices\n\nOs índices são o recurso mais poderoso do Isar. Muitos bancos de dados incorporados o"
  },
  {
    "path": "docs/docs/pt/limitations.md",
    "chars": 1181,
    "preview": "# Limitações\n\nComo você sabe, o Isar funciona em dispositivos móveis e desktops executados na VM e na Web. Ambas as plat"
  },
  {
    "path": "docs/docs/pt/links.md",
    "chars": 5134,
    "preview": "---\ntitle: Links\n---\n\n# Links\n\nOs links permitem que você expresse relacionamentos entre objetos, como o autor de um com"
  },
  {
    "path": "docs/docs/pt/queries.md",
    "chars": 21115,
    "preview": "---\ntitle: Queries\n---\n\n# Queries\n\nQuerying is how you find records that match certain conditions, for example:\n\n- Find "
  },
  {
    "path": "docs/docs/pt/schema.md",
    "chars": 9131,
    "preview": "---\ntitle: Schema\n---\n\n# Schema\n\nWhen you use Isar to store your app's data, you're dealing with collections. A collecti"
  },
  {
    "path": "docs/docs/pt/transactions.md",
    "chars": 2606,
    "preview": "---\ntitle: Transações\n---\n\n# Transações\n\nNo Isar, as transações combinam várias operações de banco de dados em uma única"
  },
  {
    "path": "docs/docs/pt/tutorials/quickstart.md",
    "chars": 2997,
    "preview": "---\ntitle: Início rápido\n---\n\n# Início rápido\n\nCaramba, você está aqui! Vamos começar a usar o banco de dados Flutter ma"
  },
  {
    "path": "docs/docs/pt/watchers.md",
    "chars": 3275,
    "preview": "---\ntitle: Watchers\n---\n\n# Watchers\n\nIsar allows you to subscribe to changes in the database. You can \"watch\" for change"
  },
  {
    "path": "docs/docs/queries.md",
    "chars": 22532,
    "preview": "---\ntitle: Queries\n---\n\n# Queries\n\nQuerying is how you find records that match certain conditions, for example:\n\n- Find "
  },
  {
    "path": "docs/docs/recipes/data_migration.md",
    "chars": 2740,
    "preview": "---\ntitle: Data migration\n---\n\n# Data Migration\n\nIsar automatically migrates your database schemas if you add or remove "
  },
  {
    "path": "docs/docs/recipes/full_text_search.md",
    "chars": 5631,
    "preview": "---\ntitle: Full-text search\n---\n\n# Full-text search\n\nFull-text search is a powerful way to search text in the database. "
  },
  {
    "path": "docs/docs/recipes/multi_isolate.md",
    "chars": 3120,
    "preview": "---\ntitle: Multi-Isolate usage\n---\n\n# Multi-Isolate usage\n\nInstead of threads, all Dart code runs inside isolates. Each "
  },
  {
    "path": "docs/docs/recipes/string_ids.md",
    "chars": 1630,
    "preview": "---\ntitle: String ids\n---\n\n# String ids\n\nThis is one of the most frequent requests I get, so here is a tutorial on using"
  },
  {
    "path": "docs/docs/schema.md",
    "chars": 9131,
    "preview": "---\ntitle: Schema\n---\n\n# Schema\n\nWhen you use Isar to store your app's data, you're dealing with collections. A collecti"
  },
  {
    "path": "docs/docs/transactions.md",
    "chars": 2424,
    "preview": "---\ntitle: Transactions\n---\n\n# Transactions\n\nIn Isar, transactions combine multiple database operations in a single unit"
  },
  {
    "path": "docs/docs/tutorials/quickstart.md",
    "chars": 2862,
    "preview": "---\ntitle: Quickstart\n---\n\n# Quickstart\n\nHoly smokes, you're here! Let's get started on using the coolest Flutter databa"
  },
  {
    "path": "docs/docs/ur/README.md",
    "chars": 1534,
    "preview": "---\nhome: true\ntitle: ہوم\nheroImage: /isar.svg\nactions:\n  - text:  آئیے شروع کریں۔\n    link: /tutorials/quickstart.html\n"
  },
  {
    "path": "docs/docs/ur/crud.md",
    "chars": 6465,
    "preview": "---\ntitle: بنائیں، پڑھیں، اپ ڈیٹ کریں، حذف کریں\n---\n\n# بنائیں، پڑھیں، اپ ڈیٹ کریں، حذف کریں\n\nجب آپ نے اپنے کلیکشنز کی وض"
  },
  {
    "path": "docs/docs/ur/faq.md",
    "chars": 1915,
    "preview": "---\ntitle: اکثر پوچھے گئے سوالات\n---\n\n# اکثر پوچھے گئے سوالات\n\nای زار اور فلٹر ڈیٹا بیس کے بارے میں اکثر پوچھے جانے والے"
  },
  {
    "path": "docs/docs/ur/indexes.md",
    "chars": 11737,
    "preview": "---\ntitle: انڈیکسز\n---\n\n# اشاریہ جات\n\nاشاریہ جات اسار کی سب سے طاقتور خصوصیت ہیں۔ بہت سے ایمبیڈڈ ڈیٹا بیس \"نارمل\" اشاریہ"
  },
  {
    "path": "docs/docs/ur/limitations.md",
    "chars": 1054,
    "preview": "# حدود \n\nجیسا کہ آپ جانتے ہیں، ای زار ورچوئل مشین کے ساتھ ساتھ ویب پر چلنے والے موبائل آلات اور ڈیسک ٹاپس پر کام کرتا ہے"
  },
  {
    "path": "docs/docs/ur/links.md",
    "chars": 5080,
    "preview": "---\ntitle: لنکس\n---\n\n# لنکس\n\nروابط آپ کو اشیاء کے درمیان تعلقات کا اظہار کرنے کی اجازت دیتے ہیں، جیسے کہ تبصرہ کا مصنف ("
  },
  {
    "path": "docs/docs/ur/queries.md",
    "chars": 21444,
    "preview": "---\ntitle: سوالات\n---\n\n# سوالات\n\nاستفسار یہ ہے کہ آپ کو ایسے ریکارڈز کیسے ملتے ہیں جو کچھ شرائط سے میل کھاتے ہیں، مثال ک"
  },
  {
    "path": "docs/docs/ur/recipes/data_migration.md",
    "chars": 2858,
    "preview": "---\n\ntitle: ڈیٹا مائیگریشن\n---\n\n# ڈیٹا مائیگریشن\n\nاگر آپ مجموعے، فیلڈز، یا اشاریہ جات کو شامل یا ہٹاتے ہیں تو ایزار خود "
  },
  {
    "path": "docs/docs/ur/recipes/full_text_search.md",
    "chars": 5723,
    "preview": "---\ntitle: مکمل متن کی تلاش\n---\n\n# مکمل متن کی تلاش\n\nمکمل متن کی تلاش ڈیٹا بیس میں متن تلاش کرنے کا ایک طاقتور طریقہ ہے۔"
  },
  {
    "path": "docs/docs/ur/recipes/multi_isolate.md",
    "chars": 3227,
    "preview": "---\ntitle:  کثیر الگ تھلگ استعمال\n---\n\n# کثیر الگ تھلگ استعمال\n\nدھاگوں کے بجائے، تمام ڈارٹ کوڈ الگ تھلگ کے اندر چلتا ہے۔"
  },
  {
    "path": "docs/docs/ur/recipes/string_ids.md",
    "chars": 1736,
    "preview": "---\ntitle: اسٹرنگ آئی ڈیز\n---\n\n# اسٹرنگ آئی ڈیز\n\nیہ مجھے ملنے والی اکثر درخواستوں میں سے ایک ہے، اس لیے یہاں اسٹرنگ آئی "
  },
  {
    "path": "docs/docs/ur/schema.md",
    "chars": 9186,
    "preview": "---\ntitle: اسکیما\n---\n\n# اسکیما\n\nجب آپ اپنی ایپ کا ڈیٹا ذخیرہ کرنے کے لیے ایزار کا استعمال کرتے ہیں، تو آپ مجموعوں کے سا"
  },
  {
    "path": "docs/docs/ur/transactions.md",
    "chars": 2481,
    "preview": "---\ntitle: لین دین\n---\n\n# لین دین\n\nای زار میں، لین دین کام کی ایک اکائی میں متعدد ڈیٹا بیس آپریشنز کو یکجا کرتا ہے۔ اسر "
  },
  {
    "path": "docs/docs/ur/tutorials/quickstart.md",
    "chars": 2970,
    "preview": "---\ntitle: فورا شروع کریں\n---\n\n  # فورا شروع کریں \n\nخوشی کی بات ہے،آپ یہاں ہیں! آئیے وہاں موجود بہترین فلٹر ڈیٹابیس کا ا"
  },
  {
    "path": "docs/docs/ur/watchers.md",
    "chars": 3434,
    "preview": "---\ntitle: نگران\n---\n\n# نگران\n\nای زار آپ کو ڈیٹا بیس میں ہونے والی تبدیلیوں کو سبسکرائب کرنے کی اجازت دیتا ہے۔ آپ کسی مخ"
  },
  {
    "path": "docs/docs/watchers.md",
    "chars": 3275,
    "preview": "---\ntitle: Watchers\n---\n\n# Watchers\n\nIsar allows you to subscribe to changes in the database. You can \"watch\" for change"
  },
  {
    "path": "docs/docs/zh/README.md",
    "chars": 789,
    "preview": "---\nhome: true\ntitle: 主页\nheroImage: /isar.svg\nactions:\n  - text: 让我们开始吧\n    link: /zh/tutorials/quickstart.html\n    type"
  },
  {
    "path": "docs/docs/zh/crud.md",
    "chars": 4472,
    "preview": "---\ntitle: 增删改查\n---\n\n# 增删改查(CRUD)\n\n当你已经定义了 Collection,现在来学习如何对其操作。\n\n## 创建一个 Isar 实例\n\n首先我们必须创建一个 Isar 实例。每一个实例需要一个可写的路径来保"
  },
  {
    "path": "docs/docs/zh/faq.md",
    "chars": 869,
    "preview": "---\ntitle: 常见疑问\n---\n\n# 常见疑问\n\n关于 Isar 和 Flutter 数据库的常见问题集合。\n\n### 为什么我需要一个数据库?\n\n> 我把数据存在后台服务器的数据库,为什么还需要 Isar?\n\n即便在今天,你可能也"
  },
  {
    "path": "docs/docs/zh/indexes.md",
    "chars": 7661,
    "preview": "---\ntitle: 索引\n---\n\n# 索引(Index)\n\n索引是 Isar 最重要的功能。所有嵌入式数据库都提供了“普通”索引功能(如果有的话),但是 Isar 支持组合搜索引和多条目索引。理解索引的工作原理是优化查询性能的基本前提。"
  },
  {
    "path": "docs/docs/zh/limitations.md",
    "chars": 509,
    "preview": "# 局限性\n\n你知道 Isar 是跨平台支持移动端、桌面端和 Web 端的,在移动和桌面端它是通过虚拟机来运行的,而 Web 端则不是。两者差异较大且有不同的局限性。\n\n## 虚拟机的局限\n\n- 一个字符串只能用其前 1024 字节来进行 "
  },
  {
    "path": "docs/docs/zh/links.md",
    "chars": 3078,
    "preview": "---\ntitle: 关联\n---\n\n# 关联(Link)\n\n关联允许你表达对象之间的关系,比如评论的作者(即用户)。你可以使用 Isar 的关联来实现 `1:1`、`1:n` 和 `n:n` 的关系。使用关联比使用嵌套对象更不符人类工程学"
  },
  {
    "path": "docs/docs/zh/queries.md",
    "chars": 14535,
    "preview": "---\ntitle: 查询\n---\n\n# 查询\n\n查询是指你如何查找匹配指定条件的数据。例如:\n\n- 查找所有被收藏的联系人\n- 查找联系人列表中名(不是姓)不同的人\n- 删除那些没有写明姓氏的联系人\n\n因为查询是在数据库中而不是在 Dar"
  },
  {
    "path": "docs/docs/zh/recipes/data_migration.md",
    "chars": 1966,
    "preview": "---\ntitle: 数据迁移\n---\n\n# 数据迁移\n\n当你添加或删除 Collection、或其字段或索引时,Isar 会自动为你的数据库 Schema 做数据迁移。有时候你可能想要自行迁移。Isar 没有提供相关函数,因为这么做会给数"
  },
  {
    "path": "docs/docs/zh/recipes/full_text_search.md",
    "chars": 3340,
    "preview": "---\ntitle: 全文检索\n---\n\n# 全文检索\n\n全文检索是一种从数据库中搜索文本的强大功能。你现在应该已经熟悉[索引](../indexes.md)的工作原理了,但还是让我们先了解一些基本知识。\n\n索引就像一张查询表,允许快速地根"
  },
  {
    "path": "docs/docs/zh/recipes/multi_isolate.md",
    "chars": 1912,
    "preview": "---\ntitle: Multi-Isolate 用法\n---\n\n# Multi-Isolate 用法\n\n所有的 Dart 代码都是在 isolate 而不是线程中运行的。每个 isolate 都有它自己的内存,确保彼此之间互相隔离。\n\nI"
  },
  {
    "path": "docs/docs/zh/recipes/string_ids.md",
    "chars": 909,
    "preview": "---\ntitle: 字符串 Id\n---\n\n# 字符串 Id\n\n这是我遇到的最常见的请求之一,所以就有了这篇教程。\n\nIsar 原生不支持字符串 Id,这是经过深思熟虑的:原因是整型 Id 比字符串 Id 性能更好。尤其是在处理关联上,使"
  },
  {
    "path": "docs/docs/zh/schema.md",
    "chars": 5933,
    "preview": "---\ntitle: Schema\n---\n\n# Schema\n\n当你使用 Isar 来存储数据时,你需要对 Collection 进行操作。Collection 可理解为 Isar 数据库中的表,其包含的数据只能为同一类 Dart 对象。"
  },
  {
    "path": "docs/docs/zh/transactions.md",
    "chars": 1170,
    "preview": "---\ntitle: 事务\n---\n\n# 事务(Transaction)\n\n在 Isar 中,事务将多条数据库操作序列合并成单个逻辑单位。大多数与 Isar 的交互都隐式用到了事务。Isar 的读写操作是兼容 [ACID](http://e"
  },
  {
    "path": "docs/docs/zh/tutorials/quickstart.md",
    "chars": 2383,
    "preview": "---\ntitle: 快速开始\n---\n\n# 快速开始\n\n嗨,你可终于来啦!让我们开始使用 Flutter 生态中最酷的数据库吧...\n\n废话不多说,让我们来看代码。\n\n## 1. 添加依赖\n\n在开始之前,我们需要在 `pubspec.ya"
  },
  {
    "path": "docs/docs/zh/watchers.md",
    "chars": 2172,
    "preview": "---\ntitle: 观察者\n---\n\n# 观察者(Watcher)\n\nIsar 允许你订阅数据库中的变化。你可以“观察”单个对象、整个 Collection 或单个查询的变化。\n\n观察者可以让你针对数据库中的变化高效地做出回应。例如,当一"
  },
  {
    "path": "docs/package.json",
    "chars": 238,
    "preview": "{\n  \"name\": \"docs\",\n  \"version\": \"1.0.0\",\n  \"devDependencies\": {\n    \"@vuepress/plugin-shiki\": \"^2.0.0-beta.53\",\n    \"vu"
  },
  {
    "path": "examples/pub/.gitignore",
    "chars": 51,
    "preview": "*.g.dart\n\nandroid/\nios/\nwindows/\nlinux/\nmacos/\nweb/"
  },
  {
    "path": "examples/pub/.metadata",
    "chars": 1668,
    "preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
  },
  {
    "path": "examples/pub/README.md",
    "chars": 87,
    "preview": "# pub\n\nSample showcasing the use of Isar to build a fully offline-first pub.dev client."
  },
  {
    "path": "examples/pub/analysis_options.yaml",
    "chars": 99,
    "preview": "include: package:flutter_lints/flutter.yaml\n\nanalyzer:\n  errors:\n    public_member_api_docs: ignore"
  },
  {
    "path": "examples/pub/lib/asset_loader.dart",
    "chars": 1780,
    "preview": "import 'dart:convert';\nimport 'dart:io';\n\nimport 'package:dio/dio.dart';\nimport 'package:isar/isar.dart';\nimport 'packag"
  },
  {
    "path": "examples/pub/lib/main.dart",
    "chars": 1730,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutter_riverpod.dart';\nimport 'package:go_rout"
  },
  {
    "path": "examples/pub/lib/models/api/metrics.dart",
    "chars": 571,
    "preview": "import 'package:json_annotation/json_annotation.dart';\n\npart 'metrics.g.dart';\n\n@JsonSerializable(createToJson: false)\nc"
  },
  {
    "path": "examples/pub/lib/models/api/package.dart",
    "chars": 907,
    "preview": "import 'package:json_annotation/json_annotation.dart';\nimport 'package:pubspec/pubspec.dart';\n\npart 'package.g.dart';\n\n@"
  },
  {
    "path": "examples/pub/lib/models/asset.dart",
    "chars": 531,
    "preview": "import 'package:isar/isar.dart';\n\npart 'asset.g.dart';\n\n@collection\nclass Asset {\n  Asset({\n    required this.package,\n "
  },
  {
    "path": "examples/pub/lib/models/package.dart",
    "chars": 4487,
    "preview": "import 'package:copy_with_extension/copy_with_extension.dart';\nimport 'package:isar/isar.dart';\nimport 'package:pub_app/"
  },
  {
    "path": "examples/pub/lib/package_manager.dart",
    "chars": 5843,
    "preview": "import 'package:flutter/foundation.dart';\nimport 'package:isar/isar.dart';\nimport 'package:pub_app/asset_loader.dart';\ni"
  },
  {
    "path": "examples/pub/lib/provider.dart",
    "chars": 3045,
    "preview": "// ignore_for_file: avoid_equals_and_hash_code_on_mutable_classes\n\nimport 'dart:async';\n\nimport 'package:dio/dio.dart';\n"
  },
  {
    "path": "examples/pub/lib/repository.dart",
    "chars": 1475,
    "preview": "// ignore_for_file: avoid_dynamic_calls\n\nimport 'package:dio/dio.dart';\nimport 'package:pub_app/models/api/metrics.dart'"
  },
  {
    "path": "examples/pub/lib/ui/app_bar.dart",
    "chars": 1848,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutter_riverpod.dart';\nimport 'package:flutter"
  },
  {
    "path": "examples/pub/lib/ui/detail_page.dart",
    "chars": 4962,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutter_riverpod.dart';\nimport 'package:pub_app"
  },
  {
    "path": "examples/pub/lib/ui/home_page.dart",
    "chars": 4523,
    "preview": "import 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutt"
  },
  {
    "path": "examples/pub/lib/ui/markdown_viewer.dart",
    "chars": 3914,
    "preview": "import 'package:clickup_fading_scroll/clickup_fading_scroll.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
  },
  {
    "path": "examples/pub/lib/ui/package_metadata.dart",
    "chars": 6585,
    "preview": "import 'package:clickup_fading_scroll/clickup_fading_scroll.dart';\nimport 'package:flutter/material.dart';\nimport 'packa"
  },
  {
    "path": "examples/pub/lib/ui/package_versions.dart",
    "chars": 1587,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutter_riverpod.dart';\nimport 'package:go_rout"
  },
  {
    "path": "examples/pub/lib/ui/publisher.dart",
    "chars": 610,
    "preview": "import 'package:flutter/material.dart';\n\nclass Publisher extends StatelessWidget {\n  const Publisher(this.publisher, {su"
  },
  {
    "path": "examples/pub/lib/ui/search.dart",
    "chars": 3355,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_svg/flutter_svg.dart';\nimport 'package:go_router/go_rout"
  },
  {
    "path": "examples/pub/lib/ui/search_page.dart",
    "chars": 4611,
    "preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_riverpod/flutter_riverpod.dart';\nimport 'package:go_rout"
  },
  {
    "path": "examples/pub/pubspec.yaml",
    "chars": 1159,
    "preview": "name: pub_app\ndescription: A new Flutter project.\npublish_to: \"none\"\nversion: 1.0.0+1\n\nenvironment:\n  sdk: \">=2.17.0 <3."
  },
  {
    "path": "packages/isar/.gitignore",
    "chars": 8,
    "preview": "*.g.dart"
  },
  {
    "path": "packages/isar/CHANGELOG.md",
    "chars": 15087,
    "preview": "## 3.1.8\n\n### Fixes\n\nFix Android release build on Flutter 3.24.0\n\n## 3.1.7\n\n### Fixes\n\nAdd apple privacy manifest\n\n## 3."
  },
  {
    "path": "packages/isar/LICENSE",
    "chars": 11341,
    "preview": "\n                                 Apache License\n                           Version 2.0, January 2004\n                  "
  },
  {
    "path": "packages/isar/README.md",
    "chars": 13738,
    "preview": "> 🚨 Please use the [renamed repository](https://github.com/isar-community/isar-community) (`isar-community/isar-communit"
  },
  {
    "path": "packages/isar/analysis_options.yaml",
    "chars": 281,
    "preview": "include: package:very_good_analysis/analysis_options.yaml\n\nanalyzer:\n  exclude:\n    - \"lib/src/native/bindings.dart\"\n\n  "
  },
  {
    "path": "packages/isar/example/README.md",
    "chars": 139,
    "preview": "## The fastest way to get started is by following the [Quickstart Guide](https://isar.dev/tutorials/quickstart.html)!\n\nH"
  },
  {
    "path": "packages/isar/lib/isar.dart",
    "chars": 1599,
    "preview": "library isar;\n\nimport 'dart:async';\nimport 'dart:convert';\nimport 'dart:developer';\nimport 'dart:typed_data';\n\nimport 'p"
  }
]

// ... and 488 more files (download for full content)

About this extraction

This page contains the full source code of the isar-community/isar GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 688 files (22.4 MB), approximately 691.4k tokens, and a symbol index with 2530 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!