



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-5c4e9fc574bf49f3.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-fb37c309e0603a69.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-0f910d8806d5761b.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-a7abd4d4c49ac593.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-5fc4c4a9cb41e596.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-ed0cee9214dedabd.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-afff6c53aef9b9d1.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-c409873d7987dffa.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-78a2491d538dab5a.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-c26b63d7c532d0a2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-a6f60cea68c08405.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-f66faf28b2ea18b6.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-6701f6218c53cf5b.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-7037fa46ae124d97.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-97df7784617ce1ea.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-9be9fe6313f476af.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-62747e27e61258dc.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-7a418ea859d1654d.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-72bd7d974b5ac1cc.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-4c5c0895f723f870.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_caches_react_shell","actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","actions_runners_react_shell","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_base_model_policy_row","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_early_task_provisioning","copilot_chat_persist_session_drafts","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_awps_batching","copilot_mission_control_early_stop","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_discussion_comment_trigger","copilot_swe_agent_discussion_opened_trigger","copilot_swe_agent_discussion_updated_trigger","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_assigned_trigger","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_issue_labeled_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_assigned_trigger","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_labeled_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_ready_for_review_trigger","copilot_swe_agent_pull_request_review_requested_trigger","copilot_swe_agent_pull_request_review_submitted_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_sub_issue_added_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset_redirect","dashboard_agents_module_auth_token_check","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","fgpat_permissions_selector_redesign","glc_code_quality_repo_settings_workflow_config","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_team_vs_personal","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_index_data_router","issues_lazy_load_comment_box_suggestions","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_default_issue_create_repository","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_header_feedback","milestone_closed_issues_prioritization","milestone_show_data_router","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_copilot_attribution_header","pull_request_overview_merge_control","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_navigation_shortcuts","pull_request_virtualization_image_estimate","pull_request_virtualization_loader_batching","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_logged_out_repository_header","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_declutter","repo_pulls_dashboard_ga","repo_pulls_dashboard_persistence","repo_pulls_dashboard_sidebar_links","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_nav_spark_models_removed","speculation_rules_ui_service","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","update_issue_suggestions","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-b752d992928a526c.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-9f688730c8670bcd.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-2f08c823163591a8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-633ad94fa06c334b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-0fb4c544a797ec0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-7c872b58ac9f1b39.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tp-7e9817cf5c068979.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-d5ac5c6c0ff82dad.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.bef03fb24bb03be8.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-52ed81112a548e10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e8810f64c443fb9b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-0417f617ad744a0d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-9da36843ba9d191d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-9a1160b939f2cd52.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3h-55903cf2303047ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hk-f1498fec45311acd.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7aa1ff0a0e750f41.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-1d800d09e9a8720a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-9697c1c8f5cbf523.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-82cb199fd0cf6516.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-9bf553744fe18335.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-5e0b3ae3c4036207.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-524a06aa946df6fc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-b1ee53c2200b172a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-7bf7b9d689fe3d10.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a9-ca3bc10b816bcc1f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-21ec1e439ee2d87c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-4c39f7195fc42cc8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/pb-53cfff089eaac51b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6n-afcf86ccabc4cad2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zj-4d9cf83cf08e1643.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-6991af5b3829ffe8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/nfv-a6c14301d3ea6d67.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b5-a2fde30ce0c692b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sw-9d0489dbf9a9c942.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ttf-7d5abe1b447ced2c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sj-c7a44023ee90d468.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0pd-c46d8dfae89c2b64.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-2198390a7f5cea63.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.255cab819a92f7e1.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-cea7728cfd2f3d62.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-8503588299651923.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-66e64888bc4615bb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qmp-c7cfba40cf5a93b0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-148a74299e5a01ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-a9404625ec30bbc7.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4u-8f9f1d6be01d6a22.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/s0-68d09e5e8a80cb94.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y5-0cb3f75cec297941.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-cd9039ad946274ad.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-00bd469c4017a543.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-27679061f16e1495.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/iu-2d03f5e6d4fdd54d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gru-2b0fac8887ff8c57.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/a0-234e967e7c6d22ce.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gz3-5bdfbfceac967bb6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/15m-64f3034430471048.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/1e-c15441bdb94d54ae.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-6ad9a0527a5d7afd.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi-3a42b8714e06c4d0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tu1-37e16844272ddefa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-ac66ededed061993.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gmn-1e5497c041b66231.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-d1b2a63015b5eb6d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2-e85522be441acf73.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-baf0a4193779952e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-87dce99c82a27004.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/zkm-116b01b8485bbe3f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-518d12c9e011601d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-947db365ea875cfa.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/14-8c7b4ad3c845664c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-2e7d883cb843e9e6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-38012819307fd539.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-6607da3b8b579202.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-f43eb09c2be69457.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-107312645ac2b72d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-fa7cdc0f7656d876.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p0l-fe491d943adf7508.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/v1e-d099d9fd21ad25e5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fn-7b298a45c55fb6fb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7cw-6e493a20eaaa04b5.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ok-290e4b9465ba9c5b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6d-ca6d584a0fd6368c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y8-e2f18f5a24733f3b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-3fd4a2e7dcbad8e2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/vjg-2874f95f389c4d3f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-2743729837dcb46b.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.501e99879e15a48e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.de2b1dde0494f261.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.11c24ad1d0aa48bd.module.css" />


  <title>EntityGraphQL/CHANGELOG.md at main · EntityGraphQL/EntityGraphQL · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:eec06441-f403-cb23-8e77-e4cbe442b756">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="D032:3EE2CF:BC9AA5:B3A85F:6AC776BC" data-pjax-transient="true"/><meta name="html-safe-nonce" content="9a5c8b370cd96c405b1c93ef67b469d8e0a2f091ed17fd47d343883da460539d" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMDMyOjNFRTJDRjpCQzlBQTU6QjNBODVGOjZBQzc3NkJDIiwidmlzaXRvcl9pZCI6IjUwNTg1MTg4NjU2MTgxMDYwNDQiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="5cdde0a79111f2baaca5178c927b713adfdd914dba29b887309e09aec7082d25" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:38514759" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="A GraphQL library for .NET. Contribute to EntityGraphQL/EntityGraphQL development by creating an account on GitHub.">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/6077497350b4459e1ad1c4df533f61463e1da75326d4a36a1e676083f403edad/EntityGraphQL/EntityGraphQL" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="EntityGraphQL/CHANGELOG.md at main · EntityGraphQL/EntityGraphQL" /><meta name="twitter:description" content="A GraphQL library for .NET. Contribute to EntityGraphQL/EntityGraphQL development by creating an account on GitHub." />
  <meta property="og:image" content="https://opengraph.githubassets.com/6077497350b4459e1ad1c4df533f61463e1da75326d4a36a1e676083f403edad/EntityGraphQL/EntityGraphQL" /><meta property="og:image:alt" content="A GraphQL library for .NET. Contribute to EntityGraphQL/EntityGraphQL development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="EntityGraphQL/CHANGELOG.md at main · EntityGraphQL/EntityGraphQL" /><meta property="og:url" content="https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md" /><meta property="og:description" content="A GraphQL library for .NET. Contribute to EntityGraphQL/EntityGraphQL development by creating an account on GitHub." />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="e522098cd81ce3951f93d525f1bab680d96d458ceaa79f4334f1a1acbd31325a" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="c4a65e47b0c850e1157ae8e66298070851d7e3b558038de5a3b4ff7a93e630ed" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="1ff3f1d4e1abd61f6f135b47d3b815e2f7169f8dd418f0118c6b1cf4de6cbc86" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="df1876f47a5ef2fa7fbfc80778d9090e7c16f6a2e8185c3ff473153a18e2b7c0" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/EntityGraphQL/EntityGraphQL git https://github.com/EntityGraphQL/EntityGraphQL.git">

  <meta name="octolytics-dimension-user_id" content="87887288" /><meta name="octolytics-dimension-user_login" content="EntityGraphQL" /><meta name="octolytics-dimension-repository_id" content="38514759" /><meta name="octolytics-dimension-repository_nwo" content="EntityGraphQL/EntityGraphQL" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="38514759" /><meta name="octolytics-dimension-repository_network_root_nwo" content="EntityGraphQL/EntityGraphQL" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="1d3d325175b005a7dd92cb845d32b422a23095f3" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/qc-1bbbe8787ea1cd4b.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-f8c407e82ebe6fc9.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.81950090fc5b508a.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-install-banner-partial-1dd5a92ada6adeee.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-install-banner-partial.2ba9251ec6f3a018.module.css" />

<react-partial
  partial-name="app-install-banner-partial"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>


          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-e468179ba7123a2e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/rwd-069fc3d9814ff9fe.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz-e662bc3745e171e7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jag-3559ee48016881a2.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-7f22b36f29a9dd94.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-4998592d21eb16f7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8i-756d611a52e5f265.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-fa45fa8444a09065.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.05b219cdb8e80c43.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/8i.779dd52a6bc5b0b6.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2FEntityGraphQL%2FEntityGraphQL%2Fblob%2Fmain%2FCHANGELOG.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=EntityGraphQL%2FEntityGraphQL","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md\",\"user_id\":null}}","auth_hydro_click_hmac":"9547e07a5a0d4c6ed287b4f383b41ca8eb07cd6c1888f14af18695631644d8bb","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2FEntityGraphQL%2FEntityGraphQL%2Fblob%2Fmain%2FCHANGELOG.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9547e07a5a0d4c6ed287b4f383b41ca8eb07cd6c1888f14af18695631644d8bb"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2FEntityGraphQL%2FEntityGraphQL%2Fblob%2Fmain%2FCHANGELOG.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9547e07a5a0d4c6ed287b4f383b41ca8eb07cd6c1888f14af18695631644d8bb"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=EntityGraphQL%2FEntityGraphQL" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="9547e07a5a0d4c6ed287b4f383b41ca8eb07cd6c1888f14af18695631644d8bb"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-8243b7a6-af16-42c3-aa2a-ad731f6b0e8e" aria-labelledby="tooltip-500e9ed0-c40e-4775-9241-0742cb40db12" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-500e9ed0-c40e-4775-9241-0742cb40db12" for="icon-button-8243b7a6-af16-42c3-aa2a-ad731f6b0e8e" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>






  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      
    


    








  

    <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ym-1a7ce813a378e1f7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mn-bb458474353a279e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t5-26d19272bbf73ca3.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2d5-9abb2f6ba5c935d0.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/24-b11e1c4108322883.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/mrn-12afac2ecd2be980.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dgq-bbf7670f9cdba2e0.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/7w-740b4e942974ccba.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/we-c9f93392098ad6c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/775-5adcc74216a7c5ae.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bn-fcef0645a47703fc.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xgw-6c6cb7b2ed77f52e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ge-ca1c0ba8656f9680.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9f-e543bc691db8262e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/global-nav-bar-ce0c7963290f892b.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.e4334163c54cccf5.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.501e99879e15a48e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-nav-bar.f20205647191e018.module.css" />

<react-partial
  partial-name="global-nav-bar"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"contextRegion":{"crumbs":[{"crumb_type":"organization","label":"EntityGraphQL","is_root":false,"href":"/EntityGraphQL"},{"crumb_type":"repository","label":"EntityGraphQL","is_root":false,"href":"/EntityGraphQL/EntityGraphQL"}],"localNavigation":[{"id":"code","icon":"code","label":"Code","href":"/EntityGraphQL/EntityGraphQL","selectedLinks":["repo_source","repo_downloads","repo_commits","repo_releases","repo_tags","repo_branches","repo_packages","repo_deployments","repo_attestations"],"popoverTarget":false,"commandId":"repositories:go-to-code","reactNav":{"appTarget":"code-view","anchor":"code-view-repo-link"},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"issues","icon":"issue-opened","label":"Issues","href":"/EntityGraphQL/EntityGraphQL/issues","selectedLinks":["repo_issues","repo_labels","repo_milestones"],"count":7,"popoverTarget":false,"commandId":"repositories:go-to-issues","reactNav":{"appTarget":"repo","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"pull-requests","icon":"git-pull-request","label":"Pull requests","href":"/EntityGraphQL/EntityGraphQL/pulls","selectedLinks":["repo_pulls","checks"],"count":12,"popoverTarget":false,"commandId":"repositories:go-to-pull-requests","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"actions","icon":"play","label":"Actions","href":"/EntityGraphQL/EntityGraphQL/actions","selectedLinks":["repo_actions"],"popoverTarget":false,"commandId":"repositories:go-to-actions","reactNav":{"appTarget":"actions-workflows","anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"security-and-quality","icon":"shield","label":"Security and quality","href":"/EntityGraphQL/EntityGraphQL/security","selectedLinks":["security","overview","alerts","policy","token_scanning","code_scanning"],"count":0,"popoverTarget":false,"commandId":"repositories:go-to-security","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}},{"id":"insights","icon":"graph","label":"Insights","href":"/EntityGraphQL/EntityGraphQL/pulse","selectedLinks":["repo_graphs","repo_contributors","dependency_graph","dependabot_updates","pulse","people","community"],"popoverTarget":false,"commandId":"repositories:go-to-insights","reactNav":{"appTarget":null,"anchor":null},"turboNav":{"frame":"repo-content-turbo-frame"}}],"localNavigationUpdateChannel":null,"selectedLink":"repo_source"},"owner":null,"headerLogo":{"href":"/","aria-label":"Homepage "},"notifications":{"indicatorMode":"disabled","websocketChannel":null,"fetchIndicatorSrc":"/notifications/indicator","fetchIndicatorEnabled":false},"issues":{"href":"/issues"},"pulls":{"href":"/pulls"},"contributedRepos":{"href":"/repos"},"copilot":{"show":false,"showAgentsButton":false,"showRelaunchAnnouncement":false,"copilotChatUrl":null,"copilotApiUrl":"https://api.githubcopilot.com"},"search":{"show":true,"showCommandPalette":false,"isSearchPage":false,"isJumpToSearch":false,"searchContext":{"scope":"repo:EntityGraphQL/EntityGraphQL","current_repo_name":"EntityGraphQL","current_repo_nwo":"EntityGraphQL/EntityGraphQL","current_repo_org":"EntityGraphQL","user_id":"EntityGraphQL"}},"commandPalette":null,"enterpriseBar":{"show":false},"globalTransactionalMessage":[],"payloadsUrl":"/_global-navigation/payloads.json?can_toggle_site_admin_and_employee_status=0\u0026is_admin_mode_on=0\u0026is_ui_opted_out=0\u0026show_ui_opt_out=0\u0026v=6","contextRegionUrl":"/_global-navigation/context-region.json"}}</script>
  <div data-target="react-partial.reactRoot"><header aria-label="Global navigation menu" data-component="Stack" class="GlobalNav styles-module__appHeader__YzYWk prc-Stack-Stack-UQ9k6" data-gap="none" data-direction="vertical" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="none"><div data-component="Stack" class="prc-Stack-Stack-UQ9k6" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="center" data-padding="none"><div data-testid="top-nav-center" data-component="Stack" class="styles-module__center__R3QRv styles-module__withLocalNavigation__rjTJ_ GlobalNavBar-module__loggedOut__Jv1rk prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="stretch" data-wrap="nowrap" data-justify="start" data-padding="normal"><nav class="styles-module__contextRegion__VbSp2 prc-Breadcrumbs-BreadcrumbsBase-3Gb-B" aria-label="Breadcrumbs" data-overflow="menu" data-variant="normal" data-component="Breadcrumbs"><ol class="prc-Breadcrumbs-BreadcrumbsList-BKjpe"><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/EntityGraphQL" data-discover="true"><span class="">EntityGraphQL</span></a></li><li class="prc-Breadcrumbs-ItemWrapper-k0NLn"><a class="styles-module__contextCrumb__IzGIq prc-Breadcrumbs-Item-jcraJ" data-component="Breadcrumbs.Item" href="/EntityGraphQL/EntityGraphQL" data-discover="true"><span class="styles-module__contextCrumbLast__tI2e3">EntityGraphQL</span></a></li></ol></nav></div><div data-testid="top-nav-right" data-component="Stack" class="styles-module__right__mlBQg styles-module__withLocalNavigation__rjTJ_ styles-module__rightWithResponsiveCreateButton__SKn2W prc-Stack-Stack-UQ9k6" data-gap="condensed" data-direction="horizontal" data-align="center" data-wrap="nowrap" data-justify="start" data-padding="normal"></div></div><h2 class="prc-src-InternalVisuallyHidden-2YaI6">Repository navigation</h2><nav class="prc-components-UnderlineWrapper-eT-Yj prc-UnderlineNav-UnderlineWrapper-GWONT LocalNavigation-module__LocalNavigation__b0Xc0" aria-label="Repository" data-variant="inset" data-overflow-mode="wrap" data-hide-icons-breakpoint="medium"><ul class="prc-UnderlineNav-ItemsList-oj8gN prc-components-UnderlineItemList-xKlKC" role="list"><li role="presentation" aria-hidden="true" class="prc-UnderlineNav-WrapSpacer--aLgz"></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a aria-current="page" data-tab-item="code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/EntityGraphQL/EntityGraphQL" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" data-content="Code">Code</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="issues" data-react-nav="repo" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/EntityGraphQL/EntityGraphQL/issues" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg></span><span data-component="text" data-content="Issues">Issues</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">7</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->7<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="pull-requests" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/EntityGraphQL/EntityGraphQL/pulls" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-pull-request" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg></span><span data-component="text" data-content="Pull requests">Pull requests</span><span data-component="counter"><span aria-hidden="true" data-variant="secondary" data-component="CounterLabel" class="prc-CounterLabel-CounterLabel-X-kRU">12</span><span class="prc-VisuallyHidden-VisuallyHidden-Q0qSB"> (<!-- -->12<!-- -->)</span></span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="actions" data-react-nav="actions-workflows" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/EntityGraphQL/EntityGraphQL/actions" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-play" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg></span><span data-component="text" data-content="Actions">Actions</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="security-and-quality" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/EntityGraphQL/EntityGraphQL/security" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg></span><span data-component="text" data-content="Security and quality">Security and quality</span></a></li><li class="prc-UnderlineNav-UnderlineNavItem-syRjR"><a data-tab-item="insights" data-turbo-frame="repo-content-turbo-frame" class="prc-components-UnderlineItem-7fP-n" href="/EntityGraphQL/EntityGraphQL/pulse" data-discover="true"><span data-component="icon"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-graph" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg></span><span data-component="text" data-content="Insights">Insights</span></a></li></ul><div class="prc-UnderlineNav-MoreButtonContainer-Dnrq6"><div class="prc-UnderlineNav-MoreButtonDivider-dN0a-"></div><button data-component="overflow-menu-button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk prc-UnderlineNav-MoreButton-Y8soj" data-loading="false" data-size="medium" data-variant="invisible" id="_R_2ktl_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3"><span>More<span class="prc-src-InternalVisuallyHidden-2YaI6"> items</span></span></span></span><span data-component="trailingAction" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></nav><div class="d-none"></div></header></div>
</react-partial>


  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"6.2.4","anchor":"624","htmlText":"6.2.4"},{"level":2,"text":"Fixes","anchor":"fixes","htmlText":"Fixes"},{"level":1,"text":"6.2.3","anchor":"623","htmlText":"6.2.3"},{"level":2,"text":"Fixes","anchor":"fixes-1","htmlText":"Fixes"},{"level":1,"text":"6.2.2","anchor":"622","htmlText":"6.2.2"},{"level":2,"text":"Fixes","anchor":"fixes-2","htmlText":"Fixes"},{"level":1,"text":"6.2.1","anchor":"621","htmlText":"6.2.1"},{"level":2,"text":"Fixes","anchor":"fixes-3","htmlText":"Fixes"},{"level":1,"text":"6.2.0","anchor":"620","htmlText":"6.2.0"},{"level":2,"text":"Changes","anchor":"changes","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-4","htmlText":"Fixes"},{"level":1,"text":"6.1.7","anchor":"617","htmlText":"6.1.7"},{"level":2,"text":"Fixes","anchor":"fixes-5","htmlText":"Fixes"},{"level":1,"text":"6.1.6","anchor":"616","htmlText":"6.1.6"},{"level":2,"text":"Fixes","anchor":"fixes-6","htmlText":"Fixes"},{"level":1,"text":"6.1.5","anchor":"615","htmlText":"6.1.5"},{"level":2,"text":"Fixes","anchor":"fixes-7","htmlText":"Fixes"},{"level":1,"text":"6.1.4","anchor":"614","htmlText":"6.1.4"},{"level":2,"text":"Fixes","anchor":"fixes-8","htmlText":"Fixes"},{"level":1,"text":"6.1.3","anchor":"613","htmlText":"6.1.3"},{"level":2,"text":"Fixes","anchor":"fixes-9","htmlText":"Fixes"},{"level":1,"text":"6.1.2","anchor":"612","htmlText":"6.1.2"},{"level":2,"text":"Fixes","anchor":"fixes-10","htmlText":"Fixes"},{"level":1,"text":"6.1.1","anchor":"611","htmlText":"6.1.1"},{"level":2,"text":"Fixes","anchor":"fixes-11","htmlText":"Fixes"},{"level":1,"text":"6.1.0","anchor":"610","htmlText":"6.1.0"},{"level":2,"text":"Changes","anchor":"changes-1","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-12","htmlText":"Fixes"},{"level":1,"text":"6.0.1","anchor":"601","htmlText":"6.0.1"},{"level":2,"text":"Fixes","anchor":"fixes-13","htmlText":"Fixes"},{"level":1,"text":"6.0.0","anchor":"600","htmlText":"6.0.0"},{"level":2,"text":"6.0 Highlights","anchor":"60-highlights","htmlText":"6.0 Highlights"},{"level":2,"text":"Breaking Changes from Beta 9","anchor":"breaking-changes-from-beta-9","htmlText":"Breaking Changes from Beta 9"},{"level":2,"text":"Changes since Beta 9","anchor":"changes-since-beta-9","htmlText":"Changes since Beta 9"},{"level":2,"text":"Bug Fixes since Beta 9","anchor":"bug-fixes-since-beta-9","htmlText":"Bug Fixes since Beta 9"},{"level":1,"text":"6.0.0-beta9","anchor":"600-beta9","htmlText":"6.0.0-beta9"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-2","htmlText":"Changes"},{"level":2,"text":"Bug Fixes","anchor":"bug-fixes","htmlText":"Bug Fixes"},{"level":1,"text":"6.0.0-beta8","anchor":"600-beta8","htmlText":"6.0.0-beta8"},{"level":2,"text":"New Features","anchor":"new-features","htmlText":"New Features"},{"level":2,"text":"Changes","anchor":"changes-3","htmlText":"Changes"},{"level":1,"text":"6.0.0-beta7","anchor":"600-beta7","htmlText":"6.0.0-beta7"},{"level":2,"text":"Bug Fixes","anchor":"bug-fixes-1","htmlText":"Bug Fixes"},{"level":1,"text":"6.0.0-beta6","anchor":"600-beta6","htmlText":"6.0.0-beta6"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-1","htmlText":"Breaking Changes"},{"level":1,"text":"6.0.0-beta5","anchor":"600-beta5","htmlText":"6.0.0-beta5"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-2","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-4","htmlText":"Changes"},{"level":1,"text":"6.0.0-beta4","anchor":"600-beta4","htmlText":"6.0.0-beta4"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-3","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-5","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-14","htmlText":"Fixes"},{"level":1,"text":"6.0.0-beta3","anchor":"600-beta3","htmlText":"6.0.0-beta3"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-4","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-6","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-15","htmlText":"Fixes"},{"level":1,"text":"6.0.0-beta2","anchor":"600-beta2","htmlText":"6.0.0-beta2"},{"level":2,"text":"Changes","anchor":"changes-7","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-16","htmlText":"Fixes"},{"level":1,"text":"6.0.0-beta1","anchor":"600-beta1","htmlText":"6.0.0-beta1"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-5","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-8","htmlText":"Changes"},{"level":1,"text":"Fixes","anchor":"fixes-17","htmlText":"Fixes"},{"level":1,"text":"5.7.3","anchor":"573","htmlText":"5.7.3"},{"level":2,"text":"Fixes","anchor":"fixes-18","htmlText":"Fixes"},{"level":1,"text":"5.7.2","anchor":"572","htmlText":"5.7.2"},{"level":2,"text":"Fixes","anchor":"fixes-19","htmlText":"Fixes"},{"level":1,"text":"5.7.1","anchor":"571","htmlText":"5.7.1"},{"level":2,"text":"Fixes","anchor":"fixes-20","htmlText":"Fixes"},{"level":1,"text":"5.7.0","anchor":"570","htmlText":"5.7.0"},{"level":2,"text":"Changes","anchor":"changes-9","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-21","htmlText":"Fixes"},{"level":1,"text":"5.6.1","anchor":"561","htmlText":"5.6.1"},{"level":2,"text":"Fixes","anchor":"fixes-22","htmlText":"Fixes"},{"level":1,"text":"5.6.0","anchor":"560","htmlText":"5.6.0"},{"level":2,"text":"Changes","anchor":"changes-10","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-23","htmlText":"Fixes"},{"level":1,"text":"5.5.3","anchor":"553","htmlText":"5.5.3"},{"level":2,"text":"Fixes","anchor":"fixes-24","htmlText":"Fixes"},{"level":1,"text":"5.5.2","anchor":"552","htmlText":"5.5.2"},{"level":2,"text":"Fixes","anchor":"fixes-25","htmlText":"Fixes"},{"level":1,"text":"5.5.1","anchor":"551","htmlText":"5.5.1"},{"level":2,"text":"Fixes","anchor":"fixes-26","htmlText":"Fixes"},{"level":1,"text":"5.5.0","anchor":"550","htmlText":"5.5.0"},{"level":2,"text":"Changes","anchor":"changes-11","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-27","htmlText":"Fixes"},{"level":1,"text":"5.4.6","anchor":"546","htmlText":"5.4.6"},{"level":2,"text":"Fixes","anchor":"fixes-28","htmlText":"Fixes"},{"level":1,"text":"5.4.5","anchor":"545","htmlText":"5.4.5"},{"level":2,"text":"Fixes","anchor":"fixes-29","htmlText":"Fixes"},{"level":1,"text":"5.4.4","anchor":"544","htmlText":"5.4.4"},{"level":2,"text":"Fixes","anchor":"fixes-30","htmlText":"Fixes"},{"level":1,"text":"5.4.3","anchor":"543","htmlText":"5.4.3"},{"level":2,"text":"Fixes","anchor":"fixes-31","htmlText":"Fixes"},{"level":1,"text":"5.4.2","anchor":"542","htmlText":"5.4.2"},{"level":2,"text":"Fixes","anchor":"fixes-32","htmlText":"Fixes"},{"level":1,"text":"5.4.1","anchor":"541","htmlText":"5.4.1"},{"level":2,"text":"Fixes","anchor":"fixes-33","htmlText":"Fixes"},{"level":1,"text":"5.4.0","anchor":"540","htmlText":"5.4.0"},{"level":2,"text":"Changes","anchor":"changes-12","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-34","htmlText":"Fixes"},{"level":1,"text":"5.3.0","anchor":"530","htmlText":"5.3.0"},{"level":2,"text":"Changes","anchor":"changes-13","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-35","htmlText":"Fixes"},{"level":1,"text":"5.2.1","anchor":"521","htmlText":"5.2.1"},{"level":2,"text":"Fixes","anchor":"fixes-36","htmlText":"Fixes"},{"level":1,"text":"5.2.0","anchor":"520","htmlText":"5.2.0"},{"level":2,"text":"Changes","anchor":"changes-14","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-37","htmlText":"Fixes"},{"level":1,"text":"5.2.0-beta2","anchor":"520-beta2","htmlText":"5.2.0-beta2"},{"level":2,"text":"Fixes","anchor":"fixes-38","htmlText":"Fixes"},{"level":2,"text":"Changes","anchor":"changes-15","htmlText":"Changes"},{"level":1,"text":"5.2.0-beta1","anchor":"520-beta1","htmlText":"5.2.0-beta1"},{"level":2,"text":"Changes","anchor":"changes-16","htmlText":"Changes"},{"level":1,"text":"5.1.1","anchor":"511","htmlText":"5.1.1"},{"level":2,"text":"Fixes","anchor":"fixes-39","htmlText":"Fixes"},{"level":1,"text":"5.1.0","anchor":"510","htmlText":"5.1.0"},{"level":2,"text":"Changes","anchor":"changes-17","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-40","htmlText":"Fixes"},{"level":1,"text":"5.0.1","anchor":"501","htmlText":"5.0.1"},{"level":2,"text":"Fixes","anchor":"fixes-41","htmlText":"Fixes"},{"level":1,"text":"5.0.0","anchor":"500","htmlText":"5.0.0"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-6","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-18","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-42","htmlText":"Fixes"},{"level":1,"text":"5.0.0-beta1","anchor":"500-beta1","htmlText":"5.0.0-beta1"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-7","htmlText":"Breaking Changes"},{"level":2,"text":"Changes","anchor":"changes-19","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-43","htmlText":"Fixes"},{"level":1,"text":"4.3.1","anchor":"431","htmlText":"4.3.1"},{"level":2,"text":"Fixes","anchor":"fixes-44","htmlText":"Fixes"},{"level":1,"text":"4.3.0","anchor":"430","htmlText":"4.3.0"},{"level":2,"text":"Changes","anchor":"changes-20","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-45","htmlText":"Fixes"},{"level":1,"text":"4.2.1","anchor":"421","htmlText":"4.2.1"},{"level":2,"text":"Fixes","anchor":"fixes-46","htmlText":"Fixes"},{"level":1,"text":"4.2.0","anchor":"420","htmlText":"4.2.0"},{"level":2,"text":"Changes","anchor":"changes-21","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-47","htmlText":"Fixes"},{"level":1,"text":"4.1.2","anchor":"412","htmlText":"4.1.2"},{"level":2,"text":"Fixes","anchor":"fixes-48","htmlText":"Fixes"},{"level":1,"text":"4.1.1","anchor":"411","htmlText":"4.1.1"},{"level":2,"text":"Fixes","anchor":"fixes-49","htmlText":"Fixes"},{"level":1,"text":"4.1.0","anchor":"410","htmlText":"4.1.0"},{"level":2,"text":"Changes","anchor":"changes-22","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-50","htmlText":"Fixes"},{"level":1,"text":"4.0.1","anchor":"401","htmlText":"4.0.1"},{"level":2,"text":"Fixes","anchor":"fixes-51","htmlText":"Fixes"},{"level":1,"text":"4.0.0","anchor":"400","htmlText":"4.0.0"},{"level":2,"text":"Fixes","anchor":"fixes-52","htmlText":"Fixes"},{"level":1,"text":"4.0.0-beta2","anchor":"400-beta2","htmlText":"4.0.0-beta2"},{"level":2,"text":"Fixes","anchor":"fixes-53","htmlText":"Fixes"},{"level":2,"text":"Breaking Changes","anchor":"breaking-changes-8","htmlText":"Breaking Changes"},{"level":1,"text":"4.0.0-beta1","anchor":"400-beta1","htmlText":"4.0.0-beta1"},{"level":2,"text":"Breaking changes","anchor":"breaking-changes-9","htmlText":"Breaking changes"},{"level":2,"text":"Changes","anchor":"changes-23","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-54","htmlText":"Fixes"},{"level":1,"text":"3.0.5","anchor":"305","htmlText":"3.0.5"},{"level":2,"text":"Fixes","anchor":"fixes-55","htmlText":"Fixes"},{"level":1,"text":"3.0.4","anchor":"304","htmlText":"3.0.4"},{"level":2,"text":"Fixes","anchor":"fixes-56","htmlText":"Fixes"},{"level":1,"text":"3.0.3","anchor":"303","htmlText":"3.0.3"},{"level":2,"text":"Fixes","anchor":"fixes-57","htmlText":"Fixes"},{"level":1,"text":"3.0.2","anchor":"302","htmlText":"3.0.2"},{"level":2,"text":"Fixes","anchor":"fixes-58","htmlText":"Fixes"},{"level":1,"text":"3.0.1","anchor":"301","htmlText":"3.0.1"},{"level":2,"text":"Fixes","anchor":"fixes-59","htmlText":"Fixes"},{"level":1,"text":"3.0.0","anchor":"300","htmlText":"3.0.0"},{"level":2,"text":"Breaking changes","anchor":"breaking-changes-10","htmlText":"Breaking changes"},{"level":2,"text":"Changes","anchor":"changes-24","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-60","htmlText":"Fixes"},{"level":1,"text":"2.3.2","anchor":"232","htmlText":"2.3.2"},{"level":2,"text":"Fixes","anchor":"fixes-61","htmlText":"Fixes"},{"level":1,"text":"2.3.1","anchor":"231","htmlText":"2.3.1"},{"level":2,"text":"Fixes","anchor":"fixes-62","htmlText":"Fixes"},{"level":1,"text":"2.3.0","anchor":"230","htmlText":"2.3.0"},{"level":2,"text":"Changes","anchor":"changes-25","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-63","htmlText":"Fixes"},{"level":1,"text":"2.2.0","anchor":"220","htmlText":"2.2.0"},{"level":2,"text":"Changes","anchor":"changes-26","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-64","htmlText":"Fixes"},{"level":1,"text":"2.1.5","anchor":"215","htmlText":"2.1.5"},{"level":1,"text":"2.1.4","anchor":"214","htmlText":"2.1.4"},{"level":1,"text":"2.1.3","anchor":"213","htmlText":"2.1.3"},{"level":1,"text":"2.1.2","anchor":"212","htmlText":"2.1.2"},{"level":1,"text":"2.1.1","anchor":"211","htmlText":"2.1.1"},{"level":1,"text":"2.1.0","anchor":"210","htmlText":"2.1.0"},{"level":1,"text":"2.0.3","anchor":"203","htmlText":"2.0.3"},{"level":1,"text":"2.0.2","anchor":"202","htmlText":"2.0.2"},{"level":1,"text":"2.0.1","anchor":"201","htmlText":"2.0.1"},{"level":1,"text":"2.0.0","anchor":"200","htmlText":"2.0.0"},{"level":2,"text":"Breaking changes","anchor":"breaking-changes-11","htmlText":"Breaking changes"},{"level":2,"text":"Changes","anchor":"changes-27","htmlText":"Changes"},{"level":2,"text":"Fixes","anchor":"fixes-65","htmlText":"Fixes"},{"level":1,"text":"1.2.1","anchor":"121","htmlText":"1.2.1"},{"level":1,"text":"1.2.0","anchor":"120","htmlText":"1.2.0"},{"level":1,"text":"1.1.2","anchor":"112","htmlText":"1.1.2"},{"level":1,"text":"1.1.1","anchor":"111","htmlText":"1.1.1"},{"level":1,"text":"1.1.0","anchor":"110","htmlText":"1.1.0"},{"level":2,"text":"Obsolete - will be removed 2.x","anchor":"obsolete---will-be-removed-2x","htmlText":"Obsolete - will be removed 2.x"},{"level":1,"text":"1.0.3","anchor":"103","htmlText":"1.0.3"},{"level":1,"text":"1.0.2","anchor":"102","htmlText":"1.0.2"},{"level":1,"text":"1.0.1","anchor":"101","htmlText":"1.0.1"},{"level":1,"text":"1.0.0","anchor":"100","htmlText":"1.0.0"},{"level":1,"text":"0.70.0","anchor":"0700","htmlText":"0.70.0"},{"level":1,"text":"0.69.0","anchor":"0690","htmlText":"0.69.0"},{"level":1,"text":"0.68.1","anchor":"0681","htmlText":"0.68.1"},{"level":1,"text":"0.68.0","anchor":"0680","htmlText":"0.68.0"},{"level":1,"text":"0.67.0","anchor":"0670","htmlText":"0.67.0"},{"level":1,"text":"0.66.1","anchor":"0661","htmlText":"0.66.1"},{"level":1,"text":"0.66.0","anchor":"0660","htmlText":"0.66.0"},{"level":2,"text":"Notes of services fix","anchor":"notes-of-services-fix","htmlText":"Notes of services fix"},{"level":1,"text":"0.65.0","anchor":"0650","htmlText":"0.65.0"},{"level":1,"text":"0.64.0","anchor":"0640","htmlText":"0.64.0"},{"level":1,"text":"0.63.0","anchor":"0630","htmlText":"0.63.0"},{"level":2,"text":"0.63.0-beta1 to 0.63.0-beta2","anchor":"0630-beta1-to-0630-beta2","htmlText":"0.63.0-beta1 to 0.63.0-beta2"},{"level":1,"text":"0.62.0","anchor":"0620","htmlText":"0.62.0"},{"level":1,"text":"0.61.0","anchor":"0610","htmlText":"0.61.0"},{"level":1,"text":"0.60.0","anchor":"0600","htmlText":"0.60.0"},{"level":1,"text":"0.50.1","anchor":"0501","htmlText":"0.50.1"},{"level":1,"text":"0.50.0","anchor":"0500","htmlText":"0.50.0"},{"level":1,"text":"0.50.0-beta1","anchor":"0500-beta1","htmlText":"0.50.0-beta1"},{"level":1,"text":"0.40.0","anchor":"0400","htmlText":"0.40.0"},{"level":1,"text":"0.32.1","anchor":"0321","htmlText":"0.32.1"},{"level":1,"text":"0.32.0","anchor":"0320","htmlText":"0.32.0"},{"level":1,"text":"0.31.0","anchor":"0310","htmlText":"0.31.0"},{"level":1,"text":"0.30.0","anchor":"0300","htmlText":"0.30.0"},{"level":1,"text":"0.29.0","anchor":"0290","htmlText":"0.29.0"},{"level":1,"text":"0.28.2","anchor":"0282","htmlText":"0.28.2"},{"level":1,"text":"0.28.1","anchor":"0281","htmlText":"0.28.1"},{"level":1,"text":"0.28.0","anchor":"0280","htmlText":"0.28.0"},{"level":1,"text":"0.27.2","anchor":"0272","htmlText":"0.27.2"},{"level":1,"text":"0.27.1","anchor":"0271","htmlText":"0.27.1"},{"level":1,"text":"0.27.0","anchor":"0270","htmlText":"0.27.0"},{"level":1,"text":"0.26.0","anchor":"0260","htmlText":"0.26.0"},{"level":1,"text":"0.25.0","anchor":"0250","htmlText":"0.25.0"},{"level":1,"text":"0.24.0","anchor":"0240","htmlText":"0.24.0"},{"level":1,"text":"0.23.3","anchor":"0233","htmlText":"0.23.3"},{"level":1,"text":"0.23.2","anchor":"0232","htmlText":"0.23.2"},{"level":1,"text":"0.23.1","anchor":"0231","htmlText":"0.23.1"},{"level":1,"text":"0.23.0","anchor":"0230","htmlText":"0.23.0"},{"level":1,"text":"0.22.0","anchor":"0220","htmlText":"0.22.0"},{"level":1,"text":"0.21.0","anchor":"0210","htmlText":"0.21.0"},{"level":1,"text":"0.20.0","anchor":"0200","htmlText":"0.20.0"},{"level":1,"text":"0.19.1","anchor":"0191","htmlText":"0.19.1"},{"level":1,"text":"0.19.0","anchor":"0190","htmlText":"0.19.0"},{"level":1,"text":"0.18.4","anchor":"0184","htmlText":"0.18.4"},{"level":1,"text":"0.18.3","anchor":"0183","htmlText":"0.18.3"},{"level":1,"text":"0.18.2","anchor":"0182","htmlText":"0.18.2"},{"level":1,"text":"0.18.1","anchor":"0181","htmlText":"0.18.1"},{"level":1,"text":"0.18.0","anchor":"0180","htmlText":"0.18.0"},{"level":1,"text":"0.17.0","anchor":"0170","htmlText":"0.17.0"},{"level":1,"text":"0.16.2","anchor":"0162","htmlText":"0.16.2"},{"level":1,"text":"0.16.1","anchor":"0161","htmlText":"0.16.1"},{"level":1,"text":"0.16.0","anchor":"0160","htmlText":"0.16.0"},{"level":1,"text":"0.15.8","anchor":"0158","htmlText":"0.15.8"},{"level":1,"text":"0.15.7","anchor":"0157","htmlText":"0.15.7"},{"level":1,"text":"0.15.6","anchor":"0156","htmlText":"0.15.6"},{"level":1,"text":"0.15.5","anchor":"0155","htmlText":"0.15.5"},{"level":1,"text":"0.15.4","anchor":"0154","htmlText":"0.15.4"},{"level":1,"text":"0.15.3","anchor":"0153","htmlText":"0.15.3"},{"level":1,"text":"0.15.2","anchor":"0152","htmlText":"0.15.2"},{"level":1,"text":"0.15.1","anchor":"0151","htmlText":"0.15.1"},{"level":1,"text":"0.15","anchor":"015","htmlText":"0.15"},{"level":1,"text":"0.14.4","anchor":"0144","htmlText":"0.14.4"},{"level":1,"text":"0.14.3","anchor":"0143","htmlText":"0.14.3"},{"level":1,"text":"0.14.2","anchor":"0142","htmlText":"0.14.2"},{"level":1,"text":"0.14.1","anchor":"0141","htmlText":"0.14.1"},{"level":1,"text":"0.14.0","anchor":"0140","htmlText":"0.14.0"},{"level":1,"text":"0.13.1","anchor":"0131","htmlText":"0.13.1"},{"level":1,"text":"0.13.0","anchor":"0130","htmlText":"0.13.0"},{"level":1,"text":"0.12.1","anchor":"0121","htmlText":"0.12.1"},{"level":1,"text":"0.12.0","anchor":"0120","htmlText":"0.12.0"},{"level":1,"text":"0.11.0","anchor":"0110","htmlText":"0.11.0"},{"level":1,"text":"0.10.1","anchor":"0101","htmlText":"0.10.1"},{"level":1,"text":"0.10.0","anchor":"0100","htmlText":"0.10.0"},{"level":1,"text":"0.9.4","anchor":"094","htmlText":"0.9.4"},{"level":1,"text":"0.9.3","anchor":"093","htmlText":"0.9.3"},{"level":1,"text":"0.9.2","anchor":"092","htmlText":"0.9.2"},{"level":1,"text":"0.9.1","anchor":"091","htmlText":"0.9.1"},{"level":1,"text":"0.9.0","anchor":"090","htmlText":"0.9.0"},{"level":1,"text":"0.8.0","anchor":"080","htmlText":"0.8.0"},{"level":1,"text":"0.7.0","anchor":"070","htmlText":"0.7.0"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.2.4\u003c/h1\u003e\u003ca id=\"user-content-624\" class=\"anchor\" aria-label=\"Permalink: 6.2.4\" href=\"#624\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eNo generic method 'SelectWithNullCheck'\u003c/code\u003e for a sub-selection on a field returning \u003ccode\u003eIAsyncEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e or \u003ccode\u003eValueTask\u0026lt;TCollection\u0026gt;\u003c/code\u003e - \u003ccode\u003e{ people { tags { name } } }\u003c/code\u003e where \u003ccode\u003etags\u003c/code\u003e has a \u003ccode\u003eResolveAsync\u003c/code\u003e returning either. \u003ccode\u003eMakeSelectWithDynamicType\u003c/code\u003e emits a \u003ccode\u003eSelectWithNullCheck\u003c/code\u003e whose overload is resolved by the exact type of the expression it projects, and only \u003ccode\u003eIEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e and \u003ccode\u003eTask\u0026lt;IEnumerable\u0026lt;T\u0026gt;\u0026gt;\u003c/code\u003e had one. \u003ccode\u003eIAsyncEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e now has an overload of its own that projects lazily, so the stream is still buffered by the engine with the request's \u003ccode\u003eCancellationToken\u003c/code\u003e rather than being enumerated during compilation, and \u003ccode\u003eValueTask\u0026lt;T\u0026gt;\u003c/code\u003e is handed on as the \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e the rest of the pipeline already handles, next to the existing \u003ccode\u003eTask\u0026lt;TCollection\u0026gt;\u003c/code\u003e normalization.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eObject of type 'Dynamic_...' cannot be converted to type 'Dynamic_...'\u003c/code\u003e when buffering an \u003ccode\u003eIAsyncEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e whose items are rebuilt - the list rebuild mismatch below, one layer down. \u003ccode\u003eBufferAsyncEnumerable\u003c/code\u003e created a \u003ccode\u003eList\u0026lt;T\u0026gt;\u003c/code\u003e from the declared element type before resolving anything and added each resolved item to it, so an item rebuilt to carry an awaited member no longer fit. Items are now resolved first and the list type chosen from them, which is what the \u003ccode\u003eIEnumerable\u003c/code\u003e path already did - both paths now share that step. The same guard added above for \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e and \u003ccode\u003eValueTask\u0026lt;T\u0026gt;\u003c/code\u003e in \u003ccode\u003eGetResolvedFieldType\u003c/code\u003e applies to \u003ccode\u003eIAsyncEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e, which is reachable now that these shapes compile.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eObject of type 'System.Collections.Generic.List\u003c/code\u003e1[System.Object]' cannot be converted to type 'System.Collections.Generic.IEnumerable\u003ccode\u003e1[Dynamic_...]'\u003c/code\u003e for a query selecting an async service field below an async service \u003cem\u003elist\u003c/em\u003e field - \u003ccode\u003e{ people { tags { name label } } }\u003c/code\u003e where \u003ccode\u003etags\u003c/code\u003e has a \u003ccode\u003eResolveAsync\u003c/code\u003e returning a list and \u003ccode\u003elabel\u003c/code\u003e on the item type has one of its own. Resolving an item of the outer list rebuilds it, because the item projection holds an async member, so the finished list no longer holds the item type the outer field was declared with and correctly falls back to \u003ccode\u003eList\u0026lt;object\u0026gt;\u003c/code\u003e. \u003ccode\u003eGetResolvedFieldType\u003c/code\u003e unwrapped \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e to \u003ccode\u003eT\u003c/code\u003e unconditionally, so the rebuilt parent still declared the member \u003ccode\u003eIEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e and setting the resolved list on it threw. \u003ccode\u003eT\u003c/code\u003e is now only kept when the resolved value still is one, otherwise the resolved value's own type is used - which is what the non-async path in the same method already did. \u003ccode\u003eValueTask\u0026lt;T\u0026gt;\u003c/code\u003e had the same hole and takes the same guard.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.2.3\u003c/h1\u003e\u003ca id=\"user-content-623\" class=\"anchor\" aria-label=\"Permalink: 6.2.3\" href=\"#623\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-1\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eAn item with the same key has already been added\u003c/code\u003e when a service field's resolver builds an object from more than one context member as an argument to the service call - \u003ccode\u003e(ctx, srv) =\u0026gt; srv.Get(new Key(ctx.A, ctx.B))\u003c/code\u003e. \u003ccode\u003eExpressionExtractor\u003c/code\u003e credited both member reads to the enclosing construction rather than to themselves, so it emitted the same \u003ccode\u003eExpression\u003c/code\u003e instance twice under the one name and \u003ccode\u003eExpressionReplacer\u003c/code\u003e added each of them to a dictionary keyed by node identity. A construction is now walked through rather than treated as a leaf, so each read is extracted on its own. \u003ccode\u003eExpressionReplacer\u003c/code\u003e also tolerates a repeated expression, which the extractor still emits for other shapes (a conditional argument, where the branch reads are both credited to the conditional).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.2.2\u003c/h1\u003e\u003ca id=\"user-content-622\" class=\"anchor\" aria-label=\"Permalink: 6.2.2\" href=\"#622\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-2\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed a field whose dotnet type is a nullable value type (\u003ccode\u003eInstant?\u003c/code\u003e, \u003ccode\u003eDateTime?\u003c/code\u003e, \u003ccode\u003eint?\u003c/code\u003e) resolving to \u003ccode\u003edefault(T)\u003c/code\u003e instead of \u003ccode\u003enull\u003c/code\u003e, for a query that also selects an async field. Results are rebuilt after any async field is awaited, and each member's new type was taken from the resolved value's runtime type.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.2.1\u003c/h1\u003e\u003ca id=\"user-content-621\" class=\"anchor\" aria-label=\"Permalink: 6.2.1\" href=\"#621\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-3\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-3\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eIsNullable()\u003c/code\u003e (and any other change to a field's return type) on a field whose dotnet type has an \u003ccode\u003eAddTypeMapping\u003c/code\u003e leaking to every other field of that type. The mapping's \u003ccode\u003eGqlTypeInfo\u003c/code\u003e was handed out as the field's own \u003ccode\u003eReturnType\u003c/code\u003e, and that object is mutable - \u003ccode\u003eIsNullable()\u003c/code\u003e writes to it - so one \u003ccode\u003eAddField(...).IsNullable(true)\u003c/code\u003e rewrote the registered mapping itself, changing every field already using it and every field added afterwards. Fields now get a copy, so an explicit \u003ccode\u003eIsNullable()\u003c/code\u003e after \u003ccode\u003eAddField()\u003c/code\u003e applies to that field only and the mapping stays the default it describes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.2.0\u003c/h1\u003e\u003ca id=\"user-content-620\" class=\"anchor\" aria-label=\"Permalink: 6.2.0\" href=\"#620\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eA resolver can now be told what the engine will read off the objects it returns, so it can fetch only that instead of everything - the point of batching with \u003ccode\u003eResolveBulk\u003c/code\u003e when the data comes from another database or service. Take an \u003ccode\u003eIFieldSelection\u003c/code\u003e parameter and the engine supplies it, the way it supplies \u003ccode\u003eCancellationToken\u003c/code\u003e and \u003ccode\u003eQueryRequestContext\u003c/code\u003e; new two-service \u003ccode\u003eResolveBulk\u003c/code\u003e/\u003ccode\u003eResolveBulkAsync\u003c/code\u003e overloads let a loader take it alongside its own service. It is not the caller's selection set: a selected field that is itself resolved from a service is replaced by the member its resolver reads, nested objects come through as paths (\u003ccode\u003eAddress.City\u003c/code\u003e), \u003ccode\u003e@skip\u003c/code\u003e/\u003ccode\u003e@include\u003c/code\u003e are applied, fragments are expanded, aliases collapse, \u003ccode\u003e__typename\u003c/code\u003e is excluded, and one load is told the union of every place the field is selected. See \u003ca href=\"https://entitygraphql.github.io/schema-creation/other-data-sources#fetching-only-the-fields-that-will-be-used\" rel=\"nofollow\"\u003eFetching only the fields that will be used\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eNew \u003ccode\u003e[GraphQLFromContext]\u003c/code\u003e on a \u003ccode\u003e[GraphQLField]\u003c/code\u003e method parameter binds it to a member of the field's context instead of exposing it as a GraphQL argument. This lets a \u003ccode\u003estatic\u003c/code\u003e method with a body - one that loops, branches or \u003ccode\u003eawait\u003c/code\u003es, where an \u003ccode\u003eExpression\u0026lt;Func\u0026lt;\u0026gt;\u0026gt;\u003c/code\u003e cannot be used - be a service field on a type other than the root query type: the declared members (navigation properties included) are selected in the database-bound pass and the call is rewritten against that result, the same as \u003ccode\u003e.Resolve()\u003c/code\u003e dependency extraction, so nothing else on the entity is selected. Every dependency must be declared: a parameter taking the whole entity is rejected at schema build, as it would select the entity itself and a body reading a navigation property would silently see an empty collection. Instance methods on the entity remain unsupported - the entity is the call target and does not survive that pass - and now fail with a message naming the alternatives instead of an \u003ccode\u003eArgumentException\u003c/code\u003e about a \u003ccode\u003eDynamic_\u003c/code\u003e type. See \u003ca href=\"https://entitygraphql.github.io/schema-creation/other-data-sources#declaring-what-a-method-reads-from-the-context\" rel=\"nofollow\"\u003eDeclaring what a method reads from the context\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eA field with a \u003ccode\u003eResolveBulk\u003c/code\u003e/\u003ccode\u003eResolveBulkAsync\u003c/code\u003e resolver that has to resolve per item instead of bulk loading now logs a warning to the \u003ccode\u003eILogger\u003c/code\u003e the schema was built with, naming the field and why the bulk load could not run - the query shape usually controls it, so it is something a caller can act on. Turn it off with \u003ccode\u003eExecutionOptions.WarnOnBulkResolverFallback = false\u003c/code\u003e. \u003ccode\u003eISchemaProvider.Logger\u003c/code\u003e is new (exceptions keep going through \u003ccode\u003eLogException\u003c/code\u003e); it returns null by default so existing implementations are unaffected.\u003c/li\u003e\n\u003cli\u003eNew \u003ccode\u003efield.SetMaxAliases(n)\u003c/code\u003e caps how many times a single field may be aliased in one operation, alongside the document-wide \u003ccode\u003eExecutionOptions.MaxFieldAliases\u003c/code\u003e. Useful for the few fields a batched-alias attack would target (a login mutation, an expensive report) without tightening the limit for everything. Counts aliased selections of that field, fragment contents included. \u003ccode\u003eQueryLimitExceededContext.FieldName\u003c/code\u003e names the field for report-only mode. See \u003ca href=\"https://entitygraphql.github.io/schema-creation/query-limits#per-field-alias-limits\" rel=\"nofollow\"\u003eQuery limits\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eToGraphQLSchemaString()\u003c/code\u003e takes an optional \u003ccode\u003eincludeDescriptions\u003c/code\u003e argument. Pass \u003ccode\u003efalse\u003c/code\u003e to leave the \u003ccode\u003e\"\"\"...\"\"\"\u003c/code\u003e descriptions out of the generated SDL.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-4\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-4\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed an \u003ccode\u003eIArgumentsTracker\u003c/code\u003e parameter on a mutation or subscription method failing with \u003ccode\u003eService IArgumentsTracker not found for dependency injection\u003c/code\u003e whenever a service provider is passed to \u003ccode\u003eExecuteRequest\u003c/code\u003e - i.e. in any real app. The engine builds and populates the tracker per call, but the branch binding it to the parameter sat below the dependency-injection catch-all, so it was only reachable with a null service provider (which is how the existing tests exercised it). Registering \u003ccode\u003eIArgumentsTracker\u003c/code\u003e in DI was not a workaround: it bound a different, empty tracker, so \u003ccode\u003eIsSet\u003c/code\u003e returned false for every argument and the mutation silently took the \"nothing was supplied\" path. It is now bound before the DI branch, the same as \u003ccode\u003eCancellationToken\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAn \u003ccode\u003eIArgumentsTracker\u003c/code\u003e parameter now works on query fields built from methods (\u003ccode\u003e[GraphQLField]\u003c/code\u003e methods, \u003ccode\u003eAddFieldsFrom\u003c/code\u003e), not just mutations - it previously fell through to the service provider and failed with \u003ccode\u003eService IArgumentsTracker not found in service provider\u003c/code\u003e. The field's arguments object is built deriving from \u003ccode\u003eArgumentsTracker\u003c/code\u003e when a parameter asks for one, and the parameter binds to that object, so the tracker is not a service and a field that has no other services stays on the database-bound pass.\u003c/li\u003e\n\u003cli\u003eAn argument explicitly supplied as \u003ccode\u003enull\u003c/code\u003e on a query field is now reported as set by \u003ccode\u003eIArgumentsTracker\u003c/code\u003e - previously only a non-null value or a schema default counted, so \u003ccode\u003eIsSet\u003c/code\u003e could not tell an explicit null from an omitted argument, which is the distinction it exists to make. This also applies to \u003ccode\u003e[GraphQLArguments]\u003c/code\u003e / input types deriving from \u003ccode\u003eArgumentsTracker\u003c/code\u003e. Mutation arguments already behaved this way.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAddTypeMapping\u003c/code\u003e now applies to every field returning the mapped dotnet type, not only the ones auto-created from the context. A mapping like \u003ccode\u003eAddTypeMapping\u0026lt;NpgsqlPolygon\u0026gt;(\"[Point!]!\")\u003c/code\u003e describes the whole GraphQL type - list-ness and nullability come from the mapping string, not from the dotnet type - but only the auto-populated path returned the mapping's \u003ccode\u003eGqlTypeInfo\u003c/code\u003e. Everything else went through \u003ccode\u003eSchemaBuilder.MakeGraphQlType\u003c/code\u003e, which resolved the type \u003cem\u003ename\u003c/em\u003e (\u003ccode\u003ePoint\u003c/code\u003e) and then recomputed \u003ccode\u003eIsList\u003c/code\u003e/\u003ccode\u003eTypeNotNullable\u003c/code\u003e from the dotnet type, so \u003ccode\u003eAddField()\u003c/code\u003e, \u003ccode\u003eAddField().Resolve()\u003c/code\u003e, root fields on \u003ccode\u003eQuery()\u003c/code\u003e, \u003ccode\u003e[GraphQLField]\u003c/code\u003e methods and expression fields all described the field as \u003ccode\u003ePoint\u003c/code\u003e instead of \u003ccode\u003e[Point!]!\u003c/code\u003e. Introspection, the SDL and any client generated from them were wrong; execution is unchanged. Two notes: the \u003ccode\u003e[GraphQLField]\u003c/code\u003e method case is a regression in 6.0 (the other paths never honoured the mapping), and an \u003ccode\u003easync\u003c/code\u003e \u003ccode\u003e[GraphQLField]\u003c/code\u003e method now matches the mapping too - the lookup used to be made with the declared \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e return type. Type mappings still need to be registered in \u003ccode\u003eSchemaBuilderOptions.PreBuildSchemaFromContext\u003c/code\u003e so they exist before the context is reflected.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.7\u003c/h1\u003e\u003ca id=\"user-content-617\" class=\"anchor\" aria-label=\"Permalink: 6.1.7\" href=\"#617\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-5\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-5\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed a single-object field with a \u003ccode\u003eResolveBulk\u003c/code\u003e resolver whose per-item resolver queries the schema context - e.g. \u003ccode\u003e.Resolve\u0026lt;MyContext\u0026gt;((p, ctx) =\u0026gt; ctx.Site.Movies.FirstOrDefault(m =\u0026gt; m.DirectorId == p.Id))\u003c/code\u003e - failing with \u003ccode\u003eCould not find extension method Select on types System.Linq.Enumerable\u003c/code\u003e. A regression in 6.1.3: such a field was moved onto the collection selection path (to keep it translatable), but a bulk resolver's value on that pass is the loaded dictionary's entry, a single object, so there is no collection to select through. Bulk resolved fields stay on the single-object projection. Reported in \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/issues/543\" data-hovercard-type=\"issue\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/issues/543/hovercard\"\u003e#543\u003c/a\u003e - thanks \u003ca href=\"https://github.com/soilidokay\"\u003e@soilidokay\u003c/a\u003e for the reproduction.\u003c/li\u003e\n\u003cli\u003eFixed a service field selected on the items of a paging field whose own resolver uses a service - e.g. \u003ccode\u003e.Resolve\u0026lt;MyService\u0026gt;((p, srv) =\u0026gt; p.Tasks.Where(t =\u0026gt; srv.Include(t)))\u003c/code\u003e with \u003ccode\u003eUseOffsetPaging()\u003c/code\u003e/\u003ccode\u003eUseConnectionPaging()\u003c/code\u003e on a nested type - failing with \u003ccode\u003eCould not find field egql__x_Id on type X\u003c/code\u003e. Such a paging field cannot be split across the two passes so it is built in one go on the services pass, from the entity rather than from a first-pass projection; a service field on its items had nowhere to read its own extracted dependency from. It now reads that dependency straight off the entity.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.6\u003c/h1\u003e\u003ca id=\"user-content-616\" class=\"anchor\" aria-label=\"Permalink: 6.1.6\" href=\"#616\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-6\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-6\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eThe field-error logging added in 6.1.5 is now covered for the case it exists for: outside development mode the caller gets only \u003ccode\u003eField 'x' - Error occurred\u003c/code\u003e while the original exception - its own message and stack trace - reaches the \u003ccode\u003eILogger\u003c/code\u003e. 6.1.5's test ran with the default \u003ccode\u003eIsDevelopment = true\u003c/code\u003e, where nothing is swallowed, so it did not check that.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.5\u003c/h1\u003e\u003ca id=\"user-content-615\" class=\"anchor\" aria-label=\"Permalink: 6.1.5\" href=\"#615\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-7\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-7\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eField-level exceptions are logged again, with the field name and stack trace, to the \u003ccode\u003eILogger\u003c/code\u003e the schema was built with. A regression in 6.0: partial results turned a field failure into a GraphQL error instead of rethrowing it, so nothing reached the request-level log and the only way to see why a field failed was development mode or \u003ccode\u003eAllowedExceptions\u003c/code\u003e - both of which return the detail to the caller. Responses are unchanged. Document and validation errors, whose message the caller already gets in full, are not logged.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.4\u003c/h1\u003e\u003ca id=\"user-content-614\" class=\"anchor\" aria-label=\"Permalink: 6.1.4\" href=\"#614\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-8\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-8\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveBulk\u003c/code\u003e / \u003ccode\u003eResolveBulkAsync\u003c/code\u003e nested under a \u003cstrong\u003eroot service-resolved list\u003c/strong\u003e (e.g. \u003ccode\u003eQuery.apiKeys\u003c/code\u003e from \u003ccode\u003e.Resolve\u0026lt;TService\u0026gt;(...)\u003c/code\u003e rather than a context/\u003ccode\u003eDbSet\u003c/code\u003e property) so nested bulk fields load once instead of falling back to per-item \u003ccode\u003eResolve\u003c/code\u003e (or previously failing with a null \u003ccode\u003eBulkParameter\u003c/code\u003e). Root service list fields now participate in the two-pass flow. \u003ccode\u003eUseFilter()\u003c/code\u003e/\u003ccode\u003eUseSort()\u003c/code\u003e on those root lists still apply on the first pass and are not re-applied against the first-pass Dynamic on the second. Regression tests in \u003ccode\u003eServiceRootListBulkTests\u003c/code\u003e / \u003ccode\u003eServiceBackedCollectionExtensionsTests\u003c/code\u003e. A root service list/object only takes the two-pass path when the selection actually has a bulk resolver in it (including through a fragment spread) - otherwise it stays on the single-pass path, as the extra pass costs a compile and a projection of every row for nothing. Note that for the fields that do take it, the service now runs during the \u003cem\u003efirst\u003c/em\u003e pass, so a \u003ccode\u003eBeforeExecuting\u003c/code\u003e hook sees two executions for them (\u003ccode\u003eisFinal\u003c/code\u003e false then true) where it saw one.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveBulk\u003c/code\u003e nested under a \u003cstrong\u003eroot service-resolved object\u003c/strong\u003e that exposes a list (status-page shape: \u003ccode\u003estatusPage { items { bulkField } }\u003c/code\u003e). First pass used to return only \u003ccode\u003eExtractedFieldsFromServices\u003c/code\u003e for root service objects, so nested list selection and bulk registration were skipped; the second pass then either N+1'd via \u003ccode\u003eResolve\u003c/code\u003e or failed converting entity types to first-pass \u003ccode\u003eDynamic_*\u003c/code\u003e types (\u003ccode\u003eNo coercion operator...\u003c/code\u003e). Root service objects now participate in the two-pass flow (like root service lists), wrap once with \u003ccode\u003eProjectWithNullCheck\u003c/code\u003e on the first pass, and on the second pass select from the materialized anon instead of re-invoking the service. Also rebinds the \u003ccode\u003eResolveBulk\u003c/code\u003e \u003ccode\u003eDataSelector\u003c/code\u003e parameter (a different \u003ccode\u003eParameterExpression\u003c/code\u003e than \u003ccode\u003eFieldParam\u003c/code\u003e) so multi-property keys no longer fail with \u003ccode\u003evariable 'row' ... is not defined\u003c/code\u003e. Nullable-nav bulk keys (\u003ccode\u003erow.DetexyBoard == null ? null : row.DetexyBoard.SerialNumber\u003c/code\u003e) are rewritten via \u003ccode\u003eExpressionReplacer.VisitConditional\u003c/code\u003e onto the first-pass extracted field instead of leaving a second navigation \u003ccode\u003eMemberExpression\u003c/code\u003e unbound. Exact regression: \u003ccode\u003eHardwareSensorStatusPageBulkTests\u003c/code\u003e (mirrors Offline Active \u003ccode\u003ehardwareSensorStatusPage { items { lastSeen isOffline floor { currentFloorStatus } } }\u003c/code\u003e). Also: \u003ccode\u003eServiceResolvedPage_ItemsWithResolveBulk_Works\u003c/code\u003e, \u003ccode\u003eServiceResolvedPage_ItemsWithComplexResolveBulkKey_Works\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.3\u003c/h1\u003e\u003ca id=\"user-content-613\" class=\"anchor\" aria-label=\"Permalink: 6.1.3\" href=\"#613\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-9\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed a field resolved from the query context - e.g. \u003ccode\u003e.Resolve\u0026lt;MyDbContext\u0026gt;((c, db) =\u0026gt; db.Things.Where(t =\u0026gt; t.ParentId == c.Id))\u003c/code\u003e, the pattern for a child collection that is not a navigation property - being projected with one of EntityGraphQL's own methods (\u003ccode\u003eSelectWithNullCheck\u003c/code\u003e, or \u003ccode\u003eProjectWithNullCheck\u003c/code\u003e for a single object), which no database provider can translate. Selecting another such field below it failed the operation with \u003ccode\u003eThe LINQ expression 'p_Thing =\u0026gt; new Dynamic_things{...}' could not be translated\u003c/code\u003e. Lists keep a plain \u003ccode\u003eSelect\u003c/code\u003e (a regression from 6.0.0-beta3), and a single object is projected inside the query - \u003ccode\u003eWhere().Select().FirstOrDefault()\u003c/code\u003e, as it already was for a field like \u003ccode\u003emovie(id: 1)\u003c/code\u003e. Fields using a service other than the query context still get the null check, as they can return \u003ccode\u003enull\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.2\u003c/h1\u003e\u003ca id=\"user-content-612\" class=\"anchor\" aria-label=\"Permalink: 6.1.2\" href=\"#612\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-10\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-10\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed a \u003ccode\u003eResolveBulk\u003c/code\u003e field selected on data that the first (no-service) pass never produces failing the whole root field with \u003ccode\u003eField '\u0026lt;name\u0026gt;' - Error occurred\u003c/code\u003e (\u003ccode\u003eArgumentException: Static property requires null instance...\u003c/code\u003e, or \u003ccode\u003eKeyNotFoundException\u003c/code\u003e for the bulk data key). The clearest case is a root field resolved from services - \u003ccode\u003eschema.Query().AddField(\"comments\", ...).Resolve\u0026lt;IMyService, MyDbContext\u0026gt;(...)\u003c/code\u003e selecting \u003ccode\u003e{ isReadByCurrentUser }\u003c/code\u003e - where the first pass produces no expression at all, so no bulk load is registered while the second pass still compiled the lookup; the same applied below another service field's selection and with \u003ccode\u003eExecuteServiceFieldsSeparately = false\u003c/code\u003e. These fields now fall back to their per-item resolver (one service call per item) instead of failing. Bulk loading them needs the service-resolved parent executed before the keys are collected - a further execution pass, not implemented. Repro tests from \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/pull/538\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/pull/538/hovercard\"\u003e#538\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed a \u003ccode\u003eResolveBulk\u003c/code\u003e/\u003ccode\u003eResolveBulkAsync\u003c/code\u003e resolver whose values are lists - e.g. \u003ccode\u003eResolveBulk\u0026lt;MyService, string, IEnumerable\u0026lt;Item\u0026gt;\u0026gt;(...)\u003c/code\u003e returning \u003ccode\u003eIDictionary\u0026lt;string, IEnumerable\u0026lt;Item\u0026gt;\u0026gt;\u003c/code\u003e - failing with \u003ccode\u003eSpecified cast is not valid\u003c/code\u003e (\u003ccode\u003eInvalidCastException\u003c/code\u003e) when the field was resolved. A list field's dotnet return type is promoted to \u003ccode\u003eIQueryable\u0026lt;T\u0026gt;\u003c/code\u003e and the bulk data lookup was built against \u003ccode\u003eDictionary\u0026lt;TKey, IQueryable\u0026lt;Item\u0026gt;\u0026gt;\u003c/code\u003e, which the loaded \u003ccode\u003eDictionary\u0026lt;TKey, IEnumerable\u0026lt;Item\u0026gt;\u0026gt;\u003c/code\u003e cannot be cast to (a dictionary's generic arguments are invariant). The lookup now takes its dictionary type from the resolver's own signature and casts to \u003ccode\u003eIDictionary\u0026lt;,\u0026gt;\u003c/code\u003e, so any dictionary implementation and value type the resolver declares works. Reported in \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/issues/534\" data-hovercard-type=\"issue\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/issues/534/hovercard\"\u003e#534\u003c/a\u003e - thanks \u003ca href=\"https://github.com/soilidokay\"\u003e@soilidokay\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResolveBulk()\u003c/code\u003e/\u003ccode\u003eResolveBulkAsync()\u003c/code\u003e on a field with no resolver now throws \u003ccode\u003eEntityGraphQLSchemaException\u003c/code\u003e naming the field and the fix, instead of a \u003ccode\u003eNullReferenceException\u003c/code\u003e from inside the schema-building call. A bulk resolver builds on a resolver rather than replacing it - the per-item resolver runs whenever the bulk load cannot (e.g. the field is selected below another service field), so a bulk-only field could not resolve at all. Also from \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/issues/534\" data-hovercard-type=\"issue\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/issues/534/hovercard\"\u003e#534\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eFixed an async field (\u003ccode\u003eResolveAsync\u003c/code\u003e, or a \u003ccode\u003eResolveBulkAsync\u003c/code\u003e field falling back to its per-item resolver) below a \u003cstrong\u003eroot list resolved from services\u003c/strong\u003e leaving an unawaited \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e in the response instead of its value - typically surfacing as a serialized empty object or \u003ccode\u003e{\"result\": ...}\u003c/code\u003e-shaped noise for that field. Nested async results were resolved only when services executed in a single pass or on the second pass of a two-pass execution; a root field resolved from services has no first pass to run, so its one execution is the final one while \u003ccode\u003eExecuteServiceFieldsSeparately\u003c/code\u003e is still on and it matched neither case. Keyed off the final execution now. The same field below a context/\u003ccode\u003eDbSet\u003c/code\u003e root list was always awaited.\u003c/li\u003e\n\u003cli\u003eFixed the same \u003ccode\u003eResolveBulk\u003c/code\u003e field selected at more than one level of a self-referencing type - \u003ccode\u003ecomments { isReadByCurrentUser replies { isReadByCurrentUser } }\u003c/code\u003e - failing with \u003ccode\u003eKeyNotFoundException\u003c/code\u003e for a key that was never loaded. The loaded data is keyed by the bulk resolver name, and each level was loaded separately, so the last level's data replaced the previous level's. Every level's keys now go into one load call.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eschema.Validate()\u003c/code\u003e now checks field arguments as well as return types. An argument whose type is not in the schema, or that can never be built from a query variable because its GraphQL type is registered against a different dotnet type (\u003ccode\u003eAddTypeMapping\u003c/code\u003e is one-way), now fails at validate time naming the dotnet types and the fix, instead of on the first request with a message naming only the GraphQL types. Built-in mappings and list arguments are unaffected. \u003ccode\u003eValidate()\u003c/code\u003e is opt-in - call it once your schema is set up, see \u003ca href=\"https://entitygraphql.github.io/schema-creation/schema-creation#validating-your-schema\" rel=\"nofollow\"\u003eValidating your schema\u003c/a\u003e. A schema with either problem that passed \u003ccode\u003eValidate()\u003c/code\u003e before will now throw from it.\u003c/li\u003e\n\u003cli\u003eA missing required argument on a field taking an arguments class is now reported by its schema name instead of its dotnet property name - \u003ccode\u003emissing required argument 'from'\u003c/code\u003e, not \u003ccode\u003e'From'\u003c/code\u003e. \u003ccode\u003eArgType\u003c/code\u003e already used the schema name, so the two validation paths disagreed and a query missing one argument could produce both spellings. Reading the capitalised name naturally suggests the schema stopped applying \u003ccode\u003eSchemaFieldNamer\u003c/code\u003e to arguments, which sends you looking in the wrong place entirely.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eVariable or value used for argument 'x' does not match argument type 'Y' on field 'z'\u003c/code\u003e now carries the reason the value could not be built (e.g. \u003ccode\u003eObject must implement IConvertible.\u003c/code\u003e) when the schema is in development mode or the exception is allowed via \u003ccode\u003eAllowedExceptions\u003c/code\u003e/\u003ccode\u003eAllowedExceptionAttribute\u003c/code\u003e. Both types in that message are GraphQL types and are frequently the same on each side, so the message could describe a conversion failing between two dotnet types while naming neither - the underlying exception was caught and discarded. Messages outside development are unchanged. \u003ccode\u003eISchemaProvider.IsAllowedException(Exception)\u003c/code\u003e is new (it was already the private gate behind \u003ccode\u003eAllowedExceptionMessage\u003c/code\u003e) - custom \u003ccode\u003eISchemaProvider\u003c/code\u003e implementations need to add it.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.1\u003c/h1\u003e\u003ca id=\"user-content-611\" class=\"anchor\" aria-label=\"Permalink: 6.1.1\" href=\"#611\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-11\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-11\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveBulk\u003c/code\u003e fields selected through a fragment spread or inline fragment failing with \u003ccode\u003eKeyNotFoundException\u003c/code\u003e (\u003ccode\u003eThe given key 'bulk_Type.field' was not present in the dictionary\u003c/code\u003e) anywhere below a list-to-single selection - e.g. a mutation returning \u003ccode\u003ectx.Things.First(...)\u003c/code\u003e selected as \u003ccode\u003ething { child { ...ChildFields } }\u003c/code\u003e, or \u003ccode\u003ething(id: 1) { ...ThingFields }\u003c/code\u003e. Apollo/Relay clients hoist selections into named fragments, so this showed up as soon as a bulk field was used from a real frontend. A fragment spread is parsed with the parent of the node it is spread on, so the \"is this field selected directly on a list-to-single node?\" check read the wrong node: bulk loading was skipped for the field while the second pass still compiled the lookup, leaving it reading data that was never loaded. Both the registration and the lookup now ask the compile context which node is compiling its selection set, so they always agree, and the per-compile copy of a list-to-single node keeps its to-single marker instead of looking like a plain list selection. A bulk field selected via a fragment directly on a list-to-single field now uses the per-item resolver, matching how it already behaved when selected directly. Repro and regression tests from \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/pull/536\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/pull/536/hovercard\"\u003e#536\u003c/a\u003e - thanks \u003ca href=\"https://github.com/alex-birch\"\u003e@alex-birch\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.1.0\u003c/h1\u003e\u003ca id=\"user-content-610\" class=\"anchor\" aria-label=\"Permalink: 6.1.0\" href=\"#610\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-1\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNew report-only mode and logging hook for query limits: \u003ccode\u003eExecutionOptions.QueryLimitsMode\u003c/code\u003e (\u003ccode\u003eEnforce\u003c/code\u003e, the default, or \u003ccode\u003eReportOnly\u003c/code\u003e) and \u003ccode\u003eExecutionOptions.OnQueryLimitExceeded\u003c/code\u003e callback (or register an \u003ccode\u003eIQueryLimitObserver\u003c/code\u003e in the service provider for DI-injected observers - the explicit callback wins when both are present) with the limit kind, actual vs maximum value and operation name. \u003ccode\u003eReportOnly\u003c/code\u003e reports the query's real depth/counts and lets the query execute. Use it to observe real client behavior, then flip to \u003ccode\u003eEnforce\u003c/code\u003e with confident numbers. The callback also fires in \u003ccode\u003eEnforce\u003c/code\u003e mode just before rejection, so enforced rejections can be logged with structured detail instead of matching error message text. Fully additive - defaults are unchanged.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-12\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-12\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eCustom directives (\u003ccode\u003eDirectiveProcessor.VisitNode\u003c/code\u003e) that return a rebuilt field node no longer lose root-field handling - position-derived state (\u003ccode\u003eIsRootField\u003c/code\u003e) is now preserved on the returned node automatically. Previously a rebuilt root list node fell into nested-field handling on the second (services) pass and the engine tried to re-apply the root list expression (e.g. \u003ccode\u003eWhereWhen\u003c/code\u003e/\u003ccode\u003eOrderBy\u003c/code\u003e) against the already-materialised first-pass result, failing with \u003ccode\u003eNo generic method 'WhereWhen' on type 'Queryable'...\u003c/code\u003e. Repro and regression tests from \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/pull/527\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/pull/527/hovercard\"\u003e#527\u003c/a\u003e - thanks \u003ca href=\"https://github.com/alex-birch\"\u003e@alex-birch\u003c/a\u003e.\u003c/li\u003e\n\u003cli\u003eMultiple node-modifying directives on one field now chain correctly - each directive receives the previous directive's result instead of all receiving the original node (previously only the last directive's rebuild took effect), and a \u003ccode\u003enull\u003c/code\u003e (excluded) result short-circuits so a later directive cannot re-include a field excluded by e.g. \u003ccode\u003e@skip\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveAsync\u0026lt;TService\u0026gt;()\u003c/code\u003e fields returning an object type with sub-selections (e.g. \u003ccode\u003ewidget(id: ...) { id name }\u003c/code\u003e) not propagating a \u003ccode\u003enull\u003c/code\u003e resolver result to the field - the response held a non-null object with default/null sub-fields instead of a \u003ccode\u003enull\u003c/code\u003e field. The two-pass service-field execution rebuilds the field's expression with \u003ccode\u003econtextChanged: true\u003c/code\u003e, which was used as a (incorrect) proxy for \"this field's value is already resolved, not still a raw \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e\" - for a field whose own resolver is the async work (not a value read back from a prior pass), the expression here is still genuinely \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e even though \u003ccode\u003econtextChanged\u003c/code\u003e is \u003ccode\u003etrue\u003c/code\u003e, so the code built the object selection directly against the \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e parameter instead of its awaited result, and \u003ccode\u003eExpression.Call\u003c/code\u003e silently bound to the wrong (synchronous, always-\"not null\") overload of \u003ccode\u003eProjectWithNullCheck\u003c/code\u003e. Now checked via the expression's actual type (\u003ccode\u003eIsAwaitableGenericType()\u003c/code\u003e) instead of \u003ccode\u003econtextChanged\u003c/code\u003e. \u003ccode\u003e.Resolve\u0026lt;TService\u0026gt;()\u003c/code\u003e (the sync API wrapping \u003ccode\u003e.GetAwaiter().GetResult()\u003c/code\u003e) was unaffected.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.1\u003c/h1\u003e\u003ca id=\"user-content-601\" class=\"anchor\" aria-label=\"Permalink: 6.0.1\" href=\"#601\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-13\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-13\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePackage dependencies now use per-target-framework versions - the \u003ccode\u003enet8.0\u003c/code\u003e build asks for \u003ccode\u003eMicrosoft.Extensions.Logging.Abstractions\u003c/code\u003e/\u003ccode\u003eSystem.Runtime.Caching\u003c/code\u003e 8.x and \u003ccode\u003enet9.0\u003c/code\u003e for 9.x, instead of all target frameworks demanding 10.x. 6.0.0 forced net8/net9 consumers onto 10.x runtime libraries, which collided with other packages' version bounds (e.g. \u003ccode\u003eNU1608\u003c/code\u003e warning floods via transitive \u003ccode\u003eSystem.Diagnostics.DiagnosticSource\u003c/code\u003e where a dependency caps it below 9.0). No API changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0\u003c/h1\u003e\u003ca id=\"user-content-600\" class=\"anchor\" aria-label=\"Permalink: 6.0.0\" href=\"#600\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEntityGraphQL 6.0 is the culmination of the 6.0.0-beta1 through 6.0.0-beta9 releases. The beta sections below carry the full, detailed lists of changes, fixes and migration notes - and see the \u003ca href=\"https://entitygraphql.github.io/upgrade-6-0\" rel=\"nofollow\"\u003eupgrade guide\u003c/a\u003e for a consolidated migration path from 5.x.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0 Highlights\u003c/h2\u003e\u003ca id=\"user-content-60-highlights\" class=\"anchor\" aria-label=\"Permalink: 6.0 Highlights\" href=\"#60-highlights\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003eGraphQL spec conformance\u003c/strong\u003e - partial results per the spec (failing top-level fields no longer fail the whole operation), \u003ca href=\"https://spec.graphql.org/September2025/\" rel=\"nofollow\"\u003eSeptember 2025 GraphQL spec\u003c/a\u003e support (\u003ccode\u003e@oneOf\u003c/code\u003e, argument/input-field deprecation, document descriptions, stricter validation) and \u003ccode\u003eMapGraphQL()\u003c/code\u003e follows the \u003ca href=\"https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md\"\u003eGraphQL over HTTP spec\u003c/a\u003e by default.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eA real async model\u003c/strong\u003e - \u003ccode\u003eResolveAsync\u0026lt;TService\u0026gt;()\u003c/code\u003e fields, end-to-end \u003ccode\u003eCancellationToken\u003c/code\u003e support (into resolvers, mutations, subscriptions and the in-flight EF query), async database materialization for root list fields, and concurrency control per field, per service and per query (\u003ccode\u003eMaxQueryConcurrency\u003c/code\u003e defaults to 100).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSecurity hardening\u003c/strong\u003e - authorization fails closed, introspection respects authorization, a parser recursion backstop against deeply-nested document DoS, opt-in query guards (\u003ccode\u003eMaxQueryDepth\u003c/code\u003e, \u003ccode\u003eMaxFieldSelections\u003c/code\u003e, \u003ccode\u003eMaxFieldAliases\u003c/code\u003e, \u003ccode\u003eMaxQueryComplexity\u003c/code\u003e) and per-field rate limiting.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eNew schema-building features\u003c/strong\u003e - \u003ccode\u003eUseAggregate()\u003c/code\u003e for SQL-translated aggregates over collections, \u003ccode\u003eAddFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e/\u003ccode\u003eAddQueryFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e to group field definitions into classes, filter improvements (GraphQL variables, service fields, \u003ccode\u003eselectMany\u003c/code\u003e, filtering by paged child fields) and async subscription setup for external brokers.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePerformance\u003c/strong\u003e - paging answers \u003ccode\u003ehasNextPage\u003c/code\u003e with a cheap \u003ccode\u003eEXISTS\u003c/code\u003e instead of \u003ccode\u003eCOUNT(*)\u003c/code\u003e, async result processing is compiled and targeted (~2x faster on async-heavy results), opt-in compiled-delegate caching, and WebSocket subscription delivery is ordered and non-blocking.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eModern targets\u003c/strong\u003e - \u003ccode\u003enet8.0\u003c/code\u003e, \u003ccode\u003enet9.0\u003c/code\u003e and \u003ccode\u003enet10.0\u003c/code\u003e with a dependency-light core package.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes from Beta 9\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-from-beta-9\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes from Beta 9\" href=\"#breaking-changes-from-beta-9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eMapGraphQL()\u003c/code\u003e HTTP status codes now fully follow the \u003ca href=\"https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md\"\u003eGraphQL over HTTP spec\u003c/a\u003e for the \u003ccode\u003eapplication/graphql-response+json\u003c/code\u003e media type (the default response type): a response with no \u003ccode\u003edata\u003c/code\u003e entry (a request error - e.g. document parse/validation failure) returns \u003ccode\u003e400\u003c/code\u003e instead of \u003ccode\u003e200\u003c/code\u003e, and a response with both \u003ccode\u003edata\u003c/code\u003e and \u003ccode\u003eerrors\u003c/code\u003e (partial success) returns \u003ccode\u003e294\u003c/code\u003e per the spec. Clean results remain \u003ccode\u003e200\u003c/code\u003e. Responses negotiated as legacy \u003ccode\u003eapplication/json\u003c/code\u003e keep returning \u003ccode\u003e200\u003c/code\u003e for every well-formed request. Clients following the spec read the response body regardless of status code for \u003ccode\u003eapplication/graphql-response+json\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eAddFieldsFrom\u0026lt;TFrom\u0026gt;()\u003c/code\u003e / \u003ccode\u003eAddQueryFieldsFrom\u0026lt;TType\u0026gt;()\u003c/code\u003e (introduced in beta 9) now require the grouping class to implement the new \u003ccode\u003eIFieldsFor\u0026lt;TContext\u0026gt;\u003c/code\u003e marker interface declaring which type its \u003ccode\u003e[GraphQLField]\u003c/code\u003e methods are written against - the entity type for \u003ccode\u003eschema.Type\u0026lt;Person\u0026gt;().AddFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e, the query context for \u003ccode\u003eAddQueryFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e. Registering a class against the wrong schema type is now a compile error instead of a schema-build surprise, and the marker gives compile-time tooling the intended context type. The interface is contravariant, so a fields class written for a base type or shared interface can be added to types deriving from/implementing it. A class may also implement \u003ccode\u003eIFieldsFor\u0026lt;\u0026gt;\u003c/code\u003e for several contexts to group a feature across types (e.g. occupancy fields for \u003ccode\u003eBuilding\u003c/code\u003e, \u003ccode\u003eFloor\u003c/code\u003e and \u003ccode\u003eSpace\u003c/code\u003e in one class) - each registration only adds the methods written for that context. See \u003ca href=\"https://entitygraphql.github.io/schema-creation/fields#grouping-fields-across-multiple-types\" rel=\"nofollow\"\u003eGrouping fields across multiple types\u003c/a\u003e. Migration: add \u003ccode\u003e: IFieldsFor\u0026lt;TheContextType\u0026gt;\u003c/code\u003e to each grouping class.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003eA \u003ccode\u003e[GraphQLField]\u003c/code\u003e method parameter whose type is a schema entity type (and not the field's context type) now fails at schema build with a clear error instead of being silently classified as a DI service - that classification almost always meant a mistyped context parameter that resolved (or failed confusingly) at query time. The query context type is excluded (a \u003ccode\u003eDbContext\u003c/code\u003e parameter remains a service), and the new \u003ccode\u003e[GraphQLService]\u003c/code\u003e parameter attribute opts out for the rare case where an entity type really is a DI service.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges since Beta 9\u003c/h2\u003e\u003ca id=\"user-content-changes-since-beta-9\" class=\"anchor\" aria-label=\"Permalink: Changes since Beta 9\" href=\"#changes-since-beta-9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e[GraphQLField]\u003c/code\u003e methods (via \u003ccode\u003eAddFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e/\u003ccode\u003eAddQueryFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e or static on a schema type) can now return an \u003ccode\u003eExpression\u0026lt;Func\u0026lt;TContext, ...\u0026gt;\u0026gt;\u003c/code\u003e instead of a value. The method is a factory invoked once at schema build time and the returned expression is registered exactly like \u003ccode\u003eAddField(...).Resolve(...)\u003c/code\u003e - a service-free expression composes fully into the database-bound pass (translates to SQL, only the columns it uses are selected), and extra expression parameters after the context are resolved as services with the standard two-pass execution and dependency extraction. The factory method itself takes no parameters. See \u003ca href=\"https://entitygraphql.github.io/schema-creation/fields#expression-fields-with-addfieldsfrom\" rel=\"nofollow\"\u003eExpression fields with AddFieldsFrom\u003c/a\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBug Fixes since Beta 9\u003c/h2\u003e\u003ca id=\"user-content-bug-fixes-since-beta-9\" class=\"anchor\" aria-label=\"Permalink: Bug Fixes since Beta 9\" href=\"#bug-fixes-since-beta-9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveBulk\u003c/code\u003e fields failing with \u003ccode\u003eKeyNotFoundException\u003c/code\u003e when selected via a fragment spread (\u003ccode\u003e...MyFragment\u003c/code\u003e) or an inline fragment (\u003ccode\u003e... on Type { bulkField }\u003c/code\u003e) - the bulk loader was never registered because fragments expand after bulk registration ran. Bulk fields are now registered through fragments at any nesting depth, the bulk list expression path is taken from the compile-time selection path rather than a field's parent-node chain (which for fragment-selected fields pointed at the fragment definition, not the selection point), and selecting the same bulk field both directly and via a fragment loads the data once, not twice.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveBulk\u003c/code\u003e fields failing when reached through a nested single-object navigation (e.g. \u003ccode\u003etasks { project { createdBy } }\u003c/code\u003e) or a mutation result selection (e.g. \u003ccode\u003emutation { updateTask { project { createdBy } } }\u003c/code\u003e) - single-object contexts are now wrapped for the bulk key batching, object navigations off a list context project per element, and the duplicate mutation result-selection path node is skipped by reference. Also released in 5.7.3. Thanks \u003ca href=\"https://github.com/alex-birch\"\u003e@alex-birch\u003c/a\u003e \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/pull/526\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/EntityGraphQL/EntityGraphQL/pull/526/hovercard\"\u003e#526\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eFixed custom type converters (\u003ccode\u003eAddCustomTypeConverter\u003c/code\u003e) registered for a base type never matching values of derived types - the lookup was an exact type match, so the documented Newtonsoft pattern \u003ccode\u003eAddCustomTypeConverter\u0026lt;JToken\u0026gt;(...)\u003c/code\u003e never fired (\u003ccode\u003eJToken\u003c/code\u003e is abstract; runtime values are \u003ccode\u003eJArray\u003c/code\u003e/\u003ccode\u003eJValue\u003c/code\u003e/\u003ccode\u003eJObject\u003c/code\u003e), breaking e.g. list-of-enum variables sent through Newtonsoft.Json with \u003ccode\u003eSupplied variable can not be applied to defined variable type\u003c/code\u003e. From-type converter lookup now walks the base-type chain (the most derived registration wins).\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eResolveBulk\u003c/code\u003e fields reached through chained single-object navigations (e.g. \u003ccode\u003eprojects { tasks { assignee { manager { bulkField } } } }\u003c/code\u003e) throwing \u003ccode\u003eValue cannot be null\u003c/code\u003e - the null-guard built while collecting the bulk keys assumed every navigation step was a list. Single-object steps are now null-guarded properly (a null parent yields null and is filtered before the bulk key selection). Also released in 5.7.3.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta9\u003c/h1\u003e\u003ca id=\"user-content-600-beta9\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta9\" href=\"#600-beta9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe final beta planned before 6.0.0.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eDropped the \u003ccode\u003enetstandard2.1\u003c/code\u003e target. EntityGraphQL now targets \u003ccode\u003enet8.0\u003c/code\u003e, \u003ccode\u003enet9.0\u003c/code\u003e and \u003ccode\u003enet10.0\u003c/code\u003e. This also removes the \u003ccode\u003eSystem.Text.Json\u003c/code\u003e, \u003ccode\u003eMicrosoft.CSharp\u003c/code\u003e and \u003ccode\u003eSystem.ComponentModel.Annotations\u003c/code\u003e package dependencies that only the netstandard target required.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSecurity (fail closed)\u003c/strong\u003e — authorization now denies by default when a requirement is present but cannot be satisfied. A bare \u003ccode\u003e[GraphQLAuthorize]\u003c/code\u003e / \u003ccode\u003e[Authorize]\u003c/code\u003e (no roles or policy) now correctly requires an authenticated user instead of being a silent no-op, and \u003ccode\u003eIsAuthorized\u003c/code\u003e requires \u003ccode\u003eIdentity.IsAuthenticated\u003c/code\u003e. In \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e, a policy-protected field is now denied (rather than allowed through) when no \u003ccode\u003eIAuthorizationService\u003c/code\u003e is registered or the user is \u003ccode\u003enull\u003c/code\u003e. Fields/types with no authorization attribute are unaffected. This is a behavior change: previously-open access that relied on any of these gaps will now be blocked.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIntrospection now respects authorization\u003c/strong\u003e — introspection queries (\u003ccode\u003e__schema\u003c/code\u003e / \u003ccode\u003e__type\u003c/code\u003e) only return the types and fields the requesting user is authorized to access, so anonymous users can no longer enumerate role/policy-protected type, field and argument names. \u003ccode\u003eschema.ToGraphQLSchemaString()\u003c/code\u003e is unchanged and always outputs the full schema (for SDL files / codegen). Note introspection output can now differ per user, which may affect schema-caching tooling running as an unprivileged user.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003eExecutionOptions.MaxQueryConcurrency\u003c/code\u003e now defaults to 100\u003c/strong\u003e (previously unlimited). An async field resolved for a list runs per item, so an unbounded default turned a large result set into an unbounded number of concurrent operations (socket/thread-pool exhaustion, hammering rate-limited APIs). Set \u003ccode\u003eMaxQueryConcurrency = null\u003c/code\u003e to restore unlimited. Note this does not make non-thread-safe services (e.g. a scoped \u003ccode\u003eDbContext\u003c/code\u003e) safe in async list fields — use \u003ccode\u003eServiceConcurrencyLimits\u003c/code\u003e or \u003ccode\u003emaxConcurrency: 1\u003c/code\u003e for those. Also fixed the concurrency wrapper for field shapes it previously failed on (value-type service parameters such as \u003ccode\u003eCancellationToken\u003c/code\u003e, rebound per-element parameters, nested list results — errors like \u003ccode\u003eunbound variable\u003c/code\u003e or \u003ccode\u003eNo coercion operator\u003c/code\u003e), and \u003ccode\u003eIAsyncEnumerable\u003c/code\u003e fields are no longer wrapped (the stream's enumeration, not its creation, is the async work).\u003c/li\u003e\n\u003cli\u003eAPI surface — \u003ccode\u003eLinqRuntimeTypeBuilder\u003c/code\u003e and \u003ccode\u003eExpressionReplacer\u003c/code\u003e are now \u003ccode\u003einternal\u003c/code\u003e; \u003ccode\u003eExpressionUtil.ListToSingleMethods\u003c/code\u003e is no longer public (it was a mutable static). \u003ccode\u003eGraphQLHelper.InjectServices\u003c/code\u003e gained optional parameters and accepts a null service provider. \u003ccode\u003eConcurrencyLimitFieldExtension.ExecuteWithConcurrencyLimitAsync\u003c/code\u003e is now generic (\u003ccode\u003e\u0026lt;TResult\u0026gt;\u003c/code\u003e) so the wrapped expression keeps its static type.\u003c/li\u003e\n\u003cli\u003eNew GraphQL spec validations may reject previously accepted (invalid) documents — duplicate non-repeatable directives, conflicting field selection merges, \u003ccode\u003e@skip\u003c/code\u003e/\u003ccode\u003e@include\u003c/code\u003e on a subscription root field and deprecating a required argument are now errors. See the spec compliance entry under Changes.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-2\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNew \u003ccode\u003eschema.Query().AddFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e (and any object type) plus the \u003ccode\u003eschema.AddQueryFieldsFrom\u0026lt;T\u0026gt;()\u003c/code\u003e shortcut - group related field definitions into classes using \u003ccode\u003e[GraphQLField]\u003c/code\u003e marked methods instead of many \u003ccode\u003eAddField()\u003c/code\u003e calls. Method parameters of the declaring type bind to the field context (the query context for root fields - this also applies to existing \u003ccode\u003e[GraphQLField]\u003c/code\u003e methods on the context type, which previously resolved the context from the service provider), other complex types resolve as services and remaining parameters become GraphQL arguments. Methods returning \u003ccode\u003eIQueryable\u0026lt;T\u0026gt;\u003c/code\u003e compose with EF - filters and selections translate to SQL.\u003c/li\u003e\n\u003cli\u003eUpdated dependencies: \u003ccode\u003eHumanizer.Core\u003c/code\u003e 2.14.1 -\u0026gt; 3.0.10 (used for singularizing names when building schemas - inflection rule changes could alter a generated name in rare cases), \u003ccode\u003eParlot\u003c/code\u003e 1.4.3 -\u0026gt; 1.5.7, \u003ccode\u003eSystem.Runtime.Caching\u003c/code\u003e and \u003ccode\u003eMicrosoft.Extensions.Logging.Abstractions\u003c/code\u003e 9.0.9 -\u0026gt; 10.0.9.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eParameterReplacer.ReplaceByType\u003c/code\u003e is marked obsolete and will be removed in 7.0 - it replaces any parameter of the matching type, which can capture parameters you did not intend. It remains functional in 6.x.\u003c/li\u003e\n\u003cli\u003eRoot-level list fields are now materialized asynchronously when the LINQ provider's query objects implement \u003ccode\u003eIAsyncEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e - EF Core's do, so the database round-trip no longer blocks a thread and the request's \u003ccode\u003eCancellationToken\u003c/code\u003e can cancel the in-flight query. No EF dependency was added; in-memory data is enumerated synchronously as before. Note for \u003ccode\u003eExecutionOptions.BeforeExecuting\u003c/code\u003e users: root list fields on the database-bound pass no longer end in an in-tree \u003ccode\u003eToList()\u003c/code\u003e call - the deferred query is materialized after the expression executes.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSeptember 2025 GraphQL spec compliance\u003c/strong\u003e (document descriptions, full Unicode and OneOf runtime behavior shipped in earlier betas):\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e__Type.isOneOf\u003c/code\u003e is now exposed per the spec (previously the non-standard name \u003ccode\u003eoneField\u003c/code\u003e). It is \u003ccode\u003efalse\u003c/code\u003e for input object types, \u003ccode\u003etrue\u003c/code\u003e for \u003ccode\u003e@oneOf\u003c/code\u003e types and \u003ccode\u003enull\u003c/code\u003e for other types.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__Directive.isRepeatable\u003c/code\u003e added to introspection (all built-in directives are non-repeatable). Custom \u003ccode\u003eIDirectiveProcessor\u003c/code\u003e implementations can override the new \u003ccode\u003eIsRepeatable\u003c/code\u003e property (defaults to \u003ccode\u003efalse\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eUsing a non-repeatable directive more than once at a single location (e.g. \u003ccode\u003e@skip(...) @skip(...)\u003c/code\u003e) is now a validation error.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e@skip\u003c/code\u003e/\u003ccode\u003e@include\u003c/code\u003e on the root field of a subscription operation is now a validation error per the spec.\u003c/li\u003e\n\u003cli\u003eArguments and input fields can now be deprecated (\u003ccode\u003e[Obsolete]\u003c/code\u003e on an argument property or \u003ccode\u003efield.Deprecate(...)\u003c/code\u003e on an input field). They are hidden from introspection by default with new \u003ccode\u003eincludeDeprecated\u003c/code\u003e arguments on \u003ccode\u003e__Field.args\u003c/code\u003e, \u003ccode\u003e__Directive.args\u003c/code\u003e and \u003ccode\u003e__Type.inputFields\u003c/code\u003e, \u003ccode\u003e__InputValue\u003c/code\u003e gains \u003ccode\u003eisDeprecated\u003c/code\u003e/\u003ccode\u003edeprecationReason\u003c/code\u003e, and the SDL output annotates them with \u003ccode\u003e@deprecated\u003c/code\u003e. Deprecating a required argument is a schema error per the spec.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eImplements()\u003c/code\u003e now validates field covariance — a field on an implementing type must be the same type or a sub-type of the interface's field (only fields present at the time of the call are checked, so the add-fields-after-implements pattern is unaffected).\u003c/li\u003e\n\u003cli\u003eField selection merging is now validated: selections with the same response name must be the same field with identical arguments (\u003ccode\u003e{ x: id x: name }\u003c/code\u003e or \u003ccode\u003e{ project(id: 1) project(id: 2) }\u003c/code\u003e are errors — use different aliases), and across mutually exclusive fragments the response shapes must be compatible (\u003ccode\u003e... on Cat { value: lives }\u003c/code\u003e with \u003ccode\u003e... on Dog { value: name }\u003c/code\u003e is an error).\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__type(name: ...)\u003c/code\u003e now returns \u003ccode\u003enull\u003c/code\u003e for an unknown type name per the GraphQL spec, instead of an execution error.\u003c/li\u003e\n\u003cli\u003eAsync result processing is now targeted and compiled instead of a full-result reflection walk: only branches of the result whose types can hold an async value are visited (non-async branches are returned untouched). On a 10,000-row result with one async field and non-async nested collections this cut request time from ~140ms to ~63ms in benchmarks (the no-async baseline being ~19ms). This also stops the walk reading every property of every result object, which could trigger EF lazy-loading of navigation properties the query never selected.\u003c/li\u003e\n\u003cli\u003eSubscription events are no longer executed synchronously on the publisher's thread. Each subscription processes its events on an ordered background queue - \u003ccode\u003eobserver.OnNext\u003c/code\u003e returns immediately instead of blocking while the (potentially async/service-backed) result selection executes for every subscriber. Event order per subscription is preserved, including the terminal error/complete messages.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePolicy evaluation is now truly async\u003c/strong\u003e — \u003ccode\u003ePolicyOrRoleBasedAuthorization\u003c/code\u003e pre-evaluates all policies used in the schema once at the start of each request (properly awaited) instead of blocking with sync-over-async \u003ccode\u003eAuthorizeAsync\u003c/code\u003e calls per field/type check during compilation. New optional \u003ccode\u003eIGqlAuthorizationService.PrepareForRequestAsync\u003c/code\u003e hook (has a default implementation — custom implementations are unaffected).\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eWebSocket hardening\u003c/strong\u003e — new \u003ccode\u003eGraphQLWebSocketOptions\u003c/code\u003e (optional parameter on \u003ccode\u003eUseGraphQLWebSockets\u003c/code\u003e): incoming messages larger than \u003ccode\u003eMaxMessageSizeBytes\u003c/code\u003e (default 1 MB) close the connection with \u003ccode\u003e1009 MessageTooBig\u003c/code\u003e instead of buffering unbounded; malformed JSON closes with \u003ccode\u003e4400\u003c/code\u003e instead of throwing out of the receive loop; and clients that never send \u003ccode\u003econnection_init\u003c/code\u003e are closed with \u003ccode\u003e4408\u003c/code\u003e after \u003ccode\u003eConnectionInitTimeout\u003c/code\u003e (default 10s) per the graphql-ws protocol.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eSecurity (DoS)\u003c/strong\u003e — the GraphQL document parser now enforces a hard recursion-depth backstop of 128 (nested selection sets and nested argument/input values) during parsing, returning a \u003ccode\u003eDocumentError\u003c/code\u003e before a maliciously deep document can exhaust the stack. This runs independently of, and before, the configurable \u003ccode\u003eExecutionOptions.MaxQueryDepth\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eHardening: the dynamic (projection) type cache now uses a full, collision-free key (field names, field types and parent type) instead of a 32-bit hash, removing an unlikely-but-possible hash collision handing a query a cached type with the wrong fields.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBug Fixes\u003c/h2\u003e\u003ca id=\"user-content-bug-fixes\" class=\"anchor\" aria-label=\"Permalink: Bug Fixes\" href=\"#bug-fixes\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed a compiled-delegate cache key collision when \u003ccode\u003eCacheCompiledDelegates\u003c/code\u003e is enabled and an operation has multiple root fields - the second root field was served the first field's compiled delegate, returning the wrong field's data. The cache key now includes the root field name.\u003c/li\u003e\n\u003cli\u003eFixed async argument validators (\u003ccode\u003eIArgumentValidator\u003c/code\u003e via \u003ccode\u003eAddValidator\u0026lt;T\u0026gt;()\u003c/code\u003e) being fire-and-forgotten — a validator doing real async work before adding its errors raced the request and its errors could be silently lost. Validators are now stored as async delegates and genuinely awaited for mutation and subscription arguments. Note validators on query field arguments still run during (synchronous) query compilation — avoid I/O in those. Breaking: \u003ccode\u003eIField.Validators\u003c/code\u003e is now \u003ccode\u003eIReadOnlyCollection\u0026lt;Func\u0026lt;ArgumentValidatorContext, Task\u0026gt;\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed per-request state being written onto the cached query document (\u003ccode\u003eEnableQueryCache\u003c/code\u003e, on by default) during execution. Concurrent requests of the same query text share the parsed document; the dynamic types built for an interface/union selection during a request's first (database) pass were stored on the shared AST node and read in its second (services) pass, so an interleaved request whose \u003ccode\u003e@include\u003c/code\u003e/\u003ccode\u003e@skip\u003c/code\u003e variables expanded a different selection could poison another request's second pass — failing it with \u003ccode\u003eNo coercion operator is defined between types ...\u003c/code\u003e or silently dropping fragment fields. That state now lives on the per-request compile context, and mutations returning lists no longer write their per-request parameters onto the shared selection node.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eSchemaBuilder.FromObject\u003c/code\u003e registering an abstract base class as an interface but not linking its implementing types to it (unless \u003ccode\u003eAutoCreateInterfaceTypes\u003c/code\u003e was on). The half-configured schema made inline fragments on the interface silently mis-project — \u003ccode\u003eanimals { ... on Cat { lives } }\u003c/code\u003e returned the whole \u003ccode\u003eCat\u003c/code\u003e object for \u003ccode\u003elives\u003c/code\u003e instead of the value. \u003ccode\u003eFromObject\u003c/code\u003e now links every object type to any of its base types/interfaces that are registered in the schema as interfaces, regardless of the order the types were discovered in.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003e@include(if: $variable)\u003c/code\u003e / \u003ccode\u003e@skip(if: $variable)\u003c/code\u003e on an \u003cstrong\u003einline fragment\u003c/strong\u003e failing with \u003ccode\u003eVariable or value used for argument 'if' does not match argument type 'Boolean!'\u003c/code\u003e. The parser executed inline-fragment directives at parse time — before variable values exist (literal values worked). Directives on inline fragments are now processed at execution time like field directives.\u003c/li\u003e\n\u003cli\u003eAsync result processing fixes: a \u003ccode\u003eDictionary\u0026lt;,\u0026gt;\u003c/code\u003e value in a result with async fields now stays a dictionary (previously it was turned into a list of key/value pairs, changing the serialized shape); user types that happen to live in an \u003ccode\u003eEntityGraphQL.*\u003c/code\u003e namespace are no longer treated as the engine's internal projection types and rebuilt; a non-generic \u003ccode\u003eValueTask\u003c/code\u003e value is awaited instead of being walked as an object.\u003c/li\u003e\n\u003cli\u003eMutation and subscription methods can now declare a \u003ccode\u003eCancellationToken\u003c/code\u003e parameter and receive the executing request's token (previously this failed with a service-not-found/argument error, despite query field resolvers supporting it). The parameter is not exposed as a GraphQL argument.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eUseFilter()\u003c/code\u003e/\u003ccode\u003eUseSort()\u003c/code\u003e being silently ignored on a nested field whose own resolver is service-backed (e.g. \u003ccode\u003eschema.Type\u0026lt;Project\u0026gt;().AddField(...).Resolve\u0026lt;Service\u0026gt;(...).UseFilter()\u003c/code\u003e). Such a collection only exists in the services execution pass, where both extensions assumed the filtering/sorting had already happened in the first (database) pass — the query returned unfiltered/unsorted data with no error. Root-level service-backed fields were unaffected.\u003c/li\u003e\n\u003cli\u003eFixed three issues in the async field concurrency limiting (\u003ccode\u003emaxConcurrency\u003c/code\u003e / \u003ccode\u003eMaxQueryConcurrency\u003c/code\u003e / \u003ccode\u003eServiceConcurrencyLimits\u003c/code\u003e): the per-request \u003ccode\u003eCancellationToken\u003c/code\u003e and limiter registry were baked into the expression as constants, so with \u003ccode\u003eCacheCompiledDelegates\u003c/code\u003e on, request 1's token lived inside the cached delegate and, once cancelled, failed every later request of that query (they are now passed as per-request execution parameters); a cancelled semaphore acquire leaked the permits already acquired (acquisition now happens inside the try/finally); and the wrapped operation lambda was compiled per list element (now compiled once per expression and cached).\u003c/li\u003e\n\u003cli\u003eFixed the (opt-in) \u003ccode\u003eCacheCompiledDelegates\u003c/code\u003e cache key hashing variable values with \u003ccode\u003eToString()\u003c/code\u003e. Collection values (\u003ccode\u003eList\u0026lt;\u0026gt;\u003c/code\u003e, arrays, \u003ccode\u003eDictionary\u0026lt;,\u0026gt;\u003c/code\u003e) stringify to their type name — identical for different contents — so two requests differing only in such a variable (e.g. a \u003ccode\u003esort\u003c/code\u003e input) could share one cache entry and the second request would be served the first request's compiled plan (wrong ORDER BY field/direction). Values are now hashed by content, and a request whose variable values cannot be represented by value skips delegate caching for that request instead of risking a wrong-plan hit.\u003c/li\u003e\n\u003cli\u003eFixed bulk resolvers (\u003ccode\u003eResolveBulk\u003c/code\u003e) leaking across sibling root fields. In a query with multiple root fields, a bulk resolver registered while executing one root field was re-run during each following root field's execution — re-calling the service (extra bulk loads) and, when the sibling's data had a different shape, failing that field with \u003ccode\u003eCould not find field egql__... on type ...\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eFixed an operator-precedence bug in filter expression compilation that mis-detected string conversions: comparing a \u003ccode\u003eDateTime\u003c/code\u003e/\u003ccode\u003eDateTimeOffset\u003c/code\u003e/\u003ccode\u003eTimeSpan\u003c/code\u003e/\u003ccode\u003eDateOnly\u003c/code\u003e/\u003ccode\u003eTimeOnly\u003c/code\u003e field to a nullable value of the same type failed to compile, and a \u003ccode\u003eGuid\u003c/code\u003e vs \u003ccode\u003eGuid?\u003c/code\u003e comparison was built as \u003ccode\u003eGuid.Parse(x.ToString())\u003c/code\u003e (in-memory only, not translatable to SQL). These now use simple nullable promotion.\u003c/li\u003e\n\u003cli\u003e#378 - Filtering by a paged child field now works. Within a filter expression a field using \u003ccode\u003eUseOffsetPaging()\u003c/code\u003e/\u003ccode\u003eUseConnectionPaging()\u003c/code\u003e resolves to its underlying collection (the page wrapper only exists in the GraphQL schema), so \u003ccode\u003eenquiries(filter: \"enquirerDaps.count() \u0026gt; 0\")\u003c/code\u003e, \u003ccode\u003e\"enquirerDaps.items.count() \u0026gt; 0\"\u003c/code\u003e (\u003ccode\u003eitems\u003c/code\u003e/\u003ccode\u003eedges\u003c/code\u003e are the collection) and \u003ccode\u003e\"enquirerDaps.totalItems \u0026gt; 0\"\u003c/code\u003e (\u003ccode\u003etotalItems\u003c/code\u003e/\u003ccode\u003etotalCount\u003c/code\u003e map to \u003ccode\u003eCount()\u003c/code\u003e) all compile and translate to SQL under EF. Previously these failed with \u003ccode\u003eMethod 'count' not found on current context 'OffsetPage'\u003c/code\u003e or a \u003ccode\u003eNullReferenceException\u003c/code\u003e. Other page metadata (e.g. \u003ccode\u003ehasNextPage\u003c/code\u003e) raises a clear error when used in a filter.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta8\u003c/h1\u003e\u003ca id=\"user-content-600-beta8\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta8\" href=\"#600-beta8\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eNew Features\u003c/h2\u003e\u003ca id=\"user-content-new-features\" class=\"anchor\" aria-label=\"Permalink: New Features\" href=\"#new-features\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdded the \u003ccode\u003eUseAggregate()\u003c/code\u003e field extension for exposing aggregate data over a collection field — \u003ccode\u003ecount\u003c/code\u003e plus \u003ccode\u003emin\u003c/code\u003e/\u003ccode\u003emax\u003c/code\u003e/\u003ccode\u003esum\u003c/code\u003e/\u003ccode\u003eaverage\u003c/code\u003e over its fields, computed over the whole collection and translated to a single SQL query under EF. The shape is function-first: \u003ccode\u003e{ count, min { fieldA }, max { fieldA }, sum { fieldA }, average { fieldA } }\u003c/code\u003e. \u003ccode\u003emin\u003c/code\u003e/\u003ccode\u003emax\u003c/code\u003e apply to any orderable field (numbers, dates, strings); \u003ccode\u003esum\u003c/code\u003e/\u003ccode\u003eaverage\u003c/code\u003e to numerics (\u003ccode\u003eshort\u003c/code\u003e, \u003ccode\u003eint\u003c/code\u003e, \u003ccode\u003elong\u003c/code\u003e, \u003ccode\u003efloat\u003c/code\u003e, \u003ccode\u003edouble\u003c/code\u003e, \u003ccode\u003edecimal\u003c/code\u003e and nullable forms). Aggregates over an empty set return \u003ccode\u003enull\u003c/code\u003e.\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePlacement is controlled by \u003ccode\u003eAggregatePlacement\u003c/code\u003e and defaults to \u003ccode\u003eAuto\u003c/code\u003e: a paged field attaches an \u003ccode\u003eaggregate\u003c/code\u003e field to the paging result (\u003ccode\u003ePagingWrapper\u003c/code\u003e), otherwise the field is wrapped as \u003ccode\u003e{ items, aggregate }\u003c/code\u003e (\u003ccode\u003eOwnWrapper\u003c/code\u003e), which handles every field uniformly including service-backed resolvers and custom arguments. An additive sibling \u003ccode\u003e{field}Aggregate\u003c/code\u003e field (\u003ccode\u003eSiblingField\u003c/code\u003e) is available as an opt-in so aggregates can be added to an existing field without a breaking shape change; it carries the source field's arguments (filter and custom resolver arguments) but cannot be used on a service-backed collection resolver.\u003c/li\u003e\n\u003cli\u003ePass a field selection to restrict the aggregatable fields, e.g. \u003ccode\u003eUseAggregate((Person p) =\u0026gt; new { p.Height, p.Age })\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eA scalar field whose resolver reduces a collection using a service (e.g. \u003ccode\u003e(db, svc) =\u0026gt; db.People.Sum(p =\u0026gt; svc.Score(p.Id))\u003c/code\u003e) now executes via the two-pass model — the element values the service needs are projected and materialized in the first (DB) pass, and the reduction runs in memory in the second — instead of failing to translate under EF.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseAggregate\u003c/code\u003e can aggregate a service-backed element field (e.g. \u003ccode\u003eperson.score\u003c/code\u003e resolved via \u003ccode\u003eResolve\u0026lt;Service\u0026gt;(...)\u003c/code\u003e). The per-element service values are projected/materialized in the first pass and reduced in memory in the second, so \u003ccode\u003eaggregate { sum { score } }\u003c/code\u003e works under EF.\u003c/li\u003e\n\u003cli\u003eAggregating a \u003cstrong\u003ebulk-resolved\u003c/strong\u003e element field (\u003ccode\u003eResolveBulk\u003c/code\u003e) uses the bulk loader: the keys are projected/materialized in the first pass and all values are fetched in a single bulk call in the second, then reduced in memory — so it doesn't fall back to one service call per element. (Sync, no-argument bulk resolvers; async/argument bulk resolvers use the per-element fallback.)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-3\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-3\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePaging performance: \u003ccode\u003ehasNextPage\u003c/code\u003e no longer runs a \u003ccode\u003eCOUNT(*)\u003c/code\u003e query when the total isn't otherwise needed. \u003ccode\u003eUseOffsetPaging\u003c/code\u003e (when \u003ccode\u003etotalItems\u003c/code\u003e isn't selected) and \u003ccode\u003eUseConnectionPaging\u003c/code\u003e (forward paging with a \u003ccode\u003epageInfo\u003c/code\u003e selection of only \u003ccode\u003ehasNextPage\u003c/code\u003e/\u003ccode\u003ehasPreviousPage\u003c/code\u003e) answer it with a cheap \u003ccode\u003eEXISTS\u003c/code\u003e query — skip past the current page and check for any row. Selections needing the total (\u003ccode\u003etotalCount\u003c/code\u003e/\u003ccode\u003etotalItems\u003c/code\u003e, \u003ccode\u003eendCursor\u003c/code\u003e/\u003ccode\u003estartCursor\u003c/code\u003e, or the \u003ccode\u003elast\u003c/code\u003e/\u003ccode\u003ebefore\u003c/code\u003e arguments) behave as before.\u003c/li\u003e\n\u003cli\u003eConnection paging cursor assignment no longer evaluates the (dynamic) cursor arguments per row — the cursor base is computed once per request (\u003ccode\u003eConnectionHelper.ApplyCursors\u003c/code\u003e) and each edge's cursor derived from it while enumerating.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta7\u003c/h1\u003e\u003ca id=\"user-content-600-beta7\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta7\" href=\"#600-beta7\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBug Fixes\u003c/h2\u003e\u003ca id=\"user-content-bug-fixes-1\" class=\"anchor\" aria-label=\"Permalink: Bug Fixes\" href=\"#bug-fixes-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed \u003ccode\u003eArgumentNullException\u003c/code\u003e (\"Value cannot be null. (Parameter 'type')\") when a service-resolved field on a parent type was queried together with a child collection field whose type uses \u003ccode\u003eAddTypeMapping\u003c/code\u003e to map a CLR type to a GraphQL list type (e.g. \u003ccode\u003eAddTypeMapping\u0026lt;NpgsqlPolygon\u0026gt;(\"[Point!]!\")\u003c/code\u003e). The two-pass execution failed to infer the list element type for a non-generic CLR type that implements \u003ccode\u003eIEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta6\u003c/h1\u003e\u003ca id=\"user-content-600-beta6\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta6\" href=\"#600-beta6\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-1\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#515 - \u003ccode\u003eDefaultGraphQLResponseSerializer\u003c/code\u003e and \u003ccode\u003eDefaultGraphQLRequestDeserializer\u003c/code\u003e default \u003ccode\u003eJsonSerializerOptions\u003c/code\u003e now use \u003ccode\u003eJsonSerializerDefaults.Web\u003c/code\u003e. For the request deserializer this enables case-insensitive property matching and reading numbers from JSON strings. The response serializer's output is unchanged (it was already camelCase).\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eExecutionOptions.MaxQueryNodes\u003c/code\u003e renamed to \u003ccode\u003eMaxFieldSelections\u003c/code\u003e — it counts field selections (the GraphQL spec term) after fragment expansion, not AST or result nodes.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eExecutionOptions.UserKeySelector\u003c/code\u003e renamed to \u003ccode\u003eRateLimitUserKeySelector\u003c/code\u003e to reflect that it only affects per-field rate limiters tagged \u003ccode\u003euserSpecific: true\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta5\u003c/h1\u003e\u003ca id=\"user-content-600-beta5\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta5\" href=\"#600-beta5\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-2\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eAddGraphQLOptions\u0026lt;TContext\u0026gt;\u003c/code\u003e now exposes overloaded \u003ccode\u003eConfigureSchema(...)\u003c/code\u003e methods instead of settable schema-configuration delegate properties. Use \u003ccode\u003eoptions.ConfigureSchema(schema =\u0026gt; { ... })\u003c/code\u003e for the common case, or \u003ccode\u003eoptions.ConfigureSchema((schema, services) =\u0026gt; { ... })\u003c/code\u003e when schema setup needs the active \u003ccode\u003eIServiceProvider\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAddGraphQLSchema()\u003c/code\u003e in \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e now returns a dedicated \u003ccode\u003eGraphQLSchemaBuilder\u0026lt;TContext\u0026gt;\u003c/code\u003e instead of \u003ccode\u003eIServiceCollection\u003c/code\u003e. Schema-shape customization should now be chained with \u003ccode\u003eConfigureGraphQLSchema(...)\u003c/code\u003e, for example:\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eservices.AddGraphQLSchema\u0026lt;MyContext\u0026gt;(options =\u0026gt; { ... }).ConfigureGraphQLSchema\u0026lt;MyContext\u0026gt;(schema =\u0026gt; { ... });\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-4\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-4\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#508 - Added a \u003ccode\u003esrc/examples/tooling\u003c/code\u003e example showing GraphiQL and Hot Chocolate Nitro hosted against an \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e \u003ccode\u003e/api/graphql\u003c/code\u003e endpoint.\u003c/li\u003e\n\u003cli\u003eQuery/document errors now preserve structured source locations in addition to the existing message text, and \u003ccode\u003eGraphQLError\u003c/code\u003e responses now emit \u003ccode\u003elocations\u003c/code\u003e metadata when available. Also normalized invalid field-directive registration to throw \u003ccode\u003eEntityGraphQLSchemaException\u003c/code\u003e instead of \u003ccode\u003eInvalidOperationException\u003c/code\u003e on the public schema API surface.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta4\u003c/h1\u003e\u003ca id=\"user-content-600-beta4\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta4\" href=\"#600-beta4\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-3\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-3\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSimplified \u003ccode\u003eIFieldExtension\u003c/code\u003e compilation hooks by replacing long positional parameter lists with context objects:\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eGetExpressionAndArguments()\u003c/code\u003e now takes \u003ccode\u003eFieldExtensionExpressionContext\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eProcessExpressionPreSelection()\u003c/code\u003e now takes \u003ccode\u003eFieldExtensionPreSelectionContext\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eProcessExpressionSelection()\u003c/code\u003e now takes \u003ccode\u003eFieldExtensionSelectionContext\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-5\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-5\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#513 - \u003ccode\u003eAddGraphQLSchema()\u003c/code\u003e now supports configuring the registered \u003ccode\u003eSchemaProvider\u0026lt;TContext\u0026gt;\u003c/code\u003e lifetime via \u003ccode\u003eAddGraphQLOptions.SchemaLifetime\u003c/code\u003e. The default remains singleton, with scoped/transient lifetimes available for request-specific schema construction.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-14\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-14\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#498 - fix ExecutableDirectiveLocation naming regression introduced in beta3\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta3\u003c/h1\u003e\u003ca id=\"user-content-600-beta3\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta3\" href=\"#600-beta3\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-4\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-4\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFields in \u003ccode\u003eExecutableDirectiveLocation\u003c/code\u003e enum have been renamed in C# style\u003c/li\u003e\n\u003cli\u003e#476 - Introduce generic custom type converters (from-to, to-only, from-only) for flexible runtime value conversion.\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eExpand \u003ccode\u003eisAny\u003c/code\u003e to support additional types through the method provider\u003c/li\u003e\n\u003cli\u003eRemoves \u003ccode\u003eICustomTypeConverter\u003c/code\u003e. See updated docs and the more flexible converting methods available\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eRenamed \u003ccode\u003eSchemaBuilderSchemaOptions\u003c/code\u003e to \u003ccode\u003eSchemaProviderOptions\u003c/code\u003e for better clarity between schema builder reflection options and schema provider configuration options\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAddGraphQLOptions\u0026lt;TSchemaContext\u0026gt;\u003c/code\u003e refactored from inheritance to composition:\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNow exposes \u003ccode\u003eBuilder\u003c/code\u003e property for \u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e (controls building/reflection behavior)\u003c/li\u003e\n\u003cli\u003eNow exposes \u003ccode\u003eSchema\u003c/code\u003e property for \u003ccode\u003eSchemaProviderOptions\u003c/code\u003e (controls schema provider configuration like authorization, introspection, error handling, field naming)\u003c/li\u003e\n\u003cli\u003eRemoved \u003ccode\u003eFieldNamer\u003c/code\u003e property - now accessed via \u003ccode\u003eoptions.Schema.FieldNamer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003ePreBuildSchemaFromContext\u003c/code\u003e moved from \u003ccode\u003eSchemaProviderOptions\u003c/code\u003e to \u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e\u003c/strong\u003e - now accessed via \u003ccode\u003eoptions.Builder.PreBuildSchemaFromContext\u003c/code\u003e (it's called during the schema building phase, not runtime)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eRemoved \u003ccode\u003eintrospectionEnabled\u003c/code\u003e parameter from \u003ccode\u003eAddGraphQLSchema\u003c/code\u003e extension method - configure via \u003ccode\u003eoptions.Schema.IntrospectionEnabled\u003c/code\u003e instead\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAuthorization refactoring\u003c/strong\u003e: \u003ccode\u003eRequiredAuthorization\u003c/code\u003e now uses a keyed data structure for extensibility\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eRequiredAuthorization\u003c/code\u003e no longer has separate \u003ccode\u003eRoles\u003c/code\u003e backing field - roles are stored via \u003ccode\u003e\"egql:core:roles\"\u003c/code\u003e key in \u003ccode\u003eKeyedData\u003c/code\u003e dictionary\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003eRoles\u003c/code\u003e property is now nullable and computed from keyed data\u003c/li\u003e\n\u003cli\u003ePolicy support moved entirely to \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e package using \u003ccode\u003e\"egql:aspnet:policies\"\u003c/code\u003e key\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eRequiredAuthorization\u003c/code\u003e constructor that took roles parameter has been removed - use \u003ccode\u003eRequiresAnyRole()\u003c/code\u003e or \u003ccode\u003eRequiresAllRoles()\u003c/code\u003e methods instead\u003c/li\u003e\n\u003cli\u003eCustom authorization implementations should use namespaced keys (e.g., \u003ccode\u003e\"myapp:custom-auth\"\u003c/code\u003e) to avoid conflicts\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003ewithoutServiceFields\u003c/code\u003e parameter to \u003ccode\u003eIFieldExtension.GetExpressionAndArguments()\u003c/code\u003e to allow extensions to know when they're in the first pass of two-pass execution and should skip service-dependent expressions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-6\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-6\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdded pre-execution query guards (\u003ccode\u003eMaxQueryDepth\u003c/code\u003e, \u003ccode\u003eMaxQueryNodes\u003c/code\u003e, \u003ccode\u003eMaxFieldAliases\u003c/code\u003e, \u003ccode\u003eMaxQueryComplexity\u003c/code\u003e) to \u003ccode\u003eExecutionOptions\u003c/code\u003e. All default to unlimited (opt-in). A limit violation returns a GraphQL \u003ccode\u003eDocumentError\u003c/code\u003e and prevents any resolver from running. Configure in \u003ccode\u003eExecutionOptions\u003c/code\u003e in your call to \u003ccode\u003eschema.ExecuteRequest(...)\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdded complexity scoring via \u003ccode\u003efield.SetComplexity(int)\u003c/code\u003e (fixed cost) or \u003ccode\u003efield.SetComplexity(ctx =\u0026gt; ctx.Args.take * (1 + ctx.ChildComplexity))\u003c/code\u003e (args-aware). Pluggable via \u003ccode\u003eIQueryComplexityAnalyzer\u003c/code\u003e / \u003ccode\u003eExecutionOptions.QueryComplexityAnalyzer\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eAdded per-field rate limiting via \u003ccode\u003efield.AddRateLimit(\"policy-name\")\u003c/code\u003e. \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e ships a \u003ccode\u003ePartitionedRateLimiter\u003c/code\u003e-backed default registered with \u003ccode\u003eservices.AddGraphQLFieldRateLimit(opts =\u0026gt; { opts.AddFixedWindowPolicy(...); opts.AddConcurrencyPolicy(...); ... })\u003c/code\u003e. Rate limits count per-selection (aliases each burn a permit) and support \u003ccode\u003euserSpecific: true\u003c/code\u003e partitioning by user key.\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ca href=\"https://spec.graphql.org/September2025/#sec-Descriptions\" rel=\"nofollow\"\u003edocument descriptions\u003c/a\u003e as outlined in the latest 2025 spec. Basically string comments in the query document\u003c/li\u003e\n\u003cli\u003e#474 - Add support for \u003ccode\u003eTimeSpan\u003c/code\u003e as a scalar in the default schema\u003c/li\u003e\n\u003cli\u003e#500 - Expose parsed executable directive metadata via \u003ccode\u003eBaseGraphQLField.Directives\u003c/code\u003e by making \u003ccode\u003eGraphQLDirective.Name\u003c/code\u003e and \u003ccode\u003eGraphQLDirective.Processor\u003c/code\u003e public for custom query processing scenarios\u003c/li\u003e\n\u003cli\u003eReplaced the previous 3rd party GraphQL document parser.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet10.0\u003c/code\u003e as a target\u003c/li\u003e\n\u003cli\u003eWhen using Offset Paging the total items expression is now only executed if the query requests \u003ccode\u003ehasNextPage\u003c/code\u003e or \u003ccode\u003etotalItems\u003c/code\u003e fields\u003c/li\u003e\n\u003cli\u003eWhen using Connection Paging the total count expression is now only executed if the query requests \u003ccode\u003etotalCount\u003c/code\u003e or \u003ccode\u003epageInfo\u003c/code\u003e fields or the 'last' argument is used\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eIField.AsService()\u003c/code\u003e to signal that a field should (or can) be treated as a service field. This means null-checks are differently and they are executed after EF related calls (if \u003ccode\u003eExecutionOptions.ExecuteServiceFieldsSeparately = true\u003c/code\u003e). Useful for fields that operate with data fully in-memory and do not need a registered service to fetch data or work\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAddGraphQLSchema\u003c/code\u003e in ASP.NET now automatically detects and applies environment-based defaults:\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eUses \u003ccode\u003ePolicyOrRoleBasedAuthorization\u003c/code\u003e by default (instead of requiring explicit configuration)\u003c/li\u003e\n\u003cli\u003eAutomatically sets \u003ccode\u003eIsDevelopment = false\u003c/code\u003e in non-Development environments\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSubscription fields now support \u003ccode\u003eTask\u0026lt;IObservable\u0026lt;T\u0026gt;\u0026gt;\u003c/code\u003e and \u003ccode\u003eValueTask\u0026lt;IObservable\u0026lt;T\u0026gt;\u0026gt;\u003c/code\u003e as return types in addition to \u003ccode\u003eIObservable\u0026lt;T\u0026gt;\u003c/code\u003e. This allows subscription setup methods to be async, which is useful when subscribing to an external message broker (Redis, RabbitMQ, etc.) requires an async connection step.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-15\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-15\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRewrote WebSocket subscription send path (\u003ccode\u003eGraphQLWebSocketServer\u003c/code\u003e) to use a \u003ccode\u003eChannel\u003c/code\u003e-backed drain task. All outbound frames are now serialised through a single writer, eliminating the concurrent \u003ccode\u003eWebSocket.SendAsync\u003c/code\u003e violation that could corrupt the frame stream when multiple subscriptions fired simultaneously. The \u003ccode\u003eIObserver\u0026lt;T\u0026gt;\u003c/code\u003e callbacks (\u003ccode\u003eOnNext\u003c/code\u003e/\u003ccode\u003eOnError\u003c/code\u003e/\u003ccode\u003eOnCompleted\u003c/code\u003e) now enqueue to the channel rather than blocking on \u003ccode\u003eGetAwaiter().GetResult()\u003c/code\u003e, freeing the observable/Redis thread immediately. \u003ccode\u003esubscriptions\u003c/code\u003e dictionary replaced with \u003ccode\u003eConcurrentDictionary\u003c/code\u003e for thread-safety.\u003c/li\u003e\n\u003cli\u003eFixed \u003ccode\u003eSelectWithNullCheck\u003c/code\u003e error when using \u003ccode\u003e.ResolveAsync\u0026lt;TService\u0026gt;()\u003c/code\u003e on a field that returns a list of complex objects with subfield selection (e.g. \u003ccode\u003etoolCatalog { name }\u003c/code\u003e), where the parent field returns a single object. In the two-pass execution path the element-type parameter was incorrectly derived from \u003ccode\u003eTask\u0026lt;IEnumerable\u0026lt;T\u0026gt;\u0026gt;\u003c/code\u003e rather than \u003ccode\u003eT\u003c/code\u003e, and the resolved collection was not preserved as a typed \u003ccode\u003eList\u0026lt;T\u0026gt;\u003c/code\u003e when rebuilding the async result graph.\u003c/li\u003e\n\u003cli\u003e#498 - Fixed introspection types and fields incorrectly using the configured \u003ccode\u003eFieldNamer\u003c/code\u003e. Spec-defined introspection names now remain standard camelCase even when the application schema uses a custom naming convention.\u003c/li\u003e\n\u003cli\u003e#486 - Fixed directives on root-level fields failing to resolve query variable arguments (e.g. \u003ccode\u003e@include(if: $var)\u003c/code\u003e). \u003ccode\u003eOpVariableParameter\u003c/code\u003e and \u003ccode\u003edocVariables\u003c/code\u003e were not being passed through to directive evaluation in \u003ccode\u003eGraphQLQueryStatement\u003c/code\u003e, causing any directive that references a variable to throw a type-mismatch error.\u003c/li\u003e\n\u003cli\u003e#481 - handle \u003ccode\u003eResolveAsync\u003c/code\u003e on a top level field\u003c/li\u003e\n\u003cli\u003e#488 - Support async fields with \u003ccode\u003e[GraphQLField]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#487 - Fix \u003ccode\u003eResolveAsync\u003c/code\u003e with arguments\u003c/li\u003e\n\u003cli\u003e#484 - Better support for nullable numeric types in filter expressions. Nullable int/short/long fields can now be compared to numeric literals without type mismatch errors. The fix also prioritizes converting literals over field expressions to avoid database column casts that could prevent index usage.\u003c/li\u003e\n\u003cli\u003e#459 - Fixed error \"variable 'service' ... is not defined\" when using \u003ccode\u003eResolve\u0026lt;TService\u0026gt;()\u003c/code\u003e directly on a field that also uses \u003ccode\u003eUseConnectionPaging()\u003c/code\u003e or \u003ccode\u003eUseOffsetPaging()\u003c/code\u003e. When the paging field's own resolver depends on a service, the field now falls back to single-pass execution so the service parameter is always in scope. Fields with services on child types (not the paging field itself) continue to use the normal two-pass execution path where the DB query runs first and the service is resolved in-memory against the paged results.\u003c/li\u003e\n\u003cli\u003eAs per spec - \u003ccode\u003e_Type.fields\u003c/code\u003e should be \u003ccode\u003enull\u003c/code\u003e for \u003ccode\u003eINPUT_OBJECT\u003c/code\u003e. Previously the \u003ccode\u003einputFields\u003c/code\u003e were repeated.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta2\u003c/h1\u003e\u003ca id=\"user-content-600-beta2\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta2\" href=\"#600-beta2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-7\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-7\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdded \u003ccode\u003eselectMany\u003c/code\u003e method support to filter expressions, enabling flattening using nested collections within queries.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-16\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-16\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFixed (maybe a regression introduced in 6.0.0-beta1) \u003ccode\u003eUseFilter()\u003c/code\u003e incorrectly adding a default value to the filter argument when applied to fields that already have other arguments defined.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e6.0.0-beta1\u003c/h1\u003e\u003ca id=\"user-content-600-beta1\" class=\"anchor\" aria-label=\"Permalink: 6.0.0-beta1\" href=\"#600-beta1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-5\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-5\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003eSupport for partial results as per spec. \u003cstrong\u003eThis actually \u003cem\u003efixes\u003c/em\u003e EntityGraphQL to follow the GraphQL spec regarding partial results.\u003c/strong\u003e However it does change behavior.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eEntityGraphQL basically executes each \"top level\" field in the operation separately, now if any fail, you'll get the partial results of those that succeeded and error information about the failed ones.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAddGraphQLValidator\u003c/code\u003e now registers \u003ccode\u003eIGraphQLValidator\u003c/code\u003e as \u003ccode\u003eTransient\u003c/code\u003e. This \u003cem\u003ewas\u003c/em\u003e the original intent as the docs have examples of bailing early by checking if the validator has any errors. The intent was errors for that field. This change helps enable partial results. If you want the old behavior, remove the use of \u003ccode\u003eAddGraphQLValidator\u003c/code\u003e and just add \u003ccode\u003eIGraphQLValidator\u003c/code\u003e yourself as \u003ccode\u003eScoped\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAs per spec \u003ca href=\"https://spec.graphql.org/draft/#sec-Data\" rel=\"nofollow\"\u003eIf an error was raised during the execution that prevented a valid response, the \"data\" entry in the response should be null\u003c/a\u003e. This was not always the case\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003eRemoved methods/properties marked as obsolete\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eIField.UseArgumentsFromField\u003c/code\u003e use \u003ccode\u003eGetExpressionAndArguments\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eIField.UseArgumentsFrom\u003c/code\u003e use \u003ccode\u003eGetExpressionAndArguments\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eIField.ResolveWithService\u003c/code\u003e use \u003ccode\u003eResolve\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eIFieldExtension.GetExpression\u003c/code\u003e use the new \u003ccode\u003eGetExpressionAndArguments\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eMapGraphQL\u003c/code\u003e \u003ccode\u003efollowSpec = true\u003c/code\u003e is now the default behavior, it follows \u003ca href=\"https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md\"\u003ehttps://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md\u003c/a\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003eYou can no longer add filter support by using \u003ccode\u003eArgumentHelper.EntityQuery\u003c/code\u003e or \u003ccode\u003eEntityQueryType\u003c/code\u003e in the field args, e.g. \u003ccode\u003eschemaProvider.Query().ReplaceField(\"users\", new { filter = ArgumentHelper.EntityQuery\u0026lt;User\u0026gt;() }, \"Users optionally filtered\")\u003c/code\u003e. Please use the \u003ccode\u003eUseFilter\u003c/code\u003e extension which supports filters referencing service fields.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eIFieldExtension.GetExpressionAndArguments\u003c/code\u003e now takes the current GraphQL node \u003ccode\u003eBaseGraphQLField fieldNode\u003c/code\u003e as an argument. \u003ccode\u003eparentNode\u003c/code\u003e has been removed. Access it via \u003ccode\u003efieldNode.ParentNode\u003c/code\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e package drops \u003ccode\u003enet6.0\u003c/code\u003e and \u003ccode\u003enet7.0\u003c/code\u003e as targets. \u003ccode\u003eEntityGraphQL\u003c/code\u003e package drops \u003ccode\u003enet6.0\u003c/code\u003e as a target however as it still targets \u003ccode\u003enetstandard2.1\u003c/code\u003e you can still use it with those previous dotnet versions.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-8\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-8\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePartial results support\u003c/li\u003e\n\u003cli\u003e#467 - New implementation for handling \u003ccode\u003easync\u003c/code\u003e fields. See updated docs and use the \u003ccode\u003e.ResolveAsync\u0026lt;\u0026gt;()\u003c/code\u003e methods when adding fields.\u003c/li\u003e\n\u003cli\u003eNew support for \u003ccode\u003eCancellationToken\u003c/code\u003e. A \u003ccode\u003eCancellationToken\u003c/code\u003e can be passed into the \u003ccode\u003eExecuteRequestAsync\u003c/code\u003e method. The token will be checked throughout execution and passed to other async operations. You can use it in \u003ccode\u003e.ResolveAsync\u0026lt;MyService, CancellationToken\u0026gt;((context, service, ct) =\u0026gt; service.DoSomethingAsync(context.Field, ct))\u003c/code\u003e to pass it to your \u003ccode\u003easync\u003c/code\u003e fields. If you use \u003ccode\u003eMapGraphQL()\u003c/code\u003e for ASP.NET it will use the \u003ccode\u003econtext.RequestAborted\u003c/code\u003e as the cancellation token.\u003c/li\u003e\n\u003cli\u003e#469 - Make filter grammar immutable as it should be for performance\u003c/li\u003e\n\u003cli\u003e#303 - You can now reference service fields in the \u003ccode\u003eUseFilter/[UseFilter]\u003c/code\u003e expression. Like normal the filter will first be applied with non service fields, then applied again with service fields is \u003ccode\u003eExecutionOptions.ExecuteServiceFieldsSeparately == true\u003c/code\u003e (default).\u003c/li\u003e\n\u003cli\u003e#396 - Filter expressions now support GraphQL variables using \u003ccode\u003e$variableName\u003c/code\u003e syntax. This allows parameterized and dynamic filters (e.g., \u003ccode\u003efilter: \"name == $searchTerm \u0026amp;\u0026amp; age \u0026gt; $minAge\"\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003eRelated to #331 and the \u003ccode\u003efollowSpec = true\u003c/code\u003e above, errors and exceptions were refactored internally. Following the GraphQL spec if the core library gets an error it will still return a \u003ccode\u003eGraphQLResult\u003c/code\u003e with the errors (and potentially partial results).\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h1\u003e\u003ca id=\"user-content-fixes-17\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-17\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#429 Validation attributes now work with \u003ccode\u003e[GraphQLInputType]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.7.3\u003c/h1\u003e\u003ca id=\"user-content-573\" class=\"anchor\" aria-label=\"Permalink: 5.7.3\" href=\"#573\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-18\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-18\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#526 - Fixed \u003ccode\u003eResolveBulk\u003c/code\u003e fields failing when reached through a nested single-object navigation (e.g. \u003ccode\u003etasks { project { createdBy } }\u003c/code\u003e) or a mutation result selection - single-object contexts are now wrapped for the bulk key batching, object navigations off a list context project per element, and null navigations anywhere in the chain no longer throw. Thanks @alex-birch\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.7.2\u003c/h1\u003e\u003ca id=\"user-content-572\" class=\"anchor\" aria-label=\"Permalink: 5.7.2\" href=\"#572\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-19\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-19\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#512 - Updated \u003ccode\u003eHotChocolate.Language\u003c/code\u003e dependency from 13.9.14 to 13.9.16 to resolve critical vulnerability (GHSA-qr3m-xw4c-jqw3: stack overflow via deeply nested GraphQL documents)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.7.1\u003c/h1\u003e\u003ca id=\"user-content-571\" class=\"anchor\" aria-label=\"Permalink: 5.7.1\" href=\"#571\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-20\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-20\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#466 Include enum-typed input fields in introspection per GraphQL spec\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.7.0\u003c/h1\u003e\u003ca id=\"user-content-570\" class=\"anchor\" aria-label=\"Permalink: 5.7.0\" href=\"#570\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-9\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eQueryInfo Support: Added optional query execution information that can be included in the result extensions. Enable with \u003ccode\u003eExecutionOptions.IncludeQueryInfo = true\u003c/code\u003e to get metadata about:\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eOperation type (Query, Mutation, Subscription)\u003c/li\u003e\n\u003cli\u003eOperation name\u003c/li\u003e\n\u003cli\u003eTypes queried and their selected fields\u003c/li\u003e\n\u003cli\u003eTotal number of types and fields queried\u003c/li\u003e\n\u003cli\u003eThis is useful for query analysis, debugging, and monitoring GraphQL usage patterns\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix #441 (PR #455) - Have your argument class (including an \u003ccode\u003eInputType\u003c/code\u003e) class inherit \u003ccode\u003eArgumentsTracker\u003c/code\u003e or implement \u003ccode\u003eIArgumentsTracker\u003c/code\u003e to be able to tell if a variable is just the dotnet default value or is set from the query (variable or inline) with \u003ccode\u003eargs.IsSet\u003c/code\u003e. You can also include \u003ccode\u003eIArgumentsTracker\u003c/code\u003e as an argument in your mutations etc. This is useful if you method usings simple arguments e.g. \u003ccode\u003eMyMutation(Guid id, string name)\u003c/code\u003e vs. a \u003ccode\u003e[GraphQLArguments]\u003c/code\u003e object.\u003c/li\u003e\n\u003cli\u003e#461 - \u003ccode\u003eEntityGraphQLEndpointRouteExtensions.MapGraphQL\u003c/code\u003e now supports chunked requests\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eRequiredAuthorization\u003c/code\u003e is not settable allowing you to change or overwrite it after creation. Also now has \u003ccode\u003eClear()\u003c/code\u003e methods to remove authentication\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-21\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-21\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eThrow error on a query that has fragments with a cycle as per the GraphQL spec and to prevent infinite loops.\u003c/li\u003e\n\u003cli\u003e#442 - Fix issue when a service field with a bulk resolver is on a parent field named differently to the dotnet underlying object property\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.6.1\u003c/h1\u003e\u003ca id=\"user-content-561\" class=\"anchor\" aria-label=\"Permalink: 5.6.1\" href=\"#561\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-22\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-22\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#443 - Allow \u003ccode\u003e*/*\u003c/code\u003e \u0026amp; \u003ccode\u003eapplication/*\u003c/code\u003e \u003ccode\u003eAccept\u003c/code\u003e headers in \u003ccode\u003efollowSpec\u003c/code\u003e option for \u003ccode\u003eMapGraphQL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#443 - Allow expected headers to not be listed first when using \u003ccode\u003efollowSpec\u003c/code\u003e option for \u003ccode\u003eMapGraphQL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eBetter support for multiple items in a single \u003ccode\u003eAccept\u003c/code\u003e header when using \u003ccode\u003efollowSpec\u003c/code\u003e option for \u003ccode\u003eMapGraphQL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#449 - Fix issues with self referencing query and connection paging\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.6.0\u003c/h1\u003e\u003ca id=\"user-content-560\" class=\"anchor\" aria-label=\"Permalink: 5.6.0\" href=\"#560\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-10\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-10\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdded additional framework target \u003ccode\u003enet9.0\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResolveWithService\u003c/code\u003e and \u003ccode\u003eResolveWithServices\u003c/code\u003e methods are now marked obsolete. Please use \u003ccode\u003eResolve\u003c/code\u003e in the same way\u003c/li\u003e\n\u003cli\u003e#430 - \u003ccode\u003eMapGraphQL\u003c/code\u003e has new parameter \u003ccode\u003efollowSpec\u003c/code\u003e which changes the behavior to follow \u003ca href=\"https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md\"\u003ehttps://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md\u003c/a\u003e and is \u003ccode\u003efalse\u003c/code\u003e by default in v5.x. If set to \u003ccode\u003etrue\u003c/code\u003e it will follow the spec, the major change being that if the HTTP request was valid you'll get a \u003ccode\u003e200\u003c/code\u003e status code even if there may be GraphQL errors in the response. \u003cem\u003eNote this will be the default behavior in version v6.\u003c/em\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eIsNullable\u003c/code\u003e to the \u003ccode\u003eIField\u003c/code\u003e interface to control setting the nullability of the field return type in the schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-23\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-23\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#435 - fix \u003ccode\u003eisAny()\u003c/code\u003e in \u003ccode\u003efilter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix issue selecting fields from an object a service field returns where the GraphQL field name differs from the dotnet property name.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eExample a field that returns a \u003ccode\u003eUser\u003c/code\u003e type using a service and you are changing the field names in the schema like below\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"schema.Type\u0026lt;User\u0026gt;().AddField(\u0026quot;username\u0026quot;, u =\u0026gt; u.Name, \u0026quot;Username\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eUser\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"username\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e u \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eu\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Username\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#439 - Fix using fields / properties with key words (\u003ccode\u003enull\u003c/code\u003e, \u003ccode\u003etrue\u003c/code\u003e, \u003ccode\u003efalse\u003c/code\u003e) at the start of the name in the filter expressions\u003c/li\u003e\n\u003cli\u003eRelated to #430 - Make sure if the schema says a field is not nullable, that it is not returned as \u003ccode\u003enull\u003c/code\u003e when using \u003ccode\u003enull\u003c/code\u003e to exit a mutation or field on error.\u003c/li\u003e\n\u003cli\u003eFix issue where an expression extracted from a service field may clash with a existing field name\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.5.3\u003c/h1\u003e\u003ca id=\"user-content-553\" class=\"anchor\" aria-label=\"Permalink: 5.5.3\" href=\"#553\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-24\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-24\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#432 - filter expression was incorrectly using bit-wise \u003ccode\u003eOr\u003c/code\u003e instead of \u003ccode\u003eOrElse\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.5.2\u003c/h1\u003e\u003ca id=\"user-content-552\" class=\"anchor\" aria-label=\"Permalink: 5.5.2\" href=\"#552\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-25\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-25\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#418 - Fix issue where field expressions using \u003ccode\u003ectx.Entities.FirstOrDefault(\u0026lt;filter\u0026gt;)\u003c/code\u003e (\u003ccode\u003eFirst*\u003c/code\u003e, \u003ccode\u003eLast*\u003c/code\u003e, \u003ccode\u003eSingle*\u003c/code\u003e methods with a filter) would duplicate the filter expression on each execution (e.g. making \u003ccode\u003ectx.Entities.Where(\u0026lt;filter\u0026gt;).Where(\u0026lt;filter\u0026gt;).FirstOrDefault()\u003c/code\u003e). This also caused EntityFramework not to use it's cache for the expression\u003c/li\u003e\n\u003cli\u003eFix issue with \u003ccode\u003eRequiresAnyRole()\u003c/code\u003e being called on a field with multiple roles added them as requiring all those roles vs. any role. This did not effect the \u003ccode\u003e[GraphQLAuthorize]\u003c/code\u003e attribute\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.5.1\u003c/h1\u003e\u003ca id=\"user-content-551\" class=\"anchor\" aria-label=\"Permalink: 5.5.1\" href=\"#551\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-26\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-26\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#425 - As per GraphQL Spec, Interfaces are not supported for Input Types\u003c/li\u003e\n\u003cli\u003e#426 - Fix custom directives with no arguments.\u003c/li\u003e\n\u003cli\u003e#427/#428 - Fix issue with connection style paging field extension when using last and before arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.5.0\u003c/h1\u003e\u003ca id=\"user-content-550\" class=\"anchor\" aria-label=\"Permalink: 5.5.0\" href=\"#550\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-11\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-11\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd \u003ccode\u003eIgnoreAttributes\u003c/code\u003e to \u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e - A list of Attribute types which will cause the builder to ignore the field/property when building the schema. These are additional to GraphQLIgnoreAttribute\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e.Resolve\u0026lt;\u0026gt;()\u003c/code\u003e method on field changes return type to \u003ccode\u003eobject?\u003c/code\u003e to avoid warnings when returning a valid nullable service call etc.\u003c/li\u003e\n\u003cli\u003eAdd support for using a \u003ccode\u003estruct\u003c/code\u003e type as an object type in the schema, allowing you to query the fields on it. Previously it only worked if you added the \u003ccode\u003estruct\u003c/code\u003e as a Scalar Type\u003c/li\u003e\n\u003cli\u003e#419 - Add support for using \u003ccode\u003eisAny([])\u003c/code\u003e on nullable types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-27\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-27\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eMake sure top level types have access checked (Query, Mutation and Subscription)\u003c/li\u003e\n\u003cli\u003eFix #392 - Better handle \u003ccode\u003enull\u003c/code\u003e checks when executing against in-memory data\u003c/li\u003e\n\u003cli\u003e#363 - Only use \u003ccode\u003eToListWithNullCheck\u003c/code\u003e when we know we are executing with services, or have been told not to separate the execution.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.6\u003c/h1\u003e\u003ca id=\"user-content-546\" class=\"anchor\" aria-label=\"Permalink: 5.4.6\" href=\"#546\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-28\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-28\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue with inline arguments for mutation methods not being validated or trying to look for a service. e.g.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"[GraphQLMutation]\npublic static Expression\u0026lt;Func\u0026lt;MyContext, Movie\u0026gt;\u0026gt; AddMovie(\n    [Required(ErrorMessage = \u0026quot;Title is required\u0026quot;)] string title,\n    [Range(1, 100, ErrorMessage = \u0026quot;Price must be between $1 and $100\u0026quot;)] decimal price,\n    [StringLength(5, ErrorMessage = \u0026quot;Rating must be less than 5 characters\u0026quot;)] string rating\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eGraphQLMutation\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eExpression\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyContext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMovie\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eAddMovie\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eRequired\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eErrorMessage\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Title is required\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etitle\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eRange\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eErrorMessage\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Price must be between $1 and $100\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003edecimal\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprice\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eStringLength\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eErrorMessage\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Rating must be less than 5 characters\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erating\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.5\u003c/h1\u003e\u003ca id=\"user-content-545\" class=\"anchor\" aria-label=\"Permalink: 5.4.5\" href=\"#545\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-29\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-29\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix auth not correctly being checked for mutations or subscriptions. Issue was introduced in 5.4.2\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.4\u003c/h1\u003e\u003ca id=\"user-content-544\" class=\"anchor\" aria-label=\"Permalink: 5.4.4\" href=\"#544\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-30\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-30\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eArgument validator was incorrectly traversing types and properties it shouldn't which could cause stack overflows for some types\u003c/li\u003e\n\u003cli\u003eFix validating inline arguments for mutation methods\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.3\u003c/h1\u003e\u003ca id=\"user-content-543\" class=\"anchor\" aria-label=\"Permalink: 5.4.3\" href=\"#543\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-31\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-31\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#399 - Serialize \u003ccode\u003enull\u003c/code\u003e values if the field is requested as per the GraphQL spec\u003c/li\u003e\n\u003cli\u003eMake sure the naming policy set in \u003ccode\u003eDefaultGraphQLResponseSerializer\u003c/code\u003e is used for all fields\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.2\u003c/h1\u003e\u003ca id=\"user-content-542\" class=\"anchor\" aria-label=\"Permalink: 5.4.2\" href=\"#542\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-32\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-32\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#393 - Handle \u003ccode\u003eDateTimeOffset\u003c/code\u003e in filter expressions\u003c/li\u003e\n\u003cli\u003e#398 - Make sure user credentials are not cached if using the compiled query cache\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.1\u003c/h1\u003e\u003ca id=\"user-content-541\" class=\"anchor\" aria-label=\"Permalink: 5.4.1\" href=\"#541\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-33\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-33\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#370 - Sort field extension (\u003ccode\u003e[UseSort]\u003c/code\u003e or \u003ccode\u003e.UseSort()\u003c/code\u003e), if building the sort argument input type from the dotnet fields/properties will now respect the \u003ccode\u003e[GraphQLIgnore]\u003c/code\u003e attribute on any fields.\u003c/li\u003e\n\u003cli\u003e#386 / #387 - Fix regressions in filter expressions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.4.0\u003c/h1\u003e\u003ca id=\"user-content-540\" class=\"anchor\" aria-label=\"Permalink: 5.4.0\" href=\"#540\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-12\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-12\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#367 - Remove Antlr dependency for generating the filter expression parser. Replaced with Parlot, a dotnet only solution to remove a barrier for contributors. This also results in the filter (FilterExpression field extension) expressions being compiled up to twice as fast.\u003c/li\u003e\n\u003cli\u003e#334 - add \u003ccode\u003eisAny([])\u003c/code\u003e method to the filter expression language\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eBroadcaster\u003c/code\u003e exposes its properties and methods are virtual allowing you to extend its functionality instead of writing your own fully\u003c/li\u003e\n\u003cli\u003e#374 - Sort field extension now has an \u003ccode\u003euseSchemaFields\u003c/code\u003e option. This will use the fields on the type you are sorting from the schema to build the input argument. Instead of the fields on the dotnet type. Because the input type is build once at the beginning it will only include schema fields currently known at the time you call \u003ccode\u003e.UseSort()\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e#375 - Allow specifying \u003ccode\u003eintrospectionEnabled\u003c/code\u003e when calling the \u003ccode\u003eAddGraphQLSchema\u003c/code\u003e extension methods\u003c/li\u003e\n\u003cli\u003e#222 - EntityGraphQL can now build a argument objects via their constructor. The parameter names need to match the field names. E.g.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"// empty constructor - the properties set are called\npublic class PersonArg\n{\n    public string name { get; set; }\n}\n\n// with a constructor\npublic class PersonArgConstructor\n{\n    public PersonArgConstructor(string name)\n    {\n        Name = name;\n    }\n\n    public string Name { get; }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e// empty constructor - the properties set are called\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ePersonArg\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eset\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// with a constructor\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003ePersonArgConstructor\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-v\"\u003ePersonArgConstructor\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eName\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eName\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-34\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-34\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue where a subscription execution had access to a disposed \u003ccode\u003eIServiceProvider\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eBroadcaster\u003c/code\u003e is thread safe when removing observers\u003c/li\u003e\n\u003cli\u003eFixes in the implementation of the \u003ca href=\"https://github.com/enisdenjo/graphql-ws/blob/main/PROTOCOL.md\"\u003eGraphQL over Websockets\u003c/a\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eID is now a \u003ccode\u003estring\u003c/code\u003e as it does not specify that it must be a \u003ccode\u003eGuid\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eBetter errors on invalid messages\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.3.0\u003c/h1\u003e\u003ca id=\"user-content-530\" class=\"anchor\" aria-label=\"Permalink: 5.3.0\" href=\"#530\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-13\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-13\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eISchemaProvider.Validate()\u003c/code\u003e added to allow you to validate the schema is complete to avoid potential errors at runtime/query time. As fields and types can be added to the schema out of dependency order, this checks that all required types are in the schema.\u003c/li\u003e\n\u003cli\u003e#362 - The Sort field extension now supports defining more complex sort expressions that will be used. E.g.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"schema.Type\u0026lt;TestDataContext\u0026gt;().GetField(\u0026quot;people\u0026quot;, null)\n  .UseSort((Person person) =\u0026gt; new\n  {\n    // [{managerName: ASC}] in GQL can be used and the full expression person.Manager.Name will be used in the OrderBy()\n    managerName = person.Manager.Name,\n  });\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eTestDataContext\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"people\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eUseSort\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ePerson\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// [{managerName: ASC}] in GQL can be used and the full expression person.Manager.Name will be used in the OrderBy()\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003emanagerName\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eManager\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e#169 - \u003ccode\u003eExecutionOptions\u003c/code\u003e now has a \u003ccode\u003eBeforeRootFieldExpressionBuild\u003c/code\u003e callback you can use to make modifications to a fields expression before it is then used to build the whole query. This is \u003cem\u003eonly\u003c/em\u003e called for root fields in your GraphQL operation. A common use case for this might be to call the EF \u003ccode\u003eTagWith\u003c/code\u003e extension method passing it the operation name to help with debugging queries.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e#308 - Support a dotnet \u003ccode\u003eType\u003c/code\u003e being used for an input type and a query type. This may change in future versions but some simple cases are now supported\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eIField.UseArgumentsFrom\u003c/code\u003e \u0026amp; \u003ccode\u003eIField.UseArgumentsFromField\u003c/code\u003e is now Obsolete. Using it (typically in a field extension) creates issues. See #358 fix below\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eIFieldExtension.GetExpressionAndArguments\u003c/code\u003e has been added to allow field extensions to handle arguments and add them to the compile context. This interface will merge with the existing (now obsolete) \u003ccode\u003eIFieldExtension.GetExpression\u003c/code\u003e in version 6.0. This was introduced to fix #358 and avoid breaking changes\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eGetSchemaType(string typeName, QueryRequestContext? requestContext)\u003c/code\u003e is now Obsolete, use \u003ccode\u003eGetSchemaType(string typeName, bool inputTypeScope, QueryRequestContext? requestContext)\u003c/code\u003e and provide \u003ccode\u003einputTypeScope = true\u003c/code\u003e if the type is an Input type.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp dir=\"auto\"\u003e#359 - For targets .net6 and above \u003ccode\u003eDateOnly\u003c/code\u003e \u0026amp; \u003ccode\u003eTimeOnly\u003c/code\u003e are added as scalar types by default.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-35\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-35\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#356 - Look up the correct field return type for \u003ccode\u003eInputType\u003c/code\u003es\u003c/li\u003e\n\u003cli\u003e#358 - \u003ccode\u003eOffsetPaging\u003c/code\u003e and \u003ccode\u003eConnectionPaging\u003c/code\u003e field extensions can now be used on multiple fields that return the same type. e.g.\u003c/li\u003e\n\u003cli\u003e#148 - Return a more descriptive error message for a missing type when we know the field we are trying to find the type of\u003c/li\u003e\n\u003cli\u003e#361 - Handle union/interface types when accessed from a object projection\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"// both fields return a list of people but have different expressions\nschema.Query().AddField(\u0026quot;peopleOver\u0026quot;, new\n  {\n      over = ArgumentHelper.Required\u0026lt;int\u0026gt;()\n  },\n  (ctx, args) =\u0026gt; ctx.People.Where(p =\u0026gt; p.Height \u0026gt; args.over).OrderBy(p =\u0026gt; p.Id), \u0026quot;Return list of people with paging metadata\u0026quot;)\n  .UseOffsetPaging();\nschema.Query().AddField(\u0026quot;peopleUnder\u0026quot;, new\n  {\n      under = ArgumentHelper.Required\u0026lt;int\u0026gt;()\n  },\n  (ctx, args) =\u0026gt; ctx.People.Where(p =\u0026gt; p.Height \u0026lt; args.under).OrderBy(p =\u0026gt; p.Id), \u0026quot;Return list of people with paging metadata\u0026quot;)\n  .UseOffsetPaging();\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e// both fields return a list of people but have different expressions\nschema.Query().AddField(\"peopleOver\", new\n  {\n      over = ArgumentHelper.Required\u0026lt;int\u0026gt;()\n  },\n  (ctx, args) =\u0026gt; ctx.People.Where(p =\u0026gt; p.Height \u0026gt; args.over).OrderBy(p =\u0026gt; p.Id), \"Return list of people with paging metadata\")\n  .UseOffsetPaging();\nschema.Query().AddField(\"peopleUnder\", new\n  {\n      under = ArgumentHelper.Required\u0026lt;int\u0026gt;()\n  },\n  (ctx, args) =\u0026gt; ctx.People.Where(p =\u0026gt; p.Height \u0026lt; args.under).OrderBy(p =\u0026gt; p.Id), \"Return list of people with paging metadata\")\n  .UseOffsetPaging();\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.2.1\u003c/h1\u003e\u003ca id=\"user-content-521\" class=\"anchor\" aria-label=\"Permalink: 5.2.1\" href=\"#521\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-36\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-36\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#355 - make error variable values more distinctive\u003c/li\u003e\n\u003cli\u003eEntityGraphQL is now more specific in which methods it tries to optimize the pattern of a list to single. E.g. If a field has an expression like \u003ccode\u003ectx =\u0026gt; ctx.People.FirstOrDefault(filter)\u003c/code\u003e EntityGraphQL treats that as a ListToSingle field and will build a full expression similar to \u003ccode\u003ectx =\u0026gt; ctx.People.Where(filter).Select(x =\u0026gt; new {...}).FirstOrDefault()\u003c/code\u003e to avoid over fetching when using EntityFramework. Previously EntityGraphQL would try to break up and rebuild expressions.methods it didn't know how to. It now correctly only tries this optimization on \u003ccode\u003eFirst\u003c/code\u003e, \u003ccode\u003eFirstOrDefault\u003c/code\u003e, \u003ccode\u003eSingle\u003c/code\u003e, \u003ccode\u003eSingleOrDefault\u003c/code\u003e, \u003ccode\u003eLast\u003c/code\u003e \u0026amp; \u003ccode\u003eLastOrDefault\u003c/code\u003e from \u003ccode\u003eQueryable\u003c/code\u003e \u0026amp; \u003ccode\u003eEnumerable\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.2.0\u003c/h1\u003e\u003ca id=\"user-content-520\" class=\"anchor\" aria-label=\"Permalink: 5.2.0\" href=\"#520\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCheck release notes for the 5.2.0-beta1 and beta2 below.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-14\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-14\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#347 - The handler for the subscriptions end point added by \u003ccode\u003eUseGraphQLWebSockets\u003c/code\u003e no longer returns \u003ccode\u003e400\u003c/code\u003e if the request is not a web socket request. Allowing the request to get passed to the next handlers. This allows you to have the same endpoint for queries/mutations and subscriptions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-37\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-37\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#350 - Index accessors properties (which are methods to dotnet) on types are ignored when using \u003ccode\u003eSchemaBuilder\u003c/code\u003e. Previously they would fail.\u003c/li\u003e\n\u003cli\u003e#333 - Fixes to method and service calls on interfaces/unions\u003c/li\u003e\n\u003cli\u003e#344 - Support paging field extensions with \u003ccode\u003efield.ResolveBulk\u0026lt;TService, TKey, TResult\u0026gt;()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix bulk resolve services within a List to Single node\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.2.0-beta2\u003c/h1\u003e\u003ca id=\"user-content-520-beta2\" class=\"anchor\" aria-label=\"Permalink: 5.2.0-beta2\" href=\"#520-beta2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eCheck release notes for the 5.2.0-beta1 below.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-38\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-38\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix error when using a service at a query root field that uses \u003ccode\u003eFirst()\u003c/code\u003e as friends (List to single pattern). E.g. \u003ccode\u003e(ctx, service) =\u0026gt; ctx.SomeList.First(i =\u0026gt; i.Thing == service.Other)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#318 - Fix issue comparing \u003ccode\u003eint\u003c/code\u003e style fields against \u003ccode\u003efloat\u003c/code\u003e style fields in the filter expression\u003c/li\u003e\n\u003cli\u003eBetter error message when comparing different enum types in the filter language\u003c/li\u003e\n\u003cli\u003eInclude descriptions for scalars and directives in introspection and schema output\u003c/li\u003e\n\u003cli\u003eFix issue using the default \u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e with a mutation method that has a list argument. The argument input type was not being correctly added to the schema. Not an issue if you were already adding the type manually\u003c/li\u003e\n\u003cli\u003e#336 - Fix conversion of non-nullable/nullable types\u003c/li\u003e\n\u003cli\u003e#342 - Fix argument incorrectly being renamed when using \u003ccode\u003e[GraphQLField]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-15\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-15\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#318 - Support Unicode characters in the string of the filter language\u003c/li\u003e\n\u003cli\u003eSupport more cases with \u003ccode\u003efield.ResolveBulk\u0026lt;TService, TKey, TResult\u0026gt;()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd a net8.0 target output for the base EntityGraphQL library.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.2.0-beta1\u003c/h1\u003e\u003ca id=\"user-content-520-beta1\" class=\"anchor\" aria-label=\"Permalink: 5.2.0-beta1\" href=\"#520-beta1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-16\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-16\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eMake more properties public in nodes like \u003ccode\u003eGraphQLCollectionToSingleField\u003c/code\u003e to better support customisation in custom directives\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003efield.Resolve\u0026lt;TService, ...\u0026gt;()\u003c/code\u003e to replace \u003ccode\u003eResolveWithService\u0026lt;\u0026gt;()\u003c/code\u003e. Recommended to use \u003ccode\u003eResolve()\u003c/code\u003e. Release 5.3 will mark \u003ccode\u003eResolveWithService\u003c/code\u003e as deprecated and release 6.0 will remove them.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003efield.ResolveBulk\u0026lt;TService, TKey, TResult\u0026gt;()\u003c/code\u003e to allow you to use services to bulk load data to avoid multiple calls to a service resolve expression that may call an external service in a list result. Example\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eschema.AddEnum\u0026lt;TEnum\u0026gt;(typeName, description)\u003c/code\u003e to the schema building API\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enet8.0\u003c/code\u003e as a target for EntityGraphQL.AspNet project\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var schema = SchemaBuilder.FromObject\u0026lt;MyContext\u0026gt;();\nschema.UpdateType\u0026lt;Project\u0026gt;(type =\u0026gt;\n{\n    type.ReplaceField(\u0026quot;createdBy\u0026quot;, \u0026quot;Get user that created it\u0026quot;)\n      // normal service to fetch the User object for creator of the Project type\n      .ResolveWithService\u0026lt;UserService\u0026gt;((proj, users) =\u0026gt; users.GetUserById(proj.CreatedById))\n      // Bulk service used to fetch many User objects\n      .ResolveBulk\u0026lt;UserService, int, User\u0026gt;(proj =\u0026gt; proj.CreatedById, (ids, srv) =\u0026gt; srv.GetAllUsers(ids));\n});\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSchemaBuilder\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFromObject\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyContext\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eUpdateType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eProject\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003etype \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003etype\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReplaceField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"createdBy\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Get user that created it\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n      \u003cspan class=\"pl-c\"\u003e// normal service to fetch the User object for creator of the Project type\u003c/span\u003e\n      \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eResolveWithService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eUserService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eproj\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eusers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eusers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetUserById\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eproj\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCreatedById\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n      \u003cspan class=\"pl-c\"\u003e// Bulk service used to fetch many User objects\u003c/span\u003e\n      \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eResolveBulk\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eUserService\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eUser\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eproj \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eproj\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eCreatedById\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eids\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetAllUsers\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eids\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you have a query like\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-graphql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  # ResolveBulk\n  projects {\n    # project fields\n    name\n    id\n    # service field - resolved with ResolveBulk expression for all Projects loaded\n    createdBy {\n      name\n    }\n  }\n\n  # ResolveWithService\n  project(id: 78) {\n    # project fields\n    name\n    id\n    # service field - resolved with ResolveWithService expression for the single project loaded\n    createdBy {\n      name\n    }\n  }\n}\"\u003e\u003cpre\u003e{\n\u003cspan class=\"pl-c\"\u003e  # ResolveBulk\u003c/span\u003e\n  \u003cspan class=\"pl-v\"\u003eprojects\u003c/span\u003e {\n\u003cspan class=\"pl-c\"\u003e    # project fields\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003ename\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003eid\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e    # service field - resolved with ResolveBulk expression for all Projects loaded\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003ecreatedBy\u003c/span\u003e {\n      \u003cspan class=\"pl-v\"\u003ename\u003c/span\u003e\n    }\n  }\n\n\u003cspan class=\"pl-c\"\u003e  # ResolveWithService\u003c/span\u003e\n  \u003cspan class=\"pl-v\"\u003eproject\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eid\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e78\u003c/span\u003e) {\n\u003cspan class=\"pl-c\"\u003e    # project fields\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003ename\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003eid\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e    # service field - resolved with ResolveWithService expression for the single project loaded\u003c/span\u003e\n    \u003cspan class=\"pl-v\"\u003ecreatedBy\u003c/span\u003e {\n      \u003cspan class=\"pl-v\"\u003ename\u003c/span\u003e\n    }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInstead of calling \u003ccode\u003eusers.GetUserById()\u003c/code\u003e for each project to resolve \u003ccode\u003ecreatedBy { name }\u003c/code\u003e, EntityGraphQL will build a list of keys using the \u003ccode\u003eproj =\u0026gt; proj.CreatedById\u003c/code\u003e expression from the list of projects and then call the \u003ccode\u003e(ids, srv) =\u0026gt; srv.GetAllUsers(ids)\u003c/code\u003e expression once for the whole list of projects in the results. See updated documentation for further details.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.1.1\u003c/h1\u003e\u003ca id=\"user-content-511\" class=\"anchor\" aria-label=\"Permalink: 5.1.1\" href=\"#511\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-39\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-39\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #337 - Description attribute accidentally updating name instead of description\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.1.0\u003c/h1\u003e\u003ca id=\"user-content-510\" class=\"anchor\" aria-label=\"Permalink: 5.1.0\" href=\"#510\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-17\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-17\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eUpgrade to the latest standard Antlr4 - the parser/tool used for the filter expression strings. Fixing precedence of operators\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-40\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-40\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#319 - Only convert strings to \u003ccode\u003eGuid\u003c/code\u003e or \u003ccode\u003eDateTime\u003c/code\u003e when required\u003c/li\u003e\n\u003cli\u003eIf you add a field connecting back to the Query Context that ends in a method to go from a list to a single result the graph object projection will now correctly be inserted before the last call. Example\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"var schema = SchemaBuilder.FromObject\u0026lt;MyContext\u0026gt;();\nschema.AddType\u0026lt;ExternalData\u0026gt;(\u0026quot;ExternalData\u0026quot;).AddAllFields();\n\nschema.UpdateType\u0026lt;ExternalData\u0026gt;(ed =\u0026gt;\n{\n    // connect back to the MyContext types\n    ed.AddField(\u0026quot;movie\u0026quot;, \u0026quot;Get movie\u0026quot;)\n      // here FirstOrDefault() goes from list -\u0026gt; single\n      .ResolveWithService\u0026lt;MyContext\u0026gt;((ed, db) =\u0026gt; db.Movies.Where(m =\u0026gt; m.Id == ed.Id).FirstOrDefault());\n});\n\nschema.Query().AddField(\u0026quot;externalData\u0026quot;, \u0026quot;Get Data\u0026quot;)\n    .ResolveWithService\u0026lt;ExternalDataService\u0026gt;((p, srv) =\u0026gt; srv.GetData());\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSchemaBuilder\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFromObject\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyContext\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eAddType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eExternalData\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"ExternalData\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddAllFields\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eUpdateType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eExternalData\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eed \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// connect back to the MyContext types\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eed\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"movie\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Get movie\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n      \u003cspan class=\"pl-c\"\u003e// here FirstOrDefault() goes from list -\u0026gt; single\u003c/span\u003e\n      \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eResolveWithService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMyContext\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eed\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edb\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edb\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMovies\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWhere\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003em \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eId\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eed\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFirstOrDefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQuery\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"externalData\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Get Data\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eResolveWithService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eExternalDataService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ep\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eGetData\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn the above case if you select\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-graphql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  externalData {\n    movie {\n      director {\n        name\n      }\n    }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-v\"\u003eexternalData\u003c/span\u003e {\n    \u003cspan class=\"pl-v\"\u003emovie\u003c/span\u003e {\n      \u003cspan class=\"pl-v\"\u003edirector\u003c/span\u003e {\n        \u003cspan class=\"pl-v\"\u003ename\u003c/span\u003e\n      }\n    }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe movie field will have the selection inserted allowing EF to resolve fields without lazy loading turned on. Without this the \u003ccode\u003em.Director.Name\u003c/code\u003e would also be \u003ccode\u003enull\u003c/code\u003e as no relation was included. e.g.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"db.Movies.Where(m =\u0026gt; m.Id == ed.Id)\n.Select(m =\u0026gt; new [\n  director = new {\n    name = m.Director.Name\n  }\n])\n.FirstOrDefault();\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003edb\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eMovies\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eWhere\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003em \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eId\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eed\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003em \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n  director \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003em\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eDirector\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eName\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eFirstOrDefault\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.0.1\u003c/h1\u003e\u003ca id=\"user-content-501\" class=\"anchor\" aria-label=\"Permalink: 5.0.1\" href=\"#501\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-41\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-41\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #314 - Some clean up of the Antlr4 grammar for the filter expressions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.0.0\u003c/h1\u003e\u003ca id=\"user-content-500\" class=\"anchor\" aria-label=\"Permalink: 5.0.0\" href=\"#500\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eMake sure to check out the changes 5.0.0-beta1\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-6\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-6\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eGenerated schema type name for field sort inputs now include the name of the schema type the field is on to avoid conflicts\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-18\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-18\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eIField.AddExtension\u003c/code\u003e now returns the \u003ccode\u003eIField\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseSort()\u003c/code\u003e field extension now can take a list of default sort fields e.g.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eBroadcaster\u003c/code\u003e (inbuilt \u003ccode\u003eIObservable\u0026lt;TType\u0026gt;\u003c/code\u003e you can use for subscriptions) now has a \u003ccode\u003eOnUnsubscribe\u003c/code\u003e callback\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"schema.ReplaceField(\u0026quot;people\u0026quot;,\n    ctx =\u0026gt; ctx.People,\n    \u0026quot;Return a list of people. Optional sorted\u0026quot;)\n    .UseSort(\n        new Sort\u0026lt;Person\u0026gt;((person) =\u0026gt; person.Height, SortDirection.ASC),\n        new Sort\u0026lt;Person\u0026gt;((person) =\u0026gt; person.LastName, SortDirection.ASC)\n    );\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eReplaceField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"people\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    ctx \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ePeople\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    \u003cspan class=\"pl-s\"\u003e\"Return a list of people. Optional sorted\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eUseSort\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSort\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eHeight\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSortDirection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eASC\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eSort\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eLastName\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSortDirection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eASC\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e now has a \u003ccode\u003eOnFieldCreated\u003c/code\u003e callback to make changes to fields as \u003ccode\u003eSchemaBuilder\u003c/code\u003e is building the schema.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e.contains(string)\u003c/code\u003e, \u003ccode\u003e.startsWith(string)\u003c/code\u003e, \u003ccode\u003e.endsWith(string)\u003c/code\u003e \u0026amp; \u003ccode\u003e.toLower()\u003c/code\u003e / \u003ccode\u003e.toUpper()\u003c/code\u003e string methods now available in the filter argument expression.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-42\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-42\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix naming of fields extracted from service calls when those field use convert\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e5.0.0-beta1\u003c/h1\u003e\u003ca id=\"user-content-500-beta1\" class=\"anchor\" aria-label=\"Permalink: 5.0.0-beta1\" href=\"#500-beta1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-7\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-7\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e now targets \u003ccode\u003enet6.0\u003c/code\u003e and \u003ccode\u003enet7.0\u003c/code\u003e, dropping targets \u003ccode\u003enetcoreapp3.1\u003c/code\u003e and \u003ccode\u003enet5.0\u003c/code\u003e. You can still use the base \u003ccode\u003eEntityGraphQL\u003c/code\u003e library with older targets.\u003c/li\u003e\n\u003cli\u003eInterface \u003ccode\u003eIExposableException\u003c/code\u003e has been removed. Use \u003ccode\u003eSchemaBuilderSchemaOptions.AllowedExceptions\u003c/code\u003e or the new \u003ccode\u003eAllowedExceptionAttribute\u003c/code\u003e to define which exceptions are rendered into the results\u003c/li\u003e\n\u003cli\u003e#254 - Previously passing \u003ccode\u003enull\u003c/code\u003e for the \u003ccode\u003eClaimsPrincipal\u003c/code\u003e in \u003ccode\u003eExecuteRequest()\u003c/code\u003e would skip any authorization checks. All authorization checks are now done regardless of the \u003ccode\u003eClaimsPrincipal\u003c/code\u003e value. Meaning \u003ccode\u003enull\u003c/code\u003e will fail if there is fields requiring authorization.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eIDirectiveProcessor\u003c/code\u003e interface has changed. See upgrade docs for changes\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaBuilderMethodOptions\u003c/code\u003e removed, see updated properties on \u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e and upgrade docs. This was because you can also now add methods as query fields with \u003ccode\u003eGraphQLFieldAttribute\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaBuilderOptions.AutoCreateInputTypes\u003c/code\u003e now defaults to \u003ccode\u003etrue\u003c/code\u003e. Meaning in \u003ccode\u003eSchemaBuilder\u003c/code\u003e when adding mutations etc any complex types will be added to the schema if they are not there already.\u003c/li\u003e\n\u003cli\u003eThe rules for reflection on method parameters have been changed to make them clearer. See the upgrade to 5.0 docs and the mutation docs that cover examples.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eGraphQLValidator\u003c/code\u003e is no longer magically added to your method fields (mutations/subscriptions). If you wish to use it please register it in your services. There is a new helper method in EntityGraphQL.AspNet \u003ccode\u003eAddGraphQLValidator()\u003c/code\u003e. This means you can implement and register your own implementation.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaProvider.ExecuteRequest\u003c/code\u003e \u0026amp; \u003ccode\u003eSchemaProvider.ExecuteRequestAsync\u003c/code\u003e have been renamed to \u003ccode\u003eExecuteRequestWithContext\u003c/code\u003e \u0026amp; \u003ccode\u003eExecuteRequestWithContextAsync\u003c/code\u003e. The schema context instance provided will be used for all context references within that query.\u003c/li\u003e\n\u003cli\u003e#309 - Introduced new \u003ccode\u003eSchemaProvider.ExecuteRequest\u003c/code\u003e \u0026amp; \u003ccode\u003eSchemaProvider.ExecuteRequestAsync\u003c/code\u003e which take no schema context instance as an argument. The context will be fetched from the provided \u003ccode\u003eServiceProvider\u003c/code\u003e meaning the lifetime rules are adhered to - e.g. \u003ccode\u003eServiceLifetime.Transient\u003c/code\u003e is now correctly used. This is the preferred way to execute a query\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-19\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-19\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eEntityGraphQL\u003c/code\u003e (the core library) targets both \u003ccode\u003enetstandard2.1\u003c/code\u003e \u0026amp; \u003ccode\u003enet6\u003c/code\u003e. \u003ccode\u003enetstandard2.1\u003c/code\u003e will be dropped around the time of \u003ccode\u003enet8.0\u003c/code\u003e being released.\u003c/li\u003e\n\u003cli\u003eIntroduced \u003ccode\u003eGraphQLFieldAttribute\u003c/code\u003e to allow you to rename fields in the schema as well as mark methods as fields in the schema. Method parameters will become field arguments in the same way as mutation methods. See updated docs for more information.\u003c/li\u003e\n\u003cli\u003eArgument types used for directives now read \u003ccode\u003eDescriptionAttribute\u003c/code\u003e and \u003ccode\u003eGraphQLFieldAttribute\u003c/code\u003e to use different field name in the schema and set a description\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eGraphQLInputTypeAttribute\u003c/code\u003e. Whereas \u003ccode\u003eGraphQLArgumentsAttribute\u003c/code\u003e flattens the types properties into the schema, \u003ccode\u003eGraphQLInputTypeAttribute\u003c/code\u003e assumes the type is an input type and uses that as the schema argument\u003c/li\u003e\n\u003cli\u003eYou may implement you own \u003ccode\u003eGraphQLValidator\u003c/code\u003e by implementing (and registering) \u003ccode\u003eIGraphQLValidator\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdded a \u003ccode\u003eoptions.BeforeExecuting\u003c/code\u003e callback to allow modification of the expression before execution\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-43\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-43\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#266 - Fix error calling \u003ccode\u003eAddPossibleType()\u003c/code\u003e when some of the types have already been added to the schema\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eExecutionOptions\u003c/code\u003e passed into \u003ccode\u003eIApplicationBuilder.UseGraphQLWebSockets()\u003c/code\u003e are now used when executing the queries for the subscription\u003c/li\u003e\n\u003cli\u003e#284 - Support generic class types as mutation arguments. \u003ccode\u003eMyClass\u0026lt;OtherClass\u0026gt;\u003c/code\u003e will become \u003ccode\u003einput MyClassOtherClass {}\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#302 - Fix issue where using service fields with \u003ccode\u003eIQueryable\u003c/code\u003e/\u003ccode\u003eDbContext\u003c/code\u003e fields\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.3.1\u003c/h1\u003e\u003ca id=\"user-content-431\" class=\"anchor\" aria-label=\"Permalink: 4.3.1\" href=\"#431\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-44\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-44\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue using the \u003ccode\u003eOneOf\u003c/code\u003e directive with \u003ccode\u003eArgumentHelper.Required\u0026lt;T\u0026gt;()\u003c/code\u003e in a query field argument.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.3.0\u003c/h1\u003e\u003ca id=\"user-content-430\" class=\"anchor\" aria-label=\"Permalink: 4.3.0\" href=\"#430\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-20\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-20\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#285 - Add support for implicit operators when converting types\u003c/li\u003e\n\u003cli\u003eFix how EntityGraphQL evaluates the root level fields that return lists. If the return type of the field is nullable a \u003ccode\u003enull\u003c/code\u003e will be returned if the result is \u003ccode\u003enull\u003c/code\u003e. If the return type is non-nullable an empty \u003ccode\u003eList\u0026lt;T\u0026gt;\u003c/code\u003e will be returned.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"public class UserDbContextNonNullable\n{\n    // empty list will be returned if UserIds resolves to null. If you use nullable types you can control with the ? operator (to return null)\n    [GraphQLNotNull]\n    public List\u0026lt;string\u0026gt; UserIds { get; set; }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eUserDbContextNonNullable\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// empty list will be returned if UserIds resolves to null. If you use nullable types you can control with the ? operator (to return null)\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eGraphQLNotNull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eList\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003estring\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eUserIds\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eget\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eset\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-45\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-45\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#288 - fix stack overflow in \u003ccode\u003eRuntimeTypeJsonConverter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#291 - Fix \u003ccode\u003eResolveWithService\u003c/code\u003e being called twice due to \u003ccode\u003eExpression.Condition\u003c/code\u003e if the field is a list and at the root level of the Query type\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.2.1\u003c/h1\u003e\u003ca id=\"user-content-421\" class=\"anchor\" aria-label=\"Permalink: 4.2.1\" href=\"#421\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-46\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-46\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue selecting repeated fields from an interface and a fragment selection\u003c/li\u003e\n\u003cli\u003eFix issue selecting interface fields from the concrete type in a fragment\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.2.0\u003c/h1\u003e\u003ca id=\"user-content-420\" class=\"anchor\" aria-label=\"Permalink: 4.2.0\" href=\"#420\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-21\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-21\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#281 - Implement allowed exceptions to allow exceptions to come into the error result when running with \u003ccode\u003eIsDevelopment == false\u003c/code\u003e as users not be able to modify the exceptions being thrown in order to have them implement \u003ccode\u003eIExposableException\u003c/code\u003e. Exceptions may be allowed with an exact type match, or allowed including all types that inherit it\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-47\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-47\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePrevent double SQL (when using against EF) query on base type (4.1 regression)\u003c/li\u003e\n\u003cli\u003e#279 - Remove duplicate fields when creating expressions\u003c/li\u003e\n\u003cli\u003e#280 - Fix for mutations that return interfaces/unions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.1.2\u003c/h1\u003e\u003ca id=\"user-content-412\" class=\"anchor\" aria-label=\"Permalink: 4.1.2\" href=\"#412\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-48\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-48\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue when using paging extension and aliases in the query e.g. \u003ccode\u003e{ myList { myEdges: edges { .. } } }\u003c/code\u003e previously would fail\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.1.1\u003c/h1\u003e\u003ca id=\"user-content-411\" class=\"anchor\" aria-label=\"Permalink: 4.1.1\" href=\"#411\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-49\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-49\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#221 - Apply null check on the \u003ccode\u003eToList\u003c/code\u003e expression built to resolve list expressions\u003c/li\u003e\n\u003cli\u003eBetter support for service fields at the root query level\u003c/li\u003e\n\u003cli\u003eFix support for service fields that take a complex type (object or enumerable) as arguments\u003c/li\u003e\n\u003cli\u003eFix \u003ccode\u003eUseFilter()\u003c/code\u003e \u003ccode\u003efilter\u003c/code\u003e and \u003ccode\u003eUseSort()\u003c/code\u003e \u003ccode\u003esort\u003c/code\u003e field arguments were incorrectly being marked as required in schema introspection\u003c/li\u003e\n\u003cli\u003eFix issues with default sort values for \u003ccode\u003eUseSort()\u003c/code\u003e not appearing in the schema as default values\u003c/li\u003e\n\u003cli\u003eFix output of default values in schema for lists and objects\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.1.0\u003c/h1\u003e\u003ca id=\"user-content-410\" class=\"anchor\" aria-label=\"Permalink: 4.1.0\" href=\"#410\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-22\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-22\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#262/#205 - Option to prevent leaking internal exceptions into the 'errors' field on a result.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eWhen running in development (read via \u003ccode\u003eIWebHostEnvironment.IsEnvironment(\"Development\")\u003c/code\u003e or when manually creating \u003ccode\u003eSchemaProvider\u003c/code\u003e), messages of exceptions will not be dumped out into the 'errors' field of a query result, unless they implement the newly created (and empty) interface \u003ccode\u003eIExposableException\u003c/code\u003e.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#260 - Support default values in C# methods for mutations\u003c/li\u003e\n\u003cli\u003e#264 - Versions prior to .NET 7, \u003ccode\u003eSystem.Text.Json\u003c/code\u003e doesn't support the serialization of polymorphic type hierarchies. EntityGraphQL now registers a \u003ccode\u003eRuntimeTypeJsonConverter\u003c/code\u003e class as part of the \u003ccode\u003eDefaultGraphQLResponseSerializer\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-50\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-50\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#264 - Interface/union queries used to require you to query for at least 2 of the subtypes at once.\u003c/li\u003e\n\u003cli\u003eFix issue with service fields that take nullable type fields as arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.0.1\u003c/h1\u003e\u003ca id=\"user-content-401\" class=\"anchor\" aria-label=\"Permalink: 4.0.1\" href=\"#401\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-51\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-51\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#248 - Make sure directives run on fields that map a list of items to a single item (e.g. \u003ccode\u003emyItem(id: Int!) @include(...) { ... }\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003e#213 - Multiple levels of \u003ccode\u003eTargetInvocationException\u003c/code\u003e will now be unwrapped\u003c/li\u003e\n\u003cli\u003e#82 - SchemaBuilder can now handle fields that return \u003ccode\u003eTask\u0026lt;\u0026gt;\u003c/code\u003e. Note that the way that queries expressions are built you may still encounter issues with \u003ccode\u003easync\u003c/code\u003e fields not at the root query level. Please open an issue if you do\u003c/li\u003e\n\u003cli\u003e#259 - Fix introspection of nullable/non-nullable lists with nullable/non-nullable items\u003c/li\u003e\n\u003cli\u003e#239 - Fix issues rejoining main context from a service field\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.0.0\u003c/h1\u003e\u003ca id=\"user-content-400\" class=\"anchor\" aria-label=\"Permalink: 4.0.0\" href=\"#400\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-52\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-52\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#243 - support \u003ccode\u003eapplication/json; charset=utf-8\u003c/code\u003e content type\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.0.0-beta2\u003c/h1\u003e\u003ca id=\"user-content-400-beta2\" class=\"anchor\" aria-label=\"Permalink: 4.0.0-beta2\" href=\"#400-beta2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-53\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-53\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue related to #235 where the multiple fields are the same field with different alias and arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking Changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-8\" class=\"anchor\" aria-label=\"Permalink: Breaking Changes\" href=\"#breaking-changes-8\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eIFieldExtension.ProcessExpressionSelection\u003c/code\u003e now takes a \u003ccode\u003eParameterExpression? argumentParam\u003c/code\u003e argument which is the argument parameter used at execution time (if there is one). Relating to #235\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4.0.0-beta1\u003c/h1\u003e\u003ca id=\"user-content-400-beta1\" class=\"anchor\" aria-label=\"Permalink: 4.0.0-beta1\" href=\"#400-beta1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-9\" class=\"anchor\" aria-label=\"Permalink: Breaking changes\" href=\"#breaking-changes-9\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eDateTimeOffset\u003c/code\u003e is now added as a default scalar type in schema creation. It is a very common used type in EF contexts and trips up new users. If you previously were adding it as a scalar type you no longer need to. Or if you'd like to add it differently (like map it to Date) you can\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"services.AddGraphQLSchema\u0026lt;DemoContext\u0026gt;(options =\u0026gt;\n{\n    options.PreBuildSchemaFromContext = (schema) =\u0026gt;\n    {\n        schema.RemoveType\u0026lt;DateTimeOffset\u0026gt;();\n        // add it how you want\n    };\n});\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eservices\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eAddGraphQLSchema\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDemoContext\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eoptions \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eoptions\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ePreBuildSchemaFromContext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eRemoveType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDateTimeOffset\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n        \u003cspan class=\"pl-c\"\u003e// add it how you want\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eAddMutationsFrom\u003c/code\u003e and friends now take an optional \u003ccode\u003eSchemaBuilderMethodOptions\u003c/code\u003e options object to configure how mutations are built, following the \u003ccode\u003eSchemaBuilderOptions\u003c/code\u003e used elsewhere. See updated docs. Important defaults:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"bool AutoCreateInputTypes = true; // Any input types seen will be added to the schema\nbool AddNonAttributedMethods = false; // GraphQLMutationAttributes are still required by default\nbool AutoCreateNewComplexTypes = true; // Return types of mutations will be added to the schema\"\u003e\u003cpre\u003e\u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAutoCreateInputTypes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Any input types seen will be added to the schema\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAddNonAttributedMethods\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// GraphQLMutationAttributes are still required by default\u003c/span\u003e\n\u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eAutoCreateNewComplexTypes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003etrue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// Return types of mutations will be added to the schema\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eSchemaBuilderOptions.IgnoreTypes\u003c/code\u003e Now uses \u003ccode\u003eType\u003c/code\u003e instead of \u003ccode\u003estring\u003c/code\u003e. It is a \u003ccode\u003eHashSet\u0026lt;Type\u0026gt;\u003c/code\u003e now to avoid confusion of which name to use (full name space or not)\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eProcessExpressionSelection\u003c/code\u003e used in Field Extensions now takes \u003ccode\u003eDictionary\u0026lt;IFieldKey, CompiledField\u0026gt;\u003c/code\u003e for the \u003ccode\u003eselectionExpressions\u003c/code\u003e parameter. \u003ccode\u003eIFieldKey\u003c/code\u003e is the field name and the schema type the field belongs too. Helps when dealing with inline fragments/union types where we may have multiple fields with the same name from different types.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eMutationArgumentsAttribute\u003c/code\u003e renamed to \u003ccode\u003eGraphQLArgumentsAttribute\u003c/code\u003e and is used with subscriptions or mutation method arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-23\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-23\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd support for GraphQL subscriptions - see updated documentation\u003c/li\u003e\n\u003cli\u003eAdded support for defining Union types in the schema (#107)\u003c/li\u003e\n\u003cli\u003eCore library \u003ccode\u003eEntityGraphQL\u003c/code\u003e only targets \u003ccode\u003enetstandard2.1\u003c/code\u003e as we do not need to multi-target and this still supports a large dotnet base (3.1+)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-54\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-54\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #206 - If a service field included a binary expression EntityGraphQL would sometimes build an incorrect selection expression\u003c/li\u003e\n\u003cli\u003eFix #214 - The implicit conversion return type of a \u003ccode\u003eArgumentHelper.Required\u0026lt;\u0026gt;()\u003c/code\u003e field argument is non-null\u003c/li\u003e\n\u003cli\u003eFix #212 - Regression using a static or instance method in a service field\u003c/li\u003e\n\u003cli\u003eFix #223 - Mutations with inline args don't support variables with different name to argument name\u003c/li\u003e\n\u003cli\u003eFix #225 - Mutations with separate (not using \u003ccode\u003eMutationArgumentsAttribute\u003c/code\u003e) parameters fail if called without variables\u003c/li\u003e\n\u003cli\u003eFix #229 - Using \u003ccode\u003eField.Resolve()\u003c/code\u003e would incorrectly assume the field had a service\u003c/li\u003e\n\u003cli\u003e#219 - Handle conversion of variables as lists to a \u003ccode\u003eRequiredField\u0026lt;\u0026gt;\u003c/code\u003e arg of the list type\u003c/li\u003e\n\u003cli\u003e#215 - Fix issue using GraphQLValidator if using inline mutation arguments\u003c/li\u003e\n\u003cli\u003e#235 - Fix issue where arguments with the same name at the same level in a query would receive the same value\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.0.5\u003c/h1\u003e\u003ca id=\"user-content-305\" class=\"anchor\" aria-label=\"Permalink: 3.0.5\" href=\"#305\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-55\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-55\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #197 - If a mutation returns \u003ccode\u003eTask\u0026lt;T\u0026gt;\u003c/code\u003e use \u003ccode\u003eT\u003c/code\u003e as the return type\u003c/li\u003e\n\u003cli\u003eFix #204 - Nullable reference types correctly produce a nullable argument in the schema\u003c/li\u003e\n\u003cli\u003eIf not using \u003ccode\u003eMutationArgumentsAttribute\u003c/code\u003e in mutation methods \u003ccode\u003eautoAddInputTypes\u003c/code\u003e was being ignored\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.0.4\u003c/h1\u003e\u003ca id=\"user-content-304\" class=\"anchor\" aria-label=\"Permalink: 3.0.4\" href=\"#304\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-56\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-56\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #194 - \u003ccode\u003eHasType()\u003c/code\u003e was not checking type mappings\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.0.3\u003c/h1\u003e\u003ca id=\"user-content-303\" class=\"anchor\" aria-label=\"Permalink: 3.0.3\" href=\"#303\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-57\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-57\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePrevent creation of invalid GraphQL schemas\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eException is thrown if you try to add a field with arguments to types that do not support arguments - \u003ccode\u003eEnum\u003c/code\u003e \u0026amp; \u003ccode\u003eInput\u003c/code\u003e types\u003c/li\u003e\n\u003cli\u003eException is thrown if you try to add fields to a \u003ccode\u003eScalar\u003c/code\u003e type\u003c/li\u003e\n\u003cli\u003eException is thrown on invalid type name\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eSchema builder now creates a valid GraphQL type name for generic types\u003c/li\u003e\n\u003cli\u003eEnum types are now added to the schema as a typed \u003ccode\u003eSchemaType\u0026lt;T\u0026gt;\u003c/code\u003e instance. Meaning you can fetch them using \u003ccode\u003eschema.Type\u0026lt;MyEnum\u0026gt;()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix #181 - Schema builder now correctly respects \u003ccode\u003eSchemaBuilderOptions.IgnoreTypes\u003c/code\u003e. Note it compares names against the \u003ccode\u003eType.FullName\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix #182 - Add missing dotnet scalar type for \u003ccode\u003echar\u003c/code\u003e. By default this is added as a schema scalar type named \u003ccode\u003eChar\u003c/code\u003e so the client can decide how to handle it. Over the wire it will serialize as a string (default for \u003ccode\u003eSystem.Text.Json\u003c/code\u003e). You can change default scalars and mappings by using the \u003ccode\u003ePreBuildSchemaFromContext\u003c/code\u003e action when adding your schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"services.AddGraphQLSchema\u0026lt;TContext\u0026gt;(options =\u0026gt; {\n  options.PreBuildSchemaFromContext = schema =\u0026gt;\n  {\n      // remove and/or add scalar types or mappings here. e.g.\n      schema.AddScalarType\u0026lt;KeyValuePair\u0026lt;string, string\u0026gt;\u0026gt;(\u0026quot;StringKeyValuePair\u0026quot;, \u0026quot;Represents a pair of strings\u0026quot;);\n  };\n})\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eservices.AddGraphQLSchema\u0026lt;TContext\u0026gt;(options =\u0026gt; {\n  options.PreBuildSchemaFromContext = schema =\u0026gt;\n  {\n      // remove and/or add scalar types or mappings here. e.g.\n      schema.AddScalarType\u0026lt;KeyValuePair\u0026lt;string, string\u0026gt;\u0026gt;(\"StringKeyValuePair\", \"Represents a pair of strings\");\n  };\n})\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eWhen generating a field name for the field that takes an ID argument if the name generated matches the current field EntityGraphQL will add \u003ccode\u003eById\u003c/code\u003e to the field name. E.g. a property \u003ccode\u003eList\u0026lt;LinePath\u0026gt; Line { get; set; }\u003c/code\u003e previously would try to add the \u003ccode\u003eline: [LinePath]\u003c/code\u003e field with no arguments and another field named \u003ccode\u003eline(id: ID!): LinePath\u003c/code\u003e. This causes an error. EntityGraphQL will name add \u003ccode\u003elineById(id: ID!): LinePath\u003c/code\u003e. This is because the singularized version of \"line\" is \"line\".\u003c/li\u003e\n\u003cli\u003eIn built field extensions now check if their extra types have already been added by using \u003ccode\u003eType\u003c/code\u003e instead of name allowing you to add them with your own descriptions etc.\u003c/li\u003e\n\u003cli\u003eFix mutations without any mutation arguments would incorrectly include the query context as an argument\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.0.2\u003c/h1\u003e\u003ca id=\"user-content-302\" class=\"anchor\" aria-label=\"Permalink: 3.0.2\" href=\"#302\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-58\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-58\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eInputValue\u003c/code\u003e type was being registered under wrong name #184\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.0.1\u003c/h1\u003e\u003ca id=\"user-content-301\" class=\"anchor\" aria-label=\"Permalink: 3.0.1\" href=\"#301\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-59\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-59\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eInput Types were incorrectly getting field arguments added when using \u003ccode\u003eAutoCreateFieldWithIdArguments\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3.0.0\u003c/h1\u003e\u003ca id=\"user-content-300\" class=\"anchor\" aria-label=\"Permalink: 3.0.0\" href=\"#300\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-10\" class=\"anchor\" aria-label=\"Permalink: Breaking changes\" href=\"#breaking-changes-10\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eIDirectiveProcessor\u003c/code\u003e now requires a \u003ccode\u003eList\u0026lt;ExecutableDirectiveLocation\u0026gt; On { get; }\u003c/code\u003e to define where the directive is allowed to be used\u003c/li\u003e\n\u003cli\u003eRemoved obsolete \u003ccode\u003eISchemaType.BaseType\u003c/code\u003e. Use \u003ccode\u003eISchemaType.BaseTypes\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eCleaned up \u003ccode\u003eSchemaType\u003c/code\u003e constructors - using \u003ccode\u003eGqlTypeEnum\u003c/code\u003e instead of many boolean flags\u003c/li\u003e\n\u003cli\u003eRemoved obsolete \u003ccode\u003eSchemaProvider.AddInheritedType\u0026lt;TBaseType\u0026gt;\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemoved the instance parameter from \u003ccode\u003eAddMutationsFrom\u003c/code\u003e and friends. Mutation \"controllers\" are now always created per request like an asp.net controller. Use DI for any constructor parameters\u003c/li\u003e\n\u003cli\u003eRenamed \u003ccode\u003eISchemaType.AddBaseType\u003c/code\u003e to \u003ccode\u003eISchemaType.Implements\u003c/code\u003e to align with GraphQL language\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eISchemaType.Implements\u003c/code\u003e will throw an exception if you try to implement a non-interface\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eRenamed \u003ccode\u003eISchemaType.AddAllBaseTypes\u003c/code\u003e to \u003ccode\u003eISchemaType.ImplementAllBaseTypes\u003c/code\u003e to align with GraphQL language\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eCreate\u003c/code\u003e \u0026amp; \u003ccode\u003eFromObject\u003c/code\u003e on \u003ccode\u003eSchemaBuilder\u003c/code\u003e now take option classes to configure the create of the schema through reflection\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eISchemaType.AddAllFields\u003c/code\u003e also takes the option class to configure it's behavior\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eISchemaType.AddAllFields\u003c/code\u003e default behavior now auto adds any complex types found really reflection the properties \u0026amp; fields and will add those to the schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdded new option when building a schema with \u003ccode\u003eSchemaBuilder.FromObject\u003c/code\u003e - \u003ccode\u003eAutoCreateInterfaceTypes\u003c/code\u003e. Defaults to \u003ccode\u003efalse\u003c/code\u003e. If \u003ccode\u003etrue\u003c/code\u003e any abstract classes or interfaces on types reflected with be added as Interfaces in the schema. This is useful if you expose lists of entities on a base/interface type.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-24\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-24\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eToGraphQLSchemaString\u003c/code\u003e now outputs directives in the schema\u003c/li\u003e\n\u003cli\u003e#154 - Dynamically generated types used in the expressions now include the field name the type is being built for to aid in debugging issues\u003c/li\u003e\n\u003cli\u003e#146 - Allow GraphQL mutation arguments as separate arguments in the method signature. Avoiding the need to create the mutation argument classes. e.g.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"[GraphQLMutation]\npublic Person AddPersonSeparateArguments(string name, List\u0026lt;string\u0026gt; names, InputObject nameInput, Gender? gender)\n{\n  // ...\n}\n\n[GraphQLMutation]\npublic Person AddPersonSingleArgument(InputObject nameInput)\n{\n  // ...\n}\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e[GraphQLMutation]\npublic Person AddPersonSeparateArguments(string name, List\u0026lt;string\u0026gt; names, InputObject nameInput, Gender? gender)\n{\n  // ...\n}\n\n[GraphQLMutation]\npublic Person AddPersonSingleArgument(InputObject nameInput)\n{\n  // ...\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTurn into\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"type Mutation {\n  addPersonSeparateArguments(name: String, names: [String!], nameInput: InputObject, gender: Gender): Person\n  addPersonSingleArgument(nameInput: InputObject): Person\n}\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003etype Mutation {\n  addPersonSeparateArguments(name: String, names: [String!], nameInput: InputObject, gender: Gender): Person\n  addPersonSingleArgument(nameInput: InputObject): Person\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#160 - Nested data annotations for validation is now supported\u003c/li\u003e\n\u003cli\u003eMain \u003ccode\u003eEntityGraphQL\u003c/code\u003e package now targets \u003ccode\u003enet6.0;net5.0;netstandard2.1\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e#170 - EntityGraphQL now replaces query context expressions in service fields by matching the expression instance it extracted. This allows for more complex expressions when passing data to a service field\u003c/li\u003e\n\u003cli\u003eAdded support for \u003ca href=\"https://github.com/graphql/graphql-spec/pull/825\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/graphql/graphql-spec/pull/825/hovercard\"\u003e@oneOf Input Types\u003c/a\u003e. Mark an input type with \u003ccode\u003eGraphQLOneOfAttribute\u003c/code\u003e and EntityGraphQL will mark the type with \u003ccode\u003e@oneOf\u003c/code\u003e in the schema and validate the input meets the requirements on execution\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-60\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-60\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#171 inheritance support for nested properties / conditional fields\u003c/li\u003e\n\u003cli\u003e#176 - allow fully qualified enums in the filter query language\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.3.2\u003c/h1\u003e\u003ca id=\"user-content-232\" class=\"anchor\" aria-label=\"Permalink: 2.3.2\" href=\"#232\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-61\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-61\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #159 - SchemaBuilder will no longer try to create schema fields for \u003ccode\u003econst\u003c/code\u003e fields on mutation args or input types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.3.1\u003c/h1\u003e\u003ca id=\"user-content-231\" class=\"anchor\" aria-label=\"Permalink: 2.3.1\" href=\"#231\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-62\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-62\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e#163 - Fix to handle null property in a nested object when processing a System.Text.Json deserialised query document\u003c/li\u003e\n\u003cli\u003e#164 - Fix to support inline fragments in a fragment\u003c/li\u003e\n\u003cli\u003e#166 - Add missing \u003ccode\u003e!=\u003c/code\u003e operator in the filter expression language and make sure precedence is correct for logic operators\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.3.0\u003c/h1\u003e\u003ca id=\"user-content-230\" class=\"anchor\" aria-label=\"Permalink: 2.3.0\" href=\"#230\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-25\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-25\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eAddMutationsFrom\u003c/code\u003e now can use the \u003ccode\u003eServiceProvider\u003c/code\u003e instance to create the mutation class allowing dependency injection at the constructor level like Controllers.\u003c/li\u003e\n\u003cli\u003eYou can still provide an instance of the mutation class that will be used instead which is the same behavior as previous, however this method is considered obsolete and will be removed in a future version. We suggest you utilse the ServiceProvider to register your mutation classes with your desired lifetime.\u003c/li\u003e\n\u003cli\u003eAllow types to inherit from multiple base classes/interfaces\u003c/li\u003e\n\u003cli\u003eCleanup SchemaType to use an enum instead of lots of boolean type variables. Previous constructor is obsolete\u003c/li\u003e\n\u003cli\u003eCleanup Interfaces api - added a \u003ccode\u003eAddAllBaseTypes\u003c/code\u003e, \u003ccode\u003eAddBaseType\u003c/code\u003e and \u003ccode\u003eAddBaseType(string)\u003c/code\u003e which provides a lot more flexibility. See updated docs\u003c/li\u003e\n\u003cli\u003eAdded support for Inline Fragments for types that have interfaces\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eToGraphQLSchemaString\u003c/code\u003e now orders types and fields by name for consistency regardless of order of fields added and to reduce differences when diffing the schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-63\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-63\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #120 - Error when using \u003ccode\u003eschema.RemoveTypeAndAllFields\u003c/code\u003e and a field of the removing type had a type that has not been added to the schema\u003c/li\u003e\n\u003cli\u003eFix #143 - Error building a null check expression in certain cases.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.2.0\u003c/h1\u003e\u003ca id=\"user-content-220\" class=\"anchor\" aria-label=\"Permalink: 2.2.0\" href=\"#220\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-26\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-26\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eFromObject\u003c/code\u003e / default schema generator now adds single fields within non root-level fields. E.g. if a root-level field is a list of \u003ccode\u003epeople\u003c/code\u003e and each person has a list of \u003ccode\u003eprojects\u003c/code\u003e (and projects has an id) is will create a field on \u003ccode\u003eproject(id)\u003c/code\u003e field on person\u003c/li\u003e\n\u003cli\u003eAdd support for nullable reference types - meaning the correct GraphQL schema nullable definitions are generated. @bzbetty\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-64\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-64\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix generation of singular field with \u003ccode\u003eid\u003c/code\u003e arguments on list fields that use a paging extension when generating a schema. @bzbetty\u003c/li\u003e\n\u003cli\u003eFix - when adding Mutation argument types only search for public instance properties. @breyed\u003c/li\u003e\n\u003cli\u003eFix interface query introspection. @bzbetty\u003c/li\u003e\n\u003cli\u003eFix #137 - multiple line endings were used in the schema output\u003c/li\u003e\n\u003cli\u003eFix - make sure we use an array for arguments when expected instead of a list\u0026lt;\u0026gt;\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1.5\u003c/h1\u003e\u003ca id=\"user-content-215\" class=\"anchor\" aria-label=\"Permalink: 2.1.5\" href=\"#215\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix null exception in service field from an object field\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1.4\u003c/h1\u003e\u003ca id=\"user-content-214\" class=\"anchor\" aria-label=\"Permalink: 2.1.4\" href=\"#214\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #123 do not output types with no fields in the schema definition\u003c/li\u003e\n\u003cli\u003eFix issue calling \u003ccode\u003eToList\u003c/code\u003e in an expression that then used a \u003ccode\u003eIQueryable\u003c/code\u003e \u003ccode\u003eFirstOrDefault\u003c/code\u003e or friends. Resulting in an invalid expression at runtime\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1.3\u003c/h1\u003e\u003ca id=\"user-content-213\" class=\"anchor\" aria-label=\"Permalink: 2.1.3\" href=\"#213\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix - Throw an error if your query document defines a non-null variable and a null value is supplied\u003c/li\u003e\n\u003cli\u003eService fields that return a list of items are now wrapped in a null check expression like service fields that return a single object are\u003c/li\u003e\n\u003cli\u003eFix - Object fields not included in the schema could be returned when the selection set was missing from the query. Now missing selection sets on list or object fields in queries throw an error. Selection sets are required in graphql queries for non scalar/enum field types. Thanks @breyed\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1.2\u003c/h1\u003e\u003ca id=\"user-content-212\" class=\"anchor\" aria-label=\"Permalink: 2.1.2\" href=\"#212\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix - issue with a field using a static member e.g. DateTime.MaxValue\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1.1\u003c/h1\u003e\u003ca id=\"user-content-211\" class=\"anchor\" aria-label=\"Permalink: 2.1.1\" href=\"#211\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix - issue where a nullable value was incorrectly being called\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1.0\u003c/h1\u003e\u003ca id=\"user-content-210\" class=\"anchor\" aria-label=\"Permalink: 2.1.0\" href=\"#210\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdded support for interfaces - thanks @bzbetty\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eEntityGraphQLException\u003c/code\u003e - use this to throw exceptions and add more error data to the error result via extensions\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eGraphQLValidator\u003c/code\u003e now supports adding custom data via the extensions field\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eResolveWithService\u003c/code\u003e methods will throw an exception if the expression returns \u003ccode\u003eTask\u003c/code\u003e as we need the result. Use \u003ccode\u003e.GetAwaiter().GetResult()\u003c/code\u003e. Expression do not support \u003ccode\u003easync\u003c/code\u003e/\u003ccode\u003eawait\u003c/code\u003e as it is a compiler feature and we need the actual result to build the expression and return the data\u003c/li\u003e\n\u003cli\u003eFix using QueryFilter with an empty string treats it as no value - i.e. no filter\u003c/li\u003e\n\u003cli\u003eFix - the type of an array variable defined as required \u003ccode\u003e[Type!]!\u003c/code\u003e was incorrectly reflected\u003c/li\u003e\n\u003cli\u003eFix - service type's field used in a field's expression was not being extracted into the select. E.g. service field \u003ccode\u003eUser.project\u003c/code\u003e has an expression requiring the \u003ccode\u003euser.id\u003c/code\u003e which is not included in the GraphQL query.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.0.3\u003c/h1\u003e\u003ca id=\"user-content-203\" class=\"anchor\" aria-label=\"Permalink: 2.0.3\" href=\"#203\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix thread safety issue with cached queries\u003c/li\u003e\n\u003cli\u003eFix support for using arrays in field argument definitions\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.0.2\u003c/h1\u003e\u003ca id=\"user-content-202\" class=\"anchor\" aria-label=\"Permalink: 2.0.2\" href=\"#202\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efix regression where non-required (nullable) document variables would be set their non-nullable default value. E.g. \u003ccode\u003eGuid\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.0.1\u003c/h1\u003e\u003ca id=\"user-content-201\" class=\"anchor\" aria-label=\"Permalink: 2.0.1\" href=\"#201\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix regression where non service fields in service fields were not being pulled forward to the stage one expression execution.\u003c/li\u003e\n\u003cli\u003eFix regression where services were not be passed to a mutation with no arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.0.0\u003c/h1\u003e\u003ca id=\"user-content-200\" class=\"anchor\" aria-label=\"Permalink: 2.0.0\" href=\"#200\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBreaking changes\u003c/h2\u003e\u003ca id=\"user-content-breaking-changes-11\" class=\"anchor\" aria-label=\"Permalink: Breaking changes\" href=\"#breaking-changes-11\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eInterface for Field Extensions now are passed a flag telling the extension if this is pre or post the call with service fields\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eGetExpression\u003c/code\u003e in Field Extensions is passed the parent IGraphQLNode - useful when your extension changed the original shape of the object graph, like the paging extensions\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eservices.AddGraphQLSchema\u003c/code\u003e adopts a more ASP.NET style \u003ccode\u003eoptions\u003c/code\u003e callback overload to configure the creation of the schema\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eMapGraphQL\u003c/code\u003e implementation now returns \u003ccode\u003e400\u003c/code\u003e Bad Request status code if the query results contains errors, as a bad query was sent\u003c/li\u003e\n\u003cli\u003eDirective interface for building custom directives has changed\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseSort\u003c/code\u003e field extension now takes an array of \u003ccode\u003eSortInput\u0026lt;T\u0026gt;\u003c/code\u003e so order of sorts is used\u003c/li\u003e\n\u003cli\u003eParsing floats/doubles/decimals now uses \u003ccode\u003eCultureInfo.InvariantCulture\u003c/code\u003e\nClean up on the schema building APIs to make them more consistent, documented and concise\u003c/li\u003e\n\u003cli\u003eFix #89 - Remove JSON.NET dependency - This means internally if EntityGraphQL hits a \u003ccode\u003eJObject\u003c/code\u003e or \u003ccode\u003eJToken\u003c/code\u003e it does not know what to do with them. Make sure \u003ccode\u003eQueryRequest.Variables\u003c/code\u003e are fully deserialized. I.e. do not have any \u003ccode\u003eJObject\u003c/code\u003e/\u003ccode\u003eJToken\u003c/code\u003es in there. Deserialize them to nested \u003ccode\u003eDictionary\u0026lt;string, object\u0026gt;\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eIf you use the EntityGraphQL.AspNet package and the \u003ccode\u003eMapGraphQL()\u003c/code\u003e method you do not need to worry about anything. EntityGraphQL.AspNet uses \u003ccode\u003eSystem.Text.Json\u003c/code\u003e and handles the nested \u003ccode\u003eJsonElement\u003c/code\u003es with a custom type converter.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIf you are directly using \u003ccode\u003eSchemaProvider.ExecuteRequest()\u003c/code\u003e (i.e. from a Controller or elsewhere), and you are using \u003ccode\u003eNewtonsoft.Json\u003c/code\u003e to deserialize the incoming \u003ccode\u003eQueryRequest\u003c/code\u003e you can add a custom converter to your schema to handle nested \u003ccode\u003eJObject\u003c/code\u003e/\u003ccode\u003eJToken\u003c/code\u003es when encountered in query variables.\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"schema.AddCustomTypeConverter(new JObjectTypeConverter());\nschema.AddCustomTypeConverter(new JTokenTypeConverter());\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eschema.AddCustomTypeConverter(new JObjectTypeConverter());\nschema.AddCustomTypeConverter(new JTokenTypeConverter());\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSee the \u003ca href=\"https://github.com/EntityGraphQL/EntityGraphQL/blob/main/src/tests/EntityGraphQL.Tests/SerializationTests.cs\"\u003eserialization tests for an example\u003c/a\u003e.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRemove the \u003ccode\u003eWithService()\u003c/code\u003e method used inside a field expression and replace it with \u003ccode\u003eResolveWithService\u0026lt;TService\u0026gt;()\u003c/code\u003e on the field for easier discovery in your IDE. Example\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"schema.Type\u0026lt;Person\u0026gt;().AddField(\u0026quot;age\u0026quot;, \u0026quot;A persons age\u0026quot;)\n  .ResolveWithService\u0026lt;AgeService\u0026gt;(\n      (person, ageService) =\u0026gt; ageService.GetAge(person.Birthday)\n  );\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eschema.Type\u0026lt;Person\u0026gt;().AddField(\"age\", \"A persons age\")\n  .ResolveWithService\u0026lt;AgeService\u0026gt;(\n      (person, ageService) =\u0026gt; ageService.GetAge(person.Birthday)\n  );\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eClean up of \u003ccode\u003eSchemaType\u003c/code\u003e APIs to add/replace/remove fields.\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRemove \u003ccode\u003eSchemaProvider.Add/ReplaceField\u003c/code\u003e methods.\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eUse \u003ccode\u003eSchemaProvider.Query().Add/ReplaceField()\u003c/code\u003e or \u003ccode\u003eSchemaProvider.UpdateQuery(queryType =\u0026gt; {})\u003c/code\u003e to make changes to the root Query type in the schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eAdditions to the \u003ccode\u003eField\u003c/code\u003e API to add more uncommon functionality to chaining methods\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003eSchemaProvider.UpdateQueryType()\u003c/code\u003e, use \u003ccode\u003eSchemaProvider.UpdateQuery(type =\u0026gt; {})\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003eSchemaProvider.TypeHasField()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove \u003ccode\u003eSchemaProvider.GetQueryFields()\u003c/code\u003e - use \u003ccode\u003eSchemaProvider.Query.GetFields()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRenamed \u003ccode\u003eGetGraphQLSchema()\u003c/code\u003e to \u003ccode\u003eToGraphQLSchemaString()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRenamed \u003ccode\u003eAddMutationFrom()\u003c/code\u003e to \u003ccode\u003eAddMutationsFrom()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemoved Obsolete methods:\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eRequiresAllClaims\u003c/code\u003e replaced by \u003ccode\u003eRequiresAllRoles\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eRequiresAnyClaim\u003c/code\u003e replaced by \u003ccode\u003eRequiresAnyRole\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eExecuteQuery\u003c/code\u003e replaced by \u003ccode\u003eExecuteRequest\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eExecuteQueryAsync\u003c/code\u003e replaced by \u003ccode\u003eExecuteRequestAsync\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eChanges\u003c/h2\u003e\u003ca id=\"user-content-changes-27\" class=\"anchor\" aria-label=\"Permalink: Changes\" href=\"#changes-27\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSupport for persisted queries (enabled by default) - \u003ca href=\"https://www.apollographql.com/docs/react/api/link/persisted-queries/\" rel=\"nofollow\"\u003ehttps://www.apollographql.com/docs/react/api/link/persisted-queries/\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eSupport for a query cache of recent queries. Enabled by default. Caches the result of compiling the query document string to an AST. Execution is then applying the document level variables, building the expressions then execution\u003c/li\u003e\n\u003cli\u003eBetter support for nested objects in \u003ccode\u003eQueryVariables\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003ePerformance enhancements when building internal types for arguments\u003c/li\u003e\n\u003cli\u003ePerformance of compiling and building expressions has been improved - it is about 2 times faster. Note this is just building the expressions, not executing them which triggers your services/EF/etc\u003c/li\u003e\n\u003cli\u003eReduction in memory allocation when compiling queries by around 30%\u003c/li\u003e\n\u003cli\u003eYou can no add/define mutation methods as delegates/anonymous functions etc.\u003c/li\u003e\n\u003cli\u003eYou can now use \u003ccode\u003e[Range]\u003c/code\u003e \u0026amp; \u003ccode\u003e[StringLength]\u003c/code\u003e attributes on your arguments for more validation options\u003c/li\u003e\n\u003cli\u003eIntroduced custom argument validators - a simple way to act on field arguments before execution. Great for custom/complex input validation on arguments. Use \u003ccode\u003efield.AddValidator()\u003c/code\u003e or the \u003ccode\u003eArgumentValidatorAttribute\u003c/code\u003e attribute.\u003c/li\u003e\n\u003cli\u003eUsing \u003ccode\u003eAddAllFields(true)\u003c/code\u003e on an \u003ccode\u003eInputType\u003c/code\u003e will add the sub-complex class types as \u003ccode\u003eInputType\u003c/code\u003es as well\u003c/li\u003e\n\u003cli\u003eNew option to auto add other classes found on mutation arguments as \u003ccode\u003eInputType\u003c/code\u003es when adding a mutation\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFixes\u003c/h2\u003e\u003ca id=\"user-content-fixes-65\" class=\"anchor\" aria-label=\"Permalink: Fixes\" href=\"#fixes-65\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix - Paging field extensions are now thread safe to support multiple different queries being run on the same field at the same time\u003c/li\u003e\n\u003cli\u003eFix #101 - allow custom de/serialization of incoming requests and outgoing responses, via. services \u003ccode\u003eIGraphQLRequestDeserializer\u003c/code\u003e \u0026amp; \u003ccode\u003eIGraphQLResponseSerializer\u003c/code\u003e.\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cem\u003eNote that the objects created in the resulting \u003ccode\u003eQueryResult\u003c/code\u003e have fields named like the fields in the schema which is controlled by the \u003ccode\u003efieldNamer\u003c/code\u003e function provided to the \u003ccode\u003eSchemaProvider\u003c/code\u003e which defaults to GraphQL \"standard\" (fields camelCase, types PascalCase)\u003c/em\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix field name looks up that were not using the \u003ccode\u003efieldNamer\u003c/code\u003e function in \u003ccode\u003eSchemaProvider\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix bug where compiler would loop through all available arguments even if it already found the matching type\u003c/li\u003e\n\u003cli\u003eFix argument types of unsigned short/int/long\u003c/li\u003e\n\u003cli\u003eFix #72 - Handling dictionaries introspection - note it will try to create a scalar type \u003ccode\u003eKeyValuePair\u0026lt;T1, T2\u0026gt;\u003c/code\u003e in the schema by default\u003c/li\u003e\n\u003cli\u003eFix handling argument types of unsigned short/int/long\u003c/li\u003e\n\u003cli\u003eFix issue parsing float/double argument values\u003c/li\u003e\n\u003cli\u003eFix null exception with mutations returning a selection with a list field\u003c/li\u003e\n\u003cli\u003eFix directives on mutation fields\u003c/li\u003e\n\u003cli\u003eFix #110 - Field using the wrong sort input object when the fields are the same\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.2.1\u003c/h1\u003e\u003ca id=\"user-content-121\" class=\"anchor\" aria-label=\"Permalink: 1.2.1\" href=\"#121\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #99 issue using the MapGraphQL() extension method\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.2.0\u003c/h1\u003e\u003ca id=\"user-content-120\" class=\"anchor\" aria-label=\"Permalink: 1.2.0\" href=\"#120\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNew option to disable introspection. Use \u003ccode\u003eintrospectionEnabled\u003c/code\u003e parameter when creating \u003ccode\u003eSchemaProvider\u003c/code\u003e. Defaults to \u003ccode\u003etrue\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.1.2\u003c/h1\u003e\u003ca id=\"user-content-112\" class=\"anchor\" aria-label=\"Permalink: 1.1.2\" href=\"#112\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #96 - processing int/long/short as list arguments in mutations - thanks @pierrebelin\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.1.1\u003c/h1\u003e\u003ca id=\"user-content-111\" class=\"anchor\" aria-label=\"Permalink: 1.1.1\" href=\"#111\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #92 - error processing mutation arguments that are lists/arrays\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.1.0\u003c/h1\u003e\u003ca id=\"user-content-110\" class=\"anchor\" aria-label=\"Permalink: 1.1.0\" href=\"#110\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAuthorization now supports using ASP.NET policies from the \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e package\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eIAuthorizationService\u003c/code\u003e is resolved to check authorization and needs to be registered\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[Authorize]\u003c/code\u003e attribute can be used instead of the \u003ccode\u003e[GraphQLAuthorize]\u003c/code\u003e attribute when using \u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix - \u003ccode\u003eRequiredAttribute\u003c/code\u003e results in the field being not null in the generated GraphQL Schema\u003c/li\u003e\n\u003cli\u003eFix - Schema introspection was incorrectly returning \u003ccode\u003e__typename\u003c/code\u003e for Enums\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseConnectionPagingAttribute\u003c/code\u003e takes optional arguments for default page size and max page size\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseOffsetPagingAttribute\u003c/code\u003e takes optional arguments for default page size and max page size\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEntityGraphQL.AspNet\u003c/code\u003e now uses System.Text.Json for de/serialization internally. It still supports JSON.NET objects in the variable object (as well as System.Text.Json types)\u003c/li\u003e\n\u003cli\u003eFix #19 - you can mark fields (including mutations) as deprecated using the dotnet \u003ccode\u003e[Obsolete]\u003c/code\u003e attribute or the \u003ccode\u003eIField.Deprecate(reason)\u003c/code\u003e method in the schema building\u003c/li\u003e\n\u003cli\u003eFix #88 - If an argument is marked as required and not provided in the query request an error is raised. Mark arguments optional via the API, or make it a nullable type or give it a default value\u003c/li\u003e\n\u003cli\u003eQuery used in ConnectionPaging now resolves itself using \u003ccode\u003e.ToList()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eObsolete - will be removed 2.x\u003c/h2\u003e\u003ca id=\"user-content-obsolete---will-be-removed-2x\" class=\"anchor\" aria-label=\"Permalink: Obsolete - will be removed 2.x\" href=\"#obsolete---will-be-removed-2x\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eRequireAnyClaim()\u003c/code\u003e \u0026amp; \u003ccode\u003eRequireAllClaims()\u003c/code\u003e. Use \u003ccode\u003eRequireAnyRole()\u003c/code\u003e \u0026amp; \u003ccode\u003eRequireAllRoles()\u003c/code\u003e as the \u003ccode\u003eClaimTypes.Role\u003c/code\u003e was used previously and this change makes it explicit\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eschema.ExecuteQueryAsync/ExecuteQuery(QueryRequest, TContextType, IServiceProvider, ClaimsIdentity, ExecutionOptions)\u003c/code\u003e. Use the \u003ccode\u003eExecuteRequest\u003c/code\u003e/\u003ccode\u003eExecuteRequestAsync\u003c/code\u003e methods that take the full \u003ccode\u003eClaimsPrincipal\u003c/code\u003e as we now support authorization with policies\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.0.3\u003c/h1\u003e\u003ca id=\"user-content-103\" class=\"anchor\" aria-label=\"Permalink: 1.0.3\" href=\"#103\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #86. Mutations not correctly checking required authorization on the mutation field directly\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.0.2\u003c/h1\u003e\u003ca id=\"user-content-102\" class=\"anchor\" aria-label=\"Permalink: 1.0.2\" href=\"#102\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix - \u003ccode\u003eRequiredAttribute\u003c/code\u003e results in the field being not null in the generated GraphQL Schema\u003c/li\u003e\n\u003cli\u003eFix issue with expressions failing in a high throughput, threaded use case (heavily hit API)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.0.1\u003c/h1\u003e\u003ca id=\"user-content-101\" class=\"anchor\" aria-label=\"Permalink: 1.0.1\" href=\"#101\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue passing optional enum arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1.0.0\u003c/h1\u003e\u003ca id=\"user-content-100\" class=\"anchor\" aria-label=\"Permalink: 1.0.0\" href=\"#100\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNew extension methods to ease adding your schema to the service collection. See docs - \u003ccode\u003eservices.AddGraphQLSchema\u0026lt;DemoContext\u0026gt;(options =\u0026gt; {})\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eNew package EntityGraphQL.AspNet with extensions to easily expose a graphql endpoint with \u003ccode\u003eMapGraphQL\u0026lt;T\u0026gt;()\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"app.UseEndpoints(endpoints =\u0026gt;\n{\n    endpoints.MapGraphQL\u0026lt;DemoContext\u0026gt;();\n});\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eapp\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eUseEndpoints\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eendpoints \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s1\"\u003eendpoints\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eMapGraphQL\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eDemoContext\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue reconnecting from a service field to the context\u003c/li\u003e\n\u003cli\u003eFix issue when execution is split across non service fields and then with service fields and the first result is null\u003c/li\u003e\n\u003cli\u003eFix issue using Connection/Offset paging on collection fields that were not on the query root\u003c/li\u003e\n\u003cli\u003eFix issue using Connection/Offset paging on collection fields that have service fields\u003c/li\u003e\n\u003cli\u003eOption to add default sort when using \u003ccode\u003eUseSort()\u003c/code\u003e field extension\u003c/li\u003e\n\u003cli\u003eFix service fields in an inline fragment selection\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.70.0\u003c/h1\u003e\u003ca id=\"user-content-0700\" class=\"anchor\" aria-label=\"Permalink: 0.70.0\" href=\"#0700\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eIntroduction of fields extensions to encapsulate common field logic and apply it to many fields. See update \u003ca href=\"https://entitygraphql.github.io\" rel=\"nofollow\"\u003edocs\u003c/a\u003e. New built in field extensions\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eUseConnectionPaging()\u003c/code\u003e which when applied to a collection field modifies the field to implement the GraphQL Connection spec for paging data with metadata\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseOffsetPaging()\u003c/code\u003e which when applied to a collection field modifies the field to implement an offset style paging structure\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseFilter()\u003c/code\u003e which when applied to a collection adds a \u003ccode\u003efilter\u003c/code\u003e argument that takes an expression\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eUseSort()\u003c/code\u003e which when applied to a collection adds a \u003ccode\u003esort\u003c/code\u003e arguments that takes fields to sort the collection by\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eReplaced Antlr based GraphQL query lexer/parser with HotChocolate.Language Parser. Parsing of query documents is \u003cem\u003emuch\u003c/em\u003e faster!\u003c/li\u003e\n\u003cli\u003eYou can now directly use lists (\u003ccode\u003e[12,32]\u003c/code\u003e, etc) and objects (\u003ccode\u003e{name: \"Frank\"}\u003c/code\u003e) as arguments in the query document. Although it is still recommended to use the \u003ccode\u003eVariables\u003c/code\u003e in the query\u003c/li\u003e\n\u003cli\u003eAdded benchmarks to help explore performance issues in expression building (What we do with expressions is fast, but found the Antlr Parser was slow)\u003c/li\u003e\n\u003cli\u003eDirectives now supported on fragment spreads\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eBreaking changes\u003c/em\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eEntityGraphQL now targets netstandard2.1\u003c/li\u003e\n\u003cli\u003eSome optional arguments in \u003ccode\u003eExecuteQuery\u003c/code\u003e moved to an Options object\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.69.0\u003c/h1\u003e\u003ca id=\"user-content-0690\" class=\"anchor\" aria-label=\"Permalink: 0.69.0\" href=\"#0690\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eNew docs \u003ca href=\"https://entitygraphql.github.io/introduction\" rel=\"nofollow\"\u003ehttps://entitygraphql.github.io/introduction\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eSchemaProvider.UpdateType\u0026lt;T\u0026gt;(Action\u0026lt;SchemaType\u0026lt;T\u0026gt;\u0026gt; updateFunc)\u003c/code\u003e to better help \"contain\" schema types. Instead of\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"schema.Type\u0026lt;MyType\u0026gt;().AddField(...);\nschema.Type\u0026lt;MyType\u0026gt;().AddField(...);\nschema.Type\u0026lt;MyType\u0026gt;().AddField(...);\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eschema.Type\u0026lt;MyType\u0026gt;().AddField(...);\nschema.Type\u0026lt;MyType\u0026gt;().AddField(...);\nschema.Type\u0026lt;MyType\u0026gt;().AddField(...);\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003ewe have\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"schema.UpdateType\u0026lt;MyType\u0026gt;(t =\u0026gt; {\n  t.AddField(...);\n  t.AddField(...);\n  t.AddField(...);\n});\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003eschema.UpdateType\u0026lt;MyType\u0026gt;(t =\u0026gt; {\n  t.AddField(...);\n  t.AddField(...);\n  t.AddField(...);\n});\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eSimilar for \u003ccode\u003eSchemaProvider.AddType\u0026lt;T\u0026gt;(string name, string description, Action\u0026lt;SchemaType\u0026lt;T\u0026gt;\u0026gt; updateFunc)\u003c/code\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eYou can pass a \u003ccode\u003eILogger\u0026lt;SchemaProvider\u0026lt;T\u0026gt;\u0026gt;\u003c/code\u003e when creating a \u003ccode\u003eSchemaProvider\u003c/code\u003e. Exceptions etc. will be logged\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eTake\u0026lt;TSource\u0026gt;(this IQueryable\u0026lt;TSource\u0026gt; source, int? count)\u003c/code\u003e that works on \u003ccode\u003eIQueryable\u0026lt;T\u0026gt;\u003c/code\u003e to support EF translation\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eBreaking changes\u003c/em\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eEntityGraphQL now targets netstandard2.0\u003c/li\u003e\n\u003cli\u003eBig refactor/clean - hopefully easier to follow the post Antlr (compiled graphql) output - see \u003ccode\u003eGraphQL*Field\u003c/code\u003e classes\u003c/li\u003e\n\u003cli\u003eSupport for dotnet Entity Framework Core 3.1+ when using other services in the schema (\u003ccode\u003eWithService()\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eRemoved the \u003ccode\u003eWhere\u0026lt;TSource\u0026gt;(this IEnumerable\u0026lt;TSource\u0026gt; source, EntityQueryType\u0026lt;TSource\u0026gt; filter)\u003c/code\u003e helper. Use the \u003ccode\u003eWhereWhen\u003c/code\u003e methods that support \u003ccode\u003eEntityQueryType\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eTo support EF 3.x as a base schema context we now build and execute expressions in 2 stages. See the updated readme section How EntityGraphQL handles WithService().\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.68.1\u003c/h1\u003e\u003ca id=\"user-content-0681\" class=\"anchor\" aria-label=\"Permalink: 0.68.1\" href=\"#0681\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eUpdate Humanizer.Core dependency which resolves issue with newer dotnet core\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.68.0\u003c/h1\u003e\u003ca id=\"user-content-0680\" class=\"anchor\" aria-label=\"Permalink: 0.68.0\" href=\"#0680\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue where \u003ccode\u003eFieldNamer\u003c/code\u003e was not being consistently used. Thanks @AnderssonPeter\u003c/li\u003e\n\u003cli\u003eMake sure we include inner exceptions on errors. Thanks @AnderssonPeter\u003c/li\u003e\n\u003cli\u003eAdded string and long parsing for DateTime and DateTimeOffset. Thanks @GravlLift\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.67.0\u003c/h1\u003e\u003ca id=\"user-content-0670\" class=\"anchor\" aria-label=\"Permalink: 0.67.0\" href=\"#0670\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAs per GraphQL spec commas are optional (previously EntityGraphQL expected them in field/mutation arguments)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eBreaking changes\u003c/em\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eerrors property on query result should not be present on the response if there are no errors per the graphQL specification.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.66.1\u003c/h1\u003e\u003ca id=\"user-content-0661\" class=\"anchor\" aria-label=\"Permalink: 0.66.1\" href=\"#0661\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix bug with using \u003ccode\u003eWithService()\u003c/code\u003e when you require the schema context service again to create a link between services\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.66.0\u003c/h1\u003e\u003ca id=\"user-content-0660\" class=\"anchor\" aria-label=\"Permalink: 0.66.0\" href=\"#0660\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eWhen using services other than the schema context in fields (that return a single object not a Enumerable) the methods/services are no longer executed multiple times. (issue #36). Notes below\u003c/li\u003e\n\u003cli\u003eWhen a string matches a date time it will be converted to a \u003ccode\u003eDateTime\u003c/code\u003e object. Useful when using the \u003ccode\u003eArgumentHelper.EntityQuery\u003c/code\u003e for advanced filtering. Regex matches \u003ccode\u003e\"yyyy-MM-dd HH:mm:ss.fffffffzzz\"\u003c/code\u003e, \u003ccode\u003e\"yyyy-MM-dd HH:mm:ss\"\u003c/code\u003e, \u003ccode\u003e\"yyyy-MM-dd\"\u003c/code\u003e with the separator between date and time being either \u003ccode\u003e \u003c/code\u003e or \u003ccode\u003eT\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eEntityQueryCompiler\u003c/code\u003e (used in \u003ccode\u003eArgumentHelper.EntityQuery\u003c/code\u003e) supports Enums\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efieldNamer\u003c/code\u003e used in mutations too\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eBreaking changes\u003c/em\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eCleaning up the API. The optional \u003ccode\u003eisNullable\u003c/code\u003e argument is removed from the \u003ccode\u003eAddField()\u003c/code\u003e methods. Use \u003ccode\u003eIsNullable(bool)\u003c/code\u003e method on the \u003ccode\u003eField\u003c/code\u003e class or the \u003ccode\u003e[GraphQLNotNull]\u003c/code\u003e attribute.\u003c/li\u003e\n\u003cli\u003eCleaning up the API. \u003ccode\u003efieldNamer\u003c/code\u003e argument removed from methods in \u003ccode\u003eSchemaProvider\u003c/code\u003e and \u003ccode\u003eSchemaType\u003c/code\u003e. Pass in a \u003ccode\u003efieldNamer\u003c/code\u003e func to the constructor of \u003ccode\u003eSchemaProvider\u003c/code\u003e which will be used when it is auto creating fields. If you pass it in via \u003ccode\u003eSchemaBuilder.FromObject\u003c/code\u003e it will set it on the \u003ccode\u003eSchemaProvider\u003c/code\u003e created.\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eAddCustomScalarType()\u003c/code\u003e removed. Previously marked as obsolete. Use \u003ccode\u003eAddScalarType()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eNotes of services fix\u003c/h2\u003e\u003ca id=\"user-content-notes-of-services-fix\" class=\"anchor\" aria-label=\"Permalink: Notes of services fix\" href=\"#notes-of-services-fix\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you build a field like so\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"schema.AddField(\u0026quot;myField\u0026quot;, ctx =\u0026gt; WithService((IMyService srv) =\u0026gt; srv.DoSomething(ctx)));\n\n// Register the service with DI somewhere\npublic class MyService: IMyService {\n  public SomeObject DoSomething(Context ctx)\n  {\n    // do something\n    return data;\n  }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"myField\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e ctx \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eWithService\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eIMyService\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// Register the service with DI somewhere\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eMyService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIMyService\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eSomeObject\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eContext\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-c\"\u003e// do something\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWith a query like\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-graphql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  myField { field1 field 2 }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-v\"\u003emyField\u003c/span\u003e { \u003cspan class=\"pl-v\"\u003efield1\u003c/span\u003e \u003cspan class=\"pl-v\"\u003efield\u003c/span\u003e 2 }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWe use to build an expression like so\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"srv.DoSomething(ctx) == null ? null : new {\n  field1 = srv.DoSomething(ctx).field1,\n  field2 = srv.DoSomething(ctx).field2\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e?\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e:\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-s1\"\u003efield1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efield1\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n  \u003cspan class=\"pl-s1\"\u003efield2\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efield2\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWe now wrap this in a method call that only calls \u003ccode\u003eDoSomething(ctx)\u003c/code\u003e a single time Which looks like this\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(ctx, srv) =\u0026gt; NullCheckWrapper(srv.DoSomething(ctx), parameterValues, selection); // simplifying here\n\n// Again a simified example of what NullCheckWrapper does\npublic object NullCheckWrapper(Expression\u0026lt;Func\u0026lt;Context, IMyService\u0026gt;\u0026gt; baseValue, object[] values, LambdaExpression selection)\n{\n  // null check\n  if (baseValue == null)\n    return null;\n  // build the select on the object\n  var result = selection.Compile().DynamicInvoke(baseValue);\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eNullCheckWrapper\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameterValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eselection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// simplifying here\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e// Again a simified example of what NullCheckWrapper does\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eobject\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNullCheckWrapper\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eExpression\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eFunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eContext\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eIMyService\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebaseValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eobject\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evalues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eLambdaExpression\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eselection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-c\"\u003e// null check\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ebaseValue\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\n    \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enull\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n  \u003cspan class=\"pl-c\"\u003e// build the select on the object\u003c/span\u003e\n  \u003cspan class=\"pl-k\"\u003evar\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresult\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eselection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eCompile\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDynamicInvoke\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ebaseValue\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis works with services used deeper in the graph too. Example\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"schema.Type\u0026lt;Person\u0026gt;().AddField(\u0026quot;complexField\u0026quot;, (person) =\u0026gt; DoSomething(person.Id));\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eschema\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003eType\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e\u003cspan class=\"pl-smi\"\u003ePerson\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eAddField\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"complexField\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eGraphQL\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-graphql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  people {\n    complexField {\n      field1\n      field1\n    }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-v\"\u003epeople\u003c/span\u003e {\n    \u003cspan class=\"pl-v\"\u003ecomplexField\u003c/span\u003e {\n      \u003cspan class=\"pl-v\"\u003efield1\u003c/span\u003e\n      \u003cspan class=\"pl-v\"\u003efield1\u003c/span\u003e\n    }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe wrapped expression looks like this\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-cs notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(ctx, srv) =\u0026gt; ctx.People.Select(person =\u0026gt; new {\n  complexField = NullCheckWrapper(srv.DoSomething(person.Id), parameterValues, selection); // simplifying here\n})\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ectx\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ePeople\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eSelect\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003eperson \u003cspan class=\"pl-c1\"\u003e=\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-k\"\u003enew\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-s1\"\u003ecomplexField\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eNullCheckWrapper\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esrv\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eDoSomething\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e(\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eperson\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e.\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eId\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eparameterValues\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eselection\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e;\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// simplifying here\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e)\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis has been tested with EF Core and works well.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.65.0\u003c/h1\u003e\u003ca id=\"user-content-0650\" class=\"anchor\" aria-label=\"Permalink: 0.65.0\" href=\"#0650\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eYou can now secure whole types in the schema. Add the \u003ccode\u003e[GraphQLAuthorize(\"claim-name\")]\u003c/code\u003e to the class or use \u003ccode\u003eschema.AddType(...).RequiresAllClaims(\"some-claim\")\u003c/code\u003e, \u003ccode\u003eschema.AddType(...).RequiresAnyClaim(\"some-claim\")\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eGetField(Expression\u0026lt;Func\u0026lt;TBaseType, object\u0026gt;\u0026gt;)\u003c/code\u003e overload\u003c/li\u003e\n\u003cli\u003eoperation name is optional for a \u003ccode\u003equery\u003c/code\u003e operation as per GraphQL spec if it is the only operation in the request\u003c/li\u003e\n\u003cli\u003eBreaking - removed the \u003ccode\u003eauthorizeClaims\u003c/code\u003e argument from \u003ccode\u003eAddField()\u003c/code\u003e. Please use \u003ccode\u003efield.RequiresAllClaims(\"some-claim\")\u003c/code\u003e, \u003ccode\u003efield.RequiresAnyClaim(\"some-claim\")\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.64.0\u003c/h1\u003e\u003ca id=\"user-content-0640\" class=\"anchor\" aria-label=\"Permalink: 0.64.0\" href=\"#0640\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eChange - descriptions generated for a \u003ccode\u003e.graphql\u003c/code\u003e schema file now use the multiple line triple-quote \u003ccode\u003e\"\"\"\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix issue where an \u003ccode\u003eWithService()\u003c/code\u003e expression is wrapped in a \u003ccode\u003eUnaryExpression\u003c/code\u003e and we fail to get the lambda\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.63.0\u003c/h1\u003e\u003ca id=\"user-content-0630\" class=\"anchor\" aria-label=\"Permalink: 0.63.0\" href=\"#0630\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eExpose a \u003ccode\u003eSchemaProvider.ExecuteQueryAsync()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix #53 support mutations with no arguments\u003c/li\u003e\n\u003cli\u003eWith the above fix the context and/or the mutation arguments parameters are optional in your mutation method\u003c/li\u003e\n\u003cli\u003ethe parameters in the mutation methods are no longer required to follow a position\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaProvider.AddCustomScalarType()\u003c/code\u003e is deprecated, use \u003ccode\u003eAddScalarType\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDirectvies are now included in schema introspection\u003c/li\u003e\n\u003cli\u003eFix #52 - sometimes incorrect types generated for schema introspection or the GraphQL schema file format\u003c/li\u003e\n\u003cli\u003eRefactor type information held in the schema. This mean return types etc are evaluated at schema creation time not execution. If you add a field that requires a type as an Argument or return type, that type must already be in the schema\u003c/li\u003e\n\u003cli\u003eYou can now provide a field namer function to name the generated fields when using \u003ccode\u003eSchemaBuilder.FromObject()\u003c/code\u003e, \u003ccode\u003eISchemaType.AddAllFields()\u003c/code\u003e or \u003ccode\u003eSchemaProvider.PopulateFromContext()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e\u003cem\u003eBreaking changes\u003c/em\u003e\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eThe class that represents the mutation arguments must be marked with the \u003ccode\u003eMutationArgumentsAttribute\u003c/code\u003e either at the class level or the parameter\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaProvider\u003c/code\u003e now adds a default \u003ccode\u003eDate\u003c/code\u003e scalar type in the schema that maps to/from the C# \u003ccode\u003eDateTime\u003c/code\u003e class. If you were previously adding that you'll get an error on type existing. Use \u003ccode\u003eSchemaProvider.RemoveType\u0026lt;DateTime\u0026gt;()\u003c/code\u003e to remove it and add it with a different name\u003c/li\u003e\n\u003cli\u003eType mapping information (\u003ccode\u003eAddTypeMapping()\u003c/code\u003e) are evaluated at schema creation time. You may need to add mappings before creating the rest of your schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.63.0-beta1 to 0.63.0-beta2\u003c/h2\u003e\u003ca id=\"user-content-0630-beta1-to-0630-beta2\" class=\"anchor\" aria-label=\"Permalink: 0.63.0-beta1 to 0.63.0-beta2\" href=\"#0630-beta1-to-0630-beta2\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRemoved the empty \u003ccode\u003eIMutationArguments\u003c/code\u003e in favor for a \u003ccode\u003eMutationArgumentsAttribute\u003c/code\u003e on the parameter or the class\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.62.0\u003c/h1\u003e\u003ca id=\"user-content-0620\" class=\"anchor\" aria-label=\"Permalink: 0.62.0\" href=\"#0620\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSupport async mutation methods\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.61.0\u003c/h1\u003e\u003ca id=\"user-content-0610\" class=\"anchor\" aria-label=\"Permalink: 0.61.0\" href=\"#0610\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd model validation for mutation arguments. See updated readme\u003c/li\u003e\n\u003cli\u003eFix issue with services not correctly being included when the field is used in a fragment\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.60.0\u003c/h1\u003e\u003ca id=\"user-content-0600\" class=\"anchor\" aria-label=\"Permalink: 0.60.0\" href=\"#0600\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd support for directives. Supported by default are \u003ccode\u003e@include(if: Boolean!)\u003c/code\u003e and \u003ccode\u003e@skip(if: Boolean!)\u003c/code\u003e. You can add your own that make changes to the expression pre-execution\u003c/li\u003e\n\u003cli\u003eAdded syntax support for subscription queries (they compile/no error but do not execute or work)\u003c/li\u003e\n\u003cli\u003eRemoved support for older syntax of complex queries that is not GQL standard\u003c/li\u003e\n\u003cli\u003eRefactored \u003ccode\u003eGraphQLVistor\u003c/code\u003e and friends to make it easier to follow what is happening (I hope). See CONTRIBUTING.md for some notes\u003c/li\u003e\n\u003cli\u003eFrom my testing the compiling and expression building is 15-20% faster than before (still network and or the DB calls are the largest)\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eenum\u003c/code\u003e values in the query schema (e.g. as an argument)\u003c/li\u003e\n\u003cli\u003eIgnore static properties \u0026amp; fields on the object passed to \u003ccode\u003eSchemaBuilder.FromObject\u003c/code\u003e - they were not supported and threw errors anyway\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.50.1\u003c/h1\u003e\u003ca id=\"user-content-0501\" class=\"anchor\" aria-label=\"Permalink: 0.50.1\" href=\"#0501\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eName all \u003ccode\u003eParameterExpression\u003c/code\u003es as EF 3.1 expects a name (can throw an error)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.50.0\u003c/h1\u003e\u003ca id=\"user-content-0500\" class=\"anchor\" aria-label=\"Permalink: 0.50.0\" href=\"#0500\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix claims check when required claims are empty\u003c/li\u003e\n\u003cli\u003eFix error message state which claims are required for the given access error\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.50.0-beta1\u003c/h1\u003e\u003ca id=\"user-content-0500-beta1\" class=\"anchor\" aria-label=\"Permalink: 0.50.0-beta1\" href=\"#0500-beta1\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSorry about the quick turn around\u003c/li\u003e\n\u003cli\u003eBreaking changes\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eUsing DI inspired design now instead of the \u003ccode\u003eTArg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eUse \u003ccode\u003eWithService\u003c/code\u003e helper to let EntityGraphQL know which services you require e.g. in an \u003ccode\u003eAddField\u003c/code\u003e use \u003ccode\u003e(db, p) =\u0026gt; WithService\u0026lt;IUserProvider\u0026gt;(users =\u0026gt; users.Load(p.id))\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFor mutations just add the services as arguments (at the end) as you typically do in dotnet\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eschema.ExecuteQuery()\u003c/code\u003e takes an \u003ccode\u003eIServiceProvider\u003c/code\u003e which it uses to look up required services like \u003ccode\u003eIUserProvider\u003c/code\u003e above\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.40.0\u003c/h1\u003e\u003ca id=\"user-content-0400\" class=\"anchor\" aria-label=\"Permalink: 0.40.0\" href=\"#0400\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eBreaking changes\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eTrying to clean up the interface for creating a schema and allowing an easier way to get services in mutations and field selections\u003c/li\u003e\n\u003cli\u003eRename \u003ccode\u003eMappedSchemaProvider\u003c/code\u003e to \u003ccode\u003eSchemaProvider\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eRemove extension \u003ccode\u003eobject.QueryObject()\u003c/code\u003e and require a more specific call to \u003ccode\u003eSchmeaProvider.ExecuteQuery()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchmeaProvider.ExecuteQuery()\u003c/code\u003e takes a \u003ccode\u003eTArg\u003c/code\u003e type which is an argument that will be passed to all field selections and mutation methods. This replaces \u003ccode\u003emutationArgs\u003c/code\u003e in \u003ccode\u003eobject.QueryObject()\u003c/code\u003e and lets both mutations and field selections access other services non-statically (e.g. via \u003ccode\u003eTArg\u003c/code\u003e being an \u003ccode\u003eIServiceProvider\u003c/code\u003e). See updated readme and demo project\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaProvider\u003c/code\u003e is now create using \u003ccode\u003eSchemaBuilder.Create\u0026lt;TContext, TArg\u0026gt;()\u003c/code\u003e or \u003ccode\u003eSchemaBuilder.Create\u0026lt;TContext\u0026gt;()\u003c/code\u003e giving you a short cut for not providing a \u003ccode\u003eTArg\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchemaBuilder.FromObject\u0026lt;TContext, TArg\u0026gt;()\u003c/code\u003e now takes second type argument for the \u003ccode\u003eTArg\u003c/code\u003e value. Also \u003ccode\u003eSchemaBuilder.FromObject\u0026lt;TContext\u0026gt;()\u003c/code\u003e shortcut\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eFix bug where EntityQuery arguments were being cached in the schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.32.1\u003c/h1\u003e\u003ca id=\"user-content-0321\" class=\"anchor\" aria-label=\"Permalink: 0.32.1\" href=\"#0321\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd \u003ccode\u003eContextId\u003c/code\u003e to the ignored list in \u003ccode\u003eSchemaBuilder\u003c/code\u003e for EF 3.1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.32.0\u003c/h1\u003e\u003ca id=\"user-content-0320\" class=\"anchor\" aria-label=\"Permalink: 0.32.0\" href=\"#0320\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eClean up \u003ccode\u003eLinqExtensions\u003c/code\u003e, removing the overloads that take \u003ccode\u003eLambdaExpression\u003c/code\u003es. Use \u003ccode\u003e.AsQueryable().Where(someExpressionVar)\u003c/code\u003e instead. It works better with EF and other LinqProviders.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.31.0\u003c/h1\u003e\u003ca id=\"user-content-0310\" class=\"anchor\" aria-label=\"Permalink: 0.31.0\" href=\"#0310\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eBreaking change - Multiple \u003ccode\u003e[GraphQLAuthorize]\u003c/code\u003e mean all polices are required and supplying multiple in a single \u003ccode\u003e[GraphQLAuthorize]\u003c/code\u003e mean any\u003c/li\u003e\n\u003cli\u003eDo not generate an empty mutation type if there are no mutations\u003c/li\u003e\n\u003cli\u003eFix query introspection to output mapped types correctly\u003c/li\u003e\n\u003cli\u003eSupport multiple queries in a request with the operation name of which one to run - e.g. how GraphiQL handles multiple queries\u003c/li\u003e\n\u003cli\u003eUpdate error messages\u003c/li\u003e\n\u003cli\u003eClean up some APIs - \u003ccode\u003eSchemaType.AddAllFields()\u003c/code\u003e, \u003ccode\u003eField.RequiresAllClaims()\u003c/code\u003e, \u003ccode\u003eField.RequiresAnyClaim()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.30.0\u003c/h1\u003e\u003ca id=\"user-content-0300\" class=\"anchor\" aria-label=\"Permalink: 0.30.0\" href=\"#0300\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eInitial support for Authorization and Security in the schema - see updated readme and provide feedback\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.29.0\u003c/h1\u003e\u003ca id=\"user-content-0290\" class=\"anchor\" aria-label=\"Permalink: 0.29.0\" href=\"#0290\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSupport \u003ccode\u003efragment\u003c/code\u003e statements in other positions in the query\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.28.2\u003c/h1\u003e\u003ca id=\"user-content-0282\" class=\"anchor\" aria-label=\"Permalink: 0.28.2\" href=\"#0282\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix error with \u003ccode\u003eEntityQueryType\u0026lt;\u0026gt;\u003c/code\u003e as a field argument not being defined as a \u003ccode\u003eString\u003c/code\u003e in introspection\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.28.1\u003c/h1\u003e\u003ca id=\"user-content-0281\" class=\"anchor\" aria-label=\"Permalink: 0.28.1\" href=\"#0281\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue introduced in 0.28 when using the \u003ccode\u003eRequiredField\u0026lt;\u0026gt;\u003c/code\u003e type\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.28.0\u003c/h1\u003e\u003ca id=\"user-content-0280\" class=\"anchor\" aria-label=\"Permalink: 0.28.0\" href=\"#0280\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eOnly convert a string matching a \u003ccode\u003eGuid\u003c/code\u003e when the arg type is a \u003ccode\u003eGuid\u003c/code\u003e or \u003ccode\u003eGuid?\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.27.2\u003c/h1\u003e\u003ca id=\"user-content-0272\" class=\"anchor\" aria-label=\"Permalink: 0.27.2\" href=\"#0272\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue where a non-required EntityQueryType Filter throw an error if it wasn't supplied\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.27.1\u003c/h1\u003e\u003ca id=\"user-content-0271\" class=\"anchor\" aria-label=\"Permalink: 0.27.1\" href=\"#0271\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eBetter support mutations that return an object, not a list\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.27.0\u003c/h1\u003e\u003ca id=\"user-content-0270\" class=\"anchor\" aria-label=\"Permalink: 0.27.0\" href=\"#0270\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eIntrospection query \u003ccode\u003e__type(name: \"\")\u003c/code\u003e now correctly returns an object not an array\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[Description(\"\")]\u003c/code\u003e attributes on \u003ccode\u003eenum\u003c/code\u003e fields are now read into the schema\u003c/li\u003e\n\u003cli\u003eFix issue where introspection query would have duplicate types for enum types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.26.0\u003c/h1\u003e\u003ca id=\"user-content-0260\" class=\"anchor\" aria-label=\"Permalink: 0.26.0\" href=\"#0260\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eISchemaType.AddAllFields\u003c/code\u003e requires a schema as it can add newly discovered types to that schema\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eISchemaType.AddAllFields\u003c/code\u003e by default adds new \u003ccode\u003eenum\u003c/code\u003e types to the schema if found as a field type\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eISchemaType.AddAllFields\u003c/code\u003e can (off by default) add new complex types to the schema if found as a field type\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eSchema.Type\u0026lt;TType\u0026gt;()\u003c/code\u003e now searches by \u003ccode\u003eTType\u003c/code\u003e not \u003ccode\u003etypeof(TType).Name\u003c/code\u003e. Allowing you to add a type with a different name but still get the typed \u003ccode\u003eSchemaType\u0026lt;T\u0026gt;\u003c/code\u003e back\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.25.0\u003c/h1\u003e\u003ca id=\"user-content-0250\" class=\"anchor\" aria-label=\"Permalink: 0.25.0\" href=\"#0250\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd the ability to add enum types to the schema\u003c/li\u003e\n\u003cli\u003eThe auto schema builder now adds enum types it finds to the schema by default\u003c/li\u003e\n\u003cli\u003eEnum values are referenced by the string value, if using JSON.NET you will want to use \u003ccode\u003e[JsonConverter(typeof(StringEnumConverter))]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.24.0\u003c/h1\u003e\u003ca id=\"user-content-0240\" class=\"anchor\" aria-label=\"Permalink: 0.24.0\" href=\"#0240\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd \u003ccode\u003eGraphQLNotNullAttribute\u003c/code\u003e to mark fields as not nullable in the graphql schema\u003c/li\u003e\n\u003cli\u003eBy default when generating a \u003ccode\u003e.schema\u003c/code\u003e file \u003ccode\u003eIEnumerable\u0026lt;T\u0026gt;\u003c/code\u003e will generate the element type as not nullable. E.g. \u003ccode\u003e[T!]\u003c/code\u003e. Use \u003ccode\u003eGraphQLElementTypeNullableAttribute\u003c/code\u003e to mark it that the list can contain null items\u003c/li\u003e\n\u003cli\u003eSupport mapping \u003ccode\u003edecimal\u003c/code\u003e to \u003ccode\u003enumber\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eBetter support for defining nullable or non-nullable types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.23.3\u003c/h1\u003e\u003ca id=\"user-content-0233\" class=\"anchor\" aria-label=\"Permalink: 0.23.3\" href=\"#0233\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAllow adding a mapping type to a type that already exists in the schema. E.g. you might add an input type \u003ccode\u003ePoint\u003c/code\u003e and want to map the dotnet type \u003ccode\u003ePoint\u003c/code\u003e to it.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.23.2\u003c/h1\u003e\u003ca id=\"user-content-0232\" class=\"anchor\" aria-label=\"Permalink: 0.23.2\" href=\"#0232\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efix issue with required type in an array e.g. \u003ccode\u003e[ID!]\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.23.1\u003c/h1\u003e\u003ca id=\"user-content-0231\" class=\"anchor\" aria-label=\"Permalink: 0.23.1\" href=\"#0231\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003efix issue with generated required types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.23.0\u003c/h1\u003e\u003ca id=\"user-content-0230\" class=\"anchor\" aria-label=\"Permalink: 0.23.0\" href=\"#0230\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eOutput fields as required in .graphql schemas\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.22.0\u003c/h1\u003e\u003ca id=\"user-content-0220\" class=\"anchor\" aria-label=\"Permalink: 0.22.0\" href=\"#0220\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eYou can now specify if a field is ignored for queries, mutations or both (if you're sharing DTOs/objects)\u003c/li\u003e\n\u003cli\u003eDon't output the meta information of the schema in the schema definition\u003c/li\u003e\n\u003cli\u003ePrevent duplicate scalar types in schema generation\u003c/li\u003e\n\u003cli\u003eFix issue where \u003ccode\u003emutation\u003c/code\u003e keyword could not have any white space before it\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.21.0\u003c/h1\u003e\u003ca id=\"user-content-0210\" class=\"anchor\" aria-label=\"Permalink: 0.21.0\" href=\"#0210\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eChange, make ENUMs a \u003ccode\u003eInt\u003c/code\u003e type as dotnet serialises them like that\u003c/li\u003e\n\u003cli\u003eFix input types missing for the SDL schema generated\u003c/li\u003e\n\u003cli\u003eFix issue where mutation args has repeating \u003ccode\u003eofType\u003c/code\u003e data in introspection\u003c/li\u003e\n\u003cli\u003eFix issue where InputTypes would be duplicated in introspection query results\u003c/li\u003e\n\u003cli\u003eFix issue where \u003ccode\u003eToList()\u003c/code\u003e was being called deep in expressions causing issues with EF\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.20.0\u003c/h1\u003e\u003ca id=\"user-content-0200\" class=\"anchor\" aria-label=\"Permalink: 0.20.0\" href=\"#0200\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd the ability to add custom scalar types to the schema\u003c/li\u003e\n\u003cli\u003eFix a bug where introspection queries were in correct if you have a List/Array in your mutation type\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.19.1\u003c/h1\u003e\u003ca id=\"user-content-0191\" class=\"anchor\" aria-label=\"Permalink: 0.19.1\" href=\"#0191\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix a bug where mutation arg objects retained values from previous mutation - i.e if the next call to that mutation didn't provide some optional arguments\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.19.0\u003c/h1\u003e\u003ca id=\"user-content-0190\" class=\"anchor\" aria-label=\"Permalink: 0.19.0\" href=\"#0190\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eQueryObject()\u003c/code\u003e calls \u003ccode\u003eToList()\u003c/code\u003e on any lists so if you are using something like EF all queries will be evaluated on \u003ccode\u003eQueryObject()\u003c/code\u003e, not just the ones that return a single object (as they call \u003ccode\u003eFirstOrDefault()\u003c/code\u003e). This is more consistent, the result contains all your data (regardless of underlying ORM or not) and not a miz of evaluated and non-evaluated.\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eRemoveTypeAndAllFields()\u003c/code\u003e on \u003ccode\u003eMappedSchemaProvider\u003c/code\u003e to more easily clean up a schema that was auto created by \u003ccode\u003eSchemaBuilder.FromObject\u0026lt;T\u0026gt;()\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.18.4\u003c/h1\u003e\u003ca id=\"user-content-0184\" class=\"anchor\" aria-label=\"Permalink: 0.18.4\" href=\"#0184\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix case matching of arguments in mutations. EntityGraphQL defaults to turning dotnet \u003ccode\u003eUpperCaseFieldsAndProperties\u003c/code\u003e to \u003ccode\u003ecamelCaseFieldsAndProperties\u003c/code\u003e as this was the intention with the change in 0.18.0\u003c/li\u003e\n\u003cli\u003eEnum values are as defined. E.g. if you have an enum \u003ccode\u003eMeter\u003c/code\u003e you can use \u003ccode\u003e\"Meter\"\u003c/code\u003e not \u003ccode\u003e\"meter\"\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.18.3\u003c/h1\u003e\u003ca id=\"user-content-0183\" class=\"anchor\" aria-label=\"Permalink: 0.18.3\" href=\"#0183\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003emap Int16 and UInt16 to Int\u003c/li\u003e\n\u003cli\u003eFix issue where argument names were not case sensitive (the Breaking change introduced in 0.18)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.18.2\u003c/h1\u003e\u003ca id=\"user-content-0182\" class=\"anchor\" aria-label=\"Permalink: 0.18.2\" href=\"#0182\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix \u003ccode\u003ekind\u003c/code\u003e in schema introspection query to not have \u003ccode\u003e!\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.18.1\u003c/h1\u003e\u003ca id=\"user-content-0181\" class=\"anchor\" aria-label=\"Permalink: 0.18.1\" href=\"#0181\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eUpdate dependencies (JSON.NET)\u003c/li\u003e\n\u003cli\u003eFix some small casing issues\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.18.0\u003c/h1\u003e\u003ca id=\"user-content-0180\" class=\"anchor\" aria-label=\"Permalink: 0.18.0\" href=\"#0180\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSupport for schema introspection. Top two fields (\u003ccode\u003e__schema\u003c/code\u003e and \u003ccode\u003e__type(name: String!)\u003c/code\u003e) are implemented. There are some things missing where we currently don't support the feature (directives). GraphiQL introspection query executes and you can navigate the example. Big thanks to @JTravis76 for starting the work.\u003c/li\u003e\n\u003cli\u003eImplement #18 default argument values in GQL operations \u003ccode\u003emutation MyMutation($arg: String = \"hey defaults\") { ... }\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eBreaking change - If you purely use \u003ccode\u003eSchemaBuilder.FromObject()\u003c/code\u003e it now creates all field names \u003ccode\u003elowerCaseCamel\u003c/code\u003e and type names \u003ccode\u003eUpperCamelCase\u003c/code\u003e like the GraphQL defaults. Also since GraphQL is case sensitive I have enforced that. You \u003cem\u003emay\u003c/em\u003e need to update some queries to match casing\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.17.0\u003c/h1\u003e\u003ca id=\"user-content-0170\" class=\"anchor\" aria-label=\"Permalink: 0.17.0\" href=\"#0170\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd the option to have other parameters passed into a mutation method. Very useful for IServiceProvider or other services your mutations require\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.16.2\u003c/h1\u003e\u003ca id=\"user-content-0162\" class=\"anchor\" aria-label=\"Permalink: 0.16.2\" href=\"#0162\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue where duplicate fields (say from a query and a fragment) would cause an error\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.16.1\u003c/h1\u003e\u003ca id=\"user-content-0161\" class=\"anchor\" aria-label=\"Permalink: 0.16.1\" href=\"#0161\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eBring inner exception details up\u003c/li\u003e\n\u003cli\u003eFix issue where fields that require arguments fail (See Paging example in Demo)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.16.0\u003c/h1\u003e\u003ca id=\"user-content-0160\" class=\"anchor\" aria-label=\"Permalink: 0.16.0\" href=\"#0160\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd support for full queries on a mutation result. See readme for more details (you return an Expression)\u003c/li\u003e\n\u003cli\u003eInitial support for GraphQL fragments. fix #2\u003c/li\u003e\n\u003cli\u003eFix issues with using field arguments deeper in the graph schema\u003c/li\u003e\n\u003cli\u003eAdd support for \u003ccode\u003eoperationName\u003c/code\u003e in the \u003ccode\u003eGraphQLRequest\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAdd support for graphql comments\u003c/li\u003e\n\u003cli\u003eAdd GraphiQL web interface to the demo app\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003eGraphQLIgnore\u003c/code\u003e attribute to ignore a field on a Type for the automatic schema builder\u003c/li\u003e\n\u003cli\u003efix bug where it would sometimes try to give an \u003ccode\u003eUInt64\u003c/code\u003e to an argument that required an \u003ccode\u003eInt32\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e(beta) Add \u003ccode\u003edotnet gql\u003c/code\u003e command to generate a schema from your current DBContext. See readme for more info\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.8\u003c/h1\u003e\u003ca id=\"user-content-0158\" class=\"anchor\" aria-label=\"Permalink: 0.15.8\" href=\"#0158\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd \u003ccode\u003eWhereWhen()\u003c/code\u003e to the extension helpers\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.7\u003c/h1\u003e\u003ca id=\"user-content-0157\" class=\"anchor\" aria-label=\"Permalink: 0.15.7\" href=\"#0157\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix bug in handling converting a string into an enum\u003c/li\u003e\n\u003cli\u003eFix issue looking up types internally when working with anonymous types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.6\u003c/h1\u003e\u003ca id=\"user-content-0156\" class=\"anchor\" aria-label=\"Permalink: 0.15.6\" href=\"#0156\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue with incorrectly checking for generic types\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.5\u003c/h1\u003e\u003ca id=\"user-content-0155\" class=\"anchor\" aria-label=\"Permalink: 0.15.5\" href=\"#0155\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue with array types in the dynamically generated type for lambdas\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.4\u003c/h1\u003e\u003ca id=\"user-content-0154\" class=\"anchor\" aria-label=\"Permalink: 0.15.4\" href=\"#0154\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue where the generated GraphQL schema had the incorrect type for arrays (e.g. double[])\u003c/li\u003e\n\u003cli\u003eFix issue with \u003ccode\u003eSchemaBuilder.FromObject\u003c/code\u003e building invalid types from arrays.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.3\u003c/h1\u003e\u003ca id=\"user-content-0153\" class=\"anchor\" aria-label=\"Permalink: 0.15.3\" href=\"#0153\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix an issue where it would generate an invalid field name if we couldn't singularize the name\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.2\u003c/h1\u003e\u003ca id=\"user-content-0152\" class=\"anchor\" aria-label=\"Permalink: 0.15.2\" href=\"#0152\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eMove the query results into a \u003ccode\u003eQueryResult\u003c/code\u003e class so it is easier to work with\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15.1\u003c/h1\u003e\u003ca id=\"user-content-0151\" class=\"anchor\" aria-label=\"Permalink: 0.15.1\" href=\"#0151\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix #11 - failure to use \u003ccode\u003eRequiredField\u003c/code\u003e with types like \u003ccode\u003euint\u003c/code\u003e - it would try to initialise it with an \u003ccode\u003eint\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.15\u003c/h1\u003e\u003ca id=\"user-content-015\" class=\"anchor\" aria-label=\"Permalink: 0.15\" href=\"#015\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRemove old code that supported multiple fields with the same name and different arguments. GraphQL doesn't support that and it caused a bug where it would sometimes not find the field you want. You can implement optional arguments and build a complex field like \u003ccode\u003eschemaProvider.AddField(\"myField\", new {name = (string)null, id = (Guid?)null}, (db, param) =\u0026gt; param.id.HasValue ? db.MyEntities.Where(l =\u0026gt; l.Id == param.id).FirstOrDefault() : db.MyEntities.Where(l =\u0026gt; l.Name == param.name).FirstOrDefault(), \"Returns an Entity object by ID or a match on the name argument\");\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.14.4\u003c/h1\u003e\u003ca id=\"user-content-0144\" class=\"anchor\" aria-label=\"Permalink: 0.14.4\" href=\"#0144\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAllow user to supply a type mapping for the generated GraphQL schema\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.14.3\u003c/h1\u003e\u003ca id=\"user-content-0143\" class=\"anchor\" aria-label=\"Permalink: 0.14.3\" href=\"#0143\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix an issue where we would some time identify a type as IEnumerable when it shouldn't have been\u003c/li\u003e\n\u003cli\u003eAllow \u003ccode\u003eReplaceField\u003c/code\u003e on a sub type\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.14.2\u003c/h1\u003e\u003ca id=\"user-content-0142\" class=\"anchor\" aria-label=\"Permalink: 0.14.2\" href=\"#0142\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eConvert enums correctly\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.14.1\u003c/h1\u003e\u003ca id=\"user-content-0141\" class=\"anchor\" aria-label=\"Permalink: 0.14.1\" href=\"#0141\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix SchemaGenerator to support arrays better\u003c/li\u003e\n\u003cli\u003eSupport turning \u003ccode\u003eQueryRequest\u003c/code\u003e variables from JSON objects into their required objects\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.14.0\u003c/h1\u003e\u003ca id=\"user-content-0140\" class=\"anchor\" aria-label=\"Permalink: 0.14.0\" href=\"#0140\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eBring back \u003ccode\u003eReplaceField\u003c/code\u003e as technically GraphQL doesn't support overloading, so if you're using tools like Apollo etc to generate code you need to only have unique fields\u003c/li\u003e\n\u003cli\u003eAdded \u003ccode\u003eGetGraphQLSchema\u003c/code\u003e on the schema to return a \u003ccode\u003e.graphql\u003c/code\u003e schema file for input into tools like Apollo codegen\u003c/li\u003e\n\u003cli\u003eAdd the option to add descriptions to Mutations\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.13.1\u003c/h1\u003e\u003ca id=\"user-content-0131\" class=\"anchor\" aria-label=\"Permalink: 0.13.1\" href=\"#0131\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue where operation name with no arguments failed\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.13.0\u003c/h1\u003e\u003ca id=\"user-content-0130\" class=\"anchor\" aria-label=\"Permalink: 0.13.0\" href=\"#0130\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eBreaking change: Strings are now defined by double quotes \u003ccode\u003e\"\u003c/code\u003e to fit in with GraphQL better\u003c/li\u003e\n\u003cli\u003eAdded support to use a LINQ-style language as a argument in GraphQL. E.g the following GQL field, \u003ccode\u003e{ users(filter: \"active = true and age \u0026gt; 20\") { id name } }\u003c/code\u003e can be defined with \u003ccode\u003eschema.AddField(\"users\", new {filter = EntityQuery\u0026lt;User\u0026gt;()}, (ctx, p) =\u0026gt; ctx.Users.Where(p.filter), \"Return filtered users\")\u003c/code\u003e. Letting you write that filter using any fields defined on the \u003ccode\u003eUser\u003c/code\u003e object\u003c/li\u003e\n\u003cli\u003eAdd \u003ccode\u003enull\u003c/code\u003e/\u003ccode\u003eempty\u003c/code\u003e constant for checking for null in EQL\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.12.1\u003c/h1\u003e\u003ca id=\"user-content-0121\" class=\"anchor\" aria-label=\"Permalink: 0.12.1\" href=\"#0121\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix bug converting Int values to double? values\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.12.0\u003c/h1\u003e\u003ca id=\"user-content-0120\" class=\"anchor\" aria-label=\"Permalink: 0.12.0\" href=\"#0120\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSupport field \"overloads\" - fields with same name and different arguments.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.11.0\u003c/h1\u003e\u003ca id=\"user-content-0110\" class=\"anchor\" aria-label=\"Permalink: 0.11.0\" href=\"#0110\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eRenamed package EntityGraphQL to emphasizes that it implements GraphQL\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.10.1\u003c/h1\u003e\u003ca id=\"user-content-0101\" class=\"anchor\" aria-label=\"Permalink: 0.10.1\" href=\"#0101\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix issue with arrays and objects in variables parameter on the request\u003c/li\u003e\n\u003cli\u003eBetter error messages when GraphQL arguments can't be mapped to an object\u003c/li\u003e\n\u003cli\u003eValidate required variables in operations are supplied in the variables dictionary\u003c/li\u003e\n\u003cli\u003eFix potential issue with selecting sub object graphs\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.10.0\u003c/h1\u003e\u003ca id=\"user-content-0100\" class=\"anchor\" aria-label=\"Permalink: 0.10.0\" href=\"#0100\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eChange the errors to appear in \u003ccode\u003eerrors\u003c/code\u003e key along side \u003ccode\u003edata\u003c/code\u003e key as per GraphQL\u003c/li\u003e\n\u003cli\u003eFix an issue when selecting fields from a mutation result\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.9.4\u003c/h1\u003e\u003ca id=\"user-content-094\" class=\"anchor\" aria-label=\"Permalink: 0.9.4\" href=\"#094\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eSupport selecting an object that may be null \u003ccode\u003e{ person {name} }\u003c/code\u003e \u003ccode\u003eperson\u003c/code\u003e will be null if it does not exist\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.9.3\u003c/h1\u003e\u003ca id=\"user-content-093\" class=\"anchor\" aria-label=\"Permalink: 0.9.3\" href=\"#093\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eParameter types can be optional (no \u003ccode\u003e!\u003c/code\u003e)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.9.2\u003c/h1\u003e\u003ca id=\"user-content-092\" class=\"anchor\" aria-label=\"Permalink: 0.9.2\" href=\"#092\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix type issues with mutation args\u003c/li\u003e\n\u003cli\u003eChange auto entity call with \u003ccode\u003eid:\u003c/code\u003e (e.g. \u003ccode\u003e{ entity(id: 13)}\u003c/code\u003e) to call the \u003ccode\u003eFirst()\u003c/code\u003e method last\u003c/li\u003e\n\u003cli\u003eFix issue with selecting a one-to-one relation in a query\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.9.1\u003c/h1\u003e\u003ca id=\"user-content-091\" class=\"anchor\" aria-label=\"Permalink: 0.9.1\" href=\"#091\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFix a issue where schema and method provider were not being passed down in \u003ccode\u003eQueryObject\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.9.0\u003c/h1\u003e\u003ca id=\"user-content-090\" class=\"anchor\" aria-label=\"Permalink: 0.9.0\" href=\"#090\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdd initial support for Mutations\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e,\u003c/code\u003e between fields is optional like in GraphQL\u003c/li\u003e\n\u003cli\u003eSupport \u003ccode\u003e__typename\u003c/code\u003e metadata\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.8.0\u003c/h1\u003e\u003ca id=\"user-content-080\" class=\"anchor\" aria-label=\"Permalink: 0.8.0\" href=\"#080\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eMoved EntityQueryLanguage.DataApi\u003c/code\u003e namespace to \u003ccode\u003eEntityQueryLanguage.GraphQL\u003c/code\u003e to better communicate that its intent is to support\u003c/li\u003e\n\u003cli\u003eAdd support GraphQL arguments in fields. See updated readme\u003c/li\u003e\n\u003cli\u003eBy default \u003ccode\u003eSchemaBuilder.FromObject\u0026lt;TType\u0026gt;()\u003c/code\u003e generates a non-plural field for any type with a public \u003ccode\u003eId\u003c/code\u003e property, with the argument name of \u003ccode\u003eid\u003c/code\u003e. E.g. A field \u003ccode\u003epeople\u003c/code\u003e that returns a \u003ccode\u003eIEnumerable\u0026lt;Person\u0026gt;\u003c/code\u003e will result in a \u003ccode\u003eperson(id)\u003c/code\u003e field\u003c/li\u003e\n\u003cli\u003eMove results to field \u003ccode\u003edata\u003c/code\u003e in the resulting object to match GraphQL\u003c/li\u003e\n\u003cli\u003eSupport the \u003ccode\u003equery\u003c/code\u003e keyword for graphql\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e0.7.0\u003c/h1\u003e\u003ca id=\"user-content-070\" class=\"anchor\" aria-label=\"Permalink: 0.7.0\" href=\"#070\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAdded support for complex nested queries when using the \u003ccode\u003eEFRelationshipHandler\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eFix type caching issue causing exception on changing a sub query\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"6.2.4","fully_qualified_name":"6.2.4","kind":"section_1","ident_start":2,"ident_end":7,"extent_start":0,"extent_end":2527,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":7}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":8,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":12,"ident_end":17,"extent_start":9,"extent_end":2527,"ident_utf16":{"start":{"line_number":2,"utf16_col":3},"end":{"line_number":2,"utf16_col":8}},"extent_utf16":{"start":{"line_number":2,"utf16_col":0},"end":{"line_number":8,"utf16_col":0}}},{"name":"6.2.3","fully_qualified_name":"6.2.3","kind":"section_1","ident_start":2529,"ident_end":2534,"extent_start":2527,"extent_end":3335,"ident_utf16":{"start":{"line_number":8,"utf16_col":2},"end":{"line_number":8,"utf16_col":7}},"extent_utf16":{"start":{"line_number":8,"utf16_col":0},"end":{"line_number":14,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":2539,"ident_end":2544,"extent_start":2536,"extent_end":3335,"ident_utf16":{"start":{"line_number":10,"utf16_col":3},"end":{"line_number":10,"utf16_col":8}},"extent_utf16":{"start":{"line_number":10,"utf16_col":0},"end":{"line_number":14,"utf16_col":0}}},{"name":"6.2.2","fully_qualified_name":"6.2.2","kind":"section_1","ident_start":3337,"ident_end":3342,"extent_start":3335,"extent_end":3670,"ident_utf16":{"start":{"line_number":14,"utf16_col":2},"end":{"line_number":14,"utf16_col":7}},"extent_utf16":{"start":{"line_number":14,"utf16_col":0},"end":{"line_number":20,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":3347,"ident_end":3352,"extent_start":3344,"extent_end":3670,"ident_utf16":{"start":{"line_number":16,"utf16_col":3},"end":{"line_number":16,"utf16_col":8}},"extent_utf16":{"start":{"line_number":16,"utf16_col":0},"end":{"line_number":20,"utf16_col":0}}},{"name":"6.2.1","fully_qualified_name":"6.2.1","kind":"section_1","ident_start":3672,"ident_end":3677,"extent_start":3670,"extent_end":4290,"ident_utf16":{"start":{"line_number":20,"utf16_col":2},"end":{"line_number":20,"utf16_col":7}},"extent_utf16":{"start":{"line_number":20,"utf16_col":0},"end":{"line_number":26,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":3682,"ident_end":3687,"extent_start":3679,"extent_end":4290,"ident_utf16":{"start":{"line_number":22,"utf16_col":3},"end":{"line_number":22,"utf16_col":8}},"extent_utf16":{"start":{"line_number":22,"utf16_col":0},"end":{"line_number":26,"utf16_col":0}}},{"name":"6.2.0","fully_qualified_name":"6.2.0","kind":"section_1","ident_start":4292,"ident_end":4297,"extent_start":4290,"extent_end":10654,"ident_utf16":{"start":{"line_number":26,"utf16_col":2},"end":{"line_number":26,"utf16_col":7}},"extent_utf16":{"start":{"line_number":26,"utf16_col":0},"end":{"line_number":43,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":4302,"ident_end":4309,"extent_start":4299,"extent_end":7739,"ident_utf16":{"start":{"line_number":28,"utf16_col":3},"end":{"line_number":28,"utf16_col":10}},"extent_utf16":{"start":{"line_number":28,"utf16_col":0},"end":{"line_number":36,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":7742,"ident_end":7747,"extent_start":7739,"extent_end":10654,"ident_utf16":{"start":{"line_number":36,"utf16_col":3},"end":{"line_number":36,"utf16_col":8}},"extent_utf16":{"start":{"line_number":36,"utf16_col":0},"end":{"line_number":43,"utf16_col":0}}},{"name":"6.1.7","fully_qualified_name":"6.1.7","kind":"section_1","ident_start":10656,"ident_end":10661,"extent_start":10654,"extent_end":12034,"ident_utf16":{"start":{"line_number":43,"utf16_col":2},"end":{"line_number":43,"utf16_col":7}},"extent_utf16":{"start":{"line_number":43,"utf16_col":0},"end":{"line_number":50,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":10666,"ident_end":10671,"extent_start":10663,"extent_end":12034,"ident_utf16":{"start":{"line_number":45,"utf16_col":3},"end":{"line_number":45,"utf16_col":8}},"extent_utf16":{"start":{"line_number":45,"utf16_col":0},"end":{"line_number":50,"utf16_col":0}}},{"name":"6.1.6","fully_qualified_name":"6.1.6","kind":"section_1","ident_start":12036,"ident_end":12041,"extent_start":12034,"extent_end":12413,"ident_utf16":{"start":{"line_number":50,"utf16_col":2},"end":{"line_number":50,"utf16_col":7}},"extent_utf16":{"start":{"line_number":50,"utf16_col":0},"end":{"line_number":56,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":12046,"ident_end":12051,"extent_start":12043,"extent_end":12413,"ident_utf16":{"start":{"line_number":52,"utf16_col":3},"end":{"line_number":52,"utf16_col":8}},"extent_utf16":{"start":{"line_number":52,"utf16_col":0},"end":{"line_number":56,"utf16_col":0}}},{"name":"6.1.5","fully_qualified_name":"6.1.5","kind":"section_1","ident_start":12415,"ident_end":12420,"extent_start":12413,"extent_end":12961,"ident_utf16":{"start":{"line_number":56,"utf16_col":2},"end":{"line_number":56,"utf16_col":7}},"extent_utf16":{"start":{"line_number":56,"utf16_col":0},"end":{"line_number":62,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":12425,"ident_end":12430,"extent_start":12422,"extent_end":12961,"ident_utf16":{"start":{"line_number":58,"utf16_col":3},"end":{"line_number":58,"utf16_col":8}},"extent_utf16":{"start":{"line_number":58,"utf16_col":0},"end":{"line_number":62,"utf16_col":0}}},{"name":"6.1.4","fully_qualified_name":"6.1.4","kind":"section_1","ident_start":12963,"ident_end":12968,"extent_start":12961,"extent_end":15453,"ident_utf16":{"start":{"line_number":62,"utf16_col":2},"end":{"line_number":62,"utf16_col":7}},"extent_utf16":{"start":{"line_number":62,"utf16_col":0},"end":{"line_number":69,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":12973,"ident_end":12978,"extent_start":12970,"extent_end":15453,"ident_utf16":{"start":{"line_number":64,"utf16_col":3},"end":{"line_number":64,"utf16_col":8}},"extent_utf16":{"start":{"line_number":64,"utf16_col":0},"end":{"line_number":69,"utf16_col":0}}},{"name":"6.1.3","fully_qualified_name":"6.1.3","kind":"section_1","ident_start":15455,"ident_end":15460,"extent_start":15453,"extent_end":16301,"ident_utf16":{"start":{"line_number":69,"utf16_col":2},"end":{"line_number":69,"utf16_col":7}},"extent_utf16":{"start":{"line_number":69,"utf16_col":0},"end":{"line_number":75,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":15465,"ident_end":15470,"extent_start":15462,"extent_end":16301,"ident_utf16":{"start":{"line_number":71,"utf16_col":3},"end":{"line_number":71,"utf16_col":8}},"extent_utf16":{"start":{"line_number":71,"utf16_col":0},"end":{"line_number":75,"utf16_col":0}}},{"name":"6.1.2","fully_qualified_name":"6.1.2","kind":"section_1","ident_start":16303,"ident_end":16308,"extent_start":16301,"extent_end":21881,"ident_utf16":{"start":{"line_number":75,"utf16_col":2},"end":{"line_number":75,"utf16_col":7}},"extent_utf16":{"start":{"line_number":75,"utf16_col":0},"end":{"line_number":88,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":16313,"ident_end":16318,"extent_start":16310,"extent_end":21881,"ident_utf16":{"start":{"line_number":77,"utf16_col":3},"end":{"line_number":77,"utf16_col":8}},"extent_utf16":{"start":{"line_number":77,"utf16_col":0},"end":{"line_number":88,"utf16_col":0}}},{"name":"6.1.1","fully_qualified_name":"6.1.1","kind":"section_1","ident_start":21883,"ident_end":21888,"extent_start":21881,"extent_end":23273,"ident_utf16":{"start":{"line_number":88,"utf16_col":2},"end":{"line_number":88,"utf16_col":7}},"extent_utf16":{"start":{"line_number":88,"utf16_col":0},"end":{"line_number":94,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":21893,"ident_end":21898,"extent_start":21890,"extent_end":23273,"ident_utf16":{"start":{"line_number":90,"utf16_col":3},"end":{"line_number":90,"utf16_col":8}},"extent_utf16":{"start":{"line_number":90,"utf16_col":0},"end":{"line_number":94,"utf16_col":0}}},{"name":"6.1.0","fully_qualified_name":"6.1.0","kind":"section_1","ident_start":23275,"ident_end":23280,"extent_start":23273,"extent_end":26180,"ident_utf16":{"start":{"line_number":94,"utf16_col":2},"end":{"line_number":94,"utf16_col":7}},"extent_utf16":{"start":{"line_number":94,"utf16_col":0},"end":{"line_number":106,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":23285,"ident_end":23292,"extent_start":23282,"extent_end":24060,"ident_utf16":{"start":{"line_number":96,"utf16_col":3},"end":{"line_number":96,"utf16_col":10}},"extent_utf16":{"start":{"line_number":96,"utf16_col":0},"end":{"line_number":100,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":24063,"ident_end":24068,"extent_start":24060,"extent_end":26180,"ident_utf16":{"start":{"line_number":100,"utf16_col":3},"end":{"line_number":100,"utf16_col":8}},"extent_utf16":{"start":{"line_number":100,"utf16_col":0},"end":{"line_number":106,"utf16_col":0}}},{"name":"6.0.1","fully_qualified_name":"6.0.1","kind":"section_1","ident_start":26182,"ident_end":26187,"extent_start":26180,"extent_end":26686,"ident_utf16":{"start":{"line_number":106,"utf16_col":2},"end":{"line_number":106,"utf16_col":7}},"extent_utf16":{"start":{"line_number":106,"utf16_col":0},"end":{"line_number":112,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":26192,"ident_end":26197,"extent_start":26189,"extent_end":26686,"ident_utf16":{"start":{"line_number":108,"utf16_col":3},"end":{"line_number":108,"utf16_col":8}},"extent_utf16":{"start":{"line_number":108,"utf16_col":0},"end":{"line_number":112,"utf16_col":0}}},{"name":"6.0.0","fully_qualified_name":"6.0.0","kind":"section_1","ident_start":26688,"ident_end":26693,"extent_start":26686,"extent_end":34211,"ident_utf16":{"start":{"line_number":112,"utf16_col":2},"end":{"line_number":112,"utf16_col":7}},"extent_utf16":{"start":{"line_number":112,"utf16_col":0},"end":{"line_number":143,"utf16_col":0}}},{"name":"6.0 Highlights","fully_qualified_name":"6.0 Highlights","kind":"section_2","ident_start":26997,"ident_end":27011,"extent_start":26994,"extent_end":28786,"ident_utf16":{"start":{"line_number":116,"utf16_col":3},"end":{"line_number":116,"utf16_col":17}},"extent_utf16":{"start":{"line_number":116,"utf16_col":0},"end":{"line_number":125,"utf16_col":0}}},{"name":"Breaking Changes from Beta 9","fully_qualified_name":"Breaking Changes from Beta 9","kind":"section_2","ident_start":28789,"ident_end":28817,"extent_start":28786,"extent_end":31189,"ident_utf16":{"start":{"line_number":125,"utf16_col":3},"end":{"line_number":125,"utf16_col":31}},"extent_utf16":{"start":{"line_number":125,"utf16_col":0},"end":{"line_number":132,"utf16_col":0}}},{"name":"Changes since Beta 9","fully_qualified_name":"Changes since Beta 9","kind":"section_2","ident_start":31192,"ident_end":31212,"extent_start":31189,"extent_end":31991,"ident_utf16":{"start":{"line_number":132,"utf16_col":3},"end":{"line_number":132,"utf16_col":23}},"extent_utf16":{"start":{"line_number":132,"utf16_col":0},"end":{"line_number":136,"utf16_col":0}}},{"name":"Bug Fixes since Beta 9","fully_qualified_name":"Bug Fixes since Beta 9","kind":"section_2","ident_start":31994,"ident_end":32016,"extent_start":31991,"extent_end":34211,"ident_utf16":{"start":{"line_number":136,"utf16_col":3},"end":{"line_number":136,"utf16_col":25}},"extent_utf16":{"start":{"line_number":136,"utf16_col":0},"end":{"line_number":143,"utf16_col":0}}},{"name":"6.0.0-beta9","fully_qualified_name":"6.0.0-beta9","kind":"section_1","ident_start":34213,"ident_end":34224,"extent_start":34211,"extent_end":50033,"ident_utf16":{"start":{"line_number":143,"utf16_col":2},"end":{"line_number":143,"utf16_col":13}},"extent_utf16":{"start":{"line_number":143,"utf16_col":0},"end":{"line_number":194,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":34267,"ident_end":34283,"extent_start":34264,"extent_end":37318,"ident_utf16":{"start":{"line_number":147,"utf16_col":3},"end":{"line_number":147,"utf16_col":19}},"extent_utf16":{"start":{"line_number":147,"utf16_col":0},"end":{"line_number":156,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":37321,"ident_end":37328,"extent_start":37318,"extent_end":43534,"ident_utf16":{"start":{"line_number":156,"utf16_col":3},"end":{"line_number":156,"utf16_col":10}},"extent_utf16":{"start":{"line_number":156,"utf16_col":0},"end":{"line_number":178,"utf16_col":0}}},{"name":"Bug Fixes","fully_qualified_name":"Bug Fixes","kind":"section_2","ident_start":43537,"ident_end":43546,"extent_start":43534,"extent_end":50033,"ident_utf16":{"start":{"line_number":178,"utf16_col":3},"end":{"line_number":178,"utf16_col":12}},"extent_utf16":{"start":{"line_number":178,"utf16_col":0},"end":{"line_number":194,"utf16_col":0}}},{"name":"6.0.0-beta8","fully_qualified_name":"6.0.0-beta8","kind":"section_1","ident_start":50035,"ident_end":50046,"extent_start":50033,"extent_end":53162,"ident_utf16":{"start":{"line_number":194,"utf16_col":2},"end":{"line_number":194,"utf16_col":13}},"extent_utf16":{"start":{"line_number":194,"utf16_col":0},"end":{"line_number":210,"utf16_col":0}}},{"name":"New Features","fully_qualified_name":"New Features","kind":"section_2","ident_start":50051,"ident_end":50063,"extent_start":50048,"extent_end":52410,"ident_utf16":{"start":{"line_number":196,"utf16_col":3},"end":{"line_number":196,"utf16_col":15}},"extent_utf16":{"start":{"line_number":196,"utf16_col":0},"end":{"line_number":205,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":52413,"ident_end":52420,"extent_start":52410,"extent_end":53162,"ident_utf16":{"start":{"line_number":205,"utf16_col":3},"end":{"line_number":205,"utf16_col":10}},"extent_utf16":{"start":{"line_number":205,"utf16_col":0},"end":{"line_number":210,"utf16_col":0}}},{"name":"6.0.0-beta7","fully_qualified_name":"6.0.0-beta7","kind":"section_1","ident_start":53164,"ident_end":53175,"extent_start":53162,"extent_end":53616,"ident_utf16":{"start":{"line_number":210,"utf16_col":2},"end":{"line_number":210,"utf16_col":13}},"extent_utf16":{"start":{"line_number":210,"utf16_col":0},"end":{"line_number":216,"utf16_col":0}}},{"name":"Bug Fixes","fully_qualified_name":"Bug Fixes","kind":"section_2","ident_start":53180,"ident_end":53189,"extent_start":53177,"extent_end":53616,"ident_utf16":{"start":{"line_number":212,"utf16_col":3},"end":{"line_number":212,"utf16_col":12}},"extent_utf16":{"start":{"line_number":212,"utf16_col":0},"end":{"line_number":216,"utf16_col":0}}},{"name":"6.0.0-beta6","fully_qualified_name":"6.0.0-beta6","kind":"section_1","ident_start":53618,"ident_end":53629,"extent_start":53616,"extent_end":54330,"ident_utf16":{"start":{"line_number":216,"utf16_col":2},"end":{"line_number":216,"utf16_col":13}},"extent_utf16":{"start":{"line_number":216,"utf16_col":0},"end":{"line_number":224,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":53634,"ident_end":53650,"extent_start":53631,"extent_end":54330,"ident_utf16":{"start":{"line_number":218,"utf16_col":3},"end":{"line_number":218,"utf16_col":19}},"extent_utf16":{"start":{"line_number":218,"utf16_col":0},"end":{"line_number":224,"utf16_col":0}}},{"name":"6.0.0-beta5","fully_qualified_name":"6.0.0-beta5","kind":"section_1","ident_start":54332,"ident_end":54343,"extent_start":54330,"extent_end":55570,"ident_utf16":{"start":{"line_number":224,"utf16_col":2},"end":{"line_number":224,"utf16_col":13}},"extent_utf16":{"start":{"line_number":224,"utf16_col":0},"end":{"line_number":237,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":54348,"ident_end":54364,"extent_start":54345,"extent_end":55054,"ident_utf16":{"start":{"line_number":226,"utf16_col":3},"end":{"line_number":226,"utf16_col":19}},"extent_utf16":{"start":{"line_number":226,"utf16_col":0},"end":{"line_number":232,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":55057,"ident_end":55064,"extent_start":55054,"extent_end":55570,"ident_utf16":{"start":{"line_number":232,"utf16_col":3},"end":{"line_number":232,"utf16_col":10}},"extent_utf16":{"start":{"line_number":232,"utf16_col":0},"end":{"line_number":237,"utf16_col":0}}},{"name":"6.0.0-beta4","fully_qualified_name":"6.0.0-beta4","kind":"section_1","ident_start":55572,"ident_end":55583,"extent_start":55570,"extent_end":56327,"ident_utf16":{"start":{"line_number":237,"utf16_col":2},"end":{"line_number":237,"utf16_col":13}},"extent_utf16":{"start":{"line_number":237,"utf16_col":0},"end":{"line_number":254,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":55588,"ident_end":55604,"extent_start":55585,"extent_end":55963,"ident_utf16":{"start":{"line_number":239,"utf16_col":3},"end":{"line_number":239,"utf16_col":19}},"extent_utf16":{"start":{"line_number":239,"utf16_col":0},"end":{"line_number":246,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":55966,"ident_end":55973,"extent_start":55963,"extent_end":56237,"ident_utf16":{"start":{"line_number":246,"utf16_col":3},"end":{"line_number":246,"utf16_col":10}},"extent_utf16":{"start":{"line_number":246,"utf16_col":0},"end":{"line_number":250,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":56240,"ident_end":56245,"extent_start":56237,"extent_end":56327,"ident_utf16":{"start":{"line_number":250,"utf16_col":3},"end":{"line_number":250,"utf16_col":8}},"extent_utf16":{"start":{"line_number":250,"utf16_col":0},"end":{"line_number":254,"utf16_col":0}}},{"name":"6.0.0-beta3","fully_qualified_name":"6.0.0-beta3","kind":"section_1","ident_start":56329,"ident_end":56340,"extent_start":56327,"extent_end":64126,"ident_utf16":{"start":{"line_number":254,"utf16_col":2},"end":{"line_number":254,"utf16_col":13}},"extent_utf16":{"start":{"line_number":254,"utf16_col":0},"end":{"line_number":309,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":56345,"ident_end":56361,"extent_start":56342,"extent_end":58616,"ident_utf16":{"start":{"line_number":256,"utf16_col":3},"end":{"line_number":256,"utf16_col":19}},"extent_utf16":{"start":{"line_number":256,"utf16_col":0},"end":{"line_number":277,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":58619,"ident_end":58626,"extent_start":58616,"extent_end":61407,"ident_utf16":{"start":{"line_number":277,"utf16_col":3},"end":{"line_number":277,"utf16_col":10}},"extent_utf16":{"start":{"line_number":277,"utf16_col":0},"end":{"line_number":296,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":61410,"ident_end":61415,"extent_start":61407,"extent_end":64126,"ident_utf16":{"start":{"line_number":296,"utf16_col":3},"end":{"line_number":296,"utf16_col":8}},"extent_utf16":{"start":{"line_number":296,"utf16_col":0},"end":{"line_number":309,"utf16_col":0}}},{"name":"6.0.0-beta2","fully_qualified_name":"6.0.0-beta2","kind":"section_1","ident_start":64128,"ident_end":64139,"extent_start":64126,"extent_end":64478,"ident_utf16":{"start":{"line_number":309,"utf16_col":2},"end":{"line_number":309,"utf16_col":13}},"extent_utf16":{"start":{"line_number":309,"utf16_col":0},"end":{"line_number":319,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":64144,"ident_end":64151,"extent_start":64141,"extent_end":64274,"ident_utf16":{"start":{"line_number":311,"utf16_col":3},"end":{"line_number":311,"utf16_col":10}},"extent_utf16":{"start":{"line_number":311,"utf16_col":0},"end":{"line_number":315,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":64277,"ident_end":64282,"extent_start":64274,"extent_end":64478,"ident_utf16":{"start":{"line_number":315,"utf16_col":3},"end":{"line_number":315,"utf16_col":8}},"extent_utf16":{"start":{"line_number":315,"utf16_col":0},"end":{"line_number":319,"utf16_col":0}}},{"name":"6.0.0-beta1","fully_qualified_name":"6.0.0-beta1","kind":"section_1","ident_start":64480,"ident_end":64491,"extent_start":64478,"extent_end":68160,"ident_utf16":{"start":{"line_number":319,"utf16_col":2},"end":{"line_number":319,"utf16_col":13}},"extent_utf16":{"start":{"line_number":319,"utf16_col":0},"end":{"line_number":352,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":64496,"ident_end":64512,"extent_start":64493,"extent_end":66725,"ident_utf16":{"start":{"line_number":321,"utf16_col":3},"end":{"line_number":321,"utf16_col":19}},"extent_utf16":{"start":{"line_number":321,"utf16_col":0},"end":{"line_number":342,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":66728,"ident_end":66735,"extent_start":66725,"extent_end":68160,"ident_utf16":{"start":{"line_number":342,"utf16_col":3},"end":{"line_number":342,"utf16_col":10}},"extent_utf16":{"start":{"line_number":342,"utf16_col":0},"end":{"line_number":352,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_1","ident_start":68162,"ident_end":68167,"extent_start":68160,"extent_end":68234,"ident_utf16":{"start":{"line_number":352,"utf16_col":2},"end":{"line_number":352,"utf16_col":7}},"extent_utf16":{"start":{"line_number":352,"utf16_col":0},"end":{"line_number":356,"utf16_col":0}}},{"name":"5.7.3","fully_qualified_name":"5.7.3","kind":"section_1","ident_start":68236,"ident_end":68241,"extent_start":68234,"extent_end":68631,"ident_utf16":{"start":{"line_number":356,"utf16_col":2},"end":{"line_number":356,"utf16_col":7}},"extent_utf16":{"start":{"line_number":356,"utf16_col":0},"end":{"line_number":362,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":68246,"ident_end":68251,"extent_start":68243,"extent_end":68631,"ident_utf16":{"start":{"line_number":358,"utf16_col":3},"end":{"line_number":358,"utf16_col":8}},"extent_utf16":{"start":{"line_number":358,"utf16_col":0},"end":{"line_number":362,"utf16_col":0}}},{"name":"5.7.2","fully_qualified_name":"5.7.2","kind":"section_1","ident_start":68633,"ident_end":68638,"extent_start":68631,"extent_end":68835,"ident_utf16":{"start":{"line_number":362,"utf16_col":2},"end":{"line_number":362,"utf16_col":7}},"extent_utf16":{"start":{"line_number":362,"utf16_col":0},"end":{"line_number":368,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":68643,"ident_end":68648,"extent_start":68640,"extent_end":68835,"ident_utf16":{"start":{"line_number":364,"utf16_col":3},"end":{"line_number":364,"utf16_col":8}},"extent_utf16":{"start":{"line_number":364,"utf16_col":0},"end":{"line_number":368,"utf16_col":0}}},{"name":"5.7.1","fully_qualified_name":"5.7.1","kind":"section_1","ident_start":68837,"ident_end":68842,"extent_start":68835,"extent_end":68928,"ident_utf16":{"start":{"line_number":368,"utf16_col":2},"end":{"line_number":368,"utf16_col":7}},"extent_utf16":{"start":{"line_number":368,"utf16_col":0},"end":{"line_number":374,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":68847,"ident_end":68852,"extent_start":68844,"extent_end":68928,"ident_utf16":{"start":{"line_number":370,"utf16_col":3},"end":{"line_number":370,"utf16_col":8}},"extent_utf16":{"start":{"line_number":370,"utf16_col":0},"end":{"line_number":374,"utf16_col":0}}},{"name":"5.7.0","fully_qualified_name":"5.7.0","kind":"section_1","ident_start":68930,"ident_end":68935,"extent_start":68928,"extent_end":70371,"ident_utf16":{"start":{"line_number":374,"utf16_col":2},"end":{"line_number":374,"utf16_col":7}},"extent_utf16":{"start":{"line_number":374,"utf16_col":0},"end":{"line_number":393,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":68940,"ident_end":68947,"extent_start":68937,"extent_end":70107,"ident_utf16":{"start":{"line_number":376,"utf16_col":3},"end":{"line_number":376,"utf16_col":10}},"extent_utf16":{"start":{"line_number":376,"utf16_col":0},"end":{"line_number":388,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":70110,"ident_end":70115,"extent_start":70107,"extent_end":70371,"ident_utf16":{"start":{"line_number":388,"utf16_col":3},"end":{"line_number":388,"utf16_col":8}},"extent_utf16":{"start":{"line_number":388,"utf16_col":0},"end":{"line_number":393,"utf16_col":0}}},{"name":"5.6.1","fully_qualified_name":"5.6.1","kind":"section_1","ident_start":70373,"ident_end":70378,"extent_start":70371,"extent_end":70772,"ident_utf16":{"start":{"line_number":393,"utf16_col":2},"end":{"line_number":393,"utf16_col":7}},"extent_utf16":{"start":{"line_number":393,"utf16_col":0},"end":{"line_number":402,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":70383,"ident_end":70388,"extent_start":70380,"extent_end":70772,"ident_utf16":{"start":{"line_number":395,"utf16_col":3},"end":{"line_number":395,"utf16_col":8}},"extent_utf16":{"start":{"line_number":395,"utf16_col":0},"end":{"line_number":402,"utf16_col":0}}},{"name":"5.6.0","fully_qualified_name":"5.6.0","kind":"section_1","ident_start":70774,"ident_end":70779,"extent_start":70772,"extent_end":72298,"ident_utf16":{"start":{"line_number":402,"utf16_col":2},"end":{"line_number":402,"utf16_col":7}},"extent_utf16":{"start":{"line_number":402,"utf16_col":0},"end":{"line_number":426,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":70784,"ident_end":70791,"extent_start":70781,"extent_end":71521,"ident_utf16":{"start":{"line_number":404,"utf16_col":3},"end":{"line_number":404,"utf16_col":10}},"extent_utf16":{"start":{"line_number":404,"utf16_col":0},"end":{"line_number":411,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":71524,"ident_end":71529,"extent_start":71521,"extent_end":72298,"ident_utf16":{"start":{"line_number":411,"utf16_col":3},"end":{"line_number":411,"utf16_col":8}},"extent_utf16":{"start":{"line_number":411,"utf16_col":0},"end":{"line_number":426,"utf16_col":0}}},{"name":"5.5.3","fully_qualified_name":"5.5.3","kind":"section_1","ident_start":72300,"ident_end":72305,"extent_start":72298,"extent_end":72401,"ident_utf16":{"start":{"line_number":426,"utf16_col":2},"end":{"line_number":426,"utf16_col":7}},"extent_utf16":{"start":{"line_number":426,"utf16_col":0},"end":{"line_number":432,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":72310,"ident_end":72315,"extent_start":72307,"extent_end":72401,"ident_utf16":{"start":{"line_number":428,"utf16_col":3},"end":{"line_number":428,"utf16_col":8}},"extent_utf16":{"start":{"line_number":428,"utf16_col":0},"end":{"line_number":432,"utf16_col":0}}},{"name":"5.5.2","fully_qualified_name":"5.5.2","kind":"section_1","ident_start":72403,"ident_end":72408,"extent_start":72401,"extent_end":72962,"ident_utf16":{"start":{"line_number":432,"utf16_col":2},"end":{"line_number":432,"utf16_col":7}},"extent_utf16":{"start":{"line_number":432,"utf16_col":0},"end":{"line_number":439,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":72413,"ident_end":72418,"extent_start":72410,"extent_end":72962,"ident_utf16":{"start":{"line_number":434,"utf16_col":3},"end":{"line_number":434,"utf16_col":8}},"extent_utf16":{"start":{"line_number":434,"utf16_col":0},"end":{"line_number":439,"utf16_col":0}}},{"name":"5.5.1","fully_qualified_name":"5.5.1","kind":"section_1","ident_start":72964,"ident_end":72969,"extent_start":72962,"extent_end":73213,"ident_utf16":{"start":{"line_number":439,"utf16_col":2},"end":{"line_number":439,"utf16_col":7}},"extent_utf16":{"start":{"line_number":439,"utf16_col":0},"end":{"line_number":447,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":72974,"ident_end":72979,"extent_start":72971,"extent_end":73213,"ident_utf16":{"start":{"line_number":441,"utf16_col":3},"end":{"line_number":441,"utf16_col":8}},"extent_utf16":{"start":{"line_number":441,"utf16_col":0},"end":{"line_number":447,"utf16_col":0}}},{"name":"5.5.0","fully_qualified_name":"5.5.0","kind":"section_1","ident_start":73215,"ident_end":73220,"extent_start":73213,"extent_end":74129,"ident_utf16":{"start":{"line_number":447,"utf16_col":2},"end":{"line_number":447,"utf16_col":7}},"extent_utf16":{"start":{"line_number":447,"utf16_col":0},"end":{"line_number":462,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":73225,"ident_end":73232,"extent_start":73222,"extent_end":73822,"ident_utf16":{"start":{"line_number":449,"utf16_col":3},"end":{"line_number":449,"utf16_col":10}},"extent_utf16":{"start":{"line_number":449,"utf16_col":0},"end":{"line_number":456,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":73825,"ident_end":73830,"extent_start":73822,"extent_end":74129,"ident_utf16":{"start":{"line_number":456,"utf16_col":3},"end":{"line_number":456,"utf16_col":8}},"extent_utf16":{"start":{"line_number":456,"utf16_col":0},"end":{"line_number":462,"utf16_col":0}}},{"name":"5.4.6","fully_qualified_name":"5.4.6","kind":"section_1","ident_start":74131,"ident_end":74136,"extent_start":74129,"extent_end":74596,"ident_utf16":{"start":{"line_number":462,"utf16_col":2},"end":{"line_number":462,"utf16_col":7}},"extent_utf16":{"start":{"line_number":462,"utf16_col":0},"end":{"line_number":477,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":74141,"ident_end":74146,"extent_start":74138,"extent_end":74596,"ident_utf16":{"start":{"line_number":464,"utf16_col":3},"end":{"line_number":464,"utf16_col":8}},"extent_utf16":{"start":{"line_number":464,"utf16_col":0},"end":{"line_number":477,"utf16_col":0}}},{"name":"5.4.5","fully_qualified_name":"5.4.5","kind":"section_1","ident_start":74598,"ident_end":74603,"extent_start":74596,"extent_end":74717,"ident_utf16":{"start":{"line_number":477,"utf16_col":2},"end":{"line_number":477,"utf16_col":7}},"extent_utf16":{"start":{"line_number":477,"utf16_col":0},"end":{"line_number":483,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":74608,"ident_end":74613,"extent_start":74605,"extent_end":74717,"ident_utf16":{"start":{"line_number":479,"utf16_col":3},"end":{"line_number":479,"utf16_col":8}},"extent_utf16":{"start":{"line_number":479,"utf16_col":0},"end":{"line_number":483,"utf16_col":0}}},{"name":"5.4.4","fully_qualified_name":"5.4.4","kind":"section_1","ident_start":74719,"ident_end":74724,"extent_start":74717,"extent_end":74923,"ident_utf16":{"start":{"line_number":483,"utf16_col":2},"end":{"line_number":483,"utf16_col":7}},"extent_utf16":{"start":{"line_number":483,"utf16_col":0},"end":{"line_number":490,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":74729,"ident_end":74734,"extent_start":74726,"extent_end":74923,"ident_utf16":{"start":{"line_number":485,"utf16_col":3},"end":{"line_number":485,"utf16_col":8}},"extent_utf16":{"start":{"line_number":485,"utf16_col":0},"end":{"line_number":490,"utf16_col":0}}},{"name":"5.4.3","fully_qualified_name":"5.4.3","kind":"section_1","ident_start":74925,"ident_end":74930,"extent_start":74923,"extent_end":75121,"ident_utf16":{"start":{"line_number":490,"utf16_col":2},"end":{"line_number":490,"utf16_col":7}},"extent_utf16":{"start":{"line_number":490,"utf16_col":0},"end":{"line_number":497,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":74935,"ident_end":74940,"extent_start":74932,"extent_end":75121,"ident_utf16":{"start":{"line_number":492,"utf16_col":3},"end":{"line_number":492,"utf16_col":8}},"extent_utf16":{"start":{"line_number":492,"utf16_col":0},"end":{"line_number":497,"utf16_col":0}}},{"name":"5.4.2","fully_qualified_name":"5.4.2","kind":"section_1","ident_start":75123,"ident_end":75128,"extent_start":75121,"extent_end":75281,"ident_utf16":{"start":{"line_number":497,"utf16_col":2},"end":{"line_number":497,"utf16_col":7}},"extent_utf16":{"start":{"line_number":497,"utf16_col":0},"end":{"line_number":504,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":75133,"ident_end":75138,"extent_start":75130,"extent_end":75281,"ident_utf16":{"start":{"line_number":499,"utf16_col":3},"end":{"line_number":499,"utf16_col":8}},"extent_utf16":{"start":{"line_number":499,"utf16_col":0},"end":{"line_number":504,"utf16_col":0}}},{"name":"5.4.1","fully_qualified_name":"5.4.1","kind":"section_1","ident_start":75283,"ident_end":75288,"extent_start":75281,"extent_end":75555,"ident_utf16":{"start":{"line_number":504,"utf16_col":2},"end":{"line_number":504,"utf16_col":7}},"extent_utf16":{"start":{"line_number":504,"utf16_col":0},"end":{"line_number":511,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":75293,"ident_end":75298,"extent_start":75290,"extent_end":75555,"ident_utf16":{"start":{"line_number":506,"utf16_col":3},"end":{"line_number":506,"utf16_col":8}},"extent_utf16":{"start":{"line_number":506,"utf16_col":0},"end":{"line_number":511,"utf16_col":0}}},{"name":"5.4.0","fully_qualified_name":"5.4.0","kind":"section_1","ident_start":75557,"ident_end":75562,"extent_start":75555,"extent_end":77332,"ident_utf16":{"start":{"line_number":511,"utf16_col":2},"end":{"line_number":511,"utf16_col":7}},"extent_utf16":{"start":{"line_number":511,"utf16_col":0},"end":{"line_number":549,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":75567,"ident_end":75574,"extent_start":75564,"extent_end":76942,"ident_utf16":{"start":{"line_number":513,"utf16_col":3},"end":{"line_number":513,"utf16_col":10}},"extent_utf16":{"start":{"line_number":513,"utf16_col":0},"end":{"line_number":541,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":76945,"ident_end":76950,"extent_start":76942,"extent_end":77332,"ident_utf16":{"start":{"line_number":541,"utf16_col":3},"end":{"line_number":541,"utf16_col":8}},"extent_utf16":{"start":{"line_number":541,"utf16_col":0},"end":{"line_number":549,"utf16_col":0}}},{"name":"5.3.0","fully_qualified_name":"5.3.0","kind":"section_1","ident_start":77334,"ident_end":77339,"extent_start":77332,"extent_end":80336,"ident_utf16":{"start":{"line_number":549,"utf16_col":2},"end":{"line_number":549,"utf16_col":7}},"extent_utf16":{"start":{"line_number":549,"utf16_col":0},"end":{"line_number":596,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":77344,"ident_end":77351,"extent_start":77341,"extent_end":79358,"ident_utf16":{"start":{"line_number":551,"utf16_col":3},"end":{"line_number":551,"utf16_col":10}},"extent_utf16":{"start":{"line_number":551,"utf16_col":0},"end":{"line_number":573,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":79361,"ident_end":79366,"extent_start":79358,"extent_end":80336,"ident_utf16":{"start":{"line_number":573,"utf16_col":3},"end":{"line_number":573,"utf16_col":8}},"extent_utf16":{"start":{"line_number":573,"utf16_col":0},"end":{"line_number":596,"utf16_col":0}}},{"name":"5.2.1","fully_qualified_name":"5.2.1","kind":"section_1","ident_start":80338,"ident_end":80343,"extent_start":80336,"extent_end":81082,"ident_utf16":{"start":{"line_number":596,"utf16_col":2},"end":{"line_number":596,"utf16_col":7}},"extent_utf16":{"start":{"line_number":596,"utf16_col":0},"end":{"line_number":603,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":80348,"ident_end":80353,"extent_start":80345,"extent_end":81082,"ident_utf16":{"start":{"line_number":598,"utf16_col":3},"end":{"line_number":598,"utf16_col":8}},"extent_utf16":{"start":{"line_number":598,"utf16_col":0},"end":{"line_number":603,"utf16_col":0}}},{"name":"5.2.0","fully_qualified_name":"5.2.0","kind":"section_1","ident_start":81084,"ident_end":81089,"extent_start":81082,"extent_end":81823,"ident_utf16":{"start":{"line_number":603,"utf16_col":2},"end":{"line_number":603,"utf16_col":7}},"extent_utf16":{"start":{"line_number":603,"utf16_col":0},"end":{"line_number":618,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":81152,"ident_end":81159,"extent_start":81149,"extent_end":81455,"ident_utf16":{"start":{"line_number":607,"utf16_col":3},"end":{"line_number":607,"utf16_col":10}},"extent_utf16":{"start":{"line_number":607,"utf16_col":0},"end":{"line_number":611,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":81458,"ident_end":81463,"extent_start":81455,"extent_end":81823,"ident_utf16":{"start":{"line_number":611,"utf16_col":3},"end":{"line_number":611,"utf16_col":8}},"extent_utf16":{"start":{"line_number":611,"utf16_col":0},"end":{"line_number":618,"utf16_col":0}}},{"name":"5.2.0-beta2","fully_qualified_name":"5.2.0-beta2","kind":"section_1","ident_start":81825,"ident_end":81836,"extent_start":81823,"extent_end":82937,"ident_utf16":{"start":{"line_number":618,"utf16_col":2},"end":{"line_number":618,"utf16_col":13}},"extent_utf16":{"start":{"line_number":618,"utf16_col":0},"end":{"line_number":638,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":81889,"ident_end":81894,"extent_start":81886,"extent_end":82713,"ident_utf16":{"start":{"line_number":622,"utf16_col":3},"end":{"line_number":622,"utf16_col":8}},"extent_utf16":{"start":{"line_number":622,"utf16_col":0},"end":{"line_number":632,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":82716,"ident_end":82723,"extent_start":82713,"extent_end":82937,"ident_utf16":{"start":{"line_number":632,"utf16_col":3},"end":{"line_number":632,"utf16_col":10}},"extent_utf16":{"start":{"line_number":632,"utf16_col":0},"end":{"line_number":638,"utf16_col":0}}},{"name":"5.2.0-beta1","fully_qualified_name":"5.2.0-beta1","kind":"section_1","ident_start":82939,"ident_end":82950,"extent_start":82937,"extent_end":84970,"ident_utf16":{"start":{"line_number":638,"utf16_col":2},"end":{"line_number":638,"utf16_col":13}},"extent_utf16":{"start":{"line_number":638,"utf16_col":0},"end":{"line_number":690,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":82955,"ident_end":82962,"extent_start":82952,"extent_end":84970,"ident_utf16":{"start":{"line_number":640,"utf16_col":3},"end":{"line_number":640,"utf16_col":10}},"extent_utf16":{"start":{"line_number":640,"utf16_col":0},"end":{"line_number":690,"utf16_col":0}}},{"name":"5.1.1","fully_qualified_name":"5.1.1","kind":"section_1","ident_start":84972,"ident_end":84977,"extent_start":84970,"extent_end":85075,"ident_utf16":{"start":{"line_number":690,"utf16_col":2},"end":{"line_number":690,"utf16_col":7}},"extent_utf16":{"start":{"line_number":690,"utf16_col":0},"end":{"line_number":696,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":84982,"ident_end":84987,"extent_start":84979,"extent_end":85075,"ident_utf16":{"start":{"line_number":692,"utf16_col":3},"end":{"line_number":692,"utf16_col":8}},"extent_utf16":{"start":{"line_number":692,"utf16_col":0},"end":{"line_number":696,"utf16_col":0}}},{"name":"5.1.0","fully_qualified_name":"5.1.0","kind":"section_1","ident_start":85077,"ident_end":85082,"extent_start":85075,"extent_end":86513,"ident_utf16":{"start":{"line_number":696,"utf16_col":2},"end":{"line_number":696,"utf16_col":7}},"extent_utf16":{"start":{"line_number":696,"utf16_col":0},"end":{"line_number":749,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":85087,"ident_end":85094,"extent_start":85084,"extent_end":85226,"ident_utf16":{"start":{"line_number":698,"utf16_col":3},"end":{"line_number":698,"utf16_col":10}},"extent_utf16":{"start":{"line_number":698,"utf16_col":0},"end":{"line_number":702,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":85229,"ident_end":85234,"extent_start":85226,"extent_end":86513,"ident_utf16":{"start":{"line_number":702,"utf16_col":3},"end":{"line_number":702,"utf16_col":8}},"extent_utf16":{"start":{"line_number":702,"utf16_col":0},"end":{"line_number":749,"utf16_col":0}}},{"name":"5.0.1","fully_qualified_name":"5.0.1","kind":"section_1","ident_start":86515,"ident_end":86520,"extent_start":86513,"extent_end":86609,"ident_utf16":{"start":{"line_number":749,"utf16_col":2},"end":{"line_number":749,"utf16_col":7}},"extent_utf16":{"start":{"line_number":749,"utf16_col":0},"end":{"line_number":755,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":86525,"ident_end":86530,"extent_start":86522,"extent_end":86609,"ident_utf16":{"start":{"line_number":751,"utf16_col":3},"end":{"line_number":751,"utf16_col":8}},"extent_utf16":{"start":{"line_number":751,"utf16_col":0},"end":{"line_number":755,"utf16_col":0}}},{"name":"5.0.0","fully_qualified_name":"5.0.0","kind":"section_1","ident_start":86611,"ident_end":86616,"extent_start":86609,"extent_end":87727,"ident_utf16":{"start":{"line_number":755,"utf16_col":2},"end":{"line_number":755,"utf16_col":7}},"extent_utf16":{"start":{"line_number":755,"utf16_col":0},"end":{"line_number":786,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":86669,"ident_end":86685,"extent_start":86666,"extent_end":86814,"ident_utf16":{"start":{"line_number":759,"utf16_col":3},"end":{"line_number":759,"utf16_col":19}},"extent_utf16":{"start":{"line_number":759,"utf16_col":0},"end":{"line_number":763,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":86817,"ident_end":86824,"extent_start":86814,"extent_end":87635,"ident_utf16":{"start":{"line_number":763,"utf16_col":3},"end":{"line_number":763,"utf16_col":10}},"extent_utf16":{"start":{"line_number":763,"utf16_col":0},"end":{"line_number":782,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":87638,"ident_end":87643,"extent_start":87635,"extent_end":87727,"ident_utf16":{"start":{"line_number":782,"utf16_col":3},"end":{"line_number":782,"utf16_col":8}},"extent_utf16":{"start":{"line_number":782,"utf16_col":0},"end":{"line_number":786,"utf16_col":0}}},{"name":"5.0.0-beta1","fully_qualified_name":"5.0.0-beta1","kind":"section_1","ident_start":87729,"ident_end":87740,"extent_start":87727,"extent_end":91425,"ident_utf16":{"start":{"line_number":786,"utf16_col":2},"end":{"line_number":786,"utf16_col":13}},"extent_utf16":{"start":{"line_number":786,"utf16_col":0},"end":{"line_number":817,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":87745,"ident_end":87761,"extent_start":87742,"extent_end":89959,"ident_utf16":{"start":{"line_number":788,"utf16_col":3},"end":{"line_number":788,"utf16_col":19}},"extent_utf16":{"start":{"line_number":788,"utf16_col":0},"end":{"line_number":801,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":89962,"ident_end":89969,"extent_start":89959,"extent_end":90961,"ident_utf16":{"start":{"line_number":801,"utf16_col":3},"end":{"line_number":801,"utf16_col":10}},"extent_utf16":{"start":{"line_number":801,"utf16_col":0},"end":{"line_number":810,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":90964,"ident_end":90969,"extent_start":90961,"extent_end":91425,"ident_utf16":{"start":{"line_number":810,"utf16_col":3},"end":{"line_number":810,"utf16_col":8}},"extent_utf16":{"start":{"line_number":810,"utf16_col":0},"end":{"line_number":817,"utf16_col":0}}},{"name":"4.3.1","fully_qualified_name":"4.3.1","kind":"section_1","ident_start":91427,"ident_end":91432,"extent_start":91425,"extent_end":91548,"ident_utf16":{"start":{"line_number":817,"utf16_col":2},"end":{"line_number":817,"utf16_col":7}},"extent_utf16":{"start":{"line_number":817,"utf16_col":0},"end":{"line_number":823,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":91437,"ident_end":91442,"extent_start":91434,"extent_end":91548,"ident_utf16":{"start":{"line_number":819,"utf16_col":3},"end":{"line_number":819,"utf16_col":8}},"extent_utf16":{"start":{"line_number":819,"utf16_col":0},"end":{"line_number":823,"utf16_col":0}}},{"name":"4.3.0","fully_qualified_name":"4.3.0","kind":"section_1","ident_start":91550,"ident_end":91555,"extent_start":91548,"extent_end":92356,"ident_utf16":{"start":{"line_number":823,"utf16_col":2},"end":{"line_number":823,"utf16_col":7}},"extent_utf16":{"start":{"line_number":823,"utf16_col":0},"end":{"line_number":844,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":91560,"ident_end":91567,"extent_start":91557,"extent_end":92141,"ident_utf16":{"start":{"line_number":825,"utf16_col":3},"end":{"line_number":825,"utf16_col":10}},"extent_utf16":{"start":{"line_number":825,"utf16_col":0},"end":{"line_number":839,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":92144,"ident_end":92149,"extent_start":92141,"extent_end":92356,"ident_utf16":{"start":{"line_number":839,"utf16_col":3},"end":{"line_number":839,"utf16_col":8}},"extent_utf16":{"start":{"line_number":839,"utf16_col":0},"end":{"line_number":844,"utf16_col":0}}},{"name":"4.2.1","fully_qualified_name":"4.2.1","kind":"section_1","ident_start":92358,"ident_end":92363,"extent_start":92356,"extent_end":92533,"ident_utf16":{"start":{"line_number":844,"utf16_col":2},"end":{"line_number":844,"utf16_col":7}},"extent_utf16":{"start":{"line_number":844,"utf16_col":0},"end":{"line_number":851,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":92368,"ident_end":92373,"extent_start":92365,"extent_end":92533,"ident_utf16":{"start":{"line_number":846,"utf16_col":3},"end":{"line_number":846,"utf16_col":8}},"extent_utf16":{"start":{"line_number":846,"utf16_col":0},"end":{"line_number":851,"utf16_col":0}}},{"name":"4.2.0","fully_qualified_name":"4.2.0","kind":"section_1","ident_start":92535,"ident_end":92540,"extent_start":92533,"extent_end":93107,"ident_utf16":{"start":{"line_number":851,"utf16_col":2},"end":{"line_number":851,"utf16_col":7}},"extent_utf16":{"start":{"line_number":851,"utf16_col":0},"end":{"line_number":863,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":92545,"ident_end":92552,"extent_start":92542,"extent_end":92899,"ident_utf16":{"start":{"line_number":853,"utf16_col":3},"end":{"line_number":853,"utf16_col":10}},"extent_utf16":{"start":{"line_number":853,"utf16_col":0},"end":{"line_number":857,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":92902,"ident_end":92907,"extent_start":92899,"extent_end":93107,"ident_utf16":{"start":{"line_number":857,"utf16_col":3},"end":{"line_number":857,"utf16_col":8}},"extent_utf16":{"start":{"line_number":857,"utf16_col":0},"end":{"line_number":863,"utf16_col":0}}},{"name":"4.1.2","fully_qualified_name":"4.1.2","kind":"section_1","ident_start":93109,"ident_end":93114,"extent_start":93107,"extent_end":93258,"ident_utf16":{"start":{"line_number":863,"utf16_col":2},"end":{"line_number":863,"utf16_col":7}},"extent_utf16":{"start":{"line_number":863,"utf16_col":0},"end":{"line_number":869,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":93119,"ident_end":93124,"extent_start":93116,"extent_end":93258,"ident_utf16":{"start":{"line_number":865,"utf16_col":3},"end":{"line_number":865,"utf16_col":8}},"extent_utf16":{"start":{"line_number":865,"utf16_col":0},"end":{"line_number":869,"utf16_col":0}}},{"name":"4.1.1","fully_qualified_name":"4.1.1","kind":"section_1","ident_start":93260,"ident_end":93265,"extent_start":93258,"extent_end":93816,"ident_utf16":{"start":{"line_number":869,"utf16_col":2},"end":{"line_number":869,"utf16_col":7}},"extent_utf16":{"start":{"line_number":869,"utf16_col":0},"end":{"line_number":880,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":93270,"ident_end":93275,"extent_start":93267,"extent_end":93816,"ident_utf16":{"start":{"line_number":871,"utf16_col":3},"end":{"line_number":871,"utf16_col":8}},"extent_utf16":{"start":{"line_number":871,"utf16_col":0},"end":{"line_number":880,"utf16_col":0}}},{"name":"4.1.0","fully_qualified_name":"4.1.0","kind":"section_1","ident_start":93818,"ident_end":93823,"extent_start":93816,"extent_end":94728,"ident_utf16":{"start":{"line_number":880,"utf16_col":2},"end":{"line_number":880,"utf16_col":7}},"extent_utf16":{"start":{"line_number":880,"utf16_col":0},"end":{"line_number":896,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":93828,"ident_end":93835,"extent_start":93825,"extent_end":94539,"ident_utf16":{"start":{"line_number":882,"utf16_col":3},"end":{"line_number":882,"utf16_col":10}},"extent_utf16":{"start":{"line_number":882,"utf16_col":0},"end":{"line_number":891,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":94542,"ident_end":94547,"extent_start":94539,"extent_end":94728,"ident_utf16":{"start":{"line_number":891,"utf16_col":3},"end":{"line_number":891,"utf16_col":8}},"extent_utf16":{"start":{"line_number":891,"utf16_col":0},"end":{"line_number":896,"utf16_col":0}}},{"name":"4.0.1","fully_qualified_name":"4.0.1","kind":"section_1","ident_start":94730,"ident_end":94735,"extent_start":94728,"extent_end":95345,"ident_utf16":{"start":{"line_number":896,"utf16_col":2},"end":{"line_number":896,"utf16_col":7}},"extent_utf16":{"start":{"line_number":896,"utf16_col":0},"end":{"line_number":906,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":94740,"ident_end":94745,"extent_start":94737,"extent_end":95345,"ident_utf16":{"start":{"line_number":898,"utf16_col":3},"end":{"line_number":898,"utf16_col":8}},"extent_utf16":{"start":{"line_number":898,"utf16_col":0},"end":{"line_number":906,"utf16_col":0}}},{"name":"4.0.0","fully_qualified_name":"4.0.0","kind":"section_1","ident_start":95347,"ident_end":95352,"extent_start":95345,"extent_end":95429,"ident_utf16":{"start":{"line_number":906,"utf16_col":2},"end":{"line_number":906,"utf16_col":7}},"extent_utf16":{"start":{"line_number":906,"utf16_col":0},"end":{"line_number":912,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":95357,"ident_end":95362,"extent_start":95354,"extent_end":95429,"ident_utf16":{"start":{"line_number":908,"utf16_col":3},"end":{"line_number":908,"utf16_col":8}},"extent_utf16":{"start":{"line_number":908,"utf16_col":0},"end":{"line_number":912,"utf16_col":0}}},{"name":"4.0.0-beta2","fully_qualified_name":"4.0.0-beta2","kind":"section_1","ident_start":95431,"ident_end":95442,"extent_start":95429,"extent_end":95781,"ident_utf16":{"start":{"line_number":912,"utf16_col":2},"end":{"line_number":912,"utf16_col":13}},"extent_utf16":{"start":{"line_number":912,"utf16_col":0},"end":{"line_number":922,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":95447,"ident_end":95452,"extent_start":95444,"extent_end":95563,"ident_utf16":{"start":{"line_number":914,"utf16_col":3},"end":{"line_number":914,"utf16_col":8}},"extent_utf16":{"start":{"line_number":914,"utf16_col":0},"end":{"line_number":918,"utf16_col":0}}},{"name":"Breaking Changes","fully_qualified_name":"Breaking Changes","kind":"section_2","ident_start":95566,"ident_end":95582,"extent_start":95563,"extent_end":95781,"ident_utf16":{"start":{"line_number":918,"utf16_col":3},"end":{"line_number":918,"utf16_col":19}},"extent_utf16":{"start":{"line_number":918,"utf16_col":0},"end":{"line_number":922,"utf16_col":0}}},{"name":"4.0.0-beta1","fully_qualified_name":"4.0.0-beta1","kind":"section_1","ident_start":95783,"ident_end":95794,"extent_start":95781,"extent_end":98688,"ident_utf16":{"start":{"line_number":922,"utf16_col":2},"end":{"line_number":922,"utf16_col":13}},"extent_utf16":{"start":{"line_number":922,"utf16_col":0},"end":{"line_number":969,"utf16_col":0}}},{"name":"Breaking changes","fully_qualified_name":"Breaking changes","kind":"section_2","ident_start":95799,"ident_end":95815,"extent_start":95796,"extent_end":97478,"ident_utf16":{"start":{"line_number":924,"utf16_col":3},"end":{"line_number":924,"utf16_col":19}},"extent_utf16":{"start":{"line_number":924,"utf16_col":0},"end":{"line_number":951,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":97481,"ident_end":97488,"extent_start":97478,"extent_end":97767,"ident_utf16":{"start":{"line_number":951,"utf16_col":3},"end":{"line_number":951,"utf16_col":10}},"extent_utf16":{"start":{"line_number":951,"utf16_col":0},"end":{"line_number":957,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":97770,"ident_end":97775,"extent_start":97767,"extent_end":98688,"ident_utf16":{"start":{"line_number":957,"utf16_col":3},"end":{"line_number":957,"utf16_col":8}},"extent_utf16":{"start":{"line_number":957,"utf16_col":0},"end":{"line_number":969,"utf16_col":0}}},{"name":"3.0.5","fully_qualified_name":"3.0.5","kind":"section_1","ident_start":98690,"ident_end":98695,"extent_start":98688,"extent_end":98972,"ident_utf16":{"start":{"line_number":969,"utf16_col":2},"end":{"line_number":969,"utf16_col":7}},"extent_utf16":{"start":{"line_number":969,"utf16_col":0},"end":{"line_number":977,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":98700,"ident_end":98705,"extent_start":98697,"extent_end":98972,"ident_utf16":{"start":{"line_number":971,"utf16_col":3},"end":{"line_number":971,"utf16_col":8}},"extent_utf16":{"start":{"line_number":971,"utf16_col":0},"end":{"line_number":977,"utf16_col":0}}},{"name":"3.0.4","fully_qualified_name":"3.0.4","kind":"section_1","ident_start":98974,"ident_end":98979,"extent_start":98972,"extent_end":99048,"ident_utf16":{"start":{"line_number":977,"utf16_col":2},"end":{"line_number":977,"utf16_col":7}},"extent_utf16":{"start":{"line_number":977,"utf16_col":0},"end":{"line_number":983,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":98984,"ident_end":98989,"extent_start":98981,"extent_end":99048,"ident_utf16":{"start":{"line_number":979,"utf16_col":3},"end":{"line_number":979,"utf16_col":8}},"extent_utf16":{"start":{"line_number":979,"utf16_col":0},"end":{"line_number":983,"utf16_col":0}}},{"name":"3.0.3","fully_qualified_name":"3.0.3","kind":"section_1","ident_start":99050,"ident_end":99055,"extent_start":99048,"extent_end":101118,"ident_utf16":{"start":{"line_number":983,"utf16_col":2},"end":{"line_number":983,"utf16_col":7}},"extent_utf16":{"start":{"line_number":983,"utf16_col":0},"end":{"line_number":1010,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":99060,"ident_end":99065,"extent_start":99057,"extent_end":101118,"ident_utf16":{"start":{"line_number":985,"utf16_col":3},"end":{"line_number":985,"utf16_col":8}},"extent_utf16":{"start":{"line_number":985,"utf16_col":0},"end":{"line_number":1010,"utf16_col":0}}},{"name":"3.0.2","fully_qualified_name":"3.0.2","kind":"section_1","ident_start":101120,"ident_end":101125,"extent_start":101118,"extent_end":101201,"ident_utf16":{"start":{"line_number":1010,"utf16_col":2},"end":{"line_number":1010,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1010,"utf16_col":0},"end":{"line_number":1016,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":101130,"ident_end":101135,"extent_start":101127,"extent_end":101201,"ident_utf16":{"start":{"line_number":1012,"utf16_col":3},"end":{"line_number":1012,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1012,"utf16_col":0},"end":{"line_number":1016,"utf16_col":0}}},{"name":"3.0.1","fully_qualified_name":"3.0.1","kind":"section_1","ident_start":101203,"ident_end":101208,"extent_start":101201,"extent_end":101326,"ident_utf16":{"start":{"line_number":1016,"utf16_col":2},"end":{"line_number":1016,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1016,"utf16_col":0},"end":{"line_number":1022,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":101213,"ident_end":101218,"extent_start":101210,"extent_end":101326,"ident_utf16":{"start":{"line_number":1018,"utf16_col":3},"end":{"line_number":1018,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1018,"utf16_col":0},"end":{"line_number":1022,"utf16_col":0}}},{"name":"3.0.0","fully_qualified_name":"3.0.0","kind":"section_1","ident_start":101328,"ident_end":101333,"extent_start":101326,"extent_end":104474,"ident_utf16":{"start":{"line_number":1022,"utf16_col":2},"end":{"line_number":1022,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1022,"utf16_col":0},"end":{"line_number":1078,"utf16_col":0}}},{"name":"Breaking changes","fully_qualified_name":"Breaking changes","kind":"section_2","ident_start":101338,"ident_end":101354,"extent_start":101335,"extent_end":102892,"ident_utf16":{"start":{"line_number":1024,"utf16_col":3},"end":{"line_number":1024,"utf16_col":19}},"extent_utf16":{"start":{"line_number":1024,"utf16_col":0},"end":{"line_number":1039,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":102895,"ident_end":102902,"extent_start":102892,"extent_end":104327,"ident_utf16":{"start":{"line_number":1039,"utf16_col":3},"end":{"line_number":1039,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1039,"utf16_col":0},"end":{"line_number":1073,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":104330,"ident_end":104335,"extent_start":104327,"extent_end":104474,"ident_utf16":{"start":{"line_number":1073,"utf16_col":3},"end":{"line_number":1073,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1073,"utf16_col":0},"end":{"line_number":1078,"utf16_col":0}}},{"name":"2.3.2","fully_qualified_name":"2.3.2","kind":"section_1","ident_start":104476,"ident_end":104481,"extent_start":104474,"extent_end":104615,"ident_utf16":{"start":{"line_number":1078,"utf16_col":2},"end":{"line_number":1078,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1078,"utf16_col":0},"end":{"line_number":1084,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":104486,"ident_end":104491,"extent_start":104483,"extent_end":104615,"ident_utf16":{"start":{"line_number":1080,"utf16_col":3},"end":{"line_number":1080,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1080,"utf16_col":0},"end":{"line_number":1084,"utf16_col":0}}},{"name":"2.3.1","fully_qualified_name":"2.3.1","kind":"section_1","ident_start":104617,"ident_end":104622,"extent_start":104615,"extent_end":104934,"ident_utf16":{"start":{"line_number":1084,"utf16_col":2},"end":{"line_number":1084,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1084,"utf16_col":0},"end":{"line_number":1092,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":104627,"ident_end":104632,"extent_start":104624,"extent_end":104934,"ident_utf16":{"start":{"line_number":1086,"utf16_col":3},"end":{"line_number":1086,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1086,"utf16_col":0},"end":{"line_number":1092,"utf16_col":0}}},{"name":"2.3.0","fully_qualified_name":"2.3.0","kind":"section_1","ident_start":104936,"ident_end":104941,"extent_start":104934,"extent_end":106216,"ident_utf16":{"start":{"line_number":1092,"utf16_col":2},"end":{"line_number":1092,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1092,"utf16_col":0},"end":{"line_number":1109,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":104946,"ident_end":104953,"extent_start":104943,"extent_end":105991,"ident_utf16":{"start":{"line_number":1094,"utf16_col":3},"end":{"line_number":1094,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1094,"utf16_col":0},"end":{"line_number":1104,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":105994,"ident_end":105999,"extent_start":105991,"extent_end":106216,"ident_utf16":{"start":{"line_number":1104,"utf16_col":3},"end":{"line_number":1104,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1104,"utf16_col":0},"end":{"line_number":1109,"utf16_col":0}}},{"name":"2.2.0","fully_qualified_name":"2.2.0","kind":"section_1","ident_start":106218,"ident_end":106223,"extent_start":106216,"extent_end":107063,"ident_utf16":{"start":{"line_number":1109,"utf16_col":2},"end":{"line_number":1109,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1109,"utf16_col":0},"end":{"line_number":1124,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":106228,"ident_end":106235,"extent_start":106225,"extent_end":106629,"ident_utf16":{"start":{"line_number":1111,"utf16_col":3},"end":{"line_number":1111,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1111,"utf16_col":0},"end":{"line_number":1116,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":106632,"ident_end":106637,"extent_start":106629,"extent_end":107063,"ident_utf16":{"start":{"line_number":1116,"utf16_col":3},"end":{"line_number":1116,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1116,"utf16_col":0},"end":{"line_number":1124,"utf16_col":0}}},{"name":"2.1.5","fully_qualified_name":"2.1.5","kind":"section_1","ident_start":107065,"ident_end":107070,"extent_start":107063,"extent_end":107132,"ident_utf16":{"start":{"line_number":1124,"utf16_col":2},"end":{"line_number":1124,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1124,"utf16_col":0},"end":{"line_number":1128,"utf16_col":0}}},{"name":"2.1.4","fully_qualified_name":"2.1.4","kind":"section_1","ident_start":107134,"ident_end":107139,"extent_start":107132,"extent_end":107364,"ident_utf16":{"start":{"line_number":1128,"utf16_col":2},"end":{"line_number":1128,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1128,"utf16_col":0},"end":{"line_number":1133,"utf16_col":0}}},{"name":"2.1.3","fully_qualified_name":"2.1.3","kind":"section_1","ident_start":107366,"ident_end":107371,"extent_start":107364,"extent_end":107909,"ident_utf16":{"start":{"line_number":1133,"utf16_col":2},"end":{"line_number":1133,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1133,"utf16_col":0},"end":{"line_number":1139,"utf16_col":0}}},{"name":"2.1.2","fully_qualified_name":"2.1.2","kind":"section_1","ident_start":107911,"ident_end":107916,"extent_start":107909,"extent_end":107991,"ident_utf16":{"start":{"line_number":1139,"utf16_col":2},"end":{"line_number":1139,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1139,"utf16_col":0},"end":{"line_number":1143,"utf16_col":0}}},{"name":"2.1.1","fully_qualified_name":"2.1.1","kind":"section_1","ident_start":107993,"ident_end":107998,"extent_start":107991,"extent_end":108067,"ident_utf16":{"start":{"line_number":1143,"utf16_col":2},"end":{"line_number":1143,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1143,"utf16_col":0},"end":{"line_number":1147,"utf16_col":0}}},{"name":"2.1.0","fully_qualified_name":"2.1.0","kind":"section_1","ident_start":108069,"ident_end":108074,"extent_start":108067,"extent_end":109013,"ident_utf16":{"start":{"line_number":1147,"utf16_col":2},"end":{"line_number":1147,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1147,"utf16_col":0},"end":{"line_number":1157,"utf16_col":0}}},{"name":"2.0.3","fully_qualified_name":"2.0.3","kind":"section_1","ident_start":109015,"ident_end":109020,"extent_start":109013,"extent_end":109130,"ident_utf16":{"start":{"line_number":1157,"utf16_col":2},"end":{"line_number":1157,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1157,"utf16_col":0},"end":{"line_number":1162,"utf16_col":0}}},{"name":"2.0.2","fully_qualified_name":"2.0.2","kind":"section_1","ident_start":109132,"ident_end":109137,"extent_start":109130,"extent_end":109265,"ident_utf16":{"start":{"line_number":1162,"utf16_col":2},"end":{"line_number":1162,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1162,"utf16_col":0},"end":{"line_number":1166,"utf16_col":0}}},{"name":"2.0.1","fully_qualified_name":"2.0.1","kind":"section_1","ident_start":109267,"ident_end":109272,"extent_start":109265,"extent_end":109487,"ident_utf16":{"start":{"line_number":1166,"utf16_col":2},"end":{"line_number":1166,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1166,"utf16_col":0},"end":{"line_number":1171,"utf16_col":0}}},{"name":"2.0.0","fully_qualified_name":"2.0.0","kind":"section_1","ident_start":109489,"ident_end":109494,"extent_start":109487,"extent_end":115489,"ident_utf16":{"start":{"line_number":1171,"utf16_col":2},"end":{"line_number":1171,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1171,"utf16_col":0},"end":{"line_number":1249,"utf16_col":0}}},{"name":"Breaking changes","fully_qualified_name":"Breaking changes","kind":"section_2","ident_start":109499,"ident_end":109515,"extent_start":109496,"extent_end":112828,"ident_utf16":{"start":{"line_number":1173,"utf16_col":3},"end":{"line_number":1173,"utf16_col":19}},"extent_utf16":{"start":{"line_number":1173,"utf16_col":0},"end":{"line_number":1220,"utf16_col":0}}},{"name":"Changes","fully_qualified_name":"Changes","kind":"section_2","ident_start":112831,"ident_end":112838,"extent_start":112828,"extent_end":114218,"ident_utf16":{"start":{"line_number":1220,"utf16_col":3},"end":{"line_number":1220,"utf16_col":10}},"extent_utf16":{"start":{"line_number":1220,"utf16_col":0},"end":{"line_number":1234,"utf16_col":0}}},{"name":"Fixes","fully_qualified_name":"Fixes","kind":"section_2","ident_start":114221,"ident_end":114226,"extent_start":114218,"extent_end":115489,"ident_utf16":{"start":{"line_number":1234,"utf16_col":3},"end":{"line_number":1234,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1234,"utf16_col":0},"end":{"line_number":1249,"utf16_col":0}}},{"name":"1.2.1","fully_qualified_name":"1.2.1","kind":"section_1","ident_start":115491,"ident_end":115496,"extent_start":115489,"extent_end":115555,"ident_utf16":{"start":{"line_number":1249,"utf16_col":2},"end":{"line_number":1249,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1249,"utf16_col":0},"end":{"line_number":1253,"utf16_col":0}}},{"name":"1.2.0","fully_qualified_name":"1.2.0","kind":"section_1","ident_start":115557,"ident_end":115562,"extent_start":115555,"extent_end":115693,"ident_utf16":{"start":{"line_number":1253,"utf16_col":2},"end":{"line_number":1253,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1253,"utf16_col":0},"end":{"line_number":1257,"utf16_col":0}}},{"name":"1.1.2","fully_qualified_name":"1.1.2","kind":"section_1","ident_start":115695,"ident_end":115700,"extent_start":115693,"extent_end":115794,"ident_utf16":{"start":{"line_number":1257,"utf16_col":2},"end":{"line_number":1257,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1257,"utf16_col":0},"end":{"line_number":1261,"utf16_col":0}}},{"name":"1.1.1","fully_qualified_name":"1.1.1","kind":"section_1","ident_start":115796,"ident_end":115801,"extent_start":115794,"extent_end":115874,"ident_utf16":{"start":{"line_number":1261,"utf16_col":2},"end":{"line_number":1261,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1261,"utf16_col":0},"end":{"line_number":1265,"utf16_col":0}}},{"name":"1.1.0","fully_qualified_name":"1.1.0","kind":"section_1","ident_start":115876,"ident_end":115881,"extent_start":115874,"extent_end":117638,"ident_utf16":{"start":{"line_number":1265,"utf16_col":2},"end":{"line_number":1265,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1265,"utf16_col":0},"end":{"line_number":1284,"utf16_col":0}}},{"name":"Obsolete - will be removed 2.x","fully_qualified_name":"Obsolete - will be removed 2.x","kind":"section_2","ident_start":117174,"ident_end":117204,"extent_start":117171,"extent_end":117638,"ident_utf16":{"start":{"line_number":1279,"utf16_col":3},"end":{"line_number":1279,"utf16_col":33}},"extent_utf16":{"start":{"line_number":1279,"utf16_col":0},"end":{"line_number":1284,"utf16_col":0}}},{"name":"1.0.3","fully_qualified_name":"1.0.3","kind":"section_1","ident_start":117640,"ident_end":117645,"extent_start":117638,"extent_end":117746,"ident_utf16":{"start":{"line_number":1284,"utf16_col":2},"end":{"line_number":1284,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1284,"utf16_col":0},"end":{"line_number":1288,"utf16_col":0}}},{"name":"1.0.2","fully_qualified_name":"1.0.2","kind":"section_1","ident_start":117748,"ident_end":117753,"extent_start":117746,"extent_end":117947,"ident_utf16":{"start":{"line_number":1288,"utf16_col":2},"end":{"line_number":1288,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1288,"utf16_col":0},"end":{"line_number":1293,"utf16_col":0}}},{"name":"1.0.1","fully_qualified_name":"1.0.1","kind":"section_1","ident_start":117949,"ident_end":117954,"extent_start":117947,"extent_end":118001,"ident_utf16":{"start":{"line_number":1293,"utf16_col":2},"end":{"line_number":1293,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1293,"utf16_col":0},"end":{"line_number":1297,"utf16_col":0}}},{"name":"1.0.0","fully_qualified_name":"1.0.0","kind":"section_1","ident_start":118003,"ident_end":118008,"extent_start":118001,"extent_end":118843,"ident_utf16":{"start":{"line_number":1297,"utf16_col":2},"end":{"line_number":1297,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1297,"utf16_col":0},"end":{"line_number":1316,"utf16_col":0}}},{"name":"0.70.0","fully_qualified_name":"0.70.0","kind":"section_1","ident_start":118845,"ident_end":118851,"extent_start":118843,"extent_end":120197,"ident_utf16":{"start":{"line_number":1316,"utf16_col":2},"end":{"line_number":1316,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1316,"utf16_col":0},"end":{"line_number":1333,"utf16_col":0}}},{"name":"0.69.0","fully_qualified_name":"0.69.0","kind":"section_1","ident_start":120199,"ident_end":120205,"extent_start":120197,"extent_end":121586,"ident_utf16":{"start":{"line_number":1333,"utf16_col":2},"end":{"line_number":1333,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1333,"utf16_col":0},"end":{"line_number":1368,"utf16_col":0}}},{"name":"0.68.1","fully_qualified_name":"0.68.1","kind":"section_1","ident_start":121588,"ident_end":121594,"extent_start":121586,"extent_end":121676,"ident_utf16":{"start":{"line_number":1368,"utf16_col":2},"end":{"line_number":1368,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1368,"utf16_col":0},"end":{"line_number":1372,"utf16_col":0}}},{"name":"0.68.0","fully_qualified_name":"0.68.0","kind":"section_1","ident_start":121678,"ident_end":121684,"extent_start":121676,"extent_end":121931,"ident_utf16":{"start":{"line_number":1372,"utf16_col":2},"end":{"line_number":1372,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1372,"utf16_col":0},"end":{"line_number":1378,"utf16_col":0}}},{"name":"0.67.0","fully_qualified_name":"0.67.0","kind":"section_1","ident_start":121933,"ident_end":121939,"extent_start":121931,"extent_end":122200,"ident_utf16":{"start":{"line_number":1378,"utf16_col":2},"end":{"line_number":1378,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1378,"utf16_col":0},"end":{"line_number":1386,"utf16_col":0}}},{"name":"0.66.1","fully_qualified_name":"0.66.1","kind":"section_1","ident_start":122202,"ident_end":122208,"extent_start":122200,"extent_end":122332,"ident_utf16":{"start":{"line_number":1386,"utf16_col":2},"end":{"line_number":1386,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1386,"utf16_col":0},"end":{"line_number":1390,"utf16_col":0}}},{"name":"0.66.0","fully_qualified_name":"0.66.0","kind":"section_1","ident_start":122334,"ident_end":122340,"extent_start":122332,"extent_end":125224,"ident_utf16":{"start":{"line_number":1390,"utf16_col":2},"end":{"line_number":1390,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1390,"utf16_col":0},"end":{"line_number":1482,"utf16_col":0}}},{"name":"Notes of services fix","fully_qualified_name":"Notes of services fix","kind":"section_2","ident_start":123583,"ident_end":123604,"extent_start":123580,"extent_end":125224,"ident_utf16":{"start":{"line_number":1403,"utf16_col":3},"end":{"line_number":1403,"utf16_col":24}},"extent_utf16":{"start":{"line_number":1403,"utf16_col":0},"end":{"line_number":1482,"utf16_col":0}}},{"name":"0.65.0","fully_qualified_name":"0.65.0","kind":"section_1","ident_start":125226,"ident_end":125232,"extent_start":125224,"extent_end":125795,"ident_utf16":{"start":{"line_number":1482,"utf16_col":2},"end":{"line_number":1482,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1482,"utf16_col":0},"end":{"line_number":1489,"utf16_col":0}}},{"name":"0.64.0","fully_qualified_name":"0.64.0","kind":"section_1","ident_start":125797,"ident_end":125803,"extent_start":125795,"extent_end":126026,"ident_utf16":{"start":{"line_number":1489,"utf16_col":2},"end":{"line_number":1489,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1489,"utf16_col":0},"end":{"line_number":1494,"utf16_col":0}}},{"name":"0.63.0","fully_qualified_name":"0.63.0","kind":"section_1","ident_start":126028,"ident_end":126034,"extent_start":126026,"extent_end":127739,"ident_utf16":{"start":{"line_number":1494,"utf16_col":2},"end":{"line_number":1494,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1494,"utf16_col":0},"end":{"line_number":1516,"utf16_col":0}}},{"name":"0.63.0-beta1 to 0.63.0-beta2","fully_qualified_name":"0.63.0-beta1 to 0.63.0-beta2","kind":"section_2","ident_start":127593,"ident_end":127621,"extent_start":127590,"extent_end":127739,"ident_utf16":{"start":{"line_number":1512,"utf16_col":3},"end":{"line_number":1512,"utf16_col":31}},"extent_utf16":{"start":{"line_number":1512,"utf16_col":0},"end":{"line_number":1516,"utf16_col":0}}},{"name":"0.62.0","fully_qualified_name":"0.62.0","kind":"section_1","ident_start":127741,"ident_end":127747,"extent_start":127739,"extent_end":127783,"ident_utf16":{"start":{"line_number":1516,"utf16_col":2},"end":{"line_number":1516,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1516,"utf16_col":0},"end":{"line_number":1520,"utf16_col":0}}},{"name":"0.61.0","fully_qualified_name":"0.61.0","kind":"section_1","ident_start":127785,"ident_end":127791,"extent_start":127783,"extent_end":127952,"ident_utf16":{"start":{"line_number":1520,"utf16_col":2},"end":{"line_number":1520,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1520,"utf16_col":0},"end":{"line_number":1525,"utf16_col":0}}},{"name":"0.60.0","fully_qualified_name":"0.60.0","kind":"section_1","ident_start":127954,"ident_end":127960,"extent_start":127952,"extent_end":128789,"ident_utf16":{"start":{"line_number":1525,"utf16_col":2},"end":{"line_number":1525,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1525,"utf16_col":0},"end":{"line_number":1535,"utf16_col":0}}},{"name":"0.50.1","fully_qualified_name":"0.50.1","kind":"section_1","ident_start":128791,"ident_end":128797,"extent_start":128789,"extent_end":128880,"ident_utf16":{"start":{"line_number":1535,"utf16_col":2},"end":{"line_number":1535,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1535,"utf16_col":0},"end":{"line_number":1539,"utf16_col":0}}},{"name":"0.50.0","fully_qualified_name":"0.50.0","kind":"section_1","ident_start":128882,"ident_end":128888,"extent_start":128880,"extent_end":129020,"ident_utf16":{"start":{"line_number":1539,"utf16_col":2},"end":{"line_number":1539,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1539,"utf16_col":0},"end":{"line_number":1544,"utf16_col":0}}},{"name":"0.50.0-beta1","fully_qualified_name":"0.50.0-beta1","kind":"section_1","ident_start":129022,"ident_end":129034,"extent_start":129020,"extent_end":129544,"ident_utf16":{"start":{"line_number":1544,"utf16_col":2},"end":{"line_number":1544,"utf16_col":14}},"extent_utf16":{"start":{"line_number":1544,"utf16_col":0},"end":{"line_number":1553,"utf16_col":0}}},{"name":"0.40.0","fully_qualified_name":"0.40.0","kind":"section_1","ident_start":129546,"ident_end":129552,"extent_start":129544,"extent_end":130634,"ident_utf16":{"start":{"line_number":1553,"utf16_col":2},"end":{"line_number":1553,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1553,"utf16_col":0},"end":{"line_number":1564,"utf16_col":0}}},{"name":"0.32.1","fully_qualified_name":"0.32.1","kind":"section_1","ident_start":130636,"ident_end":130642,"extent_start":130634,"extent_end":130713,"ident_utf16":{"start":{"line_number":1564,"utf16_col":2},"end":{"line_number":1564,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1564,"utf16_col":0},"end":{"line_number":1568,"utf16_col":0}}},{"name":"0.32.0","fully_qualified_name":"0.32.0","kind":"section_1","ident_start":130715,"ident_end":130721,"extent_start":130713,"extent_end":130911,"ident_utf16":{"start":{"line_number":1568,"utf16_col":2},"end":{"line_number":1568,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1568,"utf16_col":0},"end":{"line_number":1572,"utf16_col":0}}},{"name":"0.31.0","fully_qualified_name":"0.31.0","kind":"section_1","ident_start":130913,"ident_end":130919,"extent_start":130911,"extent_end":131454,"ident_utf16":{"start":{"line_number":1572,"utf16_col":2},"end":{"line_number":1572,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1572,"utf16_col":0},"end":{"line_number":1581,"utf16_col":0}}},{"name":"0.30.0","fully_qualified_name":"0.30.0","kind":"section_1","ident_start":131456,"ident_end":131462,"extent_start":131454,"extent_end":131570,"ident_utf16":{"start":{"line_number":1581,"utf16_col":2},"end":{"line_number":1581,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1581,"utf16_col":0},"end":{"line_number":1585,"utf16_col":0}}},{"name":"0.29.0","fully_qualified_name":"0.29.0","kind":"section_1","ident_start":131572,"ident_end":131578,"extent_start":131570,"extent_end":131645,"ident_utf16":{"start":{"line_number":1585,"utf16_col":2},"end":{"line_number":1585,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1585,"utf16_col":0},"end":{"line_number":1589,"utf16_col":0}}},{"name":"0.28.2","fully_qualified_name":"0.28.2","kind":"section_1","ident_start":131647,"ident_end":131653,"extent_start":131645,"extent_end":131762,"ident_utf16":{"start":{"line_number":1589,"utf16_col":2},"end":{"line_number":1589,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1589,"utf16_col":0},"end":{"line_number":1593,"utf16_col":0}}},{"name":"0.28.1","fully_qualified_name":"0.28.1","kind":"section_1","ident_start":131764,"ident_end":131770,"extent_start":131762,"extent_end":131842,"ident_utf16":{"start":{"line_number":1593,"utf16_col":2},"end":{"line_number":1593,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1593,"utf16_col":0},"end":{"line_number":1597,"utf16_col":0}}},{"name":"0.28.0","fully_qualified_name":"0.28.0","kind":"section_1","ident_start":131844,"ident_end":131850,"extent_start":131842,"extent_end":131936,"ident_utf16":{"start":{"line_number":1597,"utf16_col":2},"end":{"line_number":1597,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1597,"utf16_col":0},"end":{"line_number":1601,"utf16_col":0}}},{"name":"0.27.2","fully_qualified_name":"0.27.2","kind":"section_1","ident_start":131938,"ident_end":131944,"extent_start":131936,"extent_end":132040,"ident_utf16":{"start":{"line_number":1601,"utf16_col":2},"end":{"line_number":1601,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1601,"utf16_col":0},"end":{"line_number":1605,"utf16_col":0}}},{"name":"0.27.1","fully_qualified_name":"0.27.1","kind":"section_1","ident_start":132042,"ident_end":132048,"extent_start":132040,"extent_end":132112,"ident_utf16":{"start":{"line_number":1605,"utf16_col":2},"end":{"line_number":1605,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1605,"utf16_col":0},"end":{"line_number":1609,"utf16_col":0}}},{"name":"0.27.0","fully_qualified_name":"0.27.0","kind":"section_1","ident_start":132114,"ident_end":132120,"extent_start":132112,"extent_end":132368,"ident_utf16":{"start":{"line_number":1609,"utf16_col":2},"end":{"line_number":1609,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1609,"utf16_col":0},"end":{"line_number":1615,"utf16_col":0}}},{"name":"0.26.0","fully_qualified_name":"0.26.0","kind":"section_1","ident_start":132370,"ident_end":132376,"extent_start":132368,"extent_end":132859,"ident_utf16":{"start":{"line_number":1615,"utf16_col":2},"end":{"line_number":1615,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1615,"utf16_col":0},"end":{"line_number":1622,"utf16_col":0}}},{"name":"0.25.0","fully_qualified_name":"0.25.0","kind":"section_1","ident_start":132861,"ident_end":132867,"extent_start":132859,"extent_end":133136,"ident_utf16":{"start":{"line_number":1622,"utf16_col":2},"end":{"line_number":1622,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1622,"utf16_col":0},"end":{"line_number":1628,"utf16_col":0}}},{"name":"0.24.0","fully_qualified_name":"0.24.0","kind":"section_1","ident_start":133138,"ident_end":133144,"extent_start":133136,"extent_end":133547,"ident_utf16":{"start":{"line_number":1628,"utf16_col":2},"end":{"line_number":1628,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1628,"utf16_col":0},"end":{"line_number":1635,"utf16_col":0}}},{"name":"0.23.3","fully_qualified_name":"0.23.3","kind":"section_1","ident_start":133549,"ident_end":133555,"extent_start":133547,"extent_end":133721,"ident_utf16":{"start":{"line_number":1635,"utf16_col":2},"end":{"line_number":1635,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1635,"utf16_col":0},"end":{"line_number":1639,"utf16_col":0}}},{"name":"0.23.2","fully_qualified_name":"0.23.2","kind":"section_1","ident_start":133723,"ident_end":133729,"extent_start":133721,"extent_end":133788,"ident_utf16":{"start":{"line_number":1639,"utf16_col":2},"end":{"line_number":1639,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1639,"utf16_col":0},"end":{"line_number":1643,"utf16_col":0}}},{"name":"0.23.1","fully_qualified_name":"0.23.1","kind":"section_1","ident_start":133790,"ident_end":133796,"extent_start":133788,"extent_end":133841,"ident_utf16":{"start":{"line_number":1643,"utf16_col":2},"end":{"line_number":1643,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1643,"utf16_col":0},"end":{"line_number":1647,"utf16_col":0}}},{"name":"0.23.0","fully_qualified_name":"0.23.0","kind":"section_1","ident_start":133843,"ident_end":133849,"extent_start":133841,"extent_end":133900,"ident_utf16":{"start":{"line_number":1647,"utf16_col":2},"end":{"line_number":1647,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1647,"utf16_col":0},"end":{"line_number":1651,"utf16_col":0}}},{"name":"0.22.0","fully_qualified_name":"0.22.0","kind":"section_1","ident_start":133902,"ident_end":133908,"extent_start":133900,"extent_end":134226,"ident_utf16":{"start":{"line_number":1651,"utf16_col":2},"end":{"line_number":1651,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1651,"utf16_col":0},"end":{"line_number":1658,"utf16_col":0}}},{"name":"0.21.0","fully_qualified_name":"0.21.0","kind":"section_1","ident_start":134228,"ident_end":134234,"extent_start":134226,"extent_end":134608,"ident_utf16":{"start":{"line_number":1658,"utf16_col":2},"end":{"line_number":1658,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1658,"utf16_col":0},"end":{"line_number":1666,"utf16_col":0}}},{"name":"0.20.0","fully_qualified_name":"0.20.0","kind":"section_1","ident_start":134610,"ident_end":134616,"extent_start":134608,"extent_end":134781,"ident_utf16":{"start":{"line_number":1666,"utf16_col":2},"end":{"line_number":1666,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1666,"utf16_col":0},"end":{"line_number":1671,"utf16_col":0}}},{"name":"0.19.1","fully_qualified_name":"0.19.1","kind":"section_1","ident_start":134783,"ident_end":134789,"extent_start":134781,"extent_end":134949,"ident_utf16":{"start":{"line_number":1671,"utf16_col":2},"end":{"line_number":1671,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1671,"utf16_col":0},"end":{"line_number":1675,"utf16_col":0}}},{"name":"0.19.0","fully_qualified_name":"0.19.0","kind":"section_1","ident_start":134951,"ident_end":134957,"extent_start":134949,"extent_end":135469,"ident_utf16":{"start":{"line_number":1675,"utf16_col":2},"end":{"line_number":1675,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1675,"utf16_col":0},"end":{"line_number":1680,"utf16_col":0}}},{"name":"0.18.4","fully_qualified_name":"0.18.4","kind":"section_1","ident_start":135471,"ident_end":135477,"extent_start":135469,"extent_end":135784,"ident_utf16":{"start":{"line_number":1680,"utf16_col":2},"end":{"line_number":1680,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1680,"utf16_col":0},"end":{"line_number":1685,"utf16_col":0}}},{"name":"0.18.3","fully_qualified_name":"0.18.3","kind":"section_1","ident_start":135786,"ident_end":135792,"extent_start":135784,"extent_end":135923,"ident_utf16":{"start":{"line_number":1685,"utf16_col":2},"end":{"line_number":1685,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1685,"utf16_col":0},"end":{"line_number":1690,"utf16_col":0}}},{"name":"0.18.2","fully_qualified_name":"0.18.2","kind":"section_1","ident_start":135925,"ident_end":135931,"extent_start":135923,"extent_end":135993,"ident_utf16":{"start":{"line_number":1690,"utf16_col":2},"end":{"line_number":1690,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1690,"utf16_col":0},"end":{"line_number":1694,"utf16_col":0}}},{"name":"0.18.1","fully_qualified_name":"0.18.1","kind":"section_1","ident_start":135995,"ident_end":136001,"extent_start":135993,"extent_end":136068,"ident_utf16":{"start":{"line_number":1694,"utf16_col":2},"end":{"line_number":1694,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1694,"utf16_col":0},"end":{"line_number":1699,"utf16_col":0}}},{"name":"0.18.0","fully_qualified_name":"0.18.0","kind":"section_1","ident_start":136070,"ident_end":136076,"extent_start":136068,"extent_end":136803,"ident_utf16":{"start":{"line_number":1699,"utf16_col":2},"end":{"line_number":1699,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1699,"utf16_col":0},"end":{"line_number":1705,"utf16_col":0}}},{"name":"0.17.0","fully_qualified_name":"0.17.0","kind":"section_1","ident_start":136805,"ident_end":136811,"extent_start":136803,"extent_end":136961,"ident_utf16":{"start":{"line_number":1705,"utf16_col":2},"end":{"line_number":1705,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1705,"utf16_col":0},"end":{"line_number":1709,"utf16_col":0}}},{"name":"0.16.2","fully_qualified_name":"0.16.2","kind":"section_1","ident_start":136963,"ident_end":136969,"extent_start":136961,"extent_end":137062,"ident_utf16":{"start":{"line_number":1709,"utf16_col":2},"end":{"line_number":1709,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1709,"utf16_col":0},"end":{"line_number":1713,"utf16_col":0}}},{"name":"0.16.1","fully_qualified_name":"0.16.1","kind":"section_1","ident_start":137064,"ident_end":137070,"extent_start":137062,"extent_end":137190,"ident_utf16":{"start":{"line_number":1713,"utf16_col":2},"end":{"line_number":1713,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1713,"utf16_col":0},"end":{"line_number":1718,"utf16_col":0}}},{"name":"0.16.0","fully_qualified_name":"0.16.0","kind":"section_1","ident_start":137192,"ident_end":137198,"extent_start":137190,"extent_end":137863,"ident_utf16":{"start":{"line_number":1718,"utf16_col":2},"end":{"line_number":1718,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1718,"utf16_col":0},"end":{"line_number":1730,"utf16_col":0}}},{"name":"0.15.8","fully_qualified_name":"0.15.8","kind":"section_1","ident_start":137865,"ident_end":137871,"extent_start":137863,"extent_end":137919,"ident_utf16":{"start":{"line_number":1730,"utf16_col":2},"end":{"line_number":1730,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1730,"utf16_col":0},"end":{"line_number":1734,"utf16_col":0}}},{"name":"0.15.7","fully_qualified_name":"0.15.7","kind":"section_1","ident_start":137921,"ident_end":137927,"extent_start":137919,"extent_end":138059,"ident_utf16":{"start":{"line_number":1734,"utf16_col":2},"end":{"line_number":1734,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1734,"utf16_col":0},"end":{"line_number":1739,"utf16_col":0}}},{"name":"0.15.6","fully_qualified_name":"0.15.6","kind":"section_1","ident_start":138061,"ident_end":138067,"extent_start":138059,"extent_end":138126,"ident_utf16":{"start":{"line_number":1739,"utf16_col":2},"end":{"line_number":1739,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1739,"utf16_col":0},"end":{"line_number":1743,"utf16_col":0}}},{"name":"0.15.5","fully_qualified_name":"0.15.5","kind":"section_1","ident_start":138128,"ident_end":138134,"extent_start":138126,"extent_end":138212,"ident_utf16":{"start":{"line_number":1743,"utf16_col":2},"end":{"line_number":1743,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1743,"utf16_col":0},"end":{"line_number":1747,"utf16_col":0}}},{"name":"0.15.4","fully_qualified_name":"0.15.4","kind":"section_1","ident_start":138214,"ident_end":138220,"extent_start":138212,"extent_end":138400,"ident_utf16":{"start":{"line_number":1747,"utf16_col":2},"end":{"line_number":1747,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1747,"utf16_col":0},"end":{"line_number":1752,"utf16_col":0}}},{"name":"0.15.3","fully_qualified_name":"0.15.3","kind":"section_1","ident_start":138402,"ident_end":138408,"extent_start":138400,"extent_end":138508,"ident_utf16":{"start":{"line_number":1752,"utf16_col":2},"end":{"line_number":1752,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1752,"utf16_col":0},"end":{"line_number":1756,"utf16_col":0}}},{"name":"0.15.2","fully_qualified_name":"0.15.2","kind":"section_1","ident_start":138510,"ident_end":138516,"extent_start":138508,"extent_end":138600,"ident_utf16":{"start":{"line_number":1756,"utf16_col":2},"end":{"line_number":1756,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1756,"utf16_col":0},"end":{"line_number":1760,"utf16_col":0}}},{"name":"0.15.1","fully_qualified_name":"0.15.1","kind":"section_1","ident_start":138602,"ident_end":138608,"extent_start":138600,"extent_end":138723,"ident_utf16":{"start":{"line_number":1760,"utf16_col":2},"end":{"line_number":1760,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1760,"utf16_col":0},"end":{"line_number":1764,"utf16_col":0}}},{"name":"0.15","fully_qualified_name":"0.15","kind":"section_1","ident_start":138725,"ident_end":138729,"extent_start":138723,"extent_end":139307,"ident_utf16":{"start":{"line_number":1764,"utf16_col":2},"end":{"line_number":1764,"utf16_col":6}},"extent_utf16":{"start":{"line_number":1764,"utf16_col":0},"end":{"line_number":1768,"utf16_col":0}}},{"name":"0.14.4","fully_qualified_name":"0.14.4","kind":"section_1","ident_start":139309,"ident_end":139315,"extent_start":139307,"extent_end":139389,"ident_utf16":{"start":{"line_number":1768,"utf16_col":2},"end":{"line_number":1768,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1768,"utf16_col":0},"end":{"line_number":1772,"utf16_col":0}}},{"name":"0.14.3","fully_qualified_name":"0.14.3","kind":"section_1","ident_start":139391,"ident_end":139397,"extent_start":139389,"extent_end":139536,"ident_utf16":{"start":{"line_number":1772,"utf16_col":2},"end":{"line_number":1772,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1772,"utf16_col":0},"end":{"line_number":1777,"utf16_col":0}}},{"name":"0.14.2","fully_qualified_name":"0.14.2","kind":"section_1","ident_start":139538,"ident_end":139544,"extent_start":139536,"extent_end":139573,"ident_utf16":{"start":{"line_number":1777,"utf16_col":2},"end":{"line_number":1777,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1777,"utf16_col":0},"end":{"line_number":1781,"utf16_col":0}}},{"name":"0.14.1","fully_qualified_name":"0.14.1","kind":"section_1","ident_start":139575,"ident_end":139581,"extent_start":139573,"extent_end":139720,"ident_utf16":{"start":{"line_number":1781,"utf16_col":2},"end":{"line_number":1781,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1781,"utf16_col":0},"end":{"line_number":1786,"utf16_col":0}}},{"name":"0.14.0","fully_qualified_name":"0.14.0","kind":"section_1","ident_start":139722,"ident_end":139728,"extent_start":139720,"extent_end":140072,"ident_utf16":{"start":{"line_number":1786,"utf16_col":2},"end":{"line_number":1786,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1786,"utf16_col":0},"end":{"line_number":1792,"utf16_col":0}}},{"name":"0.13.1","fully_qualified_name":"0.13.1","kind":"section_1","ident_start":140074,"ident_end":140080,"extent_start":140072,"extent_end":140141,"ident_utf16":{"start":{"line_number":1792,"utf16_col":2},"end":{"line_number":1792,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1792,"utf16_col":0},"end":{"line_number":1796,"utf16_col":0}}},{"name":"0.13.0","fully_qualified_name":"0.13.0","kind":"section_1","ident_start":140143,"ident_end":140149,"extent_start":140141,"extent_end":140691,"ident_utf16":{"start":{"line_number":1796,"utf16_col":2},"end":{"line_number":1796,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1796,"utf16_col":0},"end":{"line_number":1802,"utf16_col":0}}},{"name":"0.12.1","fully_qualified_name":"0.12.1","kind":"section_1","ident_start":140693,"ident_end":140699,"extent_start":140691,"extent_end":140752,"ident_utf16":{"start":{"line_number":1802,"utf16_col":2},"end":{"line_number":1802,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1802,"utf16_col":0},"end":{"line_number":1806,"utf16_col":0}}},{"name":"0.12.0","fully_qualified_name":"0.12.0","kind":"section_1","ident_start":140754,"ident_end":140760,"extent_start":140752,"extent_end":140840,"ident_utf16":{"start":{"line_number":1806,"utf16_col":2},"end":{"line_number":1806,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1806,"utf16_col":0},"end":{"line_number":1810,"utf16_col":0}}},{"name":"0.11.0","fully_qualified_name":"0.11.0","kind":"section_1","ident_start":140842,"ident_end":140848,"extent_start":140840,"extent_end":140924,"ident_utf16":{"start":{"line_number":1810,"utf16_col":2},"end":{"line_number":1810,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1810,"utf16_col":0},"end":{"line_number":1814,"utf16_col":0}}},{"name":"0.10.1","fully_qualified_name":"0.10.1","kind":"section_1","ident_start":140926,"ident_end":140932,"extent_start":140924,"extent_end":141225,"ident_utf16":{"start":{"line_number":1814,"utf16_col":2},"end":{"line_number":1814,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1814,"utf16_col":0},"end":{"line_number":1821,"utf16_col":0}}},{"name":"0.10.0","fully_qualified_name":"0.10.0","kind":"section_1","ident_start":141227,"ident_end":141233,"extent_start":141225,"extent_end":141379,"ident_utf16":{"start":{"line_number":1821,"utf16_col":2},"end":{"line_number":1821,"utf16_col":8}},"extent_utf16":{"start":{"line_number":1821,"utf16_col":0},"end":{"line_number":1826,"utf16_col":0}}},{"name":"0.9.4","fully_qualified_name":"0.9.4","kind":"section_1","ident_start":141381,"ident_end":141386,"extent_start":141379,"extent_end":141499,"ident_utf16":{"start":{"line_number":1826,"utf16_col":2},"end":{"line_number":1826,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1826,"utf16_col":0},"end":{"line_number":1830,"utf16_col":0}}},{"name":"0.9.3","fully_qualified_name":"0.9.3","kind":"section_1","ident_start":141501,"ident_end":141506,"extent_start":141499,"extent_end":141552,"ident_utf16":{"start":{"line_number":1830,"utf16_col":2},"end":{"line_number":1830,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1830,"utf16_col":0},"end":{"line_number":1834,"utf16_col":0}}},{"name":"0.9.2","fully_qualified_name":"0.9.2","kind":"section_1","ident_start":141554,"ident_end":141559,"extent_start":141552,"extent_end":141757,"ident_utf16":{"start":{"line_number":1834,"utf16_col":2},"end":{"line_number":1834,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1834,"utf16_col":0},"end":{"line_number":1840,"utf16_col":0}}},{"name":"0.9.1","fully_qualified_name":"0.9.1","kind":"section_1","ident_start":141759,"ident_end":141764,"extent_start":141757,"extent_end":141858,"ident_utf16":{"start":{"line_number":1840,"utf16_col":2},"end":{"line_number":1840,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1840,"utf16_col":0},"end":{"line_number":1844,"utf16_col":0}}},{"name":"0.9.0","fully_qualified_name":"0.9.0","kind":"section_1","ident_start":141860,"ident_end":141865,"extent_start":141858,"extent_end":141985,"ident_utf16":{"start":{"line_number":1844,"utf16_col":2},"end":{"line_number":1844,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1844,"utf16_col":0},"end":{"line_number":1850,"utf16_col":0}}},{"name":"0.8.0","fully_qualified_name":"0.8.0","kind":"section_1","ident_start":141987,"ident_end":141992,"extent_start":141985,"extent_end":142551,"ident_utf16":{"start":{"line_number":1850,"utf16_col":2},"end":{"line_number":1850,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1850,"utf16_col":0},"end":{"line_number":1858,"utf16_col":0}}},{"name":"0.7.0","fully_qualified_name":"0.7.0","kind":"section_1","ident_start":142553,"ident_end":142558,"extent_start":142551,"extent_end":142709,"ident_utf16":{"start":{"line_number":1858,"utf16_col":2},"end":{"line_number":1858,"utf16_col":7}},"extent_utf16":{"start":{"line_number":1858,"utf16_col":0},"end":{"line_number":1862,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":38514759,"defaultBranch":"main","name":"EntityGraphQL","ownerLogin":"EntityGraphQL","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2015-07-03T23:49:45.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/87887288?v=4","public":true,"private":false,"isOrgOwned":true,"isArchived":false},"currentUser":null,"uploadToken":"wzFnoH6_L-DxxTn1CTcUai3ufGf576-riwOfFxdWHVJr0ToL3y7clUSHwpZzKCg8EbCDFGNk7Kqy-g5GmiSlFw","allShortcutsEnabled":false,"treeExpanded":true,"path":"CHANGELOG.md","symbolsExpanded":false,"refInfo":{"name":"main","listCacheKey":"v0:1791301048.0","canEdit":false,"currentOid":"dd0d51069a8ce2ebb99d339a878316eb3ef2bc15"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"":{"items":[{"name":".config","path":".config","contentType":"directory"},{"name":".github","path":".github","contentType":"directory"},{"name":".vscode","path":".vscode","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"src","path":"src","contentType":"directory"},{"name":".csharpierrc","path":".csharpierrc","contentType":"file"},{"name":".editorconfig","path":".editorconfig","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"CHANGELOG.md","path":"CHANGELOG.md","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"EntityGraphQL.sln","path":"EntityGraphQL.sln","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"benchmark.sh","path":"benchmark.sh","contentType":"file"},{"name":"coverage.runsettings","path":"coverage.runsettings","contentType":"file"},{"name":"coverage.sh","path":"coverage.sh","contentType":"file"},{"name":"omnisharp.json","path":"omnisharp.json","contentType":"file"}],"totalCount":17}},"fileTreeProcessingTime":25.495168,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"main","listCacheKey":"v0:1791301048.0","canEdit":false,"refType":"branch","currentOid":"dd0d51069a8ce2ebb99d339a878316eb3ef2bc15","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"CHANGELOG.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/EntityGraphQL/EntityGraphQL/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"CHANGELOG.md","displayUrl":"https://github.com/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md?raw=true","headerInfo":{"blobSize":"139 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"a2b2d11","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FEntityGraphQL%2FEntityGraphQL%2Fblob%2Fmain%2FCHANGELOG.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"1862","truncatedSloc":"1276"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/EntityGraphQL/EntityGraphQL/blob/main/CHANGELOG.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/EntityGraphQL/EntityGraphQL/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/EntityGraphQL/EntityGraphQL/raw/refs/heads/main/CHANGELOG.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# 6.2.4","","## Fixes","","- Fixed `No generic method 'SelectWithNullCheck'` for a sub-selection on a field returning `IAsyncEnumerable\u003cT\u003e` or `ValueTask\u003cTCollection\u003e` - `{ people { tags { name } } }` where `tags` has a `ResolveAsync` returning either. `MakeSelectWithDynamicType` emits a `SelectWithNullCheck` whose overload is resolved by the exact type of the expression it projects, and only `IEnumerable\u003cT\u003e` and `Task\u003cIEnumerable\u003cT\u003e\u003e` had one. `IAsyncEnumerable\u003cT\u003e` now has an overload of its own that projects lazily, so the stream is still buffered by the engine with the request's `CancellationToken` rather than being enumerated during compilation, and `ValueTask\u003cT\u003e` is handed on as the `Task\u003cT\u003e` the rest of the pipeline already handles, next to the existing `Task\u003cTCollection\u003e` normalization.","- Fixed `Object of type 'Dynamic_...' cannot be converted to type 'Dynamic_...'` when buffering an `IAsyncEnumerable\u003cT\u003e` whose items are rebuilt - the list rebuild mismatch below, one layer down. `BufferAsyncEnumerable` created a `List\u003cT\u003e` from the declared element type before resolving anything and added each resolved item to it, so an item rebuilt to carry an awaited member no longer fit. Items are now resolved first and the list type chosen from them, which is what the `IEnumerable` path already did - both paths now share that step. The same guard added above for `Task\u003cT\u003e` and `ValueTask\u003cT\u003e` in `GetResolvedFieldType` applies to `IAsyncEnumerable\u003cT\u003e`, which is reachable now that these shapes compile.","- Fixed `Object of type 'System.Collections.Generic.List`1[System.Object]' cannot be converted to type 'System.Collections.Generic.IEnumerable`1[Dynamic_...]'` for a query selecting an async service field below an async service *list* field - `{ people { tags { name label } } }` where `tags` has a `ResolveAsync` returning a list and `label` on the item type has one of its own. Resolving an item of the outer list rebuilds it, because the item projection holds an async member, so the finished list no longer holds the item type the outer field was declared with and correctly falls back to `List\u003cobject\u003e`. `GetResolvedFieldType` unwrapped `Task\u003cT\u003e` to `T` unconditionally, so the rebuilt parent still declared the member `IEnumerable\u003cT\u003e` and setting the resolved list on it threw. `T` is now only kept when the resolved value still is one, otherwise the resolved value's own type is used - which is what the non-async path in the same method already did. `ValueTask\u003cT\u003e` had the same hole and takes the same guard.","","# 6.2.3","","## Fixes","","- Fixed `An item with the same key has already been added` when a service field's resolver builds an object from more than one context member as an argument to the service call - `(ctx, srv) =\u003e srv.Get(new Key(ctx.A, ctx.B))`. `ExpressionExtractor` credited both member reads to the enclosing construction rather than to themselves, so it emitted the same `Expression` instance twice under the one name and `ExpressionReplacer` added each of them to a dictionary keyed by node identity. A construction is now walked through rather than treated as a leaf, so each read is extracted on its own. `ExpressionReplacer` also tolerates a repeated expression, which the extractor still emits for other shapes (a conditional argument, where the branch reads are both credited to the conditional).","","# 6.2.2","","## Fixes","","- Fixed a field whose dotnet type is a nullable value type (`Instant?`, `DateTime?`, `int?`) resolving to `default(T)` instead of `null`, for a query that also selects an async field. Results are rebuilt after any async field is awaited, and each member's new type was taken from the resolved value's runtime type.","","# 6.2.1","","## Fixes","","- Fixed `IsNullable()` (and any other change to a field's return type) on a field whose dotnet type has an `AddTypeMapping` leaking to every other field of that type. The mapping's `GqlTypeInfo` was handed out as the field's own `ReturnType`, and that object is mutable - `IsNullable()` writes to it - so one `AddField(...).IsNullable(true)` rewrote the registered mapping itself, changing every field already using it and every field added afterwards. Fields now get a copy, so an explicit `IsNullable()` after `AddField()` applies to that field only and the mapping stays the default it describes.","","# 6.2.0","","## Changes","","- A resolver can now be told what the engine will read off the objects it returns, so it can fetch only that instead of everything - the point of batching with `ResolveBulk` when the data comes from another database or service. Take an `IFieldSelection` parameter and the engine supplies it, the way it supplies `CancellationToken` and `QueryRequestContext`; new two-service `ResolveBulk`/`ResolveBulkAsync` overloads let a loader take it alongside its own service. It is not the caller's selection set: a selected field that is itself resolved from a service is replaced by the member its resolver reads, nested objects come through as paths (`Address.City`), `@skip`/`@include` are applied, fragments are expanded, aliases collapse, `__typename` is excluded, and one load is told the union of every place the field is selected. See [Fetching only the fields that will be used](https://entitygraphql.github.io/schema-creation/other-data-sources#fetching-only-the-fields-that-will-be-used).","- New `[GraphQLFromContext]` on a `[GraphQLField]` method parameter binds it to a member of the field's context instead of exposing it as a GraphQL argument. This lets a `static` method with a body - one that loops, branches or `await`s, where an `Expression\u003cFunc\u003c\u003e\u003e` cannot be used - be a service field on a type other than the root query type: the declared members (navigation properties included) are selected in the database-bound pass and the call is rewritten against that result, the same as `.Resolve()` dependency extraction, so nothing else on the entity is selected. Every dependency must be declared: a parameter taking the whole entity is rejected at schema build, as it would select the entity itself and a body reading a navigation property would silently see an empty collection. Instance methods on the entity remain unsupported - the entity is the call target and does not survive that pass - and now fail with a message naming the alternatives instead of an `ArgumentException` about a `Dynamic_` type. See [Declaring what a method reads from the context](https://entitygraphql.github.io/schema-creation/other-data-sources#declaring-what-a-method-reads-from-the-context).","- A field with a `ResolveBulk`/`ResolveBulkAsync` resolver that has to resolve per item instead of bulk loading now logs a warning to the `ILogger` the schema was built with, naming the field and why the bulk load could not run - the query shape usually controls it, so it is something a caller can act on. Turn it off with `ExecutionOptions.WarnOnBulkResolverFallback = false`. `ISchemaProvider.Logger` is new (exceptions keep going through `LogException`); it returns null by default so existing implementations are unaffected.","- New `field.SetMaxAliases(n)` caps how many times a single field may be aliased in one operation, alongside the document-wide `ExecutionOptions.MaxFieldAliases`. Useful for the few fields a batched-alias attack would target (a login mutation, an expensive report) without tightening the limit for everything. Counts aliased selections of that field, fragment contents included. `QueryLimitExceededContext.FieldName` names the field for report-only mode. See [Query limits](https://entitygraphql.github.io/schema-creation/query-limits#per-field-alias-limits).","- `ToGraphQLSchemaString()` takes an optional `includeDescriptions` argument. Pass `false` to leave the `\"\"\"...\"\"\"` descriptions out of the generated SDL.","","## Fixes","","- Fixed an `IArgumentsTracker` parameter on a mutation or subscription method failing with `Service IArgumentsTracker not found for dependency injection` whenever a service provider is passed to `ExecuteRequest` - i.e. in any real app. The engine builds and populates the tracker per call, but the branch binding it to the parameter sat below the dependency-injection catch-all, so it was only reachable with a null service provider (which is how the existing tests exercised it). Registering `IArgumentsTracker` in DI was not a workaround: it bound a different, empty tracker, so `IsSet` returned false for every argument and the mutation silently took the \"nothing was supplied\" path. It is now bound before the DI branch, the same as `CancellationToken`.","- An `IArgumentsTracker` parameter now works on query fields built from methods (`[GraphQLField]` methods, `AddFieldsFrom`), not just mutations - it previously fell through to the service provider and failed with `Service IArgumentsTracker not found in service provider`. The field's arguments object is built deriving from `ArgumentsTracker` when a parameter asks for one, and the parameter binds to that object, so the tracker is not a service and a field that has no other services stays on the database-bound pass.","- An argument explicitly supplied as `null` on a query field is now reported as set by `IArgumentsTracker` - previously only a non-null value or a schema default counted, so `IsSet` could not tell an explicit null from an omitted argument, which is the distinction it exists to make. This also applies to `[GraphQLArguments]` / input types deriving from `ArgumentsTracker`. Mutation arguments already behaved this way.","- `AddTypeMapping` now applies to every field returning the mapped dotnet type, not only the ones auto-created from the context. A mapping like `AddTypeMapping\u003cNpgsqlPolygon\u003e(\"[Point!]!\")` describes the whole GraphQL type - list-ness and nullability come from the mapping string, not from the dotnet type - but only the auto-populated path returned the mapping's `GqlTypeInfo`. Everything else went through `SchemaBuilder.MakeGraphQlType`, which resolved the type *name* (`Point`) and then recomputed `IsList`/`TypeNotNullable` from the dotnet type, so `AddField()`, `AddField().Resolve()`, root fields on `Query()`, `[GraphQLField]` methods and expression fields all described the field as `Point` instead of `[Point!]!`. Introspection, the SDL and any client generated from them were wrong; execution is unchanged. Two notes: the `[GraphQLField]` method case is a regression in 6.0 (the other paths never honoured the mapping), and an `async` `[GraphQLField]` method now matches the mapping too - the lookup used to be made with the declared `Task\u003cT\u003e` return type. Type mappings still need to be registered in `SchemaBuilderOptions.PreBuildSchemaFromContext` so they exist before the context is reflected.","","# 6.1.7","","## Fixes","","- Fixed a single-object field with a `ResolveBulk` resolver whose per-item resolver queries the schema context - e.g. `.Resolve\u003cMyContext\u003e((p, ctx) =\u003e ctx.Site.Movies.FirstOrDefault(m =\u003e m.DirectorId == p.Id))` - failing with `Could not find extension method Select on types System.Linq.Enumerable`. A regression in 6.1.3: such a field was moved onto the collection selection path (to keep it translatable), but a bulk resolver's value on that pass is the loaded dictionary's entry, a single object, so there is no collection to select through. Bulk resolved fields stay on the single-object projection. Reported in [#543](https://github.com/EntityGraphQL/EntityGraphQL/issues/543) - thanks [@soilidokay](https://github.com/soilidokay) for the reproduction.","- Fixed a service field selected on the items of a paging field whose own resolver uses a service - e.g. `.Resolve\u003cMyService\u003e((p, srv) =\u003e p.Tasks.Where(t =\u003e srv.Include(t)))` with `UseOffsetPaging()`/`UseConnectionPaging()` on a nested type - failing with `Could not find field egql__x_Id on type X`. Such a paging field cannot be split across the two passes so it is built in one go on the services pass, from the entity rather than from a first-pass projection; a service field on its items had nowhere to read its own extracted dependency from. It now reads that dependency straight off the entity.","","# 6.1.6","","## Fixes","","- The field-error logging added in 6.1.5 is now covered for the case it exists for: outside development mode the caller gets only `Field 'x' - Error occurred` while the original exception - its own message and stack trace - reaches the `ILogger`. 6.1.5's test ran with the default `IsDevelopment = true`, where nothing is swallowed, so it did not check that.","","# 6.1.5","","## Fixes","","- Field-level exceptions are logged again, with the field name and stack trace, to the `ILogger` the schema was built with. A regression in 6.0: partial results turned a field failure into a GraphQL error instead of rethrowing it, so nothing reached the request-level log and the only way to see why a field failed was development mode or `AllowedExceptions` - both of which return the detail to the caller. Responses are unchanged. Document and validation errors, whose message the caller already gets in full, are not logged.","","# 6.1.4","","## Fixes","","- Fixed `ResolveBulk` / `ResolveBulkAsync` nested under a **root service-resolved list** (e.g. `Query.apiKeys` from `.Resolve\u003cTService\u003e(...)` rather than a context/`DbSet` property) so nested bulk fields load once instead of falling back to per-item `Resolve` (or previously failing with a null `BulkParameter`). Root service list fields now participate in the two-pass flow. `UseFilter()`/`UseSort()` on those root lists still apply on the first pass and are not re-applied against the first-pass Dynamic on the second. Regression tests in `ServiceRootListBulkTests` / `ServiceBackedCollectionExtensionsTests`. A root service list/object only takes the two-pass path when the selection actually has a bulk resolver in it (including through a fragment spread) - otherwise it stays on the single-pass path, as the extra pass costs a compile and a projection of every row for nothing. Note that for the fields that do take it, the service now runs during the *first* pass, so a `BeforeExecuting` hook sees two executions for them (`isFinal` false then true) where it saw one.","- Fixed `ResolveBulk` nested under a **root service-resolved object** that exposes a list (status-page shape: `statusPage { items { bulkField } }`). First pass used to return only `ExtractedFieldsFromServices` for root service objects, so nested list selection and bulk registration were skipped; the second pass then either N+1'd via `Resolve` or failed converting entity types to first-pass `Dynamic_*` types (`No coercion operator...`). Root service objects now participate in the two-pass flow (like root service lists), wrap once with `ProjectWithNullCheck` on the first pass, and on the second pass select from the materialized anon instead of re-invoking the service. Also rebinds the `ResolveBulk` `DataSelector` parameter (a different `ParameterExpression` than `FieldParam`) so multi-property keys no longer fail with `variable 'row' ... is not defined`. Nullable-nav bulk keys (`row.DetexyBoard == null ? null : row.DetexyBoard.SerialNumber`) are rewritten via `ExpressionReplacer.VisitConditional` onto the first-pass extracted field instead of leaving a second navigation `MemberExpression` unbound. Exact regression: `HardwareSensorStatusPageBulkTests` (mirrors Offline Active `hardwareSensorStatusPage { items { lastSeen isOffline floor { currentFloorStatus } } }`). Also: `ServiceResolvedPage_ItemsWithResolveBulk_Works`, `ServiceResolvedPage_ItemsWithComplexResolveBulkKey_Works`.","","# 6.1.3","","## Fixes","","- Fixed a field resolved from the query context - e.g. `.Resolve\u003cMyDbContext\u003e((c, db) =\u003e db.Things.Where(t =\u003e t.ParentId == c.Id))`, the pattern for a child collection that is not a navigation property - being projected with one of EntityGraphQL's own methods (`SelectWithNullCheck`, or `ProjectWithNullCheck` for a single object), which no database provider can translate. Selecting another such field below it failed the operation with `The LINQ expression 'p_Thing =\u003e new Dynamic_things{...}' could not be translated`. Lists keep a plain `Select` (a regression from 6.0.0-beta3), and a single object is projected inside the query - `Where().Select().FirstOrDefault()`, as it already was for a field like `movie(id: 1)`. Fields using a service other than the query context still get the null check, as they can return `null`.","","# 6.1.2","","## Fixes","","- Fixed a `ResolveBulk` field selected on data that the first (no-service) pass never produces failing the whole root field with `Field '\u003cname\u003e' - Error occurred` (`ArgumentException: Static property requires null instance...`, or `KeyNotFoundException` for the bulk data key). The clearest case is a root field resolved from services - `schema.Query().AddField(\"comments\", ...).Resolve\u003cIMyService, MyDbContext\u003e(...)` selecting `{ isReadByCurrentUser }` - where the first pass produces no expression at all, so no bulk load is registered while the second pass still compiled the lookup; the same applied below another service field's selection and with `ExecuteServiceFieldsSeparately = false`. These fields now fall back to their per-item resolver (one service call per item) instead of failing. Bulk loading them needs the service-resolved parent executed before the keys are collected - a further execution pass, not implemented. Repro tests from [#538](https://github.com/EntityGraphQL/EntityGraphQL/pull/538).","- Fixed a `ResolveBulk`/`ResolveBulkAsync` resolver whose values are lists - e.g. `ResolveBulk\u003cMyService, string, IEnumerable\u003cItem\u003e\u003e(...)` returning `IDictionary\u003cstring, IEnumerable\u003cItem\u003e\u003e` - failing with `Specified cast is not valid` (`InvalidCastException`) when the field was resolved. A list field's dotnet return type is promoted to `IQueryable\u003cT\u003e` and the bulk data lookup was built against `Dictionary\u003cTKey, IQueryable\u003cItem\u003e\u003e`, which the loaded `Dictionary\u003cTKey, IEnumerable\u003cItem\u003e\u003e` cannot be cast to (a dictionary's generic arguments are invariant). The lookup now takes its dictionary type from the resolver's own signature and casts to `IDictionary\u003c,\u003e`, so any dictionary implementation and value type the resolver declares works. Reported in [#534](https://github.com/EntityGraphQL/EntityGraphQL/issues/534) - thanks [@soilidokay](https://github.com/soilidokay).","- `ResolveBulk()`/`ResolveBulkAsync()` on a field with no resolver now throws `EntityGraphQLSchemaException` naming the field and the fix, instead of a `NullReferenceException` from inside the schema-building call. A bulk resolver builds on a resolver rather than replacing it - the per-item resolver runs whenever the bulk load cannot (e.g. the field is selected below another service field), so a bulk-only field could not resolve at all. Also from [#534](https://github.com/EntityGraphQL/EntityGraphQL/issues/534).","- Fixed an async field (`ResolveAsync`, or a `ResolveBulkAsync` field falling back to its per-item resolver) below a **root list resolved from services** leaving an unawaited `Task\u003cT\u003e` in the response instead of its value - typically surfacing as a serialized empty object or `{\"result\": ...}`-shaped noise for that field. Nested async results were resolved only when services executed in a single pass or on the second pass of a two-pass execution; a root field resolved from services has no first pass to run, so its one execution is the final one while `ExecuteServiceFieldsSeparately` is still on and it matched neither case. Keyed off the final execution now. The same field below a context/`DbSet` root list was always awaited.","- Fixed the same `ResolveBulk` field selected at more than one level of a self-referencing type - `comments { isReadByCurrentUser replies { isReadByCurrentUser } }` - failing with `KeyNotFoundException` for a key that was never loaded. The loaded data is keyed by the bulk resolver name, and each level was loaded separately, so the last level's data replaced the previous level's. Every level's keys now go into one load call.","- `schema.Validate()` now checks field arguments as well as return types. An argument whose type is not in the schema, or that can never be built from a query variable because its GraphQL type is registered against a different dotnet type (`AddTypeMapping` is one-way), now fails at validate time naming the dotnet types and the fix, instead of on the first request with a message naming only the GraphQL types. Built-in mappings and list arguments are unaffected. `Validate()` is opt-in - call it once your schema is set up, see [Validating your schema](https://entitygraphql.github.io/schema-creation/schema-creation#validating-your-schema). A schema with either problem that passed `Validate()` before will now throw from it.","- A missing required argument on a field taking an arguments class is now reported by its schema name instead of its dotnet property name - `missing required argument 'from'`, not `'From'`. `ArgType` already used the schema name, so the two validation paths disagreed and a query missing one argument could produce both spellings. Reading the capitalised name naturally suggests the schema stopped applying `SchemaFieldNamer` to arguments, which sends you looking in the wrong place entirely.","- `Variable or value used for argument 'x' does not match argument type 'Y' on field 'z'` now carries the reason the value could not be built (e.g. `Object must implement IConvertible.`) when the schema is in development mode or the exception is allowed via `AllowedExceptions`/`AllowedExceptionAttribute`. Both types in that message are GraphQL types and are frequently the same on each side, so the message could describe a conversion failing between two dotnet types while naming neither - the underlying exception was caught and discarded. Messages outside development are unchanged. `ISchemaProvider.IsAllowedException(Exception)` is new (it was already the private gate behind `AllowedExceptionMessage`) - custom `ISchemaProvider` implementations need to add it.","","# 6.1.1","","## Fixes","","- Fixed `ResolveBulk` fields selected through a fragment spread or inline fragment failing with `KeyNotFoundException` (`The given key 'bulk_Type.field' was not present in the dictionary`) anywhere below a list-to-single selection - e.g. a mutation returning `ctx.Things.First(...)` selected as `thing { child { ...ChildFields } }`, or `thing(id: 1) { ...ThingFields }`. Apollo/Relay clients hoist selections into named fragments, so this showed up as soon as a bulk field was used from a real frontend. A fragment spread is parsed with the parent of the node it is spread on, so the \"is this field selected directly on a list-to-single node?\" check read the wrong node: bulk loading was skipped for the field while the second pass still compiled the lookup, leaving it reading data that was never loaded. Both the registration and the lookup now ask the compile context which node is compiling its selection set, so they always agree, and the per-compile copy of a list-to-single node keeps its to-single marker instead of looking like a plain list selection. A bulk field selected via a fragment directly on a list-to-single field now uses the per-item resolver, matching how it already behaved when selected directly. Repro and regression tests from [#536](https://github.com/EntityGraphQL/EntityGraphQL/pull/536) - thanks [@alex-birch](https://github.com/alex-birch).","","# 6.1.0","","## Changes","","- New report-only mode and logging hook for query limits: `ExecutionOptions.QueryLimitsMode` (`Enforce`, the default, or `ReportOnly`) and `ExecutionOptions.OnQueryLimitExceeded` callback (or register an `IQueryLimitObserver` in the service provider for DI-injected observers - the explicit callback wins when both are present) with the limit kind, actual vs maximum value and operation name. `ReportOnly` reports the query's real depth/counts and lets the query execute. Use it to observe real client behavior, then flip to `Enforce` with confident numbers. The callback also fires in `Enforce` mode just before rejection, so enforced rejections can be logged with structured detail instead of matching error message text. Fully additive - defaults are unchanged.","","## Fixes","","- Custom directives (`DirectiveProcessor.VisitNode`) that return a rebuilt field node no longer lose root-field handling - position-derived state (`IsRootField`) is now preserved on the returned node automatically. Previously a rebuilt root list node fell into nested-field handling on the second (services) pass and the engine tried to re-apply the root list expression (e.g. `WhereWhen`/`OrderBy`) against the already-materialised first-pass result, failing with `No generic method 'WhereWhen' on type 'Queryable'...`. Repro and regression tests from [#527](https://github.com/EntityGraphQL/EntityGraphQL/pull/527) - thanks [@alex-birch](https://github.com/alex-birch).","- Multiple node-modifying directives on one field now chain correctly - each directive receives the previous directive's result instead of all receiving the original node (previously only the last directive's rebuild took effect), and a `null` (excluded) result short-circuits so a later directive cannot re-include a field excluded by e.g. `@skip`.","- Fixed `ResolveAsync\u003cTService\u003e()` fields returning an object type with sub-selections (e.g. `widget(id: ...) { id name }`) not propagating a `null` resolver result to the field - the response held a non-null object with default/null sub-fields instead of a `null` field. The two-pass service-field execution rebuilds the field's expression with `contextChanged: true`, which was used as a (incorrect) proxy for \"this field's value is already resolved, not still a raw `Task\u003cT\u003e`\" - for a field whose own resolver is the async work (not a value read back from a prior pass), the expression here is still genuinely `Task\u003cT\u003e` even though `contextChanged` is `true`, so the code built the object selection directly against the `Task\u003cT\u003e` parameter instead of its awaited result, and `Expression.Call` silently bound to the wrong (synchronous, always-\"not null\") overload of `ProjectWithNullCheck`. Now checked via the expression's actual type (`IsAwaitableGenericType()`) instead of `contextChanged`. `.Resolve\u003cTService\u003e()` (the sync API wrapping `.GetAwaiter().GetResult()`) was unaffected.","","# 6.0.1","","## Fixes","","- Package dependencies now use per-target-framework versions - the `net8.0` build asks for `Microsoft.Extensions.Logging.Abstractions`/`System.Runtime.Caching` 8.x and `net9.0` for 9.x, instead of all target frameworks demanding 10.x. 6.0.0 forced net8/net9 consumers onto 10.x runtime libraries, which collided with other packages' version bounds (e.g. `NU1608` warning floods via transitive `System.Diagnostics.DiagnosticSource` where a dependency caps it below 9.0). No API changes.","","# 6.0.0","","EntityGraphQL 6.0 is the culmination of the 6.0.0-beta1 through 6.0.0-beta9 releases. The beta sections below carry the full, detailed lists of changes, fixes and migration notes - and see the [upgrade guide](https://entitygraphql.github.io/upgrade-6-0) for a consolidated migration path from 5.x.","","## 6.0 Highlights","","- **GraphQL spec conformance** - partial results per the spec (failing top-level fields no longer fail the whole operation), [September 2025 GraphQL spec](https://spec.graphql.org/September2025/) support (`@oneOf`, argument/input-field deprecation, document descriptions, stricter validation) and `MapGraphQL()` follows the [GraphQL over HTTP spec](https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md) by default.","- **A real async model** - `ResolveAsync\u003cTService\u003e()` fields, end-to-end `CancellationToken` support (into resolvers, mutations, subscriptions and the in-flight EF query), async database materialization for root list fields, and concurrency control per field, per service and per query (`MaxQueryConcurrency` defaults to 100).","- **Security hardening** - authorization fails closed, introspection respects authorization, a parser recursion backstop against deeply-nested document DoS, opt-in query guards (`MaxQueryDepth`, `MaxFieldSelections`, `MaxFieldAliases`, `MaxQueryComplexity`) and per-field rate limiting.","- **New schema-building features** - `UseAggregate()` for SQL-translated aggregates over collections, `AddFieldsFrom\u003cT\u003e()`/`AddQueryFieldsFrom\u003cT\u003e()` to group field definitions into classes, filter improvements (GraphQL variables, service fields, `selectMany`, filtering by paged child fields) and async subscription setup for external brokers.","- **Performance** - paging answers `hasNextPage` with a cheap `EXISTS` instead of `COUNT(*)`, async result processing is compiled and targeted (~2x faster on async-heavy results), opt-in compiled-delegate caching, and WebSocket subscription delivery is ordered and non-blocking.","- **Modern targets** - `net8.0`, `net9.0` and `net10.0` with a dependency-light core package.","","## Breaking Changes from Beta 9","","- `MapGraphQL()` HTTP status codes now fully follow the [GraphQL over HTTP spec](https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md) for the `application/graphql-response+json` media type (the default response type): a response with no `data` entry (a request error - e.g. document parse/validation failure) returns `400` instead of `200`, and a response with both `data` and `errors` (partial success) returns `294` per the spec. Clean results remain `200`. Responses negotiated as legacy `application/json` keep returning `200` for every well-formed request. Clients following the spec read the response body regardless of status code for `application/graphql-response+json`.","- `AddFieldsFrom\u003cTFrom\u003e()` / `AddQueryFieldsFrom\u003cTType\u003e()` (introduced in beta 9) now require the grouping class to implement the new `IFieldsFor\u003cTContext\u003e` marker interface declaring which type its `[GraphQLField]` methods are written against - the entity type for `schema.Type\u003cPerson\u003e().AddFieldsFrom\u003cT\u003e()`, the query context for `AddQueryFieldsFrom\u003cT\u003e()`. Registering a class against the wrong schema type is now a compile error instead of a schema-build surprise, and the marker gives compile-time tooling the intended context type. The interface is contravariant, so a fields class written for a base type or shared interface can be added to types deriving from/implementing it. A class may also implement `IFieldsFor\u003c\u003e` for several contexts to group a feature across types (e.g. occupancy fields for `Building`, `Floor` and `Space` in one class) - each registration only adds the methods written for that context. See [Grouping fields across multiple types](https://entitygraphql.github.io/schema-creation/fields#grouping-fields-across-multiple-types). Migration: add `: IFieldsFor\u003cTheContextType\u003e` to each grouping class.","","- A `[GraphQLField]` method parameter whose type is a schema entity type (and not the field's context type) now fails at schema build with a clear error instead of being silently classified as a DI service - that classification almost always meant a mistyped context parameter that resolved (or failed confusingly) at query time. The query context type is excluded (a `DbContext` parameter remains a service), and the new `[GraphQLService]` parameter attribute opts out for the rare case where an entity type really is a DI service.","","## Changes since Beta 9","","- `[GraphQLField]` methods (via `AddFieldsFrom\u003cT\u003e()`/`AddQueryFieldsFrom\u003cT\u003e()` or static on a schema type) can now return an `Expression\u003cFunc\u003cTContext, ...\u003e\u003e` instead of a value. The method is a factory invoked once at schema build time and the returned expression is registered exactly like `AddField(...).Resolve(...)` - a service-free expression composes fully into the database-bound pass (translates to SQL, only the columns it uses are selected), and extra expression parameters after the context are resolved as services with the standard two-pass execution and dependency extraction. The factory method itself takes no parameters. See [Expression fields with AddFieldsFrom](https://entitygraphql.github.io/schema-creation/fields#expression-fields-with-addfieldsfrom).","","## Bug Fixes since Beta 9","","- Fixed `ResolveBulk` fields failing with `KeyNotFoundException` when selected via a fragment spread (`...MyFragment`) or an inline fragment (`... on Type { bulkField }`) - the bulk loader was never registered because fragments expand after bulk registration ran. Bulk fields are now registered through fragments at any nesting depth, the bulk list expression path is taken from the compile-time selection path rather than a field's parent-node chain (which for fragment-selected fields pointed at the fragment definition, not the selection point), and selecting the same bulk field both directly and via a fragment loads the data once, not twice.","- Fixed `ResolveBulk` fields failing when reached through a nested single-object navigation (e.g. `tasks { project { createdBy } }`) or a mutation result selection (e.g. `mutation { updateTask { project { createdBy } } }`) - single-object contexts are now wrapped for the bulk key batching, object navigations off a list context project per element, and the duplicate mutation result-selection path node is skipped by reference. Also released in 5.7.3. Thanks [@alex-birch](https://github.com/alex-birch) [#526](https://github.com/EntityGraphQL/EntityGraphQL/pull/526)","- Fixed custom type converters (`AddCustomTypeConverter`) registered for a base type never matching values of derived types - the lookup was an exact type match, so the documented Newtonsoft pattern `AddCustomTypeConverter\u003cJToken\u003e(...)` never fired (`JToken` is abstract; runtime values are `JArray`/`JValue`/`JObject`), breaking e.g. list-of-enum variables sent through Newtonsoft.Json with `Supplied variable can not be applied to defined variable type`. From-type converter lookup now walks the base-type chain (the most derived registration wins).","- Fixed `ResolveBulk` fields reached through chained single-object navigations (e.g. `projects { tasks { assignee { manager { bulkField } } } }`) throwing `Value cannot be null` - the null-guard built while collecting the bulk keys assumed every navigation step was a list. Single-object steps are now null-guarded properly (a null parent yields null and is filtered before the bulk key selection). Also released in 5.7.3.","","# 6.0.0-beta9","","The final beta planned before 6.0.0.","","## Breaking Changes","","- Dropped the `netstandard2.1` target. EntityGraphQL now targets `net8.0`, `net9.0` and `net10.0`. This also removes the `System.Text.Json`, `Microsoft.CSharp` and `System.ComponentModel.Annotations` package dependencies that only the netstandard target required.","- **Security (fail closed)** — authorization now denies by default when a requirement is present but cannot be satisfied. A bare `[GraphQLAuthorize]` / `[Authorize]` (no roles or policy) now correctly requires an authenticated user instead of being a silent no-op, and `IsAuthorized` requires `Identity.IsAuthenticated`. In `EntityGraphQL.AspNet`, a policy-protected field is now denied (rather than allowed through) when no `IAuthorizationService` is registered or the user is `null`. Fields/types with no authorization attribute are unaffected. This is a behavior change: previously-open access that relied on any of these gaps will now be blocked.","- **Introspection now respects authorization** — introspection queries (`__schema` / `__type`) only return the types and fields the requesting user is authorized to access, so anonymous users can no longer enumerate role/policy-protected type, field and argument names. `schema.ToGraphQLSchemaString()` is unchanged and always outputs the full schema (for SDL files / codegen). Note introspection output can now differ per user, which may affect schema-caching tooling running as an unprivileged user.","- **`ExecutionOptions.MaxQueryConcurrency` now defaults to 100** (previously unlimited). An async field resolved for a list runs per item, so an unbounded default turned a large result set into an unbounded number of concurrent operations (socket/thread-pool exhaustion, hammering rate-limited APIs). Set `MaxQueryConcurrency = null` to restore unlimited. Note this does not make non-thread-safe services (e.g. a scoped `DbContext`) safe in async list fields — use `ServiceConcurrencyLimits` or `maxConcurrency: 1` for those. Also fixed the concurrency wrapper for field shapes it previously failed on (value-type service parameters such as `CancellationToken`, rebound per-element parameters, nested list results — errors like `unbound variable` or `No coercion operator`), and `IAsyncEnumerable` fields are no longer wrapped (the stream's enumeration, not its creation, is the async work).","- API surface — `LinqRuntimeTypeBuilder` and `ExpressionReplacer` are now `internal`; `ExpressionUtil.ListToSingleMethods` is no longer public (it was a mutable static). `GraphQLHelper.InjectServices` gained optional parameters and accepts a null service provider. `ConcurrencyLimitFieldExtension.ExecuteWithConcurrencyLimitAsync` is now generic (`\u003cTResult\u003e`) so the wrapped expression keeps its static type.","- New GraphQL spec validations may reject previously accepted (invalid) documents — duplicate non-repeatable directives, conflicting field selection merges, `@skip`/`@include` on a subscription root field and deprecating a required argument are now errors. See the spec compliance entry under Changes.","","## Changes","","- New `schema.Query().AddFieldsFrom\u003cT\u003e()` (and any object type) plus the `schema.AddQueryFieldsFrom\u003cT\u003e()` shortcut - group related field definitions into classes using `[GraphQLField]` marked methods instead of many `AddField()` calls. Method parameters of the declaring type bind to the field context (the query context for root fields - this also applies to existing `[GraphQLField]` methods on the context type, which previously resolved the context from the service provider), other complex types resolve as services and remaining parameters become GraphQL arguments. Methods returning `IQueryable\u003cT\u003e` compose with EF - filters and selections translate to SQL.","- Updated dependencies: `Humanizer.Core` 2.14.1 -\u003e 3.0.10 (used for singularizing names when building schemas - inflection rule changes could alter a generated name in rare cases), `Parlot` 1.4.3 -\u003e 1.5.7, `System.Runtime.Caching` and `Microsoft.Extensions.Logging.Abstractions` 9.0.9 -\u003e 10.0.9.","- `ParameterReplacer.ReplaceByType` is marked obsolete and will be removed in 7.0 - it replaces any parameter of the matching type, which can capture parameters you did not intend. It remains functional in 6.x.","- Root-level list fields are now materialized asynchronously when the LINQ provider's query objects implement `IAsyncEnumerable\u003cT\u003e` - EF Core's do, so the database round-trip no longer blocks a thread and the request's `CancellationToken` can cancel the in-flight query. No EF dependency was added; in-memory data is enumerated synchronously as before. Note for `ExecutionOptions.BeforeExecuting` users: root list fields on the database-bound pass no longer end in an in-tree `ToList()` call - the deferred query is materialized after the expression executes.","- **September 2025 GraphQL spec compliance** (document descriptions, full Unicode and OneOf runtime behavior shipped in earlier betas):","  - `__Type.isOneOf` is now exposed per the spec (previously the non-standard name `oneField`). It is `false` for input object types, `true` for `@oneOf` types and `null` for other types.","  - `__Directive.isRepeatable` added to introspection (all built-in directives are non-repeatable). Custom `IDirectiveProcessor` implementations can override the new `IsRepeatable` property (defaults to `false`).","  - Using a non-repeatable directive more than once at a single location (e.g. `@skip(...) @skip(...)`) is now a validation error.","  - `@skip`/`@include` on the root field of a subscription operation is now a validation error per the spec.","  - Arguments and input fields can now be deprecated (`[Obsolete]` on an argument property or `field.Deprecate(...)` on an input field). They are hidden from introspection by default with new `includeDeprecated` arguments on `__Field.args`, `__Directive.args` and `__Type.inputFields`, `__InputValue` gains `isDeprecated`/`deprecationReason`, and the SDL output annotates them with `@deprecated`. Deprecating a required argument is a schema error per the spec.","  - `Implements()` now validates field covariance — a field on an implementing type must be the same type or a sub-type of the interface's field (only fields present at the time of the call are checked, so the add-fields-after-implements pattern is unaffected).","  - Field selection merging is now validated: selections with the same response name must be the same field with identical arguments (`{ x: id x: name }` or `{ project(id: 1) project(id: 2) }` are errors — use different aliases), and across mutually exclusive fragments the response shapes must be compatible (`... on Cat { value: lives }` with `... on Dog { value: name }` is an error).","- `__type(name: ...)` now returns `null` for an unknown type name per the GraphQL spec, instead of an execution error.","- Async result processing is now targeted and compiled instead of a full-result reflection walk: only branches of the result whose types can hold an async value are visited (non-async branches are returned untouched). On a 10,000-row result with one async field and non-async nested collections this cut request time from ~140ms to ~63ms in benchmarks (the no-async baseline being ~19ms). This also stops the walk reading every property of every result object, which could trigger EF lazy-loading of navigation properties the query never selected.","- Subscription events are no longer executed synchronously on the publisher's thread. Each subscription processes its events on an ordered background queue - `observer.OnNext` returns immediately instead of blocking while the (potentially async/service-backed) result selection executes for every subscriber. Event order per subscription is preserved, including the terminal error/complete messages.","- **Policy evaluation is now truly async** — `PolicyOrRoleBasedAuthorization` pre-evaluates all policies used in the schema once at the start of each request (properly awaited) instead of blocking with sync-over-async `AuthorizeAsync` calls per field/type check during compilation. New optional `IGqlAuthorizationService.PrepareForRequestAsync` hook (has a default implementation — custom implementations are unaffected).","- **WebSocket hardening** — new `GraphQLWebSocketOptions` (optional parameter on `UseGraphQLWebSockets`): incoming messages larger than `MaxMessageSizeBytes` (default 1 MB) close the connection with `1009 MessageTooBig` instead of buffering unbounded; malformed JSON closes with `4400` instead of throwing out of the receive loop; and clients that never send `connection_init` are closed with `4408` after `ConnectionInitTimeout` (default 10s) per the graphql-ws protocol.","- **Security (DoS)** — the GraphQL document parser now enforces a hard recursion-depth backstop of 128 (nested selection sets and nested argument/input values) during parsing, returning a `DocumentError` before a maliciously deep document can exhaust the stack. This runs independently of, and before, the configurable `ExecutionOptions.MaxQueryDepth`.","- Hardening: the dynamic (projection) type cache now uses a full, collision-free key (field names, field types and parent type) instead of a 32-bit hash, removing an unlikely-but-possible hash collision handing a query a cached type with the wrong fields.","","## Bug Fixes","","- Fixed a compiled-delegate cache key collision when `CacheCompiledDelegates` is enabled and an operation has multiple root fields - the second root field was served the first field's compiled delegate, returning the wrong field's data. The cache key now includes the root field name.","- Fixed async argument validators (`IArgumentValidator` via `AddValidator\u003cT\u003e()`) being fire-and-forgotten — a validator doing real async work before adding its errors raced the request and its errors could be silently lost. Validators are now stored as async delegates and genuinely awaited for mutation and subscription arguments. Note validators on query field arguments still run during (synchronous) query compilation — avoid I/O in those. Breaking: `IField.Validators` is now `IReadOnlyCollection\u003cFunc\u003cArgumentValidatorContext, Task\u003e\u003e`.","- Fixed per-request state being written onto the cached query document (`EnableQueryCache`, on by default) during execution. Concurrent requests of the same query text share the parsed document; the dynamic types built for an interface/union selection during a request's first (database) pass were stored on the shared AST node and read in its second (services) pass, so an interleaved request whose `@include`/`@skip` variables expanded a different selection could poison another request's second pass — failing it with `No coercion operator is defined between types ...` or silently dropping fragment fields. That state now lives on the per-request compile context, and mutations returning lists no longer write their per-request parameters onto the shared selection node.","- Fixed `SchemaBuilder.FromObject` registering an abstract base class as an interface but not linking its implementing types to it (unless `AutoCreateInterfaceTypes` was on). The half-configured schema made inline fragments on the interface silently mis-project — `animals { ... on Cat { lives } }` returned the whole `Cat` object for `lives` instead of the value. `FromObject` now links every object type to any of its base types/interfaces that are registered in the schema as interfaces, regardless of the order the types were discovered in.","- Fixed `@include(if: $variable)` / `@skip(if: $variable)` on an **inline fragment** failing with `Variable or value used for argument 'if' does not match argument type 'Boolean!'`. The parser executed inline-fragment directives at parse time — before variable values exist (literal values worked). Directives on inline fragments are now processed at execution time like field directives.","- Async result processing fixes: a `Dictionary\u003c,\u003e` value in a result with async fields now stays a dictionary (previously it was turned into a list of key/value pairs, changing the serialized shape); user types that happen to live in an `EntityGraphQL.*` namespace are no longer treated as the engine's internal projection types and rebuilt; a non-generic `ValueTask` value is awaited instead of being walked as an object.","- Mutation and subscription methods can now declare a `CancellationToken` parameter and receive the executing request's token (previously this failed with a service-not-found/argument error, despite query field resolvers supporting it). The parameter is not exposed as a GraphQL argument.","- Fixed `UseFilter()`/`UseSort()` being silently ignored on a nested field whose own resolver is service-backed (e.g. `schema.Type\u003cProject\u003e().AddField(...).Resolve\u003cService\u003e(...).UseFilter()`). Such a collection only exists in the services execution pass, where both extensions assumed the filtering/sorting had already happened in the first (database) pass — the query returned unfiltered/unsorted data with no error. Root-level service-backed fields were unaffected.","- Fixed three issues in the async field concurrency limiting (`maxConcurrency` / `MaxQueryConcurrency` / `ServiceConcurrencyLimits`): the per-request `CancellationToken` and limiter registry were baked into the expression as constants, so with `CacheCompiledDelegates` on, request 1's token lived inside the cached delegate and, once cancelled, failed every later request of that query (they are now passed as per-request execution parameters); a cancelled semaphore acquire leaked the permits already acquired (acquisition now happens inside the try/finally); and the wrapped operation lambda was compiled per list element (now compiled once per expression and cached).","- Fixed the (opt-in) `CacheCompiledDelegates` cache key hashing variable values with `ToString()`. Collection values (`List\u003c\u003e`, arrays, `Dictionary\u003c,\u003e`) stringify to their type name — identical for different contents — so two requests differing only in such a variable (e.g. a `sort` input) could share one cache entry and the second request would be served the first request's compiled plan (wrong ORDER BY field/direction). Values are now hashed by content, and a request whose variable values cannot be represented by value skips delegate caching for that request instead of risking a wrong-plan hit.","- Fixed bulk resolvers (`ResolveBulk`) leaking across sibling root fields. In a query with multiple root fields, a bulk resolver registered while executing one root field was re-run during each following root field's execution — re-calling the service (extra bulk loads) and, when the sibling's data had a different shape, failing that field with `Could not find field egql__... on type ...`.","- Fixed an operator-precedence bug in filter expression compilation that mis-detected string conversions: comparing a `DateTime`/`DateTimeOffset`/`TimeSpan`/`DateOnly`/`TimeOnly` field to a nullable value of the same type failed to compile, and a `Guid` vs `Guid?` comparison was built as `Guid.Parse(x.ToString())` (in-memory only, not translatable to SQL). These now use simple nullable promotion.","- #378 - Filtering by a paged child field now works. Within a filter expression a field using `UseOffsetPaging()`/`UseConnectionPaging()` resolves to its underlying collection (the page wrapper only exists in the GraphQL schema), so `enquiries(filter: \"enquirerDaps.count() \u003e 0\")`, `\"enquirerDaps.items.count() \u003e 0\"` (`items`/`edges` are the collection) and `\"enquirerDaps.totalItems \u003e 0\"` (`totalItems`/`totalCount` map to `Count()`) all compile and translate to SQL under EF. Previously these failed with `Method 'count' not found on current context 'OffsetPage'` or a `NullReferenceException`. Other page metadata (e.g. `hasNextPage`) raises a clear error when used in a filter.","","# 6.0.0-beta8","","## New Features","","- Added the `UseAggregate()` field extension for exposing aggregate data over a collection field — `count` plus `min`/`max`/`sum`/`average` over its fields, computed over the whole collection and translated to a single SQL query under EF. The shape is function-first: `{ count, min { fieldA }, max { fieldA }, sum { fieldA }, average { fieldA } }`. `min`/`max` apply to any orderable field (numbers, dates, strings); `sum`/`average` to numerics (`short`, `int`, `long`, `float`, `double`, `decimal` and nullable forms). Aggregates over an empty set return `null`.","  - Placement is controlled by `AggregatePlacement` and defaults to `Auto`: a paged field attaches an `aggregate` field to the paging result (`PagingWrapper`), otherwise the field is wrapped as `{ items, aggregate }` (`OwnWrapper`), which handles every field uniformly including service-backed resolvers and custom arguments. An additive sibling `{field}Aggregate` field (`SiblingField`) is available as an opt-in so aggregates can be added to an existing field without a breaking shape change; it carries the source field's arguments (filter and custom resolver arguments) but cannot be used on a service-backed collection resolver.","  - Pass a field selection to restrict the aggregatable fields, e.g. `UseAggregate((Person p) =\u003e new { p.Height, p.Age })`.","- A scalar field whose resolver reduces a collection using a service (e.g. `(db, svc) =\u003e db.People.Sum(p =\u003e svc.Score(p.Id))`) now executes via the two-pass model — the element values the service needs are projected and materialized in the first (DB) pass, and the reduction runs in memory in the second — instead of failing to translate under EF.","- `UseAggregate` can aggregate a service-backed element field (e.g. `person.score` resolved via `Resolve\u003cService\u003e(...)`). The per-element service values are projected/materialized in the first pass and reduced in memory in the second, so `aggregate { sum { score } }` works under EF.","- Aggregating a **bulk-resolved** element field (`ResolveBulk`) uses the bulk loader: the keys are projected/materialized in the first pass and all values are fetched in a single bulk call in the second, then reduced in memory — so it doesn't fall back to one service call per element. (Sync, no-argument bulk resolvers; async/argument bulk resolvers use the per-element fallback.)","","## Changes","","- Paging performance: `hasNextPage` no longer runs a `COUNT(*)` query when the total isn't otherwise needed. `UseOffsetPaging` (when `totalItems` isn't selected) and `UseConnectionPaging` (forward paging with a `pageInfo` selection of only `hasNextPage`/`hasPreviousPage`) answer it with a cheap `EXISTS` query — skip past the current page and check for any row. Selections needing the total (`totalCount`/`totalItems`, `endCursor`/`startCursor`, or the `last`/`before` arguments) behave as before.","- Connection paging cursor assignment no longer evaluates the (dynamic) cursor arguments per row — the cursor base is computed once per request (`ConnectionHelper.ApplyCursors`) and each edge's cursor derived from it while enumerating.","","# 6.0.0-beta7","","## Bug Fixes","","- Fixed `ArgumentNullException` (\"Value cannot be null. (Parameter 'type')\") when a service-resolved field on a parent type was queried together with a child collection field whose type uses `AddTypeMapping` to map a CLR type to a GraphQL list type (e.g. `AddTypeMapping\u003cNpgsqlPolygon\u003e(\"[Point!]!\")`). The two-pass execution failed to infer the list element type for a non-generic CLR type that implements `IEnumerable\u003cT\u003e`.","","# 6.0.0-beta6","","## Breaking Changes","","- #515 - `DefaultGraphQLResponseSerializer` and `DefaultGraphQLRequestDeserializer` default `JsonSerializerOptions` now use `JsonSerializerDefaults.Web`. For the request deserializer this enables case-insensitive property matching and reading numbers from JSON strings. The response serializer's output is unchanged (it was already camelCase).","- `ExecutionOptions.MaxQueryNodes` renamed to `MaxFieldSelections` — it counts field selections (the GraphQL spec term) after fragment expansion, not AST or result nodes.","- `ExecutionOptions.UserKeySelector` renamed to `RateLimitUserKeySelector` to reflect that it only affects per-field rate limiters tagged `userSpecific: true`.","","# 6.0.0-beta5","","## Breaking Changes","","- `AddGraphQLOptions\u003cTContext\u003e` now exposes overloaded `ConfigureSchema(...)` methods instead of settable schema-configuration delegate properties. Use `options.ConfigureSchema(schema =\u003e { ... })` for the common case, or `options.ConfigureSchema((schema, services) =\u003e { ... })` when schema setup needs the active `IServiceProvider`.","- `AddGraphQLSchema()` in `EntityGraphQL.AspNet` now returns a dedicated `GraphQLSchemaBuilder\u003cTContext\u003e` instead of `IServiceCollection`. Schema-shape customization should now be chained with `ConfigureGraphQLSchema(...)`, for example:","  - `services.AddGraphQLSchema\u003cMyContext\u003e(options =\u003e { ... }).ConfigureGraphQLSchema\u003cMyContext\u003e(schema =\u003e { ... });`","","## Changes","","- #508 - Added a `src/examples/tooling` example showing GraphiQL and Hot Chocolate Nitro hosted against an `EntityGraphQL.AspNet` `/api/graphql` endpoint.","- Query/document errors now preserve structured source locations in addition to the existing message text, and `GraphQLError` responses now emit `locations` metadata when available. Also normalized invalid field-directive registration to throw `EntityGraphQLSchemaException` instead of `InvalidOperationException` on the public schema API surface.","","# 6.0.0-beta4","","## Breaking Changes","","- Simplified `IFieldExtension` compilation hooks by replacing long positional parameter lists with context objects:","  - `GetExpressionAndArguments()` now takes `FieldExtensionExpressionContext`","  - `ProcessExpressionPreSelection()` now takes `FieldExtensionPreSelectionContext`","  - `ProcessExpressionSelection()` now takes `FieldExtensionSelectionContext`","","## Changes","","- #513 - `AddGraphQLSchema()` now supports configuring the registered `SchemaProvider\u003cTContext\u003e` lifetime via `AddGraphQLOptions.SchemaLifetime`. The default remains singleton, with scoped/transient lifetimes available for request-specific schema construction.","","## Fixes","","- #498 - fix ExecutableDirectiveLocation naming regression introduced in beta3","","# 6.0.0-beta3","","## Breaking Changes","","- Fields in `ExecutableDirectiveLocation` enum have been renamed in C# style","- #476 - Introduce generic custom type converters (from-to, to-only, from-only) for flexible runtime value conversion.","  - Expand `isAny` to support additional types through the method provider","  - Removes `ICustomTypeConverter`. See updated docs and the more flexible converting methods available","- Renamed `SchemaBuilderSchemaOptions` to `SchemaProviderOptions` for better clarity between schema builder reflection options and schema provider configuration options","- `AddGraphQLOptions\u003cTSchemaContext\u003e` refactored from inheritance to composition:","  - Now exposes `Builder` property for `SchemaBuilderOptions` (controls building/reflection behavior)","  - Now exposes `Schema` property for `SchemaProviderOptions` (controls schema provider configuration like authorization, introspection, error handling, field naming)","  - Removed `FieldNamer` property - now accessed via `options.Schema.FieldNamer`","  - **`PreBuildSchemaFromContext` moved from `SchemaProviderOptions` to `SchemaBuilderOptions`** - now accessed via `options.Builder.PreBuildSchemaFromContext` (it's called during the schema building phase, not runtime)","- Removed `introspectionEnabled` parameter from `AddGraphQLSchema` extension method - configure via `options.Schema.IntrospectionEnabled` instead","- **Authorization refactoring**: `RequiredAuthorization` now uses a keyed data structure for extensibility","  - `RequiredAuthorization` no longer has separate `Roles` backing field - roles are stored via `\"egql:core:roles\"` key in `KeyedData` dictionary","  - The `Roles` property is now nullable and computed from keyed data","  - Policy support moved entirely to `EntityGraphQL.AspNet` package using `\"egql:aspnet:policies\"` key","  - `RequiredAuthorization` constructor that took roles parameter has been removed - use `RequiresAnyRole()` or `RequiresAllRoles()` methods instead","  - Custom authorization implementations should use namespaced keys (e.g., `\"myapp:custom-auth\"`) to avoid conflicts","- Added `withoutServiceFields` parameter to `IFieldExtension.GetExpressionAndArguments()` to allow extensions to know when they're in the first pass of two-pass execution and should skip service-dependent expressions.","","## Changes","","- Added pre-execution query guards (`MaxQueryDepth`, `MaxQueryNodes`, `MaxFieldAliases`, `MaxQueryComplexity`) to `ExecutionOptions`. All default to unlimited (opt-in). A limit violation returns a GraphQL `DocumentError` and prevents any resolver from running. Configure in `ExecutionOptions` in your call to `schema.ExecuteRequest(...)`.","- Added complexity scoring via `field.SetComplexity(int)` (fixed cost) or `field.SetComplexity(ctx =\u003e ctx.Args.take * (1 + ctx.ChildComplexity))` (args-aware). Pluggable via `IQueryComplexityAnalyzer` / `ExecutionOptions.QueryComplexityAnalyzer`.","- Added per-field rate limiting via `field.AddRateLimit(\"policy-name\")`. `EntityGraphQL.AspNet` ships a `PartitionedRateLimiter`-backed default registered with `services.AddGraphQLFieldRateLimit(opts =\u003e { opts.AddFixedWindowPolicy(...); opts.AddConcurrencyPolicy(...); ... })`. Rate limits count per-selection (aliases each burn a permit) and support `userSpecific: true` partitioning by user key.","- Added support for [document descriptions](https://spec.graphql.org/September2025/#sec-Descriptions) as outlined in the latest 2025 spec. Basically string comments in the query document","- #474 - Add support for `TimeSpan` as a scalar in the default schema","- #500 - Expose parsed executable directive metadata via `BaseGraphQLField.Directives` by making `GraphQLDirective.Name` and `GraphQLDirective.Processor` public for custom query processing scenarios","- Replaced the previous 3rd party GraphQL document parser.","- Add `net10.0` as a target","- When using Offset Paging the total items expression is now only executed if the query requests `hasNextPage` or `totalItems` fields","- When using Connection Paging the total count expression is now only executed if the query requests `totalCount` or `pageInfo` fields or the 'last' argument is used","- Added `IField.AsService()` to signal that a field should (or can) be treated as a service field. This means null-checks are differently and they are executed after EF related calls (if `ExecutionOptions.ExecuteServiceFieldsSeparately = true`). Useful for fields that operate with data fully in-memory and do not need a registered service to fetch data or work","- `AddGraphQLSchema` in ASP.NET now automatically detects and applies environment-based defaults:","  - Uses `PolicyOrRoleBasedAuthorization` by default (instead of requiring explicit configuration)","  - Automatically sets `IsDevelopment = false` in non-Development environments","- Subscription fields now support `Task\u003cIObservable\u003cT\u003e\u003e` and `ValueTask\u003cIObservable\u003cT\u003e\u003e` as return types in addition to `IObservable\u003cT\u003e`. This allows subscription setup methods to be async, which is useful when subscribing to an external message broker (Redis, RabbitMQ, etc.) requires an async connection step.","","","## Fixes","","- Rewrote WebSocket subscription send path (`GraphQLWebSocketServer`) to use a `Channel`-backed drain task. All outbound frames are now serialised through a single writer, eliminating the concurrent `WebSocket.SendAsync` violation that could corrupt the frame stream when multiple subscriptions fired simultaneously. The `IObserver\u003cT\u003e` callbacks (`OnNext`/`OnError`/`OnCompleted`) now enqueue to the channel rather than blocking on `GetAwaiter().GetResult()`, freeing the observable/Redis thread immediately. `subscriptions` dictionary replaced with `ConcurrentDictionary` for thread-safety.","- Fixed `SelectWithNullCheck` error when using `.ResolveAsync\u003cTService\u003e()` on a field that returns a list of complex objects with subfield selection (e.g. `toolCatalog { name }`), where the parent field returns a single object. In the two-pass execution path the element-type parameter was incorrectly derived from `Task\u003cIEnumerable\u003cT\u003e\u003e` rather than `T`, and the resolved collection was not preserved as a typed `List\u003cT\u003e` when rebuilding the async result graph.","- #498 - Fixed introspection types and fields incorrectly using the configured `FieldNamer`. Spec-defined introspection names now remain standard camelCase even when the application schema uses a custom naming convention.","- #486 - Fixed directives on root-level fields failing to resolve query variable arguments (e.g. `@include(if: $var)`). `OpVariableParameter` and `docVariables` were not being passed through to directive evaluation in `GraphQLQueryStatement`, causing any directive that references a variable to throw a type-mismatch error.","- #481 - handle `ResolveAsync` on a top level field","- #488 - Support async fields with `[GraphQLField]`","- #487 - Fix `ResolveAsync` with arguments","- #484 - Better support for nullable numeric types in filter expressions. Nullable int/short/long fields can now be compared to numeric literals without type mismatch errors. The fix also prioritizes converting literals over field expressions to avoid database column casts that could prevent index usage.","- #459 - Fixed error \"variable 'service' ... is not defined\" when using `Resolve\u003cTService\u003e()` directly on a field that also uses `UseConnectionPaging()` or `UseOffsetPaging()`. When the paging field's own resolver depends on a service, the field now falls back to single-pass execution so the service parameter is always in scope. Fields with services on child types (not the paging field itself) continue to use the normal two-pass execution path where the DB query runs first and the service is resolved in-memory against the paged results.","- As per spec - `_Type.fields` should be `null` for `INPUT_OBJECT`. Previously the `inputFields` were repeated.","","# 6.0.0-beta2","","## Changes","","- Added `selectMany` method support to filter expressions, enabling flattening using nested collections within queries.","","## Fixes","","- Fixed (maybe a regression introduced in 6.0.0-beta1) `UseFilter()` incorrectly adding a default value to the filter argument when applied to fields that already have other arguments defined.","","# 6.0.0-beta1","","## Breaking Changes","","- Support for partial results as per spec. **This actually _fixes_ EntityGraphQL to follow the GraphQL spec regarding partial results.** However it does change behavior.","  - EntityGraphQL basically executes each \"top level\" field in the operation separately, now if any fail, you'll get the partial results of those that succeeded and error information about the failed ones.","  - `AddGraphQLValidator` now registers `IGraphQLValidator` as `Transient`. This _was_ the original intent as the docs have examples of bailing early by checking if the validator has any errors. The intent was errors for that field. This change helps enable partial results. If you want the old behavior, remove the use of `AddGraphQLValidator` and just add `IGraphQLValidator` yourself as `Scoped`","  - As per spec [If an error was raised during the execution that prevented a valid response, the \"data\" entry in the response should be null](https://spec.graphql.org/draft/#sec-Data). This was not always the case","","- Removed methods/properties marked as obsolete","  - `IField.UseArgumentsFromField` use `GetExpressionAndArguments`","  - `IField.UseArgumentsFrom` use `GetExpressionAndArguments`","  - `IField.ResolveWithService` use `Resolve`","  - `IFieldExtension.GetExpression` use the new `GetExpressionAndArguments`","","- `MapGraphQL` `followSpec = true` is now the default behavior, it follows https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md","","- You can no longer add filter support by using `ArgumentHelper.EntityQuery` or `EntityQueryType` in the field args, e.g. `schemaProvider.Query().ReplaceField(\"users\", new { filter = ArgumentHelper.EntityQuery\u003cUser\u003e() }, \"Users optionally filtered\")`. Please use the `UseFilter` extension which supports filters referencing service fields.","","- `IFieldExtension.GetExpressionAndArguments` now takes the current GraphQL node `BaseGraphQLField fieldNode` as an argument. `parentNode` has been removed. Access it via `fieldNode.ParentNode`.","","- `EntityGraphQL.AspNet` package drops `net6.0` and `net7.0` as targets. `EntityGraphQL` package drops `net6.0` as a target however as it still targets `netstandard2.1` you can still use it with those previous dotnet versions.","","## Changes","","- Partial results support","- #467 - New implementation for handling `async` fields. See updated docs and use the `.ResolveAsync\u003c\u003e()` methods when adding fields.","- New support for `CancellationToken`. A `CancellationToken` can be passed into the `ExecuteRequestAsync` method. The token will be checked throughout execution and passed to other async operations. You can use it in `.ResolveAsync\u003cMyService, CancellationToken\u003e((context, service, ct) =\u003e service.DoSomethingAsync(context.Field, ct))` to pass it to your `async` fields. If you use `MapGraphQL()` for ASP.NET it will use the `context.RequestAborted` as the cancellation token.","- #469 - Make filter grammar immutable as it should be for performance","- #303 - You can now reference service fields in the `UseFilter/[UseFilter]` expression. Like normal the filter will first be applied with non service fields, then applied again with service fields is `ExecutionOptions.ExecuteServiceFieldsSeparately == true` (default).","- #396 - Filter expressions now support GraphQL variables using `$variableName` syntax. This allows parameterized and dynamic filters (e.g., `filter: \"name == $searchTerm \u0026\u0026 age \u003e $minAge\"`).","- Related to #331 and the `followSpec = true` above, errors and exceptions were refactored internally. Following the GraphQL spec if the core library gets an error it will still return a `GraphQLResult` with the errors (and potentially partial results).","","# Fixes","","- #429 Validation attributes now work with `[GraphQLInputType]`","","# 5.7.3","","## Fixes","","- #526 - Fixed `ResolveBulk` fields failing when reached through a nested single-object navigation (e.g. `tasks { project { createdBy } }`) or a mutation result selection - single-object contexts are now wrapped for the bulk key batching, object navigations off a list context project per element, and null navigations anywhere in the chain no longer throw. Thanks @alex-birch","","# 5.7.2","","## Fixes","","- #512 - Updated `HotChocolate.Language` dependency from 13.9.14 to 13.9.16 to resolve critical vulnerability (GHSA-qr3m-xw4c-jqw3: stack overflow via deeply nested GraphQL documents)","","# 5.7.1","","## Fixes","","- #466 Include enum-typed input fields in introspection per GraphQL spec","","# 5.7.0","","## Changes","","- QueryInfo Support: Added optional query execution information that can be included in the result extensions. Enable with `ExecutionOptions.IncludeQueryInfo = true` to get metadata about:","  - Operation type (Query, Mutation, Subscription)","  - Operation name","  - Types queried and their selected fields","  - Total number of types and fields queried","  - This is useful for query analysis, debugging, and monitoring GraphQL usage patterns","- Fix #441 (PR #455) - Have your argument class (including an `InputType`) class inherit `ArgumentsTracker` or implement `IArgumentsTracker` to be able to tell if a variable is just the dotnet default value or is set from the query (variable or inline) with `args.IsSet`. You can also include `IArgumentsTracker` as an argument in your mutations etc. This is useful if you method usings simple arguments e.g. `MyMutation(Guid id, string name)` vs. a `[GraphQLArguments]` object.","- #461 - `EntityGraphQLEndpointRouteExtensions.MapGraphQL` now supports chunked requests","- `RequiredAuthorization` is not settable allowing you to change or overwrite it after creation. Also now has `Clear()` methods to remove authentication","","## Fixes","","- Throw error on a query that has fragments with a cycle as per the GraphQL spec and to prevent infinite loops.","- #442 - Fix issue when a service field with a bulk resolver is on a parent field named differently to the dotnet underlying object property","","# 5.6.1","","## Fixes","","- #443 - Allow `*/*` \u0026 `application/*` `Accept` headers in `followSpec` option for `MapGraphQL`","- #443 - Allow expected headers to not be listed first when using `followSpec` option for `MapGraphQL`","- Better support for multiple items in a single `Accept` header when using `followSpec` option for `MapGraphQL`","- #449 - Fix issues with self referencing query and connection paging","","# 5.6.0","","## Changes","","- Added additional framework target `net9.0`","- `ResolveWithService` and `ResolveWithServices` methods are now marked obsolete. Please use `Resolve` in the same way","- #430 - `MapGraphQL` has new parameter `followSpec` which changes the behavior to follow https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md and is `false` by default in v5.x. If set to `true` it will follow the spec, the major change being that if the HTTP request was valid you'll get a `200` status code even if there may be GraphQL errors in the response. _Note this will be the default behavior in version v6._","- Add `IsNullable` to the `IField` interface to control setting the nullability of the field return type in the schema","","## Fixes","","- #435 - fix `isAny()` in `filter`","- Fix issue selecting fields from an object a service field returns where the GraphQL field name differs from the dotnet property name.","","Example a field that returns a `User` type using a service and you are changing the field names in the schema like below","","```cs","schema.Type\u003cUser\u003e().AddField(\"username\", u =\u003e u.Name, \"Username\")","```","","- #439 - Fix using fields / properties with key words (`null`, `true`, `false`) at the start of the name in the filter expressions","- Related to #430 - Make sure if the schema says a field is not nullable, that it is not returned as `null` when using `null` to exit a mutation or field on error.","- Fix issue where an expression extracted from a service field may clash with a existing field name","","# 5.5.3","","## Fixes","","- #432 - filter expression was incorrectly using bit-wise `Or` instead of `OrElse`","","# 5.5.2","","## Fixes","","- #418 - Fix issue where field expressions using `ctx.Entities.FirstOrDefault(\u003cfilter\u003e)` (`First*`, `Last*`, `Single*` methods with a filter) would duplicate the filter expression on each execution (e.g. making `ctx.Entities.Where(\u003cfilter\u003e).Where(\u003cfilter\u003e).FirstOrDefault()`). This also caused EntityFramework not to use it's cache for the expression","- Fix issue with `RequiresAnyRole()` being called on a field with multiple roles added them as requiring all those roles vs. any role. This did not effect the `[GraphQLAuthorize]` attribute","","# 5.5.1","","## Fixes","","- #425 - As per GraphQL Spec, Interfaces are not supported for Input Types","- #426 - Fix custom directives with no arguments.","- #427/#428 - Fix issue with connection style paging field extension when using last and before arguments","","# 5.5.0","","## Changes","","- Add `IgnoreAttributes` to `SchemaBuilderOptions` - A list of Attribute types which will cause the builder to ignore the field/property when building the schema. These are additional to GraphQLIgnoreAttribute","- `.Resolve\u003c\u003e()` method on field changes return type to `object?` to avoid warnings when returning a valid nullable service call etc.","- Add support for using a `struct` type as an object type in the schema, allowing you to query the fields on it. Previously it only worked if you added the `struct` as a Scalar Type","- #419 - Add support for using `isAny([])` on nullable types","","## Fixes","","- Make sure top level types have access checked (Query, Mutation and Subscription)","- Fix #392 - Better handle `null` checks when executing against in-memory data","- #363 - Only use `ToListWithNullCheck` when we know we are executing with services, or have been told not to separate the execution.","","# 5.4.6","","## Fixes","","- Fix issue with inline arguments for mutation methods not being validated or trying to look for a service. e.g.","","```cs","[GraphQLMutation]","public static Expression\u003cFunc\u003cMyContext, Movie\u003e\u003e AddMovie(","    [Required(ErrorMessage = \"Title is required\")] string title,","    [Range(1, 100, ErrorMessage = \"Price must be between $1 and $100\")] decimal price,","    [StringLength(5, ErrorMessage = \"Rating must be less than 5 characters\")] string rating",")","```","","# 5.4.5","","## Fixes","","- Fix auth not correctly being checked for mutations or subscriptions. Issue was introduced in 5.4.2","","# 5.4.4","","## Fixes","","- Argument validator was incorrectly traversing types and properties it shouldn't which could cause stack overflows for some types","- Fix validating inline arguments for mutation methods","","# 5.4.3","","## Fixes","","- #399 - Serialize `null` values if the field is requested as per the GraphQL spec","- Make sure the naming policy set in `DefaultGraphQLResponseSerializer` is used for all fields","","# 5.4.2","","## Fixes","","- #393 - Handle `DateTimeOffset` in filter expressions","- #398 - Make sure user credentials are not cached if using the compiled query cache","","# 5.4.1","","## Fixes","","- #370 - Sort field extension (`[UseSort]` or `.UseSort()`), if building the sort argument input type from the dotnet fields/properties will now respect the `[GraphQLIgnore]` attribute on any fields.","- #386 / #387 - Fix regressions in filter expressions","","# 5.4.0","","## Changes","","- #367 - Remove Antlr dependency for generating the filter expression parser. Replaced with Parlot, a dotnet only solution to remove a barrier for contributors. This also results in the filter (FilterExpression field extension) expressions being compiled up to twice as fast.","- #334 - add `isAny([])` method to the filter expression language","- `Broadcaster` exposes its properties and methods are virtual allowing you to extend its functionality instead of writing your own fully","- #374 - Sort field extension now has an `useSchemaFields` option. This will use the fields on the type you are sorting from the schema to build the input argument. Instead of the fields on the dotnet type. Because the input type is build once at the beginning it will only include schema fields currently known at the time you call `.UseSort()`.","- #375 - Allow specifying `introspectionEnabled` when calling the `AddGraphQLSchema` extension methods","- #222 - EntityGraphQL can now build a argument objects via their constructor. The parameter names need to match the field names. E.g.","","```cs","// empty constructor - the properties set are called","public class PersonArg","{","    public string name { get; set; }","}","","// with a constructor","public class PersonArgConstructor","{","    public PersonArgConstructor(string name)","    {","        Name = name;","    }","","    public string Name { get; }","}","```","","## Fixes","","- Fix issue where a subscription execution had access to a disposed `IServiceProvider`","- `Broadcaster` is thread safe when removing observers","- Fixes in the implementation of the [GraphQL over Websockets](https://github.com/enisdenjo/graphql-ws/blob/main/PROTOCOL.md)","  - ID is now a `string` as it does not specify that it must be a `Guid`","  - Better errors on invalid messages","","# 5.3.0","","## Changes","","- `ISchemaProvider.Validate()` added to allow you to validate the schema is complete to avoid potential errors at runtime/query time. As fields and types can be added to the schema out of dependency order, this checks that all required types are in the schema.","- #362 - The Sort field extension now supports defining more complex sort expressions that will be used. E.g.","","```cs","schema.Type\u003cTestDataContext\u003e().GetField(\"people\", null)","  .UseSort((Person person) =\u003e new","  {","    // [{managerName: ASC}] in GQL can be used and the full expression person.Manager.Name will be used in the OrderBy()","    managerName = person.Manager.Name,","  });","```","","- #169 - `ExecutionOptions` now has a `BeforeRootFieldExpressionBuild` callback you can use to make modifications to a fields expression before it is then used to build the whole query. This is _only_ called for root fields in your GraphQL operation. A common use case for this might be to call the EF `TagWith` extension method passing it the operation name to help with debugging queries.","","- #308 - Support a dotnet `Type` being used for an input type and a query type. This may change in future versions but some simple cases are now supported","- `IField.UseArgumentsFrom` \u0026 `IField.UseArgumentsFromField` is now Obsolete. Using it (typically in a field extension) creates issues. See #358 fix below","- `IFieldExtension.GetExpressionAndArguments` has been added to allow field extensions to handle arguments and add them to the compile context. This interface will merge with the existing (now obsolete) `IFieldExtension.GetExpression` in version 6.0. This was introduced to fix #358 and avoid breaking changes","- `GetSchemaType(string typeName, QueryRequestContext? requestContext)` is now Obsolete, use `GetSchemaType(string typeName, bool inputTypeScope, QueryRequestContext? requestContext)` and provide `inputTypeScope = true` if the type is an Input type.","- #359 - For targets .net6 and above `DateOnly` \u0026 `TimeOnly` are added as scalar types by default.","","## Fixes","","- #356 - Look up the correct field return type for `InputType`s","- #358 - `OffsetPaging` and `ConnectionPaging` field extensions can now be used on multiple fields that return the same type. e.g.","- #148 - Return a more descriptive error message for a missing type when we know the field we are trying to find the type of","- #361 - Handle union/interface types when accessed from a object projection","","```","// both fields return a list of people but have different expressions","schema.Query().AddField(\"peopleOver\", new","  {","      over = ArgumentHelper.Required\u003cint\u003e()","  },","  (ctx, args) =\u003e ctx.People.Where(p =\u003e p.Height \u003e args.over).OrderBy(p =\u003e p.Id), \"Return list of people with paging metadata\")","  .UseOffsetPaging();","schema.Query().AddField(\"peopleUnder\", new","  {","      under = ArgumentHelper.Required\u003cint\u003e()","  },","  (ctx, args) =\u003e ctx.People.Where(p =\u003e p.Height \u003c args.under).OrderBy(p =\u003e p.Id), \"Return list of people with paging metadata\")","  .UseOffsetPaging();","```","","# 5.2.1","","## Fixes","","- #355 - make error variable values more distinctive","- EntityGraphQL is now more specific in which methods it tries to optimize the pattern of a list to single. E.g. If a field has an expression like `ctx =\u003e ctx.People.FirstOrDefault(filter)` EntityGraphQL treats that as a ListToSingle field and will build a full expression similar to `ctx =\u003e ctx.People.Where(filter).Select(x =\u003e new {...}).FirstOrDefault()` to avoid over fetching when using EntityFramework. Previously EntityGraphQL would try to break up and rebuild expressions.methods it didn't know how to. It now correctly only tries this optimization on `First`, `FirstOrDefault`, `Single`, `SingleOrDefault`, `Last` \u0026 `LastOrDefault` from `Queryable` \u0026 `Enumerable`","","# 5.2.0","","Check release notes for the 5.2.0-beta1 and beta2 below.","","## Changes","","- #347 - The handler for the subscriptions end point added by `UseGraphQLWebSockets` no longer returns `400` if the request is not a web socket request. Allowing the request to get passed to the next handlers. This allows you to have the same endpoint for queries/mutations and subscriptions.","","## Fixes","","- #350 - Index accessors properties (which are methods to dotnet) on types are ignored when using `SchemaBuilder`. Previously they would fail.","- #333 - Fixes to method and service calls on interfaces/unions","- #344 - Support paging field extensions with `field.ResolveBulk\u003cTService, TKey, TResult\u003e()`","- Fix bulk resolve services within a List to Single node","","# 5.2.0-beta2","","Check release notes for the 5.2.0-beta1 below.","","## Fixes","","- Fix error when using a service at a query root field that uses `First()` as friends (List to single pattern). E.g. `(ctx, service) =\u003e ctx.SomeList.First(i =\u003e i.Thing == service.Other)`","- #318 - Fix issue comparing `int` style fields against `float` style fields in the filter expression","- Better error message when comparing different enum types in the filter language","- Include descriptions for scalars and directives in introspection and schema output","- Fix issue using the default `SchemaBuilderOptions` with a mutation method that has a list argument. The argument input type was not being correctly added to the schema. Not an issue if you were already adding the type manually","- #336 - Fix conversion of non-nullable/nullable types","- #342 - Fix argument incorrectly being renamed when using `[GraphQLField]`","","## Changes","","- #318 - Support Unicode characters in the string of the filter language","- Support more cases with `field.ResolveBulk\u003cTService, TKey, TResult\u003e()`","- Add a net8.0 target output for the base EntityGraphQL library.","","# 5.2.0-beta1","","## Changes","","- Make more properties public in nodes like `GraphQLCollectionToSingleField` to better support customisation in custom directives","- Added `field.Resolve\u003cTService, ...\u003e()` to replace `ResolveWithService\u003c\u003e()`. Recommended to use `Resolve()`. Release 5.3 will mark `ResolveWithService` as deprecated and release 6.0 will remove them.","- Add `field.ResolveBulk\u003cTService, TKey, TResult\u003e()` to allow you to use services to bulk load data to avoid multiple calls to a service resolve expression that may call an external service in a list result. Example","- Add `schema.AddEnum\u003cTEnum\u003e(typeName, description)` to the schema building API","- Add `net8.0` as a target for EntityGraphQL.AspNet project","","```cs","var schema = SchemaBuilder.FromObject\u003cMyContext\u003e();","schema.UpdateType\u003cProject\u003e(type =\u003e","{","    type.ReplaceField(\"createdBy\", \"Get user that created it\")","      // normal service to fetch the User object for creator of the Project type","      .ResolveWithService\u003cUserService\u003e((proj, users) =\u003e users.GetUserById(proj.CreatedById))","      // Bulk service used to fetch many User objects","      .ResolveBulk\u003cUserService, int, User\u003e(proj =\u003e proj.CreatedById, (ids, srv) =\u003e srv.GetAllUsers(ids));","});","```","","If you have a query like","","```graphql","{","  # ResolveBulk","  projects {","    # project fields","    name","    id","    # service field - resolved with ResolveBulk expression for all Projects loaded","    createdBy {","      name","    }","  }","","  # ResolveWithService","  project(id: 78) {","    # project fields","    name","    id","    # service field - resolved with ResolveWithService expression for the single project loaded","    createdBy {","      name","    }","  }","}","```","","Instead of calling `users.GetUserById()` for each project to resolve `createdBy { name }`, EntityGraphQL will build a list of keys using the `proj =\u003e proj.CreatedById` expression from the list of projects and then call the `(ids, srv) =\u003e srv.GetAllUsers(ids)` expression once for the whole list of projects in the results. See updated documentation for further details.","","# 5.1.1","","## Fixes","","- Fix #337 - Description attribute accidentally updating name instead of description","","# 5.1.0","","## Changes","","- Upgrade to the latest standard Antlr4 - the parser/tool used for the filter expression strings. Fixing precedence of operators","","## Fixes","","- #319 - Only convert strings to `Guid` or `DateTime` when required","- If you add a field connecting back to the Query Context that ends in a method to go from a list to a single result the graph object projection will now correctly be inserted before the last call. Example","","```c#","var schema = SchemaBuilder.FromObject\u003cMyContext\u003e();","schema.AddType\u003cExternalData\u003e(\"ExternalData\").AddAllFields();","","schema.UpdateType\u003cExternalData\u003e(ed =\u003e","{","    // connect back to the MyContext types","    ed.AddField(\"movie\", \"Get movie\")","      // here FirstOrDefault() goes from list -\u003e single","      .ResolveWithService\u003cMyContext\u003e((ed, db) =\u003e db.Movies.Where(m =\u003e m.Id == ed.Id).FirstOrDefault());","});","","schema.Query().AddField(\"externalData\", \"Get Data\")","    .ResolveWithService\u003cExternalDataService\u003e((p, srv) =\u003e srv.GetData());","```","","In the above case if you select","","```gql","{","  externalData {","    movie {","      director {","        name","      }","    }","  }","}","```","","The movie field will have the selection inserted allowing EF to resolve fields without lazy loading turned on. Without this the `m.Director.Name` would also be `null` as no relation was included. e.g.","","```cs","db.Movies.Where(m =\u003e m.Id == ed.Id)",".Select(m =\u003e new [","  director = new {","    name = m.Director.Name","  }","])",".FirstOrDefault();","```","","# 5.0.1","","## Fixes","","- Fix #314 - Some clean up of the Antlr4 grammar for the filter expressions","","# 5.0.0","","Make sure to check out the changes 5.0.0-beta1","","## Breaking Changes","","- Generated schema type name for field sort inputs now include the name of the schema type the field is on to avoid conflicts","","## Changes","","- `IField.AddExtension` now returns the `IField`","- `UseSort()` field extension now can take a list of default sort fields e.g.","- `Broadcaster` (inbuilt `IObservable\u003cTType\u003e` you can use for subscriptions) now has a `OnUnsubscribe` callback","","```cs","schema.ReplaceField(\"people\",","    ctx =\u003e ctx.People,","    \"Return a list of people. Optional sorted\")","    .UseSort(","        new Sort\u003cPerson\u003e((person) =\u003e person.Height, SortDirection.ASC),","        new Sort\u003cPerson\u003e((person) =\u003e person.LastName, SortDirection.ASC)","    );","```","","- `SchemaBuilderOptions` now has a `OnFieldCreated` callback to make changes to fields as `SchemaBuilder` is building the schema.","- `.contains(string)`, `.startsWith(string)`, `.endsWith(string)` \u0026 `.toLower()` / `.toUpper()` string methods now available in the filter argument expression.","","## Fixes","","- Fix naming of fields extracted from service calls when those field use convert","","# 5.0.0-beta1","","## Breaking Changes","","- `EntityGraphQL.AspNet` now targets `net6.0` and `net7.0`, dropping targets `netcoreapp3.1` and `net5.0`. You can still use the base `EntityGraphQL` library with older targets.","- Interface `IExposableException` has been removed. Use `SchemaBuilderSchemaOptions.AllowedExceptions` or the new `AllowedExceptionAttribute` to define which exceptions are rendered into the results","- #254 - Previously passing `null` for the `ClaimsPrincipal` in `ExecuteRequest()` would skip any authorization checks. All authorization checks are now done regardless of the `ClaimsPrincipal` value. Meaning `null` will fail if there is fields requiring authorization.","- `IDirectiveProcessor` interface has changed. See upgrade docs for changes","- `SchemaBuilderMethodOptions` removed, see updated properties on `SchemaBuilderOptions` and upgrade docs. This was because you can also now add methods as query fields with `GraphQLFieldAttribute`","- `SchemaBuilderOptions.AutoCreateInputTypes` now defaults to `true`. Meaning in `SchemaBuilder` when adding mutations etc any complex types will be added to the schema if they are not there already.","- The rules for reflection on method parameters have been changed to make them clearer. See the upgrade to 5.0 docs and the mutation docs that cover examples.","- `GraphQLValidator` is no longer magically added to your method fields (mutations/subscriptions). If you wish to use it please register it in your services. There is a new helper method in EntityGraphQL.AspNet `AddGraphQLValidator()`. This means you can implement and register your own implementation.","- `SchemaProvider.ExecuteRequest` \u0026 `SchemaProvider.ExecuteRequestAsync` have been renamed to `ExecuteRequestWithContext` \u0026 `ExecuteRequestWithContextAsync`. The schema context instance provided will be used for all context references within that query.","- #309 - Introduced new `SchemaProvider.ExecuteRequest` \u0026 `SchemaProvider.ExecuteRequestAsync` which take no schema context instance as an argument. The context will be fetched from the provided `ServiceProvider` meaning the lifetime rules are adhered to - e.g. `ServiceLifetime.Transient` is now correctly used. This is the preferred way to execute a query","","## Changes","","- `EntityGraphQL` (the core library) targets both `netstandard2.1` \u0026 `net6`. `netstandard2.1` will be dropped around the time of `net8.0` being released.","- Introduced `GraphQLFieldAttribute` to allow you to rename fields in the schema as well as mark methods as fields in the schema. Method parameters will become field arguments in the same way as mutation methods. See updated docs for more information.","- Argument types used for directives now read `DescriptionAttribute` and `GraphQLFieldAttribute` to use different field name in the schema and set a description","- Added `GraphQLInputTypeAttribute`. Whereas `GraphQLArgumentsAttribute` flattens the types properties into the schema, `GraphQLInputTypeAttribute` assumes the type is an input type and uses that as the schema argument","- You may implement you own `GraphQLValidator` by implementing (and registering) `IGraphQLValidator`","- Added a `options.BeforeExecuting` callback to allow modification of the expression before execution","","## Fixes","","- #266 - Fix error calling `AddPossibleType()` when some of the types have already been added to the schema","- `ExecutionOptions` passed into `IApplicationBuilder.UseGraphQLWebSockets()` are now used when executing the queries for the subscription","- #284 - Support generic class types as mutation arguments. `MyClass\u003cOtherClass\u003e` will become `input MyClassOtherClass {}`","- #302 - Fix issue where using service fields with `IQueryable`/`DbContext` fields","","# 4.3.1","","## Fixes","","- Fix issue using the `OneOf` directive with `ArgumentHelper.Required\u003cT\u003e()` in a query field argument.","","# 4.3.0","","## Changes","","- #285 - Add support for implicit operators when converting types","- Fix how EntityGraphQL evaluates the root level fields that return lists. If the return type of the field is nullable a `null` will be returned if the result is `null`. If the return type is non-nullable an empty `List\u003cT\u003e` will be returned.","","```cs","public class UserDbContextNonNullable","{","    // empty list will be returned if UserIds resolves to null. If you use nullable types you can control with the ? operator (to return null)","    [GraphQLNotNull]","    public List\u003cstring\u003e UserIds { get; set; }","}","```","","## Fixes","","- #288 - fix stack overflow in `RuntimeTypeJsonConverter`","- #291 - Fix `ResolveWithService` being called twice due to `Expression.Condition` if the field is a list and at the root level of the Query type","","# 4.2.1","","## Fixes","","- Fix issue selecting repeated fields from an interface and a fragment selection","- Fix issue selecting interface fields from the concrete type in a fragment","","# 4.2.0","","## Changes","","- #281 - Implement allowed exceptions to allow exceptions to come into the error result when running with `IsDevelopment == false` as users not be able to modify the exceptions being thrown in order to have them implement `IExposableException`. Exceptions may be allowed with an exact type match, or allowed including all types that inherit it","","## Fixes","","- Prevent double SQL (when using against EF) query on base type (4.1 regression)","- #279 - Remove duplicate fields when creating expressions","- #280 - Fix for mutations that return interfaces/unions","","# 4.1.2","","## Fixes","","- Fix issue when using paging extension and aliases in the query e.g. `{ myList { myEdges: edges { .. } } }` previously would fail","","# 4.1.1","","## Fixes","","- #221 - Apply null check on the `ToList` expression built to resolve list expressions","- Better support for service fields at the root query level","- Fix support for service fields that take a complex type (object or enumerable) as arguments","- Fix `UseFilter()` `filter` and `UseSort()` `sort` field arguments were incorrectly being marked as required in schema introspection","- Fix issues with default sort values for `UseSort()` not appearing in the schema as default values","- Fix output of default values in schema for lists and objects","","# 4.1.0","","## Changes","","- #262/#205 - Option to prevent leaking internal exceptions into the 'errors' field on a result.","","When running in development (read via `IWebHostEnvironment.IsEnvironment(\"Development\")` or when manually creating `SchemaProvider`), messages of exceptions will not be dumped out into the 'errors' field of a query result, unless they implement the newly created (and empty) interface `IExposableException`.","","- #260 - Support default values in C# methods for mutations","- #264 - Versions prior to .NET 7, `System.Text.Json` doesn't support the serialization of polymorphic type hierarchies. EntityGraphQL now registers a `RuntimeTypeJsonConverter` class as part of the `DefaultGraphQLResponseSerializer`","","## Fixes","","- #264 - Interface/union queries used to require you to query for at least 2 of the subtypes at once.","- Fix issue with service fields that take nullable type fields as arguments","","# 4.0.1","","## Fixes","","- #248 - Make sure directives run on fields that map a list of items to a single item (e.g. `myItem(id: Int!) @include(...) { ... }`)","- #213 - Multiple levels of `TargetInvocationException` will now be unwrapped","- #82 - SchemaBuilder can now handle fields that return `Task\u003c\u003e`. Note that the way that queries expressions are built you may still encounter issues with `async` fields not at the root query level. Please open an issue if you do","- #259 - Fix introspection of nullable/non-nullable lists with nullable/non-nullable items","- #239 - Fix issues rejoining main context from a service field","","# 4.0.0","","## Fixes","","- #243 - support `application/json; charset=utf-8` content type","","# 4.0.0-beta2","","## Fixes","","- Fix issue related to #235 where the multiple fields are the same field with different alias and arguments","","## Breaking Changes","","- `IFieldExtension.ProcessExpressionSelection` now takes a `ParameterExpression? argumentParam` argument which is the argument parameter used at execution time (if there is one). Relating to #235","","# 4.0.0-beta1","","## Breaking changes","","- `DateTimeOffset` is now added as a default scalar type in schema creation. It is a very common used type in EF contexts and trips up new users. If you previously were adding it as a scalar type you no longer need to. Or if you'd like to add it differently (like map it to Date) you can","","```c#","services.AddGraphQLSchema\u003cDemoContext\u003e(options =\u003e","{","    options.PreBuildSchemaFromContext = (schema) =\u003e","    {","        schema.RemoveType\u003cDateTimeOffset\u003e();","        // add it how you want","    };","});","```","","- `AddMutationsFrom` and friends now take an optional `SchemaBuilderMethodOptions` options object to configure how mutations are built, following the `SchemaBuilderOptions` used elsewhere. See updated docs. Important defaults:","","```c#","bool AutoCreateInputTypes = true; // Any input types seen will be added to the schema","bool AddNonAttributedMethods = false; // GraphQLMutationAttributes are still required by default","bool AutoCreateNewComplexTypes = true; // Return types of mutations will be added to the schema","```","","- `SchemaBuilderOptions.IgnoreTypes` Now uses `Type` instead of `string`. It is a `HashSet\u003cType\u003e` now to avoid confusion of which name to use (full name space or not)","- `ProcessExpressionSelection` used in Field Extensions now takes `Dictionary\u003cIFieldKey, CompiledField\u003e` for the `selectionExpressions` parameter. `IFieldKey` is the field name and the schema type the field belongs too. Helps when dealing with inline fragments/union types where we may have multiple fields with the same name from different types.","- `MutationArgumentsAttribute` renamed to `GraphQLArgumentsAttribute` and is used with subscriptions or mutation method arguments","","## Changes","","- Add support for GraphQL subscriptions - see updated documentation","- Added support for defining Union types in the schema (#107)","- Core library `EntityGraphQL` only targets `netstandard2.1` as we do not need to multi-target and this still supports a large dotnet base (3.1+)","","## Fixes","","- Fix #206 - If a service field included a binary expression EntityGraphQL would sometimes build an incorrect selection expression","- Fix #214 - The implicit conversion return type of a `ArgumentHelper.Required\u003c\u003e()` field argument is non-null","- Fix #212 - Regression using a static or instance method in a service field","- Fix #223 - Mutations with inline args don't support variables with different name to argument name","- Fix #225 - Mutations with separate (not using `MutationArgumentsAttribute`) parameters fail if called without variables","- Fix #229 - Using `Field.Resolve()` would incorrectly assume the field had a service","- #219 - Handle conversion of variables as lists to a `RequiredField\u003c\u003e` arg of the list type","- #215 - Fix issue using GraphQLValidator if using inline mutation arguments","- #235 - Fix issue where arguments with the same name at the same level in a query would receive the same value","","# 3.0.5","","## Fixes","","- Fix #197 - If a mutation returns `Task\u003cT\u003e` use `T` as the return type","- Fix #204 - Nullable reference types correctly produce a nullable argument in the schema","- If not using `MutationArgumentsAttribute` in mutation methods `autoAddInputTypes` was being ignored","","# 3.0.4","","## Fixes","","- Fix #194 - `HasType()` was not checking type mappings","","# 3.0.3","","## Fixes","","- Prevent creation of invalid GraphQL schemas","  - Exception is thrown if you try to add a field with arguments to types that do not support arguments - `Enum` \u0026 `Input` types","  - Exception is thrown if you try to add fields to a `Scalar` type","  - Exception is thrown on invalid type name","- Schema builder now creates a valid GraphQL type name for generic types","- Enum types are now added to the schema as a typed `SchemaType\u003cT\u003e` instance. Meaning you can fetch them using `schema.Type\u003cMyEnum\u003e()`","- Fix #181 - Schema builder now correctly respects `SchemaBuilderOptions.IgnoreTypes`. Note it compares names against the `Type.FullName`","- Fix #182 - Add missing dotnet scalar type for `char`. By default this is added as a schema scalar type named `Char` so the client can decide how to handle it. Over the wire it will serialize as a string (default for `System.Text.Json`). You can change default scalars and mappings by using the `PreBuildSchemaFromContext` action when adding your schema","","```","services.AddGraphQLSchema\u003cTContext\u003e(options =\u003e {","  options.PreBuildSchemaFromContext = schema =\u003e","  {","      // remove and/or add scalar types or mappings here. e.g.","      schema.AddScalarType\u003cKeyValuePair\u003cstring, string\u003e\u003e(\"StringKeyValuePair\", \"Represents a pair of strings\");","  };","})","```","","- When generating a field name for the field that takes an ID argument if the name generated matches the current field EntityGraphQL will add `ById` to the field name. E.g. a property `List\u003cLinePath\u003e Line { get; set; }` previously would try to add the `line: [LinePath]` field with no arguments and another field named `line(id: ID!): LinePath`. This causes an error. EntityGraphQL will name add `lineById(id: ID!): LinePath`. This is because the singularized version of \"line\" is \"line\".","- In built field extensions now check if their extra types have already been added by using `Type` instead of name allowing you to add them with your own descriptions etc.","- Fix mutations without any mutation arguments would incorrectly include the query context as an argument","","# 3.0.2","","## Fixes","","- `InputValue` type was being registered under wrong name #184","","# 3.0.1","","## Fixes","","- Input Types were incorrectly getting field arguments added when using `AutoCreateFieldWithIdArguments`","","# 3.0.0","","## Breaking changes","","- `IDirectiveProcessor` now requires a `List\u003cExecutableDirectiveLocation\u003e On { get; }` to define where the directive is allowed to be used","- Removed obsolete `ISchemaType.BaseType`. Use `ISchemaType.BaseTypes`","- Cleaned up `SchemaType` constructors - using `GqlTypeEnum` instead of many boolean flags","- Removed obsolete `SchemaProvider.AddInheritedType\u003cTBaseType\u003e`","- Removed the instance parameter from `AddMutationsFrom` and friends. Mutation \"controllers\" are now always created per request like an asp.net controller. Use DI for any constructor parameters","- Renamed `ISchemaType.AddBaseType` to `ISchemaType.Implements` to align with GraphQL language","  - `ISchemaType.Implements` will throw an exception if you try to implement a non-interface","- Renamed `ISchemaType.AddAllBaseTypes` to `ISchemaType.ImplementAllBaseTypes` to align with GraphQL language","- `Create` \u0026 `FromObject` on `SchemaBuilder` now take option classes to configure the create of the schema through reflection","  - `ISchemaType.AddAllFields` also takes the option class to configure it's behavior","  - `ISchemaType.AddAllFields` default behavior now auto adds any complex types found really reflection the properties \u0026 fields and will add those to the schema","- Added new option when building a schema with `SchemaBuilder.FromObject` - `AutoCreateInterfaceTypes`. Defaults to `false`. If `true` any abstract classes or interfaces on types reflected with be added as Interfaces in the schema. This is useful if you expose lists of entities on a base/interface type.","","## Changes","","- `ToGraphQLSchemaString` now outputs directives in the schema","- #154 - Dynamically generated types used in the expressions now include the field name the type is being built for to aid in debugging issues","- #146 - Allow GraphQL mutation arguments as separate arguments in the method signature. Avoiding the need to create the mutation argument classes. e.g.","","```","[GraphQLMutation]","public Person AddPersonSeparateArguments(string name, List\u003cstring\u003e names, InputObject nameInput, Gender? gender)","{","  // ...","}","","[GraphQLMutation]","public Person AddPersonSingleArgument(InputObject nameInput)","{","  // ...","}","```","","Turn into","","```","type Mutation {","  addPersonSeparateArguments(name: String, names: [String!], nameInput: InputObject, gender: Gender): Person","  addPersonSingleArgument(nameInput: InputObject): Person","}","```","","- #160 - Nested data annotations for validation is now supported","- Main `EntityGraphQL` package now targets `net6.0;net5.0;netstandard2.1`","- #170 - EntityGraphQL now replaces query context expressions in service fields by matching the expression instance it extracted. This allows for more complex expressions when passing data to a service field","- Added support for [@oneOf Input Types](https://github.com/graphql/graphql-spec/pull/825). Mark an input type with `GraphQLOneOfAttribute` and EntityGraphQL will mark the type with `@oneOf` in the schema and validate the input meets the requirements on execution","","## Fixes","","- #171 inheritance support for nested properties / conditional fields","- #176 - allow fully qualified enums in the filter query language","","# 2.3.2","","## Fixes","","- Fix #159 - SchemaBuilder will no longer try to create schema fields for `const` fields on mutation args or input types","","# 2.3.1","","## Fixes","","- #163 - Fix to handle null property in a nested object when processing a System.Text.Json deserialised query document","- #164 - Fix to support inline fragments in a fragment","- #166 - Add missing `!=` operator in the filter expression language and make sure precedence is correct for logic operators","","# 2.3.0","","## Changes","","- `AddMutationsFrom` now can use the `ServiceProvider` instance to create the mutation class allowing dependency injection at the constructor level like Controllers.","- You can still provide an instance of the mutation class that will be used instead which is the same behavior as previous, however this method is considered obsolete and will be removed in a future version. We suggest you utilse the ServiceProvider to register your mutation classes with your desired lifetime.","- Allow types to inherit from multiple base classes/interfaces","- Cleanup SchemaType to use an enum instead of lots of boolean type variables. Previous constructor is obsolete","- Cleanup Interfaces api - added a `AddAllBaseTypes`, `AddBaseType` and `AddBaseType(string)` which provides a lot more flexibility. See updated docs","- Added support for Inline Fragments for types that have interfaces","- `ToGraphQLSchemaString` now orders types and fields by name for consistency regardless of order of fields added and to reduce differences when diffing the schema","","## Fixes","","- Fix #120 - Error when using `schema.RemoveTypeAndAllFields` and a field of the removing type had a type that has not been added to the schema","- Fix #143 - Error building a null check expression in certain cases.","","# 2.2.0","","## Changes","","- `FromObject` / default schema generator now adds single fields within non root-level fields. E.g. if a root-level field is a list of `people` and each person has a list of `projects` (and projects has an id) is will create a field on `project(id)` field on person","- Add support for nullable reference types - meaning the correct GraphQL schema nullable definitions are generated. @bzbetty","","## Fixes","","- Fix generation of singular field with `id` arguments on list fields that use a paging extension when generating a schema. @bzbetty","- Fix - when adding Mutation argument types only search for public instance properties. @breyed","- Fix interface query introspection. @bzbetty","- Fix #137 - multiple line endings were used in the schema output","- Fix - make sure we use an array for arguments when expected instead of a list\u003c\u003e","","# 2.1.5","","- Fix null exception in service field from an object field","","# 2.1.4","","- Fix #123 do not output types with no fields in the schema definition","- Fix issue calling `ToList` in an expression that then used a `IQueryable` `FirstOrDefault` or friends. Resulting in an invalid expression at runtime","","# 2.1.3","","- Fix - Throw an error if your query document defines a non-null variable and a null value is supplied","- Service fields that return a list of items are now wrapped in a null check expression like service fields that return a single object are","- Fix - Object fields not included in the schema could be returned when the selection set was missing from the query. Now missing selection sets on list or object fields in queries throw an error. Selection sets are required in graphql queries for non scalar/enum field types. Thanks @breyed","","# 2.1.2","","- Fix - issue with a field using a static member e.g. DateTime.MaxValue","","# 2.1.1","","- Fix - issue where a nullable value was incorrectly being called","","# 2.1.0","","- Added support for interfaces - thanks @bzbetty","- Added `EntityGraphQLException` - use this to throw exceptions and add more error data to the error result via extensions","- `GraphQLValidator` now supports adding custom data via the extensions field","- `ResolveWithService` methods will throw an exception if the expression returns `Task` as we need the result. Use `.GetAwaiter().GetResult()`. Expression do not support `async`/`await` as it is a compiler feature and we need the actual result to build the expression and return the data","- Fix using QueryFilter with an empty string treats it as no value - i.e. no filter","- Fix - the type of an array variable defined as required `[Type!]!` was incorrectly reflected","- Fix - service type's field used in a field's expression was not being extracted into the select. E.g. service field `User.project` has an expression requiring the `user.id` which is not included in the GraphQL query.","","# 2.0.3","","- Fix thread safety issue with cached queries","- Fix support for using arrays in field argument definitions","","# 2.0.2","","- fix regression where non-required (nullable) document variables would be set their non-nullable default value. E.g. `Guid`","","# 2.0.1","","- Fix regression where non service fields in service fields were not being pulled forward to the stage one expression execution.","- Fix regression where services were not be passed to a mutation with no arguments","","# 2.0.0","","## Breaking changes","","- Interface for Field Extensions now are passed a flag telling the extension if this is pre or post the call with service fields","- `GetExpression` in Field Extensions is passed the parent IGraphQLNode - useful when your extension changed the original shape of the object graph, like the paging extensions","- `services.AddGraphQLSchema` adopts a more ASP.NET style `options` callback overload to configure the creation of the schema","- `MapGraphQL` implementation now returns `400` Bad Request status code if the query results contains errors, as a bad query was sent","- Directive interface for building custom directives has changed","- `UseSort` field extension now takes an array of `SortInput\u003cT\u003e` so order of sorts is used","- Parsing floats/doubles/decimals now uses `CultureInfo.InvariantCulture`","  Clean up on the schema building APIs to make them more consistent, documented and concise","- Fix #89 - Remove JSON.NET dependency - This means internally if EntityGraphQL hits a `JObject` or `JToken` it does not know what to do with them. Make sure `QueryRequest.Variables` are fully deserialized. I.e. do not have any `JObject`/`JToken`s in there. Deserialize them to nested `Dictionary\u003cstring, object\u003e`.","","If you use the EntityGraphQL.AspNet package and the `MapGraphQL()` method you do not need to worry about anything. EntityGraphQL.AspNet uses `System.Text.Json` and handles the nested `JsonElement`s with a custom type converter.","","If you are directly using `SchemaProvider.ExecuteRequest()` (i.e. from a Controller or elsewhere), and you are using `Newtonsoft.Json` to deserialize the incoming `QueryRequest` you can add a custom converter to your schema to handle nested `JObject`/`JToken`s when encountered in query variables.","","```","schema.AddCustomTypeConverter(new JObjectTypeConverter());","schema.AddCustomTypeConverter(new JTokenTypeConverter());","```","","See the [serialization tests for an example](https://github.com/EntityGraphQL/EntityGraphQL/blob/main/src/tests/EntityGraphQL.Tests/SerializationTests.cs).","","- Remove the `WithService()` method used inside a field expression and replace it with `ResolveWithService\u003cTService\u003e()` on the field for easier discovery in your IDE. Example","","```","schema.Type\u003cPerson\u003e().AddField(\"age\", \"A persons age\")","  .ResolveWithService\u003cAgeService\u003e(","      (person, ageService) =\u003e ageService.GetAge(person.Birthday)","  );","```","","- Clean up of `SchemaType` APIs to add/replace/remove fields.","  - Remove `SchemaProvider.Add/ReplaceField` methods.","    - Use `SchemaProvider.Query().Add/ReplaceField()` or `SchemaProvider.UpdateQuery(queryType =\u003e {})` to make changes to the root Query type in the schema","  - Additions to the `Field` API to add more uncommon functionality to chaining methods","  - Remove `SchemaProvider.UpdateQueryType()`, use `SchemaProvider.UpdateQuery(type =\u003e {})`","  - Remove `SchemaProvider.TypeHasField()`","  - Remove `SchemaProvider.GetQueryFields()` - use `SchemaProvider.Query.GetFields()`","  - Renamed `GetGraphQLSchema()` to `ToGraphQLSchemaString()`","  - Renamed `AddMutationFrom()` to `AddMutationsFrom()`","  - Removed Obsolete methods:","    - `RequiresAllClaims` replaced by `RequiresAllRoles`","    - `RequiresAnyClaim` replaced by `RequiresAnyRole`","    - `ExecuteQuery` replaced by `ExecuteRequest`","    - `ExecuteQueryAsync` replaced by `ExecuteRequestAsync`","","## Changes","","- Support for persisted queries (enabled by default) - https://www.apollographql.com/docs/react/api/link/persisted-queries/","- Support for a query cache of recent queries. Enabled by default. Caches the result of compiling the query document string to an AST. Execution is then applying the document level variables, building the expressions then execution","- Better support for nested objects in `QueryVariables`","- Performance enhancements when building internal types for arguments","- Performance of compiling and building expressions has been improved - it is about 2 times faster. Note this is just building the expressions, not executing them which triggers your services/EF/etc","- Reduction in memory allocation when compiling queries by around 30%","- You can no add/define mutation methods as delegates/anonymous functions etc.","- You can now use `[Range]` \u0026 `[StringLength]` attributes on your arguments for more validation options","- Introduced custom argument validators - a simple way to act on field arguments before execution. Great for custom/complex input validation on arguments. Use `field.AddValidator()` or the `ArgumentValidatorAttribute` attribute.","- Using `AddAllFields(true)` on an `InputType` will add the sub-complex class types as `InputType`s as well","- New option to auto add other classes found on mutation arguments as `InputType`s when adding a mutation","","## Fixes","","- Fix - Paging field extensions are now thread safe to support multiple different queries being run on the same field at the same time","- Fix #101 - allow custom de/serialization of incoming requests and outgoing responses, via. services `IGraphQLRequestDeserializer` \u0026 `IGraphQLResponseSerializer`.","  - _Note that the objects created in the resulting `QueryResult` have fields named like the fields in the schema which is controlled by the `fieldNamer` function provided to the `SchemaProvider` which defaults to GraphQL \"standard\" (fields camelCase, types PascalCase)_","- Fix field name looks up that were not using the `fieldNamer` function in `SchemaProvider`","- Fix bug where compiler would loop through all available arguments even if it already found the matching type","- Fix argument types of unsigned short/int/long","- Fix #72 - Handling dictionaries introspection - note it will try to create a scalar type `KeyValuePair\u003cT1, T2\u003e` in the schema by default","- Fix handling argument types of unsigned short/int/long","- Fix issue parsing float/double argument values","- Fix null exception with mutations returning a selection with a list field","- Fix directives on mutation fields","- Fix #110 - Field using the wrong sort input object when the fields are the same","","# 1.2.1","","- Fix #99 issue using the MapGraphQL() extension method","","# 1.2.0","","- New option to disable introspection. Use `introspectionEnabled` parameter when creating `SchemaProvider`. Defaults to `true`.","","# 1.1.2","","- Fix #96 - processing int/long/short as list arguments in mutations - thanks @pierrebelin","","# 1.1.1","","- Fix #92 - error processing mutation arguments that are lists/arrays","","# 1.1.0","","- Authorization now supports using ASP.NET policies from the `EntityGraphQL.AspNet` package","  - `IAuthorizationService` is resolved to check authorization and needs to be registered","  - `[Authorize]` attribute can be used instead of the `[GraphQLAuthorize]` attribute when using `EntityGraphQL.AspNet`","- Fix - `RequiredAttribute` results in the field being not null in the generated GraphQL Schema","- Fix - Schema introspection was incorrectly returning `__typename` for Enums","- `UseConnectionPagingAttribute` takes optional arguments for default page size and max page size","- `UseOffsetPagingAttribute` takes optional arguments for default page size and max page size","- `EntityGraphQL.AspNet` now uses System.Text.Json for de/serialization internally. It still supports JSON.NET objects in the variable object (as well as System.Text.Json types)","- Fix #19 - you can mark fields (including mutations) as deprecated using the dotnet `[Obsolete]` attribute or the `IField.Deprecate(reason)` method in the schema building","- Fix #88 - If an argument is marked as required and not provided in the query request an error is raised. Mark arguments optional via the API, or make it a nullable type or give it a default value","- Query used in ConnectionPaging now resolves itself using `.ToList()`","","## Obsolete - will be removed 2.x","","- `RequireAnyClaim()` \u0026 `RequireAllClaims()`. Use `RequireAnyRole()` \u0026 `RequireAllRoles()` as the `ClaimTypes.Role` was used previously and this change makes it explicit","- `schema.ExecuteQueryAsync/ExecuteQuery(QueryRequest, TContextType, IServiceProvider, ClaimsIdentity, ExecutionOptions)`. Use the `ExecuteRequest`/`ExecuteRequestAsync` methods that take the full `ClaimsPrincipal` as we now support authorization with policies","","# 1.0.3","","- Fix #86. Mutations not correctly checking required authorization on the mutation field directly","","# 1.0.2","","- Fix - `RequiredAttribute` results in the field being not null in the generated GraphQL Schema","- Fix issue with expressions failing in a high throughput, threaded use case (heavily hit API)","","# 1.0.1","","- Fix issue passing optional enum arguments","","# 1.0.0","","- New extension methods to ease adding your schema to the service collection. See docs - `services.AddGraphQLSchema\u003cDemoContext\u003e(options =\u003e {})`","- New package EntityGraphQL.AspNet with extensions to easily expose a graphql endpoint with `MapGraphQL\u003cT\u003e()`.","","```c#","app.UseEndpoints(endpoints =\u003e","{","    endpoints.MapGraphQL\u003cDemoContext\u003e();","});","```","","- Fix issue reconnecting from a service field to the context","- Fix issue when execution is split across non service fields and then with service fields and the first result is null","- Fix issue using Connection/Offset paging on collection fields that were not on the query root","- Fix issue using Connection/Offset paging on collection fields that have service fields","- Option to add default sort when using `UseSort()` field extension","- Fix service fields in an inline fragment selection","","# 0.70.0","","- Introduction of fields extensions to encapsulate common field logic and apply it to many fields. See update [docs](https://entitygraphql.github.io). New built in field extensions","  - `UseConnectionPaging()` which when applied to a collection field modifies the field to implement the GraphQL Connection spec for paging data with metadata","  - `UseOffsetPaging()` which when applied to a collection field modifies the field to implement an offset style paging structure","  - `UseFilter()` which when applied to a collection adds a `filter` argument that takes an expression","  - `UseSort()` which when applied to a collection adds a `sort` arguments that takes fields to sort the collection by","- Replaced Antlr based GraphQL query lexer/parser with HotChocolate.Language Parser. Parsing of query documents is _much_ faster!","- You can now directly use lists (`[12,32]`, etc) and objects (`{name: \"Frank\"}`) as arguments in the query document. Although it is still recommended to use the `Variables` in the query","- Added benchmarks to help explore performance issues in expression building (What we do with expressions is fast, but found the Antlr Parser was slow)","- Directives now supported on fragment spreads","","_Breaking changes_","","- EntityGraphQL now targets netstandard2.1","- Some optional arguments in `ExecuteQuery` moved to an Options object","","# 0.69.0","","- New docs https://entitygraphql.github.io/introduction","- Added `SchemaProvider.UpdateType\u003cT\u003e(Action\u003cSchemaType\u003cT\u003e\u003e updateFunc)` to better help \"contain\" schema types. Instead of","","```","schema.Type\u003cMyType\u003e().AddField(...);","schema.Type\u003cMyType\u003e().AddField(...);","schema.Type\u003cMyType\u003e().AddField(...);","```","","we have","","```","schema.UpdateType\u003cMyType\u003e(t =\u003e {","  t.AddField(...);","  t.AddField(...);","  t.AddField(...);","});","```","","Similar for `SchemaProvider.AddType\u003cT\u003e(string name, string description, Action\u003cSchemaType\u003cT\u003e\u003e updateFunc)`","","- You can pass a `ILogger\u003cSchemaProvider\u003cT\u003e\u003e` when creating a `SchemaProvider`. Exceptions etc. will be logged","- Added `Take\u003cTSource\u003e(this IQueryable\u003cTSource\u003e source, int? count)` that works on `IQueryable\u003cT\u003e` to support EF translation","","_Breaking changes_","","- EntityGraphQL now targets netstandard2.0","- Big refactor/clean - hopefully easier to follow the post Antlr (compiled graphql) output - see `GraphQL*Field` classes","- Support for dotnet Entity Framework Core 3.1+ when using other services in the schema (`WithService()`)","- Removed the `Where\u003cTSource\u003e(this IEnumerable\u003cTSource\u003e source, EntityQueryType\u003cTSource\u003e filter)` helper. Use the `WhereWhen` methods that support `EntityQueryType`","","To support EF 3.x as a base schema context we now build and execute expressions in 2 stages. See the updated readme section How EntityGraphQL handles WithService().","","# 0.68.1","","- Update Humanizer.Core dependency which resolves issue with newer dotnet core","","# 0.68.0","","- Fix issue where `FieldNamer` was not being consistently used. Thanks @AnderssonPeter","- Make sure we include inner exceptions on errors. Thanks @AnderssonPeter","- Added string and long parsing for DateTime and DateTimeOffset. Thanks @GravlLift","","# 0.67.0","","- As per GraphQL spec commas are optional (previously EntityGraphQL expected them in field/mutation arguments)","","_Breaking changes_","","- errors property on query result should not be present on the response if there are no errors per the graphQL specification.","","# 0.66.1","","- Fix bug with using `WithService()` when you require the schema context service again to create a link between services","","# 0.66.0","","- When using services other than the schema context in fields (that return a single object not a Enumerable) the methods/services are no longer executed multiple times. (issue #36). Notes below","- When a string matches a date time it will be converted to a `DateTime` object. Useful when using the `ArgumentHelper.EntityQuery` for advanced filtering. Regex matches `\"yyyy-MM-dd HH:mm:ss.fffffffzzz\"`, `\"yyyy-MM-dd HH:mm:ss\"`, `\"yyyy-MM-dd\"` with the separator between date and time being either ` ` or `T`","- `EntityQueryCompiler` (used in `ArgumentHelper.EntityQuery`) supports Enums","- `fieldNamer` used in mutations too","","_Breaking changes_","","- Cleaning up the API. The optional `isNullable` argument is removed from the `AddField()` methods. Use `IsNullable(bool)` method on the `Field` class or the `[GraphQLNotNull]` attribute.","- Cleaning up the API. `fieldNamer` argument removed from methods in `SchemaProvider` and `SchemaType`. Pass in a `fieldNamer` func to the constructor of `SchemaProvider` which will be used when it is auto creating fields. If you pass it in via `SchemaBuilder.FromObject` it will set it on the `SchemaProvider` created.","- `AddCustomScalarType()` removed. Previously marked as obsolete. Use `AddScalarType()`","","## Notes of services fix","","If you build a field like so","","```c#","schema.AddField(\"myField\", ctx =\u003e WithService((IMyService srv) =\u003e srv.DoSomething(ctx)));","","// Register the service with DI somewhere","public class MyService: IMyService {","  public SomeObject DoSomething(Context ctx)","  {","    // do something","    return data;","  }","}","```","","With a query like","","```gql","{","  myField { field1 field 2 }","}","```","","We use to build an expression like so","","```c#","srv.DoSomething(ctx) == null ? null : new {","  field1 = srv.DoSomething(ctx).field1,","  field2 = srv.DoSomething(ctx).field2","}","```","","We now wrap this in a method call that only calls `DoSomething(ctx)` a single time Which looks like this","","```c#","(ctx, srv) =\u003e NullCheckWrapper(srv.DoSomething(ctx), parameterValues, selection); // simplifying here","","// Again a simified example of what NullCheckWrapper does","public object NullCheckWrapper(Expression\u003cFunc\u003cContext, IMyService\u003e\u003e baseValue, object[] values, LambdaExpression selection)","{","  // null check","  if (baseValue == null)","    return null;","  // build the select on the object","  var result = selection.Compile().DynamicInvoke(baseValue);","}","```","","This works with services used deeper in the graph too. Example","","```c#","schema.Type\u003cPerson\u003e().AddField(\"complexField\", (person) =\u003e DoSomething(person.Id));","```","","GraphQL","","```gql","{","  people {","    complexField {","      field1","      field1","    }","  }","}","```","","The wrapped expression looks like this","","```c#","(ctx, srv) =\u003e ctx.People.Select(person =\u003e new {","  complexField = NullCheckWrapper(srv.DoSomething(person.Id), parameterValues, selection); // simplifying here","})","```","","This has been tested with EF Core and works well.","","# 0.65.0","","- You can now secure whole types in the schema. Add the `[GraphQLAuthorize(\"claim-name\")]` to the class or use `schema.AddType(...).RequiresAllClaims(\"some-claim\")`, `schema.AddType(...).RequiresAnyClaim(\"some-claim\")`","- Add `GetField(Expression\u003cFunc\u003cTBaseType, object\u003e\u003e)` overload","- operation name is optional for a `query` operation as per GraphQL spec if it is the only operation in the request","- Breaking - removed the `authorizeClaims` argument from `AddField()`. Please use `field.RequiresAllClaims(\"some-claim\")`, `field.RequiresAnyClaim(\"some-claim\")`","","# 0.64.0","","- Change - descriptions generated for a `.graphql` schema file now use the multiple line triple-quote `\"\"\"`","- Fix issue where an `WithService()` expression is wrapped in a `UnaryExpression` and we fail to get the lambda","","# 0.63.0","","- Expose a `SchemaProvider.ExecuteQueryAsync()`","- Fix #53 support mutations with no arguments","- With the above fix the context and/or the mutation arguments parameters are optional in your mutation method","- the parameters in the mutation methods are no longer required to follow a position","- `SchemaProvider.AddCustomScalarType()` is deprecated, use `AddScalarType`","- Directvies are now included in schema introspection","- Fix #52 - sometimes incorrect types generated for schema introspection or the GraphQL schema file format","- Refactor type information held in the schema. This mean return types etc are evaluated at schema creation time not execution. If you add a field that requires a type as an Argument or return type, that type must already be in the schema","- You can now provide a field namer function to name the generated fields when using `SchemaBuilder.FromObject()`, `ISchemaType.AddAllFields()` or `SchemaProvider.PopulateFromContext()`","","_Breaking changes_","","- The class that represents the mutation arguments must be marked with the `MutationArgumentsAttribute` either at the class level or the parameter","- `SchemaProvider` now adds a default `Date` scalar type in the schema that maps to/from the C# `DateTime` class. If you were previously adding that you'll get an error on type existing. Use `SchemaProvider.RemoveType\u003cDateTime\u003e()` to remove it and add it with a different name","- Type mapping information (`AddTypeMapping()`) are evaluated at schema creation time. You may need to add mappings before creating the rest of your schema","","## 0.63.0-beta1 to 0.63.0-beta2","","- Removed the empty `IMutationArguments` in favor for a `MutationArgumentsAttribute` on the parameter or the class","","# 0.62.0","","- Support async mutation methods","","# 0.61.0","","- Add model validation for mutation arguments. See updated readme","- Fix issue with services not correctly being included when the field is used in a fragment","","# 0.60.0","","- Add support for directives. Supported by default are `@include(if: Boolean!)` and `@skip(if: Boolean!)`. You can add your own that make changes to the expression pre-execution","- Added syntax support for subscription queries (they compile/no error but do not execute or work)","- Removed support for older syntax of complex queries that is not GQL standard","- Refactored `GraphQLVistor` and friends to make it easier to follow what is happening (I hope). See CONTRIBUTING.md for some notes","- From my testing the compiling and expression building is 15-20% faster than before (still network and or the DB calls are the largest)","- Allow `enum` values in the query schema (e.g. as an argument)","- Ignore static properties \u0026 fields on the object passed to `SchemaBuilder.FromObject` - they were not supported and threw errors anyway","","# 0.50.1","","- Name all `ParameterExpression`s as EF 3.1 expects a name (can throw an error)","","# 0.50.0","","- Fix claims check when required claims are empty","- Fix error message state which claims are required for the given access error","","# 0.50.0-beta1","","- Sorry about the quick turn around","- Breaking changes","  - Using DI inspired design now instead of the `TArg`","  - Use `WithService` helper to let EntityGraphQL know which services you require e.g. in an `AddField` use `(db, p) =\u003e WithService\u003cIUserProvider\u003e(users =\u003e users.Load(p.id))`","  - For mutations just add the services as arguments (at the end) as you typically do in dotnet","  - `schema.ExecuteQuery()` takes an `IServiceProvider` which it uses to look up required services like `IUserProvider` above","","# 0.40.0","","- Breaking changes","  - Trying to clean up the interface for creating a schema and allowing an easier way to get services in mutations and field selections","  - Rename `MappedSchemaProvider` to `SchemaProvider`","  - Remove extension `object.QueryObject()` and require a more specific call to `SchmeaProvider.ExecuteQuery()`","  - `SchmeaProvider.ExecuteQuery()` takes a `TArg` type which is an argument that will be passed to all field selections and mutation methods. This replaces `mutationArgs` in `object.QueryObject()` and lets both mutations and field selections access other services non-statically (e.g. via `TArg` being an `IServiceProvider`). See updated readme and demo project","  - `SchemaProvider` is now create using `SchemaBuilder.Create\u003cTContext, TArg\u003e()` or `SchemaBuilder.Create\u003cTContext\u003e()` giving you a short cut for not providing a `TArg`","  - `SchemaBuilder.FromObject\u003cTContext, TArg\u003e()` now takes second type argument for the `TArg` value. Also `SchemaBuilder.FromObject\u003cTContext\u003e()` shortcut","- Fix bug where EntityQuery arguments were being cached in the schema","","# 0.32.1","","- Add `ContextId` to the ignored list in `SchemaBuilder` for EF 3.1","","# 0.32.0","","- Clean up `LinqExtensions`, removing the overloads that take `LambdaExpression`s. Use `.AsQueryable().Where(someExpressionVar)` instead. It works better with EF and other LinqProviders.","","# 0.31.0","","- Breaking change - Multiple `[GraphQLAuthorize]` mean all polices are required and supplying multiple in a single `[GraphQLAuthorize]` mean any","- Do not generate an empty mutation type if there are no mutations","- Fix query introspection to output mapped types correctly","- Support multiple queries in a request with the operation name of which one to run - e.g. how GraphiQL handles multiple queries","- Update error messages","- Clean up some APIs - `SchemaType.AddAllFields()`, `Field.RequiresAllClaims()`, `Field.RequiresAnyClaim()`","","# 0.30.0","","- Initial support for Authorization and Security in the schema - see updated readme and provide feedback","","# 0.29.0","","- Support `fragment` statements in other positions in the query","","# 0.28.2","","- Fix error with `EntityQueryType\u003c\u003e` as a field argument not being defined as a `String` in introspection","","# 0.28.1","","- Fix issue introduced in 0.28 when using the `RequiredField\u003c\u003e` type","","# 0.28.0","","- Only convert a string matching a `Guid` when the arg type is a `Guid` or `Guid?`","","# 0.27.2","","- Fix issue where a non-required EntityQueryType Filter throw an error if it wasn't supplied","","# 0.27.1","","- Better support mutations that return an object, not a list","","# 0.27.0","","- Introspection query `__type(name: \"\")` now correctly returns an object not an array","- `[Description(\"\")]` attributes on `enum` fields are now read into the schema","- Fix issue where introspection query would have duplicate types for enum types","","# 0.26.0","","- `ISchemaType.AddAllFields` requires a schema as it can add newly discovered types to that schema","- `ISchemaType.AddAllFields` by default adds new `enum` types to the schema if found as a field type","- `ISchemaType.AddAllFields` can (off by default) add new complex types to the schema if found as a field type","- `Schema.Type\u003cTType\u003e()` now searches by `TType` not `typeof(TType).Name`. Allowing you to add a type with a different name but still get the typed `SchemaType\u003cT\u003e` back","","# 0.25.0","","- Add the ability to add enum types to the schema","- The auto schema builder now adds enum types it finds to the schema by default","- Enum values are referenced by the string value, if using JSON.NET you will want to use `[JsonConverter(typeof(StringEnumConverter))]`","","# 0.24.0","","- Add `GraphQLNotNullAttribute` to mark fields as not nullable in the graphql schema","- By default when generating a `.schema` file `IEnumerable\u003cT\u003e` will generate the element type as not nullable. E.g. `[T!]`. Use `GraphQLElementTypeNullableAttribute` to mark it that the list can contain null items","- Support mapping `decimal` to `number`","- Better support for defining nullable or non-nullable types","","# 0.23.3","","- Allow adding a mapping type to a type that already exists in the schema. E.g. you might add an input type `Point` and want to map the dotnet type `Point` to it.","","# 0.23.2","","- fix issue with required type in an array e.g. `[ID!]`","","# 0.23.1","","- fix issue with generated required types","","# 0.23.0","","- Output fields as required in .graphql schemas","","# 0.22.0","","- You can now specify if a field is ignored for queries, mutations or both (if you're sharing DTOs/objects)","- Don't output the meta information of the schema in the schema definition","- Prevent duplicate scalar types in schema generation","- Fix issue where `mutation` keyword could not have any white space before it","","# 0.21.0","","- Change, make ENUMs a `Int` type as dotnet serialises them like that","- Fix input types missing for the SDL schema generated","- Fix issue where mutation args has repeating `ofType` data in introspection","- Fix issue where InputTypes would be duplicated in introspection query results","- Fix issue where `ToList()` was being called deep in expressions causing issues with EF","","# 0.20.0","","- Add the ability to add custom scalar types to the schema","- Fix a bug where introspection queries were in correct if you have a List/Array in your mutation type","","# 0.19.1","","- Fix a bug where mutation arg objects retained values from previous mutation - i.e if the next call to that mutation didn't provide some optional arguments","","# 0.19.0","","- `QueryObject()` calls `ToList()` on any lists so if you are using something like EF all queries will be evaluated on `QueryObject()`, not just the ones that return a single object (as they call `FirstOrDefault()`). This is more consistent, the result contains all your data (regardless of underlying ORM or not) and not a miz of evaluated and non-evaluated.","- Add `RemoveTypeAndAllFields()` on `MappedSchemaProvider` to more easily clean up a schema that was auto created by `SchemaBuilder.FromObject\u003cT\u003e()`","","# 0.18.4","","- Fix case matching of arguments in mutations. EntityGraphQL defaults to turning dotnet `UpperCaseFieldsAndProperties` to `camelCaseFieldsAndProperties` as this was the intention with the change in 0.18.0","- Enum values are as defined. E.g. if you have an enum `Meter` you can use `\"Meter\"` not `\"meter\"`","","# 0.18.3","","- map Int16 and UInt16 to Int","- Fix issue where argument names were not case sensitive (the Breaking change introduced in 0.18)","","# 0.18.2","","- Fix `kind` in schema introspection query to not have `!`","","# 0.18.1","","- Update dependencies (JSON.NET)","- Fix some small casing issues","","# 0.18.0","","- Support for schema introspection. Top two fields (`__schema` and `__type(name: String!)`) are implemented. There are some things missing where we currently don't support the feature (directives). GraphiQL introspection query executes and you can navigate the example. Big thanks to @JTravis76 for starting the work.","- Implement #18 default argument values in GQL operations `mutation MyMutation($arg: String = \"hey defaults\") { ... }`","- Breaking change - If you purely use `SchemaBuilder.FromObject()` it now creates all field names `lowerCaseCamel` and type names `UpperCamelCase` like the GraphQL defaults. Also since GraphQL is case sensitive I have enforced that. You _may_ need to update some queries to match casing","","# 0.17.0","","- Add the option to have other parameters passed into a mutation method. Very useful for IServiceProvider or other services your mutations require","","# 0.16.2","","- Fix issue where duplicate fields (say from a query and a fragment) would cause an error","","# 0.16.1","","- Bring inner exception details up","- Fix issue where fields that require arguments fail (See Paging example in Demo)","","# 0.16.0","","- Add support for full queries on a mutation result. See readme for more details (you return an Expression)","- Initial support for GraphQL fragments. fix #2","- Fix issues with using field arguments deeper in the graph schema","- Add support for `operationName` in the `GraphQLRequest`","- Add support for graphql comments","- Add GraphiQL web interface to the demo app","- Add `GraphQLIgnore` attribute to ignore a field on a Type for the automatic schema builder","- fix bug where it would sometimes try to give an `UInt64` to an argument that required an `Int32`","- (beta) Add `dotnet gql` command to generate a schema from your current DBContext. See readme for more info","","# 0.15.8","","- Add `WhereWhen()` to the extension helpers","","# 0.15.7","","- Fix bug in handling converting a string into an enum","- Fix issue looking up types internally when working with anonymous types","","# 0.15.6","","- Fix issue with incorrectly checking for generic types","","# 0.15.5","","- Fix issue with array types in the dynamically generated type for lambdas","","# 0.15.4","","- Fix issue where the generated GraphQL schema had the incorrect type for arrays (e.g. double[])","- Fix issue with `SchemaBuilder.FromObject` building invalid types from arrays.","","# 0.15.3","","- Fix an issue where it would generate an invalid field name if we couldn't singularize the name","","# 0.15.2","","- Move the query results into a `QueryResult` class so it is easier to work with","","# 0.15.1","","- Fix #11 - failure to use `RequiredField` with types like `uint` - it would try to initialise it with an `int`","","# 0.15","","- Remove old code that supported multiple fields with the same name and different arguments. GraphQL doesn't support that and it caused a bug where it would sometimes not find the field you want. You can implement optional arguments and build a complex field like `schemaProvider.AddField(\"myField\", new {name = (string)null, id = (Guid?)null}, (db, param) =\u003e param.id.HasValue ? db.MyEntities.Where(l =\u003e l.Id == param.id).FirstOrDefault() : db.MyEntities.Where(l =\u003e l.Name == param.name).FirstOrDefault(), \"Returns an Entity object by ID or a match on the name argument\");`","","# 0.14.4","","- Allow user to supply a type mapping for the generated GraphQL schema","","# 0.14.3","","- Fix an issue where we would some time identify a type as IEnumerable when it shouldn't have been","- Allow `ReplaceField` on a sub type","","# 0.14.2","","- Convert enums correctly","","# 0.14.1","","- Fix SchemaGenerator to support arrays better","- Support turning `QueryRequest` variables from JSON objects into their required objects","","# 0.14.0","","- Bring back `ReplaceField` as technically GraphQL doesn't support overloading, so if you're using tools like Apollo etc to generate code you need to only have unique fields","- Added `GetGraphQLSchema` on the schema to return a `.graphql` schema file for input into tools like Apollo codegen","- Add the option to add descriptions to Mutations","","# 0.13.1","","- Fix issue where operation name with no arguments failed","","# 0.13.0","","- Breaking change: Strings are now defined by double quotes `\"` to fit in with GraphQL better","- Added support to use a LINQ-style language as a argument in GraphQL. E.g the following GQL field, `{ users(filter: \"active = true and age \u003e 20\") { id name } }` can be defined with `schema.AddField(\"users\", new {filter = EntityQuery\u003cUser\u003e()}, (ctx, p) =\u003e ctx.Users.Where(p.filter), \"Return filtered users\")`. Letting you write that filter using any fields defined on the `User` object","- Add `null`/`empty` constant for checking for null in EQL","","# 0.12.1","","- Fix bug converting Int values to double? values","","# 0.12.0","","- Support field \"overloads\" - fields with same name and different arguments.","","# 0.11.0","","- Renamed package EntityGraphQL to emphasizes that it implements GraphQL","","# 0.10.1","","- Fix issue with arrays and objects in variables parameter on the request","- Better error messages when GraphQL arguments can't be mapped to an object","- Validate required variables in operations are supplied in the variables dictionary","- Fix potential issue with selecting sub object graphs","","# 0.10.0","","- Change the errors to appear in `errors` key along side `data` key as per GraphQL","- Fix an issue when selecting fields from a mutation result","","# 0.9.4","","- Support selecting an object that may be null `{ person {name} }` `person` will be null if it does not exist","","# 0.9.3","","- Parameter types can be optional (no `!`)","","# 0.9.2","","- Fix type issues with mutation args","- Change auto entity call with `id:` (e.g. `{ entity(id: 13)}`) to call the `First()` method last","- Fix issue with selecting a one-to-one relation in a query","","# 0.9.1","","- Fix a issue where schema and method provider were not being passed down in `QueryObject`","","# 0.9.0","","- Add initial support for Mutations","- `,` between fields is optional like in GraphQL","- Support `__typename` metadata","","# 0.8.0","","- `Moved EntityQueryLanguage.DataApi` namespace to `EntityQueryLanguage.GraphQL` to better communicate that its intent is to support","- Add support GraphQL arguments in fields. See updated readme","- By default `SchemaBuilder.FromObject\u003cTType\u003e()` generates a non-plural field for any type with a public `Id` property, with the argument name of `id`. E.g. A field `people` that returns a `IEnumerable\u003cPerson\u003e` will result in a `person(id)` field","- Move results to field `data` in the resulting object to match GraphQL","- Support the `query` keyword for graphql","","# 0.7.0","","- Added support for complex nested queries when using the `EFRelationshipHandler`","- Fix type caching issue causing exception on changing a sub query"],"stylingDirectives":[[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,48,"pl-c1"],[48,49,"pl-s"],[91,92,"pl-s"],[92,111,"pl-c1"],[111,112,"pl-s"],[116,117,"pl-s"],[117,139,"pl-c1"],[139,140,"pl-s"],[143,144,"pl-s"],[144,172,"pl-c1"],[172,173,"pl-s"],[180,181,"pl-s"],[181,185,"pl-c1"],[185,186,"pl-s"],[193,194,"pl-s"],[194,206,"pl-c1"],[206,207,"pl-s"],[226,227,"pl-s"],[227,252,"pl-c1"],[252,253,"pl-s"],[262,263,"pl-s"],[263,282,"pl-c1"],[282,283,"pl-s"],[369,370,"pl-s"],[370,384,"pl-c1"],[384,385,"pl-s"],[390,391,"pl-s"],[391,411,"pl-c1"],[411,412,"pl-s"],[422,423,"pl-s"],[423,442,"pl-c1"],[442,443,"pl-s"],[562,563,"pl-s"],[563,580,"pl-c1"],[580,581,"pl-s"],[635,636,"pl-s"],[636,648,"pl-c1"],[648,649,"pl-s"],[670,671,"pl-s"],[671,678,"pl-c1"],[678,679,"pl-s"],[743,744,"pl-s"],[744,761,"pl-c1"],[761,762,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,79,"pl-c1"],[79,80,"pl-s"],[99,100,"pl-s"],[100,119,"pl-c1"],[119,120,"pl-s"],[196,197,"pl-s"],[197,218,"pl-c1"],[218,219,"pl-s"],[230,231,"pl-s"],[231,238,"pl-c1"],[238,239,"pl-s"],[477,478,"pl-s"],[478,489,"pl-c1"],[489,490,"pl-s"],[573,574,"pl-s"],[574,581,"pl-c1"],[581,582,"pl-s"],[587,588,"pl-s"],[588,600,"pl-c1"],[600,601,"pl-s"],[605,606,"pl-s"],[606,626,"pl-c1"],[626,627,"pl-s"],[639,640,"pl-s"],[640,659,"pl-c1"],[659,660,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,56,"pl-c1"],[56,57,"pl-s"],[58,59,"pl-s"],[72,73,"pl-s"],[142,143,"pl-s"],[143,158,"pl-c1"],[158,159,"pl-s"],[228,229,"pl-s"],[233,234,"pl-s"],[243,244,"pl-s"],[244,278,"pl-c1"],[278,279,"pl-s"],[286,287,"pl-s"],[287,291,"pl-c1"],[291,292,"pl-s"],[299,300,"pl-s"],[300,312,"pl-c1"],[312,313,"pl-s"],[335,336,"pl-s"],[336,341,"pl-c1"],[341,342,"pl-s"],[593,594,"pl-s"],[594,606,"pl-c1"],[606,607,"pl-s"],[609,610,"pl-s"],[610,630,"pl-c1"],[630,631,"pl-s"],[642,643,"pl-s"],[643,650,"pl-c1"],[650,651,"pl-s"],[655,656,"pl-s"],[656,657,"pl-c1"],[657,658,"pl-s"],[724,725,"pl-s"],[725,739,"pl-c1"],[739,740,"pl-s"],[784,785,"pl-s"],[785,786,"pl-c1"],[786,787,"pl-s"],[958,959,"pl-s"],[959,971,"pl-c1"],[971,972,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,57,"pl-c1"],[57,58,"pl-s"],[179,180,"pl-s"],[180,224,"pl-c1"],[224,225,"pl-s"],[227,228,"pl-s"],[228,247,"pl-c1"],[247,248,"pl-s"],[356,357,"pl-s"],[357,367,"pl-c1"],[367,368,"pl-s"],[407,408,"pl-s"],[408,426,"pl-c1"],[426,427,"pl-s"],[593,594,"pl-s"],[594,612,"pl-c1"],[612,613,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[60,61,"pl-s"],[61,69,"pl-c1"],[69,70,"pl-s"],[72,73,"pl-s"],[73,82,"pl-c1"],[82,83,"pl-s"],[85,86,"pl-s"],[86,90,"pl-c1"],[90,91,"pl-s"],[106,107,"pl-s"],[107,117,"pl-c1"],[117,118,"pl-s"],[130,131,"pl-s"],[131,135,"pl-c1"],[135,136,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,21,"pl-c1"],[21,22,"pl-s"],[107,108,"pl-s"],[108,122,"pl-c1"],[122,123,"pl-s"],[181,182,"pl-s"],[182,193,"pl-c1"],[193,194,"pl-s"],[229,230,"pl-s"],[230,240,"pl-c1"],[240,241,"pl-s"],[272,273,"pl-s"],[273,285,"pl-c1"],[285,286,"pl-s"],[309,310,"pl-s"],[310,340,"pl-c1"],[340,341,"pl-s"],[491,492,"pl-s"],[492,504,"pl-c1"],[504,505,"pl-s"],[512,513,"pl-s"],[513,523,"pl-c1"],[523,524,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[160,161,"pl-s"],[161,172,"pl-c1"],[172,173,"pl-s"],[236,237,"pl-s"],[237,252,"pl-c1"],[252,253,"pl-s"],[312,313,"pl-s"],[313,330,"pl-c1"],[330,331,"pl-s"],[336,337,"pl-s"],[337,356,"pl-c1"],[356,357,"pl-s"],[375,376,"pl-s"],[376,387,"pl-c1"],[387,388,"pl-s"],[389,390,"pl-s"],[390,406,"pl-c1"],[406,407,"pl-s"],[644,645,"pl-s"],[645,657,"pl-c1"],[657,658,"pl-s"],[661,662,"pl-s"],[662,667,"pl-c1"],[667,668,"pl-s"],[669,670,"pl-s"],[670,678,"pl-c1"],[678,679,"pl-s"],[735,736,"pl-s"],[736,746,"pl-c1"],[746,747,"pl-s"],[834,835,"pl-s"],[877,878,"pl-s"],[878,879,"pl-s"],[879,988,"pl-corl"],[988,989,"pl-s"]],[],[[0,1,"pl-v"],[17,18,"pl-s"],[18,29,"pl-c1"],[29,30,"pl-s"],[31,32,"pl-s"],[32,48,"pl-c1"],[48,49,"pl-s"],[138,139,"pl-s"],[139,146,"pl-c1"],[146,147,"pl-s"],[324,325,"pl-s"],[325,376,"pl-c1"],[376,377,"pl-s"],[379,380,"pl-s"],[380,402,"pl-c1"],[402,403,"pl-s"],[442,443,"pl-s"],[443,455,"pl-c1"],[455,456,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,29,"pl-c1"],[29,30,"pl-s"],[127,128,"pl-s"],[128,160,"pl-c1"],[160,161,"pl-s"],[379,380,"pl-s"],[380,415,"pl-c1"],[415,416,"pl-s"],[459,460,"pl-s"],[472,473,"pl-s"],[473,474,"pl-s"],[474,557,"pl-corl"],[557,558,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,26,"pl-c1"],[26,27,"pl-s"],[46,47,"pl-s"],[47,66,"pl-c1"],[66,67,"pl-s"],[83,84,"pl-s"],[84,89,"pl-c1"],[89,90,"pl-s"],[104,105,"pl-s"],[105,114,"pl-c1"],[114,115,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[11,12,"pl-s"],[12,29,"pl-c1"],[29,30,"pl-s"],[91,92,"pl-s"],[92,152,"pl-c1"],[152,153,"pl-s"],[195,196,"pl-s"],[196,210,"pl-c1"],[210,211,"pl-s"],[493,494,"pl-s"],[494,511,"pl-c1"],[511,512,"pl-s"],[581,582,"pl-s"],[582,587,"pl-c1"],[587,588,"pl-s"],[737,738,"pl-s"],[738,755,"pl-c1"],[755,756,"pl-s"]],[[0,1,"pl-v"],[5,6,"pl-s"],[6,23,"pl-c1"],[23,24,"pl-s"],[81,82,"pl-s"],[82,96,"pl-c1"],[96,97,"pl-s"],[107,108,"pl-s"],[108,121,"pl-c1"],[121,122,"pl-s"],[213,214,"pl-s"],[214,269,"pl-c1"],[269,270,"pl-s"],[324,325,"pl-s"],[325,341,"pl-c1"],[341,342,"pl-s"]],[[0,1,"pl-v"],[37,38,"pl-s"],[38,42,"pl-c1"],[42,43,"pl-s"],[87,88,"pl-s"],[88,105,"pl-c1"],[105,106,"pl-s"],[174,175,"pl-s"],[175,180,"pl-c1"],[180,181,"pl-s"],[305,306,"pl-s"],[306,324,"pl-c1"],[324,325,"pl-s"],[354,355,"pl-s"],[355,371,"pl-c1"],[371,372,"pl-s"]],[],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[37,38,"pl-s"],[38,49,"pl-c1"],[49,50,"pl-s"],[118,119,"pl-s"],[119,209,"pl-c1"],[209,210,"pl-s"],[226,227,"pl-s"],[227,297,"pl-c1"],[297,298,"pl-s"],[616,617,"pl-s"],[617,621,"pl-s"],[618,621,"pl-corl"],[621,622,"pl-s"],[622,623,"pl-s"],[623,680,"pl-corl"],[680,681,"pl-s"],[691,692,"pl-s"],[692,703,"pl-s"],[693,703,"pl-corl"],[703,704,"pl-s"],[704,705,"pl-s"],[705,734,"pl-corl"],[734,735,"pl-s"]],[[0,1,"pl-v"],[105,106,"pl-s"],[106,173,"pl-c1"],[173,174,"pl-s"],[180,181,"pl-s"],[181,198,"pl-c1"],[198,199,"pl-s"],[200,201,"pl-s"],[201,222,"pl-c1"],[222,223,"pl-s"],[256,257,"pl-s"],[257,298,"pl-c1"],[298,299,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[130,131,"pl-s"],[131,157,"pl-c1"],[157,158,"pl-s"],[236,237,"pl-s"],[237,244,"pl-c1"],[244,245,"pl-s"],[281,282,"pl-s"],[282,302,"pl-c1"],[302,303,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[87,88,"pl-s"],[88,95,"pl-c1"],[95,96,"pl-s"],[339,340,"pl-s"],[340,357,"pl-c1"],[357,358,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[],[],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[55,56,"pl-s"],[56,130,"pl-c1"],[130,131,"pl-s"],[261,262,"pl-s"],[262,281,"pl-c1"],[281,282,"pl-s"],[287,288,"pl-s"],[288,308,"pl-c1"],[308,309,"pl-s"],[438,439,"pl-s"],[439,519,"pl-c1"],[519,520,"pl-s"],[541,542,"pl-s"],[542,548,"pl-c1"],[548,549,"pl-s"],[635,636,"pl-s"],[636,669,"pl-c1"],[669,670,"pl-s"],[707,708,"pl-s"],[708,720,"pl-c1"],[720,721,"pl-s"],[820,821,"pl-s"],[821,825,"pl-c1"],[825,826,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[10,11,"pl-s"],[11,22,"pl-c1"],[22,23,"pl-s"],[129,130,"pl-s"],[130,161,"pl-c1"],[161,162,"pl-s"],[164,165,"pl-s"],[165,225,"pl-c1"],[225,226,"pl-s"],[231,232,"pl-s"],[232,252,"pl-c1"],[252,253,"pl-s"],[337,338,"pl-s"],[338,416,"pl-c1"],[416,417,"pl-s"],[428,429,"pl-s"],[429,452,"pl-c1"],[452,453,"pl-s"],[653,654,"pl-s"],[654,692,"pl-c1"],[692,693,"pl-s"],[950,951,"pl-s"],[951,955,"pl-s"],[952,955,"pl-corl"],[955,956,"pl-s"],[956,957,"pl-s"],[957,1012,"pl-corl"],[1012,1013,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,22,"pl-c1"],[22,23,"pl-s"],[24,25,"pl-s"],[25,41,"pl-c1"],[41,42,"pl-s"],[82,83,"pl-s"],[83,137,"pl-c1"],[137,138,"pl-s"],[149,150,"pl-s"],[150,188,"pl-c1"],[188,189,"pl-s"],[205,206,"pl-s"],[206,233,"pl-c1"],[233,234,"pl-s"],[236,237,"pl-s"],[237,257,"pl-c1"],[257,258,"pl-s"],[338,339,"pl-s"],[339,352,"pl-c1"],[352,353,"pl-s"],[397,398,"pl-s"],[398,432,"pl-c1"],[432,433,"pl-s"],[452,453,"pl-s"],[453,488,"pl-c1"],[488,489,"pl-s"],[646,647,"pl-s"],[647,661,"pl-c1"],[661,662,"pl-s"],[753,754,"pl-s"],[754,758,"pl-s"],[755,758,"pl-corl"],[758,759,"pl-s"],[759,760,"pl-s"],[760,817,"pl-corl"],[817,818,"pl-s"],[828,829,"pl-s"],[829,840,"pl-s"],[830,840,"pl-corl"],[840,841,"pl-s"],[841,842,"pl-s"],[842,871,"pl-corl"],[871,872,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"],[18,19,"pl-s"],[19,37,"pl-c1"],[37,38,"pl-s"],[78,79,"pl-s"],[79,107,"pl-c1"],[107,108,"pl-s"],[152,153,"pl-s"],[153,175,"pl-c1"],[175,176,"pl-s"],[451,452,"pl-s"],[452,456,"pl-s"],[453,456,"pl-corl"],[456,457,"pl-s"],[457,458,"pl-s"],[458,515,"pl-corl"],[515,516,"pl-s"]],[[0,1,"pl-v"],[24,25,"pl-s"],[25,37,"pl-c1"],[37,38,"pl-s"],[45,46,"pl-s"],[46,62,"pl-c1"],[62,63,"pl-s"],[117,119,"pl-s"],[151,153,"pl-s"],[175,176,"pl-s"],[176,183,"pl-c1"],[183,184,"pl-s"],[276,277,"pl-s"],[277,292,"pl-c1"],[292,293,"pl-s"],[556,557,"pl-s"],[557,587,"pl-c1"],[587,588,"pl-s"],[696,697,"pl-s"],[697,702,"pl-c1"],[702,703,"pl-s"]],[[0,1,"pl-v"],[17,18,"pl-s"],[18,29,"pl-c1"],[29,30,"pl-s"],[98,99,"pl-s"],[99,163,"pl-c1"],[163,164,"pl-s"],[180,181,"pl-s"],[181,201,"pl-c1"],[201,202,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[240,241,"pl-s"],[241,255,"pl-c1"],[255,256,"pl-s"],[465,466,"pl-s"],[466,476,"pl-c1"],[476,477,"pl-s"],[530,531,"pl-s"],[553,554,"pl-s"],[554,555,"pl-s"],[555,641,"pl-corl"],[641,642,"pl-s"],[685,686,"pl-s"],[686,696,"pl-c1"],[696,697,"pl-s"]],[[0,1,"pl-v"],[140,141,"pl-s"],[141,173,"pl-c1"],[173,174,"pl-s"],[180,181,"pl-s"],[181,187,"pl-c1"],[187,188,"pl-s"],[190,191,"pl-s"],[191,198,"pl-c1"],[198,199,"pl-s"],[407,408,"pl-s"],[408,424,"pl-c1"],[424,425,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,88,"pl-c1"],[88,89,"pl-s"],[148,149,"pl-s"],[149,184,"pl-c1"],[184,185,"pl-s"],[258,259,"pl-s"],[259,276,"pl-c1"],[276,277,"pl-s"],[278,279,"pl-s"],[279,304,"pl-c1"],[304,305,"pl-s"],[588,589,"pl-s"],[589,634,"pl-c1"],[634,635,"pl-s"],[683,684,"pl-s"],[684,707,"pl-c1"],[707,708,"pl-s"],[719,720,"pl-s"],[720,735,"pl-c1"],[735,736,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[58,59,"pl-s"],[59,91,"pl-c1"],[91,92,"pl-s"],[94,95,"pl-s"],[95,102,"pl-c1"],[102,103,"pl-s"],[121,122,"pl-s"],[122,132,"pl-c1"],[132,133,"pl-s"],[139,140,"pl-s"],[140,177,"pl-c1"],[177,178,"pl-s"],[204,205,"pl-s"],[205,224,"pl-c1"],[224,225,"pl-s"],[393,394,"pl-s"],[394,404,"pl-c1"],[404,405,"pl-s"],[525,526,"pl-s"],[526,533,"pl-c1"],[533,534,"pl-s"],[586,587,"pl-s"],[587,594,"pl-c1"],[594,595,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[21,22,"pl-s"],[22,50,"pl-c1"],[50,51,"pl-s"],[147,148,"pl-s"],[148,159,"pl-c1"],[159,160,"pl-s"],[377,378,"pl-s"],[378,387,"pl-c1"],[387,388,"pl-s"],[389,390,"pl-s"],[390,397,"pl-c1"],[397,398,"pl-s"],[465,466,"pl-s"],[466,518,"pl-c1"],[518,519,"pl-s"],[553,554,"pl-s"],[554,558,"pl-s"],[555,558,"pl-corl"],[558,559,"pl-s"],[559,560,"pl-s"],[560,615,"pl-corl"],[615,616,"pl-s"],[626,627,"pl-s"],[627,638,"pl-s"],[628,638,"pl-corl"],[638,639,"pl-s"],[639,640,"pl-s"],[640,669,"pl-corl"],[669,670,"pl-s"]],[[0,1,"pl-v"],[237,238,"pl-s"],[238,242,"pl-c1"],[242,243,"pl-s"],[341,342,"pl-s"],[342,347,"pl-c1"],[347,348,"pl-s"]],[],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[67,68,"pl-s"],[68,74,"pl-c1"],[74,75,"pl-s"],[91,92,"pl-s"],[92,133,"pl-c1"],[133,134,"pl-s"],[135,136,"pl-s"],[136,158,"pl-c1"],[158,159,"pl-s"],[168,169,"pl-s"],[169,175,"pl-c1"],[175,176,"pl-s"],[354,355,"pl-s"],[355,361,"pl-c1"],[361,362,"pl-s"],[393,394,"pl-s"],[394,429,"pl-c1"],[429,430,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[193,194,"pl-s"],[207,208,"pl-s"],[208,209,"pl-s"],[209,252,"pl-corl"],[252,253,"pl-s"]],[],[[0,17,"pl-mh"],[3,17,"pl-en"]],[],[[0,1,"pl-v"],[2,4,"pl-s"],[28,30,"pl-s"],[125,126,"pl-s"],[153,154,"pl-s"],[154,155,"pl-s"],[155,194,"pl-corl"],[194,195,"pl-s"],[205,206,"pl-s"],[206,212,"pl-c1"],[212,213,"pl-s"],[297,298,"pl-s"],[298,310,"pl-c1"],[310,311,"pl-s"],[324,325,"pl-s"],[347,348,"pl-s"],[348,349,"pl-s"],[349,427,"pl-corl"],[427,428,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[22,24,"pl-s"],[27,28,"pl-s"],[28,52,"pl-c1"],[52,53,"pl-s"],[73,74,"pl-s"],[74,91,"pl-c1"],[91,92,"pl-s"],[287,288,"pl-s"],[288,307,"pl-c1"],[307,308,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[22,24,"pl-s"],[178,179,"pl-s"],[179,192,"pl-c1"],[192,193,"pl-s"],[195,196,"pl-s"],[196,214,"pl-c1"],[214,215,"pl-s"],[217,218,"pl-s"],[218,233,"pl-c1"],[233,234,"pl-s"],[236,237,"pl-s"],[237,255,"pl-c1"],[255,256,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[32,34,"pl-s"],[37,38,"pl-s"],[38,52,"pl-c1"],[52,53,"pl-s"],[102,103,"pl-s"],[103,121,"pl-c1"],[121,122,"pl-s"],[123,124,"pl-s"],[124,147,"pl-c1"],[147,148,"pl-s"],[246,247,"pl-s"],[247,257,"pl-c1"],[257,258,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[15,17,"pl-s"],[35,36,"pl-s"],[36,47,"pl-c1"],[47,48,"pl-s"],[62,63,"pl-s"],[63,69,"pl-c1"],[69,70,"pl-s"],[82,83,"pl-s"],[83,91,"pl-c1"],[91,92,"pl-s"],[144,145,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[18,20,"pl-s"],[23,24,"pl-s"],[24,30,"pl-c1"],[30,31,"pl-s"],[33,34,"pl-s"],[34,40,"pl-c1"],[40,41,"pl-s"],[46,47,"pl-s"],[47,54,"pl-c1"],[54,55,"pl-s"]],[],[[0,31,"pl-mh"],[3,31,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[56,57,"pl-s"],[79,80,"pl-s"],[80,81,"pl-s"],[81,159,"pl-corl"],[159,160,"pl-s"],[169,170,"pl-s"],[170,203,"pl-c1"],[203,204,"pl-s"],[264,265,"pl-s"],[265,269,"pl-c1"],[269,270,"pl-s"],[344,345,"pl-s"],[345,348,"pl-c1"],[348,349,"pl-s"],[361,362,"pl-s"],[362,365,"pl-c1"],[365,366,"pl-s"],[393,394,"pl-s"],[394,398,"pl-c1"],[398,399,"pl-s"],[404,405,"pl-s"],[405,411,"pl-c1"],[411,412,"pl-s"],[439,440,"pl-s"],[440,443,"pl-c1"],[443,444,"pl-s"],[480,481,"pl-s"],[481,484,"pl-c1"],[484,485,"pl-s"],[518,519,"pl-s"],[519,535,"pl-c1"],[535,536,"pl-s"],[552,553,"pl-s"],[553,556,"pl-c1"],[556,557,"pl-s"],[669,670,"pl-s"],[670,703,"pl-c1"],[703,704,"pl-s"]],[],[],[[0,1,"pl-v"],[4,5,"pl-s"],[5,19,"pl-c1"],[19,20,"pl-s"],[368,369,"pl-s"],[369,378,"pl-c1"],[378,379,"pl-s"],[422,423,"pl-s"],[423,439,"pl-c1"],[439,440,"pl-s"]],[],[[0,23,"pl-mh"],[3,23,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"],[32,33,"pl-s"],[33,51,"pl-c1"],[51,52,"pl-s"],[53,54,"pl-s"],[54,77,"pl-c1"],[77,78,"pl-s"],[125,126,"pl-s"],[126,157,"pl-c1"],[157,158,"pl-s"],[292,293,"pl-s"],[293,319,"pl-c1"],[319,320,"pl-s"],[643,644,"pl-s"],[680,681,"pl-s"],[681,682,"pl-s"],[682,773,"pl-corl"],[773,774,"pl-s"]],[],[[0,25,"pl-mh"],[3,25,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,20,"pl-c1"],[20,21,"pl-s"],[42,43,"pl-s"],[43,63,"pl-c1"],[63,64,"pl-s"],[102,103,"pl-s"],[103,116,"pl-c1"],[116,117,"pl-s"],[142,143,"pl-s"],[143,168,"pl-c1"],[168,169,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,20,"pl-c1"],[20,21,"pl-s"],[98,99,"pl-s"],[99,130,"pl-c1"],[130,131,"pl-s"],[170,171,"pl-s"],[171,220,"pl-c1"],[220,221,"pl-s"],[460,461,"pl-s"],[461,472,"pl-s"],[462,472,"pl-corl"],[472,473,"pl-s"],[473,474,"pl-s"],[474,503,"pl-corl"],[503,504,"pl-s"],[505,506,"pl-s"],[506,510,"pl-s"],[507,510,"pl-corl"],[510,511,"pl-s"],[511,512,"pl-s"],[512,567,"pl-corl"],[567,568,"pl-s"]],[[0,1,"pl-v"],[32,33,"pl-s"],[33,55,"pl-c1"],[55,56,"pl-s"],[199,200,"pl-s"],[200,235,"pl-c1"],[235,236,"pl-s"],[250,251,"pl-s"],[251,257,"pl-c1"],[257,258,"pl-s"],[291,292,"pl-s"],[292,298,"pl-c1"],[298,299,"pl-s"],[300,301,"pl-s"],[301,307,"pl-c1"],[307,308,"pl-s"],[309,310,"pl-s"],[310,317,"pl-c1"],[317,318,"pl-s"],[392,393,"pl-s"],[393,454,"pl-c1"],[454,455,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,20,"pl-c1"],[20,21,"pl-s"],[85,86,"pl-s"],[86,143,"pl-c1"],[143,144,"pl-s"],[155,156,"pl-s"],[156,176,"pl-c1"],[176,177,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[14,15,"pl-s"],[15,29,"pl-c1"],[29,30,"pl-s"],[65,66,"pl-s"],[66,72,"pl-c1"],[72,73,"pl-s"],[75,76,"pl-s"],[76,82,"pl-c1"],[82,83,"pl-s"],[88,89,"pl-s"],[89,96,"pl-c1"],[96,97,"pl-s"],[121,122,"pl-s"],[122,138,"pl-c1"],[138,139,"pl-s"],[141,142,"pl-s"],[142,158,"pl-c1"],[158,159,"pl-s"],[164,165,"pl-s"],[165,198,"pl-c1"],[198,199,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[26,28,"pl-s"],[129,130,"pl-s"],[130,148,"pl-c1"],[148,149,"pl-s"],[152,153,"pl-s"],[153,164,"pl-c1"],[164,165,"pl-s"],[269,270,"pl-s"],[270,282,"pl-c1"],[282,283,"pl-s"],[293,294,"pl-s"],[294,318,"pl-c1"],[318,319,"pl-s"],[324,325,"pl-s"],[325,345,"pl-c1"],[345,346,"pl-s"],[425,426,"pl-s"],[426,447,"pl-c1"],[447,448,"pl-s"],[478,479,"pl-s"],[479,483,"pl-c1"],[483,484,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[44,46,"pl-s"],[72,73,"pl-s"],[73,81,"pl-c1"],[81,82,"pl-s"],[85,86,"pl-s"],[86,92,"pl-c1"],[92,93,"pl-s"],[270,271,"pl-s"],[271,301,"pl-c1"],[301,302,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[4,5,"pl-s"],[5,41,"pl-c1"],[41,42,"pl-s"],[62,64,"pl-s"],[305,306,"pl-s"],[306,332,"pl-c1"],[332,333,"pl-s"],[420,421,"pl-s"],[421,430,"pl-c1"],[430,431,"pl-s"],[465,466,"pl-s"],[466,490,"pl-c1"],[490,491,"pl-s"],[495,496,"pl-s"],[496,513,"pl-c1"],[513,514,"pl-s"],[641,642,"pl-s"],[642,659,"pl-c1"],[659,660,"pl-s"],[728,729,"pl-s"],[729,745,"pl-c1"],[745,746,"pl-s"],[750,751,"pl-s"],[751,771,"pl-c1"],[771,772,"pl-s"],[779,780,"pl-s"],[780,796,"pl-c1"],[796,797,"pl-s"]],[[0,1,"pl-v"],[16,17,"pl-s"],[17,39,"pl-c1"],[39,40,"pl-s"],[45,46,"pl-s"],[46,64,"pl-c1"],[64,65,"pl-s"],[74,75,"pl-s"],[75,83,"pl-c1"],[83,84,"pl-s"],[86,87,"pl-s"],[87,121,"pl-c1"],[121,122,"pl-s"],[170,171,"pl-s"],[171,199,"pl-c1"],[199,200,"pl-s"],[265,266,"pl-s"],[266,329,"pl-c1"],[329,330,"pl-s"],[347,348,"pl-s"],[348,357,"pl-c1"],[357,358,"pl-s"]],[[0,1,"pl-v"],[157,158,"pl-s"],[158,163,"pl-c1"],[163,164,"pl-s"],[165,166,"pl-s"],[166,174,"pl-c1"],[174,175,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[6,7,"pl-s"],[7,40,"pl-c1"],[40,41,"pl-s"],[73,74,"pl-s"],[74,104,"pl-c1"],[104,105,"pl-s"],[168,169,"pl-s"],[169,183,"pl-c1"],[183,184,"pl-s"],[216,217,"pl-s"],[217,227,"pl-c1"],[227,228,"pl-s"],[369,370,"pl-s"],[370,384,"pl-c1"],[384,385,"pl-s"],[590,591,"pl-s"],[591,604,"pl-c1"],[604,605,"pl-s"]],[[0,1,"pl-v"],[24,25,"pl-s"],[25,39,"pl-c1"],[39,40,"pl-s"],[181,182,"pl-s"],[182,188,"pl-c1"],[188,189,"pl-s"],[206,207,"pl-s"],[207,229,"pl-c1"],[229,230,"pl-s"],[235,236,"pl-s"],[236,277,"pl-c1"],[277,278,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,34,"pl-c1"],[34,35,"pl-s"]],[[0,1,"pl-v"],[110,111,"pl-s"],[111,130,"pl-c1"],[130,131,"pl-s"],[219,220,"pl-s"],[220,237,"pl-c1"],[237,238,"pl-s"],[362,363,"pl-s"],[363,395,"pl-c1"],[395,396,"pl-s"],[476,477,"pl-s"],[477,485,"pl-c1"],[485,486,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[42,44,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,19,"pl-c1"],[19,20,"pl-s"],[83,84,"pl-s"],[84,92,"pl-c1"],[92,93,"pl-s"],[102,103,"pl-s"],[103,108,"pl-c1"],[108,109,"pl-s"],[134,135,"pl-s"],[135,139,"pl-c1"],[139,140,"pl-s"],[145,146,"pl-s"],[146,152,"pl-c1"],[152,153,"pl-s"],[164,165,"pl-s"],[165,169,"pl-c1"],[169,170,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,29,"pl-c1"],[29,30,"pl-s"],[107,108,"pl-s"],[108,127,"pl-c1"],[127,128,"pl-s"],[166,167,"pl-s"],[167,179,"pl-c1"],[179,180,"pl-s"],[203,204,"pl-s"],[204,209,"pl-c1"],[209,210,"pl-s"]],[[2,3,"pl-v"],[79,80,"pl-s"],[80,101,"pl-c1"],[101,102,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,10,"pl-c1"],[10,11,"pl-s"],[12,13,"pl-s"],[13,21,"pl-c1"],[21,22,"pl-s"]],[[2,3,"pl-v"],[54,55,"pl-s"],[55,65,"pl-c1"],[65,66,"pl-s"],[94,95,"pl-s"],[95,115,"pl-c1"],[115,116,"pl-s"],[192,193,"pl-s"],[193,210,"pl-c1"],[210,211,"pl-s"],[225,226,"pl-s"],[226,238,"pl-c1"],[238,239,"pl-s"],[241,242,"pl-s"],[242,258,"pl-c1"],[258,259,"pl-s"],[264,265,"pl-s"],[265,283,"pl-c1"],[283,284,"pl-s"],[286,287,"pl-s"],[287,299,"pl-c1"],[299,300,"pl-s"],[307,308,"pl-s"],[308,320,"pl-c1"],[320,321,"pl-s"],[322,323,"pl-s"],[323,340,"pl-c1"],[340,341,"pl-s"],[382,383,"pl-s"],[383,394,"pl-c1"],[394,395,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,17,"pl-c1"],[17,18,"pl-s"]],[[2,3,"pl-v"],[134,135,"pl-s"],[135,152,"pl-c1"],[152,153,"pl-s"],[157,158,"pl-s"],[158,191,"pl-c1"],[191,192,"pl-s"],[310,311,"pl-s"],[311,338,"pl-c1"],[338,339,"pl-s"],[345,346,"pl-s"],[346,372,"pl-c1"],[372,373,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[34,35,"pl-s"],[35,39,"pl-c1"],[39,40,"pl-s"]],[[0,1,"pl-v"],[322,323,"pl-s"],[332,333,"pl-s"],[381,382,"pl-s"]],[[0,1,"pl-v"],[158,159,"pl-s"],[159,174,"pl-c1"],[174,175,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[40,42,"pl-s"],[45,46,"pl-s"],[46,76,"pl-c1"],[76,77,"pl-s"],[218,219,"pl-s"],[219,233,"pl-c1"],[233,234,"pl-s"],[295,296,"pl-s"],[296,343,"pl-c1"],[343,344,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[23,25,"pl-s"],[32,33,"pl-s"],[33,56,"pl-c1"],[56,57,"pl-s"],[81,82,"pl-s"],[82,102,"pl-c1"],[102,103,"pl-s"],[136,137,"pl-s"],[137,156,"pl-c1"],[156,157,"pl-s"],[199,200,"pl-s"],[200,218,"pl-c1"],[218,219,"pl-s"],[279,280,"pl-s"],[280,284,"pl-c1"],[284,285,"pl-s"],[359,360,"pl-s"],[360,375,"pl-c1"],[375,376,"pl-s"],[393,394,"pl-s"],[394,398,"pl-c1"],[398,399,"pl-s"],[406,407,"pl-s"],[407,428,"pl-c1"],[428,429,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[18,20,"pl-s"],[188,189,"pl-s"],[189,202,"pl-c1"],[202,203,"pl-s"],[319,320,"pl-s"],[320,350,"pl-c1"],[350,351,"pl-s"]],[[0,1,"pl-v"]],[],[[0,12,"pl-mh"],[3,12,"pl-en"]],[],[[0,1,"pl-v"],[53,54,"pl-s"],[54,76,"pl-c1"],[76,77,"pl-s"]],[[0,1,"pl-v"],[35,36,"pl-s"],[36,54,"pl-c1"],[54,55,"pl-s"],[60,61,"pl-s"],[61,78,"pl-c1"],[78,79,"pl-s"],[454,455,"pl-s"],[455,472,"pl-c1"],[472,473,"pl-s"],[481,482,"pl-s"],[482,539,"pl-c1"],[539,540,"pl-s"]],[[0,1,"pl-v"],[72,73,"pl-s"],[73,89,"pl-c1"],[89,90,"pl-s"],[400,401,"pl-s"],[401,409,"pl-c1"],[409,410,"pl-s"],[411,412,"pl-s"],[412,417,"pl-c1"],[417,418,"pl-s"],[521,522,"pl-s"],[522,571,"pl-c1"],[571,572,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,33,"pl-c1"],[33,34,"pl-s"],[139,140,"pl-s"],[140,164,"pl-c1"],[164,165,"pl-s"],[264,265,"pl-s"],[265,297,"pl-c1"],[297,298,"pl-s"],[318,319,"pl-s"],[319,322,"pl-c1"],[322,323,"pl-s"],[335,336,"pl-s"],[336,341,"pl-c1"],[341,342,"pl-s"],[365,366,"pl-s"],[366,376,"pl-c1"],[376,377,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,32,"pl-c1"],[32,33,"pl-s"],[36,37,"pl-s"],[37,57,"pl-c1"],[57,58,"pl-s"],[65,67,"pl-s"],[82,84,"pl-s"],[98,99,"pl-s"],[99,179,"pl-c1"],[179,180,"pl-s"]],[[0,1,"pl-v"],[35,36,"pl-s"],[36,49,"pl-c1"],[49,50,"pl-s"],[237,238,"pl-s"],[238,253,"pl-c1"],[253,254,"pl-s"],[356,357,"pl-s"],[357,366,"pl-c1"],[366,367,"pl-s"]],[[0,1,"pl-v"],[54,55,"pl-s"],[55,72,"pl-c1"],[72,73,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,20,"pl-c1"],[20,21,"pl-s"],[22,23,"pl-s"],[23,32,"pl-c1"],[32,33,"pl-s"],[118,119,"pl-s"],[119,189,"pl-c1"],[189,190,"pl-s"]],[[0,1,"pl-v"],[62,63,"pl-s"],[63,77,"pl-c1"],[77,78,"pl-s"],[81,82,"pl-s"],[82,101,"pl-c1"],[101,102,"pl-s"],[105,106,"pl-s"],[106,130,"pl-c1"],[130,131,"pl-s"],[150,151,"pl-s"],[151,168,"pl-c1"],[168,169,"pl-s"],[244,245,"pl-s"],[245,267,"pl-c1"],[267,268,"pl-s"]],[[0,1,"pl-v"],[21,22,"pl-s"],[22,44,"pl-c1"],[44,45,"pl-s"],[85,86,"pl-s"],[86,96,"pl-c1"],[96,97,"pl-s"],[118,119,"pl-s"],[119,125,"pl-c1"],[125,126,"pl-s"],[136,137,"pl-s"],[137,150,"pl-c1"],[150,151,"pl-s"],[277,278,"pl-s"],[278,282,"pl-c1"],[282,283,"pl-s"]],[[0,1,"pl-v"],[24,25,"pl-s"],[25,36,"pl-c1"],[36,37,"pl-s"],[347,348,"pl-s"],[348,390,"pl-c1"],[390,391,"pl-s"]],[[0,1,"pl-v"],[118,119,"pl-s"],[119,127,"pl-c1"],[127,128,"pl-s"],[129,130,"pl-s"],[130,144,"pl-c1"],[144,145,"pl-s"],[146,147,"pl-s"],[147,155,"pl-c1"],[155,156,"pl-s"],[157,158,"pl-s"],[158,166,"pl-c1"],[166,167,"pl-s"],[168,169,"pl-s"],[169,177,"pl-c1"],[177,178,"pl-s"],[247,248,"pl-s"],[248,252,"pl-c1"],[252,253,"pl-s"],[257,258,"pl-s"],[258,263,"pl-c1"],[263,264,"pl-s"],[289,290,"pl-s"],[290,314,"pl-c1"],[314,315,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[94,95,"pl-s"],[95,112,"pl-c1"],[112,113,"pl-s"],[114,115,"pl-s"],[115,136,"pl-c1"],[136,137,"pl-s"],[233,234,"pl-s"],[234,279,"pl-c1"],[279,280,"pl-s"],[282,283,"pl-s"],[283,315,"pl-c1"],[315,316,"pl-s"],[318,319,"pl-s"],[319,324,"pl-c1"],[324,325,"pl-s"],[326,327,"pl-s"],[327,332,"pl-c1"],[332,333,"pl-s"],[358,359,"pl-s"],[359,388,"pl-c1"],[388,389,"pl-s"],[391,392,"pl-s"],[392,402,"pl-c1"],[402,403,"pl-s"],[404,405,"pl-s"],[405,415,"pl-c1"],[415,416,"pl-s"],[424,425,"pl-s"],[425,432,"pl-c1"],[432,433,"pl-s"],[507,508,"pl-s"],[508,564,"pl-c1"],[564,565,"pl-s"],[571,572,"pl-s"],[572,594,"pl-c1"],[594,595,"pl-s"],[623,624,"pl-s"],[624,635,"pl-c1"],[635,636,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,15,"pl-mh"],[3,15,"pl-en"]],[],[[0,1,"pl-v"],[12,13,"pl-s"],[13,27,"pl-c1"],[27,28,"pl-s"],[99,100,"pl-s"],[100,105,"pl-c1"],[105,106,"pl-s"],[112,113,"pl-s"],[113,116,"pl-c1"],[116,117,"pl-s"],[118,119,"pl-s"],[119,122,"pl-c1"],[122,123,"pl-s"],[124,125,"pl-s"],[125,128,"pl-c1"],[128,129,"pl-s"],[130,131,"pl-s"],[131,138,"pl-c1"],[138,139,"pl-s"],[268,269,"pl-s"],[269,346,"pl-c1"],[346,347,"pl-s"],[349,350,"pl-s"],[350,353,"pl-c1"],[353,354,"pl-s"],[355,356,"pl-s"],[356,359,"pl-c1"],[359,360,"pl-s"],[417,418,"pl-s"],[418,421,"pl-c1"],[421,422,"pl-s"],[423,424,"pl-s"],[424,431,"pl-c1"],[431,432,"pl-s"],[446,447,"pl-s"],[447,452,"pl-c1"],[452,453,"pl-s"],[455,456,"pl-s"],[456,459,"pl-c1"],[459,460,"pl-s"],[462,463,"pl-s"],[463,467,"pl-c1"],[467,468,"pl-s"],[470,471,"pl-s"],[471,476,"pl-c1"],[476,477,"pl-s"],[479,480,"pl-s"],[480,486,"pl-c1"],[486,487,"pl-s"],[489,490,"pl-s"],[490,497,"pl-c1"],[497,498,"pl-s"],[556,557,"pl-s"],[557,561,"pl-c1"],[561,562,"pl-s"]],[[2,3,"pl-v"],[31,32,"pl-s"],[32,50,"pl-c1"],[50,51,"pl-s"],[68,69,"pl-s"],[69,73,"pl-c1"],[73,74,"pl-s"],[102,103,"pl-s"],[103,112,"pl-c1"],[112,113,"pl-s"],[142,143,"pl-s"],[143,156,"pl-c1"],[156,157,"pl-s"],[194,195,"pl-s"],[195,215,"pl-c1"],[215,216,"pl-s"],[218,219,"pl-s"],[219,229,"pl-c1"],[229,230,"pl-s"],[346,347,"pl-s"],[347,363,"pl-c1"],[363,364,"pl-s"],[372,373,"pl-s"],[373,385,"pl-c1"],[385,386,"pl-s"]],[[2,3,"pl-v"],[69,70,"pl-s"],[70,121,"pl-c1"],[121,122,"pl-s"]],[[0,1,"pl-v"],[75,76,"pl-s"],[76,124,"pl-c1"],[124,125,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[68,69,"pl-s"],[69,81,"pl-c1"],[81,82,"pl-s"],[96,97,"pl-s"],[97,118,"pl-c1"],[118,119,"pl-s"],[238,239,"pl-s"],[239,266,"pl-c1"],[266,267,"pl-s"]],[[0,1,"pl-v"],[16,18,"pl-s"],[31,33,"pl-s"],[49,50,"pl-s"],[50,61,"pl-c1"],[61,62,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[22,23,"pl-s"],[23,34,"pl-c1"],[34,35,"pl-s"],[53,54,"pl-s"],[54,62,"pl-c1"],[62,63,"pl-s"],[109,110,"pl-s"],[110,125,"pl-c1"],[125,126,"pl-s"],[133,134,"pl-s"],[134,144,"pl-c1"],[144,145,"pl-s"],[166,167,"pl-s"],[167,186,"pl-c1"],[186,187,"pl-s"],[211,212,"pl-s"],[212,220,"pl-c1"],[220,221,"pl-s"],[240,241,"pl-s"],[241,252,"pl-c1"],[252,253,"pl-s"],[254,255,"pl-s"],[255,270,"pl-c1"],[270,271,"pl-s"],[296,297,"pl-s"],[297,303,"pl-c1"],[303,304,"pl-s"],[393,394,"pl-s"],[394,404,"pl-c1"],[404,405,"pl-s"],[406,407,"pl-s"],[407,417,"pl-c1"],[417,418,"pl-s"],[420,421,"pl-s"],[421,430,"pl-c1"],[430,431,"pl-s"],[432,433,"pl-s"],[433,444,"pl-c1"],[444,445,"pl-s"],[454,455,"pl-s"],[455,459,"pl-c1"],[459,460,"pl-s"],[461,462,"pl-s"],[462,468,"pl-c1"],[468,469,"pl-s"]],[[0,1,"pl-v"],[145,146,"pl-s"],[146,175,"pl-c1"],[175,176,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,12,"pl-mh"],[3,12,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,30,"pl-c1"],[30,31,"pl-s"],[191,192,"pl-s"],[192,206,"pl-c1"],[206,207,"pl-s"],[255,256,"pl-s"],[256,298,"pl-c1"],[298,299,"pl-s"],[406,407,"pl-s"],[407,421,"pl-c1"],[421,422,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,10,"pl-s"],[10,42,"pl-c1"],[42,43,"pl-s"],[48,49,"pl-s"],[49,82,"pl-c1"],[82,83,"pl-s"],[92,93,"pl-s"],[93,114,"pl-c1"],[114,115,"pl-s"],[124,125,"pl-s"],[125,151,"pl-c1"],[151,152,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,33,"pl-c1"],[33,34,"pl-s"],[46,47,"pl-s"],[47,65,"pl-c1"],[65,66,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"],[48,49,"pl-s"],[49,73,"pl-c1"],[73,74,"pl-s"],[138,139,"pl-s"],[139,157,"pl-c1"],[157,158,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,30,"pl-c1"],[30,31,"pl-s"],[55,56,"pl-s"],[56,76,"pl-c1"],[76,77,"pl-s"],[152,153,"pl-s"],[153,195,"pl-c1"],[195,196,"pl-s"],[221,222,"pl-s"],[222,276,"pl-c1"],[276,277,"pl-s"],[313,314,"pl-s"],[314,330,"pl-c1"],[330,331,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[26,27,"pl-s"],[27,47,"pl-c1"],[47,48,"pl-s"],[73,74,"pl-s"],[74,104,"pl-c1"],[104,105,"pl-s"],[117,118,"pl-s"],[118,136,"pl-c1"],[136,137,"pl-s"],[193,194,"pl-s"],[194,221,"pl-c1"],[221,222,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,115,"pl-c1"],[115,116,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[17,18,"pl-s"],[18,38,"pl-c1"],[38,39,"pl-s"],[107,108,"pl-s"],[108,128,"pl-c1"],[128,129,"pl-s"],[130,131,"pl-s"],[131,143,"pl-c1"],[143,144,"pl-s"]],[[0,1,"pl-v"],[111,112,"pl-s"],[112,124,"pl-c1"],[124,125,"pl-s"],[145,146,"pl-s"],[146,155,"pl-c1"],[155,156,"pl-s"],[244,245,"pl-s"],[245,273,"pl-c1"],[273,274,"pl-s"],[286,287,"pl-s"],[287,312,"pl-c1"],[312,313,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[13,14,"pl-s"],[14,29,"pl-c1"],[29,30,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,32,"pl-c1"],[32,33,"pl-s"],[44,45,"pl-s"],[45,76,"pl-c1"],[76,77,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,36,"pl-c1"],[36,37,"pl-s"],[48,49,"pl-s"],[49,82,"pl-c1"],[82,83,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,33,"pl-c1"],[33,34,"pl-s"],[45,46,"pl-s"],[46,76,"pl-c1"],[76,77,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,10,"pl-s"],[10,28,"pl-c1"],[28,29,"pl-s"],[70,71,"pl-s"],[71,95,"pl-c1"],[95,96,"pl-s"],[110,111,"pl-s"],[111,143,"pl-c1"],[143,144,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[12,13,"pl-s"],[13,40,"pl-c1"],[40,41,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[2,3,"pl-v"],[11,12,"pl-s"],[12,17,"pl-c1"],[17,18,"pl-s"]],[[2,3,"pl-v"],[12,13,"pl-s"],[13,33,"pl-c1"],[33,34,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,37,"pl-c1"],[37,38,"pl-s"],[42,43,"pl-s"],[43,64,"pl-c1"],[64,65,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,36,"pl-c1"],[36,37,"pl-s"]],[[2,3,"pl-v"],[16,17,"pl-s"],[17,24,"pl-c1"],[24,25,"pl-s"],[39,40,"pl-s"],[40,60,"pl-c1"],[60,61,"pl-s"]],[[2,3,"pl-v"],[16,17,"pl-s"],[17,23,"pl-c1"],[23,24,"pl-s"],[38,39,"pl-s"],[39,60,"pl-c1"],[60,61,"pl-s"]],[[2,3,"pl-v"],[12,13,"pl-s"],[13,23,"pl-c1"],[23,24,"pl-s"],[53,54,"pl-s"],[54,79,"pl-c1"],[79,80,"pl-s"]],[[2,3,"pl-v"],[4,6,"pl-s"],[6,7,"pl-s"],[7,32,"pl-c1"],[32,33,"pl-s"],[45,46,"pl-s"],[46,67,"pl-c1"],[67,68,"pl-s"],[72,73,"pl-s"],[73,93,"pl-c1"],[93,94,"pl-s"],[94,96,"pl-s"],[116,117,"pl-s"],[117,158,"pl-c1"],[158,159,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,31,"pl-c1"],[31,32,"pl-s"],[48,49,"pl-s"],[49,65,"pl-c1"],[65,66,"pl-s"],[100,101,"pl-s"],[101,136,"pl-c1"],[136,137,"pl-s"]],[[0,1,"pl-v"],[2,4,"pl-s"],[29,31,"pl-s"],[33,34,"pl-s"],[34,55,"pl-c1"],[55,56,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,26,"pl-c1"],[26,27,"pl-s"],[51,52,"pl-s"],[52,57,"pl-c1"],[57,58,"pl-s"],[96,97,"pl-s"],[97,114,"pl-c1"],[114,115,"pl-s"],[123,124,"pl-s"],[124,133,"pl-c1"],[133,134,"pl-s"]],[[2,3,"pl-v"],[8,9,"pl-s"],[9,14,"pl-c1"],[14,15,"pl-s"]],[[2,3,"pl-v"],[37,38,"pl-s"],[38,58,"pl-c1"],[58,59,"pl-s"],[74,75,"pl-s"],[75,97,"pl-c1"],[97,98,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,26,"pl-c1"],[26,27,"pl-s"],[89,90,"pl-s"],[90,107,"pl-c1"],[107,108,"pl-s"],[112,113,"pl-s"],[113,131,"pl-c1"],[131,132,"pl-s"]],[[2,3,"pl-v"],[75,76,"pl-s"],[76,95,"pl-c1"],[95,96,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,29,"pl-c1"],[29,30,"pl-s"],[44,45,"pl-s"],[45,88,"pl-c1"],[88,89,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[36,37,"pl-s"],[37,50,"pl-c1"],[50,51,"pl-s"],[53,54,"pl-s"],[54,67,"pl-c1"],[67,68,"pl-s"],[70,71,"pl-s"],[71,86,"pl-c1"],[86,87,"pl-s"],[89,90,"pl-s"],[90,108,"pl-c1"],[108,109,"pl-s"],[114,115,"pl-s"],[115,131,"pl-c1"],[131,132,"pl-s"],[205,206,"pl-s"],[206,219,"pl-c1"],[219,220,"pl-s"],[274,275,"pl-s"],[275,291,"pl-c1"],[291,292,"pl-s"],[309,310,"pl-s"],[310,336,"pl-c1"],[336,337,"pl-s"]],[[0,1,"pl-v"],[31,32,"pl-s"],[32,56,"pl-c1"],[56,57,"pl-s"],[74,75,"pl-s"],[75,144,"pl-c1"],[144,145,"pl-s"],[174,175,"pl-s"],[175,199,"pl-c1"],[199,200,"pl-s"],[203,204,"pl-s"],[204,244,"pl-c1"],[244,245,"pl-s"]],[[0,1,"pl-v"],[36,37,"pl-s"],[37,70,"pl-c1"],[70,71,"pl-s"],[73,74,"pl-s"],[74,94,"pl-c1"],[94,95,"pl-s"],[104,105,"pl-s"],[105,127,"pl-c1"],[127,128,"pl-s"],[160,161,"pl-s"],[161,275,"pl-c1"],[275,276,"pl-s"],[351,352,"pl-s"],[352,370,"pl-c1"],[370,371,"pl-s"]],[[0,1,"pl-v"],[20,21,"pl-s"],[42,43,"pl-s"],[43,44,"pl-s"],[44,100,"pl-corl"],[100,101,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[25,26,"pl-s"],[26,34,"pl-c1"],[34,35,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[57,58,"pl-s"],[58,85,"pl-c1"],[85,86,"pl-s"],[97,98,"pl-s"],[98,119,"pl-c1"],[119,120,"pl-s"],[125,126,"pl-s"],[126,152,"pl-c1"],[152,153,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,14,"pl-c1"],[14,15,"pl-s"]],[[0,1,"pl-v"],[97,98,"pl-s"],[98,109,"pl-c1"],[109,110,"pl-s"],[114,115,"pl-s"],[115,125,"pl-c1"],[125,126,"pl-s"]],[[0,1,"pl-v"],[101,102,"pl-s"],[102,112,"pl-c1"],[112,113,"pl-s"],[117,118,"pl-s"],[118,126,"pl-c1"],[126,127,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,27,"pl-c1"],[27,28,"pl-s"],[187,188,"pl-s"],[188,242,"pl-c1"],[242,243,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"]],[[2,3,"pl-v"],[9,10,"pl-s"],[10,40,"pl-c1"],[40,41,"pl-s"]],[[2,3,"pl-v"],[23,24,"pl-s"],[24,45,"pl-c1"],[45,46,"pl-s"]],[[0,1,"pl-v"],[34,35,"pl-s"],[35,55,"pl-c1"],[55,56,"pl-s"],[61,62,"pl-s"],[62,87,"pl-c1"],[87,88,"pl-s"],[120,121,"pl-s"],[121,135,"pl-c1"],[135,136,"pl-s"]],[],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[44,45,"pl-s"],[45,67,"pl-c1"],[67,68,"pl-s"],[79,80,"pl-s"],[80,87,"pl-c1"],[87,88,"pl-s"],[199,200,"pl-s"],[200,219,"pl-c1"],[219,220,"pl-s"],[321,322,"pl-s"],[322,334,"pl-c1"],[334,335,"pl-s"],[347,348,"pl-s"],[348,354,"pl-c1"],[354,355,"pl-s"],[356,357,"pl-s"],[357,364,"pl-c1"],[364,365,"pl-s"],[366,367,"pl-s"],[367,378,"pl-c1"],[378,379,"pl-s"],[432,433,"pl-s"],[433,457,"pl-c1"],[457,458,"pl-s"],[509,510,"pl-s"],[510,523,"pl-c1"],[523,524,"pl-s"],[550,551,"pl-s"],[551,571,"pl-c1"],[571,572,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,28,"pl-c1"],[28,29,"pl-s"],[47,48,"pl-s"],[48,73,"pl-c1"],[73,74,"pl-s"],[155,156,"pl-s"],[156,176,"pl-c1"],[176,177,"pl-s"],[315,316,"pl-s"],[316,336,"pl-c1"],[336,337,"pl-s"],[350,351,"pl-s"],[351,352,"pl-c1"],[352,353,"pl-s"],[412,413,"pl-s"],[413,420,"pl-c1"],[420,421,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[79,80,"pl-s"],[80,90,"pl-c1"],[90,91,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[97,98,"pl-s"],[98,116,"pl-c1"],[116,117,"pl-s"],[120,121,"pl-s"],[121,140,"pl-c1"],[140,141,"pl-s"],[146,147,"pl-s"],[147,159,"pl-c1"],[159,160,"pl-s"],[218,219,"pl-s"],[219,240,"pl-c1"],[240,241,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[16,17,"pl-s"],[17,29,"pl-c1"],[29,30,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[35,36,"pl-s"],[36,50,"pl-c1"],[50,51,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[13,14,"pl-s"],[14,26,"pl-c1"],[26,27,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[72,73,"pl-s"],[73,92,"pl-c1"],[92,93,"pl-s"],[129,130,"pl-s"],[130,151,"pl-c1"],[151,152,"pl-s"],[156,157,"pl-s"],[157,174,"pl-c1"],[174,175,"pl-s"]],[[0,1,"pl-v"],[16,17,"pl-s"],[17,29,"pl-c1"],[29,30,"pl-s"],[41,42,"pl-s"],[42,46,"pl-c1"],[46,47,"pl-s"],[52,53,"pl-s"],[53,65,"pl-c1"],[65,66,"pl-s"],[83,84,"pl-s"],[84,95,"pl-c1"],[95,96,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,19,"pl-c1"],[19,20,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[55,56,"pl-s"],[56,67,"pl-c1"],[67,68,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[43,45,"pl-s"],[59,60,"pl-s"],[65,66,"pl-s"],[134,136,"pl-s"]],[[2,3,"pl-v"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,24,"pl-c1"],[24,25,"pl-s"],[40,41,"pl-s"],[41,58,"pl-c1"],[58,59,"pl-s"],[63,64,"pl-s"],[64,73,"pl-c1"],[73,74,"pl-s"],[81,82,"pl-s"],[85,86,"pl-s"],[323,324,"pl-s"],[324,343,"pl-c1"],[343,344,"pl-s"],[358,359,"pl-s"],[359,376,"pl-c1"],[376,377,"pl-s"],[390,391,"pl-s"],[391,397,"pl-c1"],[397,398,"pl-s"]],[[2,3,"pl-v"],[16,17,"pl-s"],[141,142,"pl-s"],[142,143,"pl-s"],[143,183,"pl-corl"],[183,184,"pl-s"]],[],[[0,1,"pl-v"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,33,"pl-c1"],[33,34,"pl-s"],[39,40,"pl-s"],[40,65,"pl-c1"],[65,66,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,28,"pl-c1"],[28,29,"pl-s"],[34,35,"pl-s"],[35,60,"pl-c1"],[60,61,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,30,"pl-c1"],[30,31,"pl-s"],[36,37,"pl-s"],[37,44,"pl-c1"],[44,45,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,34,"pl-c1"],[34,35,"pl-s"],[48,49,"pl-s"],[49,74,"pl-c1"],[74,75,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[15,16,"pl-s"],[16,33,"pl-c1"],[33,34,"pl-s"],[75,153,"pl-corl"]],[],[[0,1,"pl-v"],[48,49,"pl-s"],[49,75,"pl-c1"],[75,76,"pl-s"],[80,81,"pl-s"],[81,96,"pl-c1"],[96,97,"pl-s"],[122,123,"pl-s"],[123,249,"pl-c1"],[249,250,"pl-s"],[267,268,"pl-s"],[268,277,"pl-c1"],[277,278,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,44,"pl-c1"],[44,45,"pl-s"],[81,82,"pl-s"],[82,108,"pl-c1"],[108,109,"pl-s"],[126,127,"pl-s"],[127,137,"pl-c1"],[137,138,"pl-s"],[171,172,"pl-s"],[172,192,"pl-c1"],[192,193,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[39,40,"pl-s"],[40,46,"pl-c1"],[46,47,"pl-s"],[52,53,"pl-s"],[53,59,"pl-c1"],[59,60,"pl-s"],[73,74,"pl-s"],[74,87,"pl-c1"],[87,88,"pl-s"],[103,104,"pl-s"],[104,110,"pl-c1"],[110,111,"pl-s"],[152,153,"pl-s"],[153,167,"pl-c1"],[167,168,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[41,42,"pl-s"],[42,47,"pl-c1"],[47,48,"pl-s"],[86,87,"pl-s"],[87,104,"pl-c1"],[104,105,"pl-s"]],[[0,1,"pl-v"],[18,19,"pl-s"],[19,36,"pl-c1"],[36,37,"pl-s"],[41,42,"pl-s"],[42,59,"pl-c1"],[59,60,"pl-s"],[84,85,"pl-s"],[85,104,"pl-c1"],[104,105,"pl-s"],[217,218,"pl-s"],[218,332,"pl-c1"],[332,333,"pl-s"],[353,354,"pl-s"],[354,359,"pl-c1"],[359,360,"pl-s"],[380,381,"pl-s"],[381,393,"pl-c1"],[393,394,"pl-s"],[423,424,"pl-s"],[424,446,"pl-c1"],[446,447,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[53,54,"pl-s"],[54,75,"pl-c1"],[75,76,"pl-s"],[201,202,"pl-s"],[202,257,"pl-c1"],[257,258,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[64,65,"pl-s"],[65,78,"pl-c1"],[78,79,"pl-s"],[141,142,"pl-s"],[142,188,"pl-c1"],[188,189,"pl-s"]],[[0,1,"pl-v"],[13,17,"pl-s"],[14,17,"pl-corl"],[26,27,"pl-s"],[27,44,"pl-c1"],[44,45,"pl-s"],[187,188,"pl-s"],[188,201,"pl-c1"],[201,202,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[43,44,"pl-s"],[44,62,"pl-c1"],[62,63,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[15,16,"pl-s"],[16,27,"pl-c1"],[27,28,"pl-s"],[105,106,"pl-s"],[106,137,"pl-c1"],[137,138,"pl-s"],[365,376,"pl-s"],[366,376,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[17,18,"pl-s"],[18,39,"pl-c1"],[39,40,"pl-s"],[111,120,"pl-s"],[116,120,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[123,124,"pl-s"],[124,164,"pl-c1"],[164,165,"pl-s"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[2,3,"pl-v"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[15,19,"pl-s"],[16,19,"pl-corl"],[62,63,"pl-s"],[63,72,"pl-c1"],[72,73,"pl-s"],[89,90,"pl-s"],[90,106,"pl-c1"],[106,107,"pl-s"],[121,122,"pl-s"],[122,139,"pl-c1"],[139,140,"pl-s"],[258,259,"pl-s"],[259,269,"pl-c1"],[269,270,"pl-s"],[293,294,"pl-s"],[294,311,"pl-c1"],[311,312,"pl-s"],[409,410,"pl-s"],[410,442,"pl-c1"],[442,443,"pl-s"],[450,451,"pl-s"],[451,469,"pl-c1"],[469,470,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,10,"pl-s"],[10,57,"pl-c1"],[57,58,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"],[110,111,"pl-s"],[111,118,"pl-c1"],[118,119,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[15,16,"pl-s"],[16,19,"pl-c1"],[19,20,"pl-s"],[23,24,"pl-s"],[24,37,"pl-c1"],[37,38,"pl-s"],[39,40,"pl-s"],[40,46,"pl-c1"],[46,47,"pl-s"],[59,60,"pl-s"],[60,70,"pl-c1"],[70,71,"pl-s"],[83,84,"pl-s"],[84,94,"pl-c1"],[94,95,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[66,67,"pl-s"],[67,77,"pl-c1"],[77,78,"pl-s"],[90,91,"pl-s"],[91,101,"pl-c1"],[101,102,"pl-s"]],[[0,1,"pl-v"],[48,49,"pl-s"],[49,55,"pl-c1"],[55,56,"pl-s"],[75,76,"pl-s"],[76,86,"pl-c1"],[86,87,"pl-s"],[99,100,"pl-s"],[100,110,"pl-c1"],[110,111,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[36,37,"pl-s"],[37,43,"pl-c1"],[43,44,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[27,28,"pl-s"],[28,47,"pl-c1"],[47,48,"pl-s"],[93,94,"pl-s"],[94,101,"pl-c1"],[101,102,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,10,"pl-s"],[10,20,"pl-c1"],[20,21,"pl-s"],[40,41,"pl-s"],[41,51,"pl-c1"],[51,52,"pl-s"],[90,168,"pl-corl"],[176,177,"pl-s"],[177,182,"pl-c1"],[182,183,"pl-s"],[214,215,"pl-s"],[215,219,"pl-c1"],[219,220,"pl-s"],[317,318,"pl-s"],[318,321,"pl-c1"],[321,322,"pl-s"],[388,389,"pl-s"],[442,443,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,17,"pl-c1"],[17,18,"pl-s"],[26,27,"pl-s"],[27,33,"pl-c1"],[33,34,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[13,14,"pl-s"],[14,21,"pl-c1"],[21,22,"pl-s"],[26,27,"pl-s"],[27,33,"pl-c1"],[33,34,"pl-s"]],[[0,1,"pl-v"]],[],[[31,32,"pl-s"],[32,36,"pl-c1"],[36,37,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,6,"pl-smi"],[7,11,"pl-en"],[12,16,"pl-en"],[20,28,"pl-en"],[29,39,"pl-s"],[29,30,"pl-pds"],[38,39,"pl-pds"],[41,42,"pl-en"],[43,45,"pl-k"],[46,47,"pl-smi"],[48,52,"pl-smi"],[54,64,"pl-s"],[54,55,"pl-pds"],[63,64,"pl-pds"]],[[0,3,"pl-s"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[55,56,"pl-s"],[56,60,"pl-c1"],[60,61,"pl-s"],[63,64,"pl-s"],[64,68,"pl-c1"],[68,69,"pl-s"],[71,72,"pl-s"],[72,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[13,17,"pl-s"],[14,17,"pl-corl"],[101,102,"pl-s"],[102,106,"pl-c1"],[106,107,"pl-s"],[119,120,"pl-s"],[120,124,"pl-c1"],[124,125,"pl-s"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[58,59,"pl-s"],[59,61,"pl-c1"],[61,62,"pl-s"],[74,75,"pl-s"],[75,81,"pl-c1"],[81,82,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[49,50,"pl-s"],[50,87,"pl-c1"],[87,88,"pl-s"],[90,91,"pl-s"],[91,97,"pl-c1"],[97,98,"pl-s"],[100,101,"pl-s"],[101,106,"pl-c1"],[106,107,"pl-s"],[109,110,"pl-s"],[110,117,"pl-c1"],[117,118,"pl-s"],[211,212,"pl-s"],[212,273,"pl-c1"],[273,274,"pl-s"]],[[0,1,"pl-v"],[17,18,"pl-s"],[18,35,"pl-c1"],[35,36,"pl-s"],[159,160,"pl-s"],[160,178,"pl-c1"],[178,179,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[7,11,"pl-s"],[8,11,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[6,7,"pl-s"],[7,23,"pl-c1"],[23,24,"pl-s"],[28,29,"pl-s"],[29,49,"pl-c1"],[49,50,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,15,"pl-c1"],[15,16,"pl-s"],[56,57,"pl-s"],[57,64,"pl-c1"],[64,65,"pl-s"]],[[0,1,"pl-v"],[26,27,"pl-s"],[27,33,"pl-c1"],[33,34,"pl-s"],[156,157,"pl-s"],[157,163,"pl-c1"],[163,164,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[31,32,"pl-s"],[32,41,"pl-c1"],[41,42,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[27,28,"pl-s"],[28,32,"pl-c1"],[32,33,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[18,19,"pl-s"],[19,38,"pl-c1"],[38,39,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[1,16,"pl-en"]],[[0,6,"pl-k"],[7,13,"pl-k"],[14,24,"pl-smi"],[24,25,"pl-k"],[25,29,"pl-smi"],[29,30,"pl-k"],[30,39,"pl-smi"],[41,46,"pl-smi"],[46,48,"pl-k"],[49,57,"pl-en"]],[[5,13,"pl-en"],[14,26,"pl-smi"],[27,28,"pl-k"],[29,48,"pl-s"],[29,30,"pl-pds"],[47,48,"pl-pds"],[51,57,"pl-k"],[58,63,"pl-smi"]],[[5,10,"pl-en"],[11,12,"pl-c1"],[14,17,"pl-c1"],[19,31,"pl-smi"],[32,33,"pl-k"],[34,69,"pl-s"],[34,35,"pl-pds"],[68,69,"pl-pds"],[72,79,"pl-k"],[80,85,"pl-smi"]],[[5,17,"pl-en"],[18,19,"pl-c1"],[21,33,"pl-smi"],[34,35,"pl-k"],[36,75,"pl-s"],[36,37,"pl-pds"],[74,75,"pl-pds"],[78,84,"pl-k"],[85,91,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[19,20,"pl-s"],[20,24,"pl-c1"],[24,25,"pl-s"]],[[0,1,"pl-v"],[37,38,"pl-s"],[38,70,"pl-c1"],[70,71,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[16,17,"pl-s"],[17,31,"pl-c1"],[31,32,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[31,32,"pl-s"],[32,41,"pl-c1"],[41,42,"pl-s"],[46,47,"pl-s"],[47,57,"pl-c1"],[57,58,"pl-s"],[157,158,"pl-s"],[158,173,"pl-c1"],[173,174,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,13,"pl-s"],[10,13,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[13,14,"pl-s"],[14,23,"pl-c1"],[23,24,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[41,42,"pl-s"],[42,57,"pl-c1"],[57,58,"pl-s"],[333,334,"pl-s"],[334,344,"pl-c1"],[344,345,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[26,27,"pl-s"],[27,47,"pl-c1"],[47,48,"pl-s"],[66,67,"pl-s"],[67,83,"pl-c1"],[83,84,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,52,"pl-c"],[0,2,"pl-c"]],[[0,0,"pl-c"],[0,6,"pl-k"],[7,12,"pl-k"],[13,22,"pl-en"]],[],[[4,10,"pl-k"],[11,17,"pl-k"],[18,22,"pl-en"],[25,28,"pl-k"],[30,33,"pl-k"]],[],[],[[0,21,"pl-c"],[0,2,"pl-c"]],[[0,0,"pl-c"],[0,6,"pl-k"],[7,12,"pl-k"],[13,33,"pl-en"]],[],[[4,10,"pl-k"],[11,31,"pl-en"],[32,38,"pl-k"],[39,43,"pl-en"]],[],[[8,12,"pl-smi"],[13,14,"pl-k"],[15,19,"pl-smi"]],[],[],[[4,10,"pl-k"],[11,17,"pl-k"],[18,22,"pl-en"],[25,28,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[68,69,"pl-s"],[69,85,"pl-c1"],[85,86,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"]],[[0,1,"pl-v"],[37,38,"pl-s"],[61,62,"pl-s"],[62,63,"pl-s"],[63,124,"pl-corl"],[124,125,"pl-s"]],[[2,3,"pl-v"],[16,17,"pl-s"],[17,23,"pl-c1"],[23,24,"pl-s"],[66,67,"pl-s"],[67,71,"pl-c1"],[71,72,"pl-s"]],[[2,3,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,6,"pl-smi"],[7,11,"pl-en"],[12,27,"pl-en"],[31,39,"pl-en"],[40,48,"pl-s"],[40,41,"pl-pds"],[47,48,"pl-pds"],[50,54,"pl-c1"]],[[3,10,"pl-en"],[12,18,"pl-en"],[19,25,"pl-en"],[27,29,"pl-k"],[30,33,"pl-k"]],[],[[0,120,"pl-c"],[4,6,"pl-c"]],[[0,0,"pl-c"],[4,15,"pl-smi"],[16,17,"pl-k"],[18,24,"pl-smi"],[25,32,"pl-smi"],[33,37,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,10,"pl-s"],[10,26,"pl-c1"],[26,27,"pl-s"],[38,39,"pl-s"],[39,69,"pl-c1"],[69,70,"pl-s"],[194,195,"pl-s"],[199,200,"pl-s"],[302,303,"pl-s"],[303,310,"pl-c1"],[310,311,"pl-s"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[26,27,"pl-s"],[27,31,"pl-c1"],[31,32,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,26,"pl-c1"],[26,27,"pl-s"],[30,31,"pl-s"],[31,59,"pl-c1"],[59,60,"pl-s"],[140,144,"pl-s"],[141,144,"pl-corl"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,44,"pl-c1"],[44,45,"pl-s"],[203,204,"pl-s"],[204,233,"pl-c1"],[233,234,"pl-s"],[278,282,"pl-s"],[279,282,"pl-corl"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,70,"pl-c1"],[70,71,"pl-s"],[93,94,"pl-s"],[94,182,"pl-c1"],[182,183,"pl-s"],[196,197,"pl-s"],[197,218,"pl-c1"],[218,219,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[37,38,"pl-s"],[38,46,"pl-c1"],[46,47,"pl-s"],[50,51,"pl-s"],[51,59,"pl-c1"],[59,60,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[51,52,"pl-s"],[52,61,"pl-c1"],[61,62,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[9,10,"pl-s"],[10,22,"pl-c1"],[22,23,"pl-s"],[28,29,"pl-s"],[29,45,"pl-c1"],[45,46,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,69,"pl-c1"]],[[0,41,"pl-c1"]],[[0,3,"pl-c1"]],[[0,43,"pl-c1"]],[[0,4,"pl-c1"]],[[0,126,"pl-c1"]],[[0,21,"pl-c1"]],[[0,42,"pl-c1"]],[[0,3,"pl-c1"]],[[0,44,"pl-c1"]],[[0,4,"pl-c1"]],[[0,127,"pl-c1"]],[[0,21,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[147,148,"pl-s"],[148,188,"pl-c1"],[188,189,"pl-s"],[284,285,"pl-s"],[285,356,"pl-c1"],[356,357,"pl-s"],[560,561,"pl-s"],[561,566,"pl-c1"],[566,567,"pl-s"],[569,570,"pl-s"],[570,584,"pl-c1"],[584,585,"pl-s"],[587,588,"pl-s"],[588,594,"pl-c1"],[594,595,"pl-s"],[597,598,"pl-s"],[598,613,"pl-c1"],[613,614,"pl-s"],[616,617,"pl-s"],[617,621,"pl-c1"],[621,622,"pl-s"],[625,626,"pl-s"],[626,639,"pl-c1"],[639,640,"pl-s"],[646,647,"pl-s"],[647,656,"pl-c1"],[656,657,"pl-s"],[660,661,"pl-s"],[661,671,"pl-c1"],[671,672,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[62,63,"pl-s"],[63,83,"pl-c1"],[83,84,"pl-s"],[103,104,"pl-s"],[104,107,"pl-c1"],[107,108,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[98,99,"pl-s"],[99,112,"pl-c1"],[112,113,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[46,47,"pl-s"],[47,91,"pl-c1"],[91,92,"pl-s"]],[[0,1,"pl-v"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[65,66,"pl-s"],[66,73,"pl-c1"],[73,74,"pl-s"],[117,118,"pl-s"],[118,185,"pl-c1"],[185,186,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[29,30,"pl-s"],[30,33,"pl-c1"],[33,34,"pl-s"],[56,57,"pl-s"],[57,62,"pl-c1"],[62,63,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[30,31,"pl-s"],[31,51,"pl-c1"],[51,52,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[59,60,"pl-s"],[60,74,"pl-c1"],[74,75,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[26,27,"pl-s"],[27,71,"pl-c1"],[71,72,"pl-s"]],[[0,1,"pl-v"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[44,45,"pl-s"],[45,75,"pl-c1"],[75,76,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,39,"pl-c1"],[39,40,"pl-s"],[52,53,"pl-s"],[53,75,"pl-c1"],[75,76,"pl-s"],[97,98,"pl-s"],[98,107,"pl-c1"],[107,108,"pl-s"],[132,133,"pl-s"],[133,151,"pl-c1"],[151,152,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,51,"pl-c1"],[51,52,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,51,"pl-c1"],[51,52,"pl-s"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,13,"pl-c1"],[13,14,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,3,"pl-smi"],[4,10,"pl-smi"],[11,12,"pl-k"],[13,26,"pl-smi"],[27,37,"pl-en"],[38,47,"pl-en"]],[[0,6,"pl-smi"],[7,17,"pl-en"],[18,25,"pl-en"],[27,31,"pl-en"],[32,34,"pl-k"]],[],[[4,8,"pl-smi"],[9,21,"pl-en"],[22,33,"pl-s"],[22,23,"pl-pds"],[32,33,"pl-pds"],[35,61,"pl-s"],[35,36,"pl-pds"],[60,61,"pl-pds"]],[[0,80,"pl-c"],[6,8,"pl-c"]],[[0,0,"pl-c"],[7,25,"pl-en"],[26,37,"pl-en"],[40,44,"pl-en"],[46,51,"pl-en"],[53,55,"pl-k"],[56,61,"pl-smi"],[62,73,"pl-en"],[74,78,"pl-smi"],[79,90,"pl-smi"]],[[0,53,"pl-c"],[6,8,"pl-c"]],[[0,0,"pl-c"],[7,18,"pl-en"],[19,30,"pl-en"],[32,35,"pl-k"],[37,41,"pl-en"],[43,47,"pl-en"],[48,50,"pl-k"],[51,55,"pl-smi"],[56,67,"pl-smi"],[70,73,"pl-en"],[75,78,"pl-en"],[80,82,"pl-k"],[83,86,"pl-smi"],[87,98,"pl-en"],[99,102,"pl-smi"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,10,"pl-en"]],[],[[0,15,"pl-c"]],[[2,10,"pl-v"]],[[0,20,"pl-c"]],[[4,8,"pl-v"]],[[4,6,"pl-v"]],[[0,82,"pl-c"]],[[4,13,"pl-v"]],[[6,10,"pl-v"]],[],[],[],[[0,22,"pl-c"]],[[2,9,"pl-v"],[10,12,"pl-v"],[14,16,"pl-c1"]],[[0,20,"pl-c"]],[[4,8,"pl-v"]],[[4,6,"pl-v"]],[[0,95,"pl-c"]],[[4,13,"pl-v"]],[[6,10,"pl-v"]],[],[],[],[[0,3,"pl-s"]],[],[[19,20,"pl-s"],[20,39,"pl-c1"],[39,40,"pl-s"],[69,70,"pl-s"],[70,88,"pl-c1"],[88,89,"pl-s"],[141,142,"pl-s"],[142,166,"pl-c1"],[166,167,"pl-s"],[223,224,"pl-s"],[224,258,"pl-c1"],[258,259,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[33,34,"pl-s"],[34,38,"pl-c1"],[38,39,"pl-s"],[43,44,"pl-s"],[44,52,"pl-c1"],[52,53,"pl-s"]],[[0,1,"pl-v"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,3,"pl-smi"],[4,10,"pl-smi"],[11,12,"pl-k"],[13,26,"pl-smi"],[27,37,"pl-en"],[38,47,"pl-en"]],[[0,6,"pl-smi"],[7,14,"pl-en"],[15,27,"pl-en"],[29,43,"pl-s"],[29,30,"pl-pds"],[42,43,"pl-pds"],[45,57,"pl-en"]],[],[[0,6,"pl-smi"],[7,17,"pl-en"],[18,30,"pl-en"],[32,34,"pl-en"],[35,37,"pl-k"]],[],[[0,42,"pl-c"],[4,6,"pl-c"]],[[0,0,"pl-c"],[4,6,"pl-smi"],[7,15,"pl-en"],[16,23,"pl-s"],[16,17,"pl-pds"],[22,23,"pl-pds"],[25,36,"pl-s"],[25,26,"pl-pds"],[35,36,"pl-pds"]],[[0,55,"pl-c"],[6,8,"pl-c"]],[[0,0,"pl-c"],[7,25,"pl-en"],[26,35,"pl-en"],[38,40,"pl-en"],[42,44,"pl-en"],[46,48,"pl-k"],[49,51,"pl-smi"],[52,58,"pl-smi"],[59,64,"pl-en"],[65,66,"pl-en"],[67,69,"pl-k"],[70,71,"pl-smi"],[72,74,"pl-smi"],[75,77,"pl-k"],[78,80,"pl-smi"],[81,83,"pl-smi"],[85,99,"pl-en"]],[],[],[[0,6,"pl-smi"],[7,12,"pl-en"],[15,23,"pl-en"],[24,38,"pl-s"],[24,25,"pl-pds"],[37,38,"pl-pds"],[40,50,"pl-s"],[40,41,"pl-pds"],[49,50,"pl-pds"]],[[5,23,"pl-en"],[24,43,"pl-en"],[46,47,"pl-en"],[49,52,"pl-en"],[54,56,"pl-k"],[57,60,"pl-smi"],[61,68,"pl-en"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[2,14,"pl-v"]],[[4,9,"pl-v"]],[[6,14,"pl-v"]],[[8,12,"pl-v"]],[],[],[],[],[[0,3,"pl-s"]],[],[[128,129,"pl-s"],[129,144,"pl-c1"],[144,145,"pl-s"],[160,161,"pl-s"],[161,165,"pl-c1"],[165,166,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,2,"pl-smi"],[3,9,"pl-smi"],[10,15,"pl-en"],[16,17,"pl-en"],[18,20,"pl-k"],[21,22,"pl-smi"],[23,25,"pl-smi"],[26,28,"pl-k"],[29,31,"pl-smi"],[32,34,"pl-smi"]],[[1,7,"pl-en"],[8,9,"pl-en"],[10,12,"pl-k"],[13,16,"pl-k"]],[[2,10,"pl-smi"],[11,12,"pl-k"],[13,16,"pl-k"]],[[4,8,"pl-smi"],[9,10,"pl-k"],[11,12,"pl-smi"],[13,21,"pl-smi"],[22,26,"pl-smi"]],[],[],[[1,15,"pl-en"]],[[0,3,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[40,41,"pl-s"],[41,47,"pl-c1"],[47,48,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,12,"pl-c1"],[12,13,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,14,"pl-c1"],[14,15,"pl-s"],[25,26,"pl-s"],[26,44,"pl-c1"],[44,45,"pl-s"],[87,88,"pl-s"],[88,101,"pl-c1"],[101,102,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,6,"pl-smi"],[7,19,"pl-en"],[20,28,"pl-s"],[20,21,"pl-pds"],[27,28,"pl-pds"]],[[4,7,"pl-en"],[8,10,"pl-k"],[11,14,"pl-smi"],[15,21,"pl-smi"]],[[4,46,"pl-s"],[4,5,"pl-pds"],[45,46,"pl-pds"]],[[5,12,"pl-en"]],[[8,11,"pl-k"],[12,16,"pl-en"],[17,23,"pl-en"],[26,32,"pl-en"],[34,36,"pl-k"],[37,43,"pl-smi"],[44,50,"pl-smi"],[52,65,"pl-smi"],[66,69,"pl-smi"]],[[8,11,"pl-k"],[12,16,"pl-en"],[17,23,"pl-en"],[26,32,"pl-en"],[34,36,"pl-k"],[37,43,"pl-smi"],[44,52,"pl-smi"],[54,67,"pl-smi"],[68,71,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[35,36,"pl-s"],[36,50,"pl-c1"],[50,51,"pl-s"],[90,91,"pl-s"],[91,104,"pl-c1"],[104,105,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[23,24,"pl-s"],[24,43,"pl-c1"],[43,44,"pl-s"],[46,47,"pl-s"],[47,64,"pl-c1"],[64,65,"pl-s"],[68,69,"pl-s"],[69,79,"pl-c1"],[79,80,"pl-s"],[83,84,"pl-s"],[84,94,"pl-c1"],[94,95,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"],[37,38,"pl-s"],[38,44,"pl-c1"],[44,45,"pl-s"],[50,51,"pl-s"],[51,57,"pl-c1"],[57,58,"pl-s"],[77,78,"pl-s"],[78,91,"pl-c1"],[91,92,"pl-s"],[97,98,"pl-s"],[98,104,"pl-c1"],[104,105,"pl-s"],[134,135,"pl-s"],[135,148,"pl-c1"],[148,149,"pl-s"]],[[0,1,"pl-v"],[12,13,"pl-s"],[13,32,"pl-c1"],[32,33,"pl-s"],[56,57,"pl-s"],[57,101,"pl-c1"],[101,102,"pl-s"],[114,115,"pl-s"],[115,140,"pl-c1"],[140,141,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[28,29,"pl-s"],[29,33,"pl-c1"],[33,34,"pl-s"],[43,44,"pl-s"],[44,59,"pl-c1"],[59,60,"pl-s"],[64,65,"pl-s"],[65,81,"pl-c1"],[81,82,"pl-s"],[176,177,"pl-s"],[177,192,"pl-c1"],[192,193,"pl-s"],[209,210,"pl-s"],[210,214,"pl-c1"],[214,215,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"],[66,67,"pl-s"],[67,87,"pl-c1"],[87,88,"pl-s"],[174,175,"pl-s"],[175,196,"pl-c1"],[196,197,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,44,"pl-c1"],[44,45,"pl-s"],[62,63,"pl-s"],[63,67,"pl-c1"],[67,68,"pl-s"],[81,82,"pl-s"],[82,95,"pl-c1"],[95,96,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[211,212,"pl-s"],[212,233,"pl-c1"],[233,234,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,32,"pl-c1"],[32,33,"pl-s"],[36,37,"pl-s"],[37,71,"pl-c1"],[71,72,"pl-s"],[94,95,"pl-s"],[95,120,"pl-c1"],[120,121,"pl-s"],[124,125,"pl-s"],[125,155,"pl-c1"],[155,156,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[24,25,"pl-s"],[25,54,"pl-c1"],[54,55,"pl-s"],[58,59,"pl-s"],[59,93,"pl-c1"],[93,94,"pl-s"],[195,196,"pl-s"],[196,211,"pl-c1"],[211,212,"pl-s"],[262,263,"pl-s"],[263,288,"pl-c1"],[288,289,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"],[50,51,"pl-s"],[51,65,"pl-c1"],[65,66,"pl-s"],[69,70,"pl-s"],[70,74,"pl-c1"],[74,75,"pl-s"],[77,78,"pl-s"],[78,92,"pl-c1"],[92,93,"pl-s"],[129,130,"pl-s"],[130,136,"pl-c1"],[136,137,"pl-s"]],[[0,1,"pl-v"],[13,14,"pl-s"],[14,35,"pl-c1"],[35,36,"pl-s"]],[[0,1,"pl-v"],[46,47,"pl-s"],[47,67,"pl-c1"],[67,68,"pl-s"],[73,74,"pl-s"],[74,95,"pl-c1"],[95,96,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,34,"pl-c1"],[34,35,"pl-s"],[45,46,"pl-s"],[46,71,"pl-c1"],[71,72,"pl-s"],[120,121,"pl-s"],[121,146,"pl-c1"],[146,147,"pl-s"]],[[0,1,"pl-v"],[28,29,"pl-s"],[29,45,"pl-c1"],[45,46,"pl-s"],[81,82,"pl-s"],[82,99,"pl-c1"],[99,100,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,34,"pl-c1"],[34,35,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[27,28,"pl-s"],[28,45,"pl-c1"],[45,46,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[33,34,"pl-s"],[34,76,"pl-c1"],[76,77,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[60,61,"pl-s"],[61,80,"pl-c1"],[80,81,"pl-s"],[94,95,"pl-s"],[95,121,"pl-c1"],[121,122,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[51,52,"pl-s"],[52,62,"pl-c1"],[62,63,"pl-s"],[64,65,"pl-s"],[65,74,"pl-c1"],[74,75,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[22,23,"pl-s"],[23,28,"pl-c1"],[28,29,"pl-s"],[45,46,"pl-s"],[46,74,"pl-c1"],[74,75,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[121,122,"pl-s"],[122,126,"pl-c1"],[126,127,"pl-s"],[162,163,"pl-s"],[163,167,"pl-c1"],[167,168,"pl-s"],[214,215,"pl-s"],[215,222,"pl-c1"],[222,223,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,37,"pl-en"]],[],[[0,142,"pl-c"],[4,6,"pl-c"]],[[0,0,"pl-c"],[5,19,"pl-en"]],[[4,10,"pl-k"],[11,15,"pl-en"],[16,22,"pl-k"],[24,31,"pl-en"],[34,37,"pl-k"],[39,42,"pl-k"]],[],[[0,3,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[31,32,"pl-s"],[32,56,"pl-c1"],[56,57,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[13,14,"pl-s"],[14,32,"pl-c1"],[32,33,"pl-s"],[60,61,"pl-s"],[61,81,"pl-c1"],[81,82,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[106,107,"pl-s"],[107,129,"pl-c1"],[129,130,"pl-s"],[222,223,"pl-s"],[223,242,"pl-c1"],[242,243,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[70,71,"pl-s"],[71,107,"pl-c1"],[107,108,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[33,34,"pl-s"],[34,40,"pl-c1"],[40,41,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[6,7,"pl-s"],[7,18,"pl-c1"],[18,19,"pl-s"],[20,21,"pl-s"],[21,27,"pl-c1"],[27,28,"pl-s"],[33,34,"pl-s"],[34,43,"pl-c1"],[43,44,"pl-s"],[45,46,"pl-s"],[46,50,"pl-c1"],[50,51,"pl-s"]],[[0,1,"pl-v"],[42,43,"pl-s"],[43,52,"pl-c1"],[52,53,"pl-s"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[7,11,"pl-s"],[8,11,"pl-corl"]],[],[[38,39,"pl-s"],[39,87,"pl-c1"],[87,88,"pl-s"],[115,116,"pl-s"],[116,130,"pl-c1"],[130,131,"pl-s"],[285,286,"pl-s"],[286,305,"pl-c1"],[305,306,"pl-s"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[35,36,"pl-s"],[36,52,"pl-c1"],[52,53,"pl-s"],[151,152,"pl-s"],[152,176,"pl-c1"],[176,177,"pl-s"],[199,200,"pl-s"],[200,232,"pl-c1"],[232,233,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[92,93,"pl-s"],[93,131,"pl-c1"],[131,132,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[28,29,"pl-s"],[29,54,"pl-c1"],[54,55,"pl-s"]],[[0,1,"pl-v"],[2,5,"pl-s"],[3,5,"pl-corl"],[56,57,"pl-s"],[57,63,"pl-c1"],[63,64,"pl-s"],[155,156,"pl-s"],[156,161,"pl-c1"],[161,162,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[17,18,"pl-s"],[18,49,"pl-c1"],[49,50,"pl-s"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[23,27,"pl-s"],[24,27,"pl-corl"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,45,"pl-c1"],[45,46,"pl-s"],[59,60,"pl-s"],[60,94,"pl-c1"],[94,95,"pl-s"],[191,195,"pl-s"],[192,195,"pl-corl"]],[],[[0,13,"pl-mh"],[2,13,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,17,"pl-c1"],[17,18,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,8,"pl-smi"],[9,25,"pl-en"],[26,37,"pl-en"],[39,46,"pl-en"],[47,49,"pl-k"]],[],[[4,11,"pl-smi"],[12,37,"pl-smi"],[38,39,"pl-k"],[41,47,"pl-en"],[49,51,"pl-k"]],[],[[8,14,"pl-smi"],[15,25,"pl-en"],[26,40,"pl-en"]],[[0,30,"pl-c"],[8,10,"pl-c"]],[[0,0,"pl-c"]],[],[[0,3,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[54,55,"pl-s"],[55,81,"pl-c1"],[81,82,"pl-s"],[150,151,"pl-s"],[151,171,"pl-c1"],[171,172,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,4,"pl-k"],[5,25,"pl-smi"],[26,27,"pl-k"],[28,32,"pl-c1"],[34,85,"pl-c"],[34,36,"pl-c"]],[[0,0,"pl-c"],[0,4,"pl-k"],[5,28,"pl-smi"],[29,30,"pl-k"],[31,36,"pl-c1"],[38,96,"pl-c"],[38,40,"pl-c"]],[[0,0,"pl-c"],[0,4,"pl-k"],[5,30,"pl-smi"],[31,32,"pl-k"],[33,37,"pl-c1"],[39,95,"pl-c"],[39,41,"pl-c"]],[[0,0,"pl-c"],[0,3,"pl-s"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,35,"pl-c1"],[35,36,"pl-s"],[46,47,"pl-s"],[47,51,"pl-c1"],[51,52,"pl-s"],[64,65,"pl-s"],[65,71,"pl-c1"],[71,72,"pl-s"],[82,83,"pl-s"],[83,96,"pl-c1"],[96,97,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"],[66,67,"pl-s"],[67,103,"pl-c1"],[103,104,"pl-s"],[113,114,"pl-s"],[114,134,"pl-c1"],[134,135,"pl-s"],[147,148,"pl-s"],[148,157,"pl-c1"],[157,158,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,29,"pl-c1"],[29,30,"pl-s"],[42,43,"pl-s"],[43,68,"pl-c1"],[68,69,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[56,60,"pl-s"],[57,60,"pl-corl"]],[[0,1,"pl-v"],[15,16,"pl-s"],[16,29,"pl-c1"],[29,30,"pl-s"],[44,45,"pl-s"],[45,59,"pl-c1"],[59,60,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[54,55,"pl-s"],[55,82,"pl-c1"],[82,83,"pl-s"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[48,49,"pl-s"],[49,75,"pl-c1"],[75,76,"pl-s"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[19,20,"pl-s"],[20,35,"pl-c1"],[35,36,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[54,55,"pl-s"],[55,70,"pl-c1"],[70,71,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[35,36,"pl-s"],[36,43,"pl-c1"],[43,44,"pl-s"],[49,50,"pl-s"],[50,51,"pl-c1"],[51,52,"pl-s"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[[0,1,"pl-v"],[15,16,"pl-s"],[16,42,"pl-c1"],[42,43,"pl-s"],[64,65,"pl-s"],[65,82,"pl-c1"],[82,83,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[13,14,"pl-s"],[14,23,"pl-c1"],[23,24,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[2,3,"pl-v"],[106,107,"pl-s"],[107,111,"pl-c1"],[111,112,"pl-s"],[115,116,"pl-s"],[116,121,"pl-c1"],[121,122,"pl-s"]],[[2,3,"pl-v"],[54,55,"pl-s"],[55,61,"pl-c1"],[61,62,"pl-s"]],[[2,3,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[52,53,"pl-s"],[53,66,"pl-c1"],[66,67,"pl-s"],[111,112,"pl-s"],[112,133,"pl-c1"],[133,134,"pl-s"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[51,52,"pl-s"],[52,84,"pl-c1"],[84,85,"pl-s"],[122,123,"pl-s"],[123,136,"pl-c1"],[136,137,"pl-s"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[48,49,"pl-s"],[49,53,"pl-c1"],[53,54,"pl-s"],[111,112,"pl-s"],[112,116,"pl-c1"],[116,117,"pl-s"],[218,219,"pl-s"],[219,235,"pl-c1"],[235,236,"pl-s"],[296,297,"pl-s"],[297,322,"pl-c1"],[322,323,"pl-s"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,48,"pl-c1"]],[[0,47,"pl-c1"]],[[0,3,"pl-c1"]],[[0,62,"pl-c1"]],[[0,111,"pl-c1"]],[[0,4,"pl-c1"]],[[0,2,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,1,"pl-v"],[142,143,"pl-s"],[143,147,"pl-c1"],[147,148,"pl-s"],[184,185,"pl-s"],[185,218,"pl-c1"],[218,219,"pl-s"],[252,253,"pl-s"],[253,269,"pl-c1"],[269,270,"pl-s"],[319,320,"pl-s"],[320,343,"pl-c1"],[343,344,"pl-s"],[396,397,"pl-s"],[397,424,"pl-c1"],[424,425,"pl-s"]],[[0,1,"pl-v"],[92,93,"pl-s"],[93,97,"pl-c1"],[97,98,"pl-s"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[58,62,"pl-s"],[59,62,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[72,73,"pl-s"],[73,103,"pl-c1"],[103,104,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[39,40,"pl-s"],[40,85,"pl-c1"],[85,86,"pl-s"]],[[0,1,"pl-v"],[19,20,"pl-s"],[20,40,"pl-c1"],[40,41,"pl-s"],[47,48,"pl-s"],[48,69,"pl-c1"],[69,70,"pl-s"]],[[0,1,"pl-v"],[13,14,"pl-s"],[14,24,"pl-c1"],[24,25,"pl-s"],[47,48,"pl-s"],[48,59,"pl-c1"],[59,60,"pl-s"]],[[0,1,"pl-v"],[19,20,"pl-s"],[20,62,"pl-c1"],[62,63,"pl-s"]],[[0,1,"pl-v"],[38,39,"pl-s"],[39,55,"pl-c1"],[55,56,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,34,"pl-c1"],[34,35,"pl-s"],[39,40,"pl-s"],[40,62,"pl-c1"],[62,63,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,27,"pl-c1"],[27,28,"pl-s"]],[[0,1,"pl-v"],[10,11,"pl-s"],[11,38,"pl-c1"],[38,39,"pl-s"],[43,44,"pl-s"],[44,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,9,"pl-c1"],[9,10,"pl-s"],[13,14,"pl-s"],[14,24,"pl-c1"],[24,25,"pl-s"],[29,30,"pl-s"],[30,43,"pl-c1"],[43,44,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,29,"pl-c1"],[29,30,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,29,"pl-c1"],[29,30,"pl-s"]],[[0,1,"pl-v"],[47,48,"pl-s"],[48,72,"pl-c1"],[72,73,"pl-s"],[76,77,"pl-s"],[77,101,"pl-c1"],[101,102,"pl-s"],[116,117,"pl-s"],[117,122,"pl-c1"],[122,123,"pl-s"],[128,129,"pl-s"],[129,133,"pl-c1"],[133,134,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,17,"pl-c1"]],[[0,112,"pl-c1"]],[[0,1,"pl-c1"]],[[0,8,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"]],[[0,17,"pl-c1"]],[[0,60,"pl-c1"]],[[0,1,"pl-c1"]],[[0,8,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,15,"pl-c1"]],[[0,108,"pl-c1"]],[[0,57,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[7,8,"pl-s"],[8,21,"pl-c1"],[21,22,"pl-s"],[43,44,"pl-s"],[44,72,"pl-c1"],[72,73,"pl-s"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[20,21,"pl-s"],[21,27,"pl-s"],[22,27,"pl-corl"],[39,40,"pl-s"],[40,41,"pl-s"],[41,89,"pl-corl"],[89,90,"pl-s"],[116,117,"pl-s"],[117,138,"pl-c1"],[138,139,"pl-s"],[182,183,"pl-s"],[183,189,"pl-c1"],[189,190,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[74,75,"pl-s"],[75,80,"pl-c1"],[80,81,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"]],[[0,1,"pl-v"],[2,6,"pl-s"],[3,6,"pl-corl"],[21,22,"pl-s"],[22,24,"pl-c1"],[24,25,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"],[37,38,"pl-s"],[38,53,"pl-c1"],[53,54,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[35,36,"pl-s"],[36,51,"pl-c1"],[51,52,"pl-s"],[54,55,"pl-s"],[55,66,"pl-c1"],[66,67,"pl-s"],[72,73,"pl-s"],[73,92,"pl-c1"],[92,93,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[30,31,"pl-s"],[31,60,"pl-c1"],[60,61,"pl-s"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[135,136,"pl-s"],[136,142,"pl-c1"],[142,143,"pl-s"],[174,175,"pl-s"],[175,183,"pl-c1"],[183,184,"pl-s"],[236,237,"pl-s"],[237,248,"pl-c1"],[248,249,"pl-s"]],[[0,1,"pl-v"],[116,124,"pl-s"],[117,124,"pl-corl"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"],[40,41,"pl-s"],[41,43,"pl-c1"],[43,44,"pl-s"],[124,132,"pl-s"],[125,132,"pl-corl"]],[[0,1,"pl-v"],[88,95,"pl-s"],[89,95,"pl-corl"]],[[0,1,"pl-v"],[37,45,"pl-s"],[38,45,"pl-corl"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[[0,1,"pl-v"],[20,21,"pl-s"],[21,27,"pl-c1"],[27,28,"pl-s"],[63,64,"pl-s"],[64,74,"pl-c1"],[74,75,"pl-s"],[76,77,"pl-s"],[77,91,"pl-c1"],[91,92,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[284,291,"pl-s"],[285,291,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[40,48,"pl-s"],[41,48,"pl-corl"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,31,"pl-c1"],[31,32,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,19,"pl-c1"],[19,20,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,21,"pl-c1"],[21,22,"pl-s"],[81,82,"pl-s"],[82,86,"pl-c1"],[86,87,"pl-s"],[115,116,"pl-s"],[116,141,"pl-c1"],[141,142,"pl-s"],[170,171,"pl-s"],[171,176,"pl-c1"],[176,177,"pl-s"],[178,179,"pl-s"],[179,184,"pl-c1"],[184,185,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[58,59,"pl-s"],[59,67,"pl-c1"],[67,68,"pl-s"]],[[0,1,"pl-v"],[118,119,"pl-s"],[119,131,"pl-c1"],[131,132,"pl-s"],[165,166,"pl-s"],[166,173,"pl-c1"],[173,174,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[118,119,"pl-s"],[119,123,"pl-c1"],[123,124,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,19,"pl-mh"],[3,19,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,16,"pl-c1"],[16,17,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,28,"pl-c1"],[28,29,"pl-s"],[58,59,"pl-s"],[59,66,"pl-c1"],[66,67,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"],[42,43,"pl-s"],[43,46,"pl-c1"],[46,47,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,10,"pl-c1"],[10,11,"pl-s"],[50,51,"pl-s"],[51,63,"pl-c1"],[63,64,"pl-s"]],[[0,1,"pl-v"],[43,44,"pl-s"],[44,72,"pl-c1"],[72,73,"pl-s"]],[],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"],[87,88,"pl-s"],[88,95,"pl-c1"],[95,96,"pl-s"],[100,101,"pl-s"],[101,107,"pl-c1"],[107,108,"pl-s"],[158,159,"pl-s"],[159,181,"pl-c1"],[181,182,"pl-s"],[228,229,"pl-s"],[229,236,"pl-c1"],[236,237,"pl-s"],[238,239,"pl-s"],[239,245,"pl-c1"],[245,246,"pl-s"],[285,286,"pl-s"],[286,312,"pl-c1"],[312,313,"pl-s"]],[],[[52,53,"pl-s"],[53,65,"pl-c1"],[65,66,"pl-s"],[141,142,"pl-s"],[142,158,"pl-c1"],[158,159,"pl-s"],[183,184,"pl-s"],[184,195,"pl-c1"],[195,196,"pl-s"]],[],[[26,27,"pl-s"],[27,58,"pl-c1"],[58,59,"pl-s"],[117,118,"pl-s"],[118,133,"pl-c1"],[133,134,"pl-s"],[163,164,"pl-s"],[164,176,"pl-c1"],[176,177,"pl-s"],[241,242,"pl-s"],[242,249,"pl-c1"],[249,250,"pl-s"],[251,252,"pl-s"],[252,258,"pl-c1"],[258,259,"pl-s"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,58,"pl-c1"]],[[0,57,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[8,9,"pl-s"],[43,44,"pl-s"],[44,45,"pl-s"],[45,153,"pl-corl"],[153,154,"pl-s"]],[],[[0,1,"pl-v"],[13,14,"pl-s"],[14,27,"pl-c1"],[27,28,"pl-s"],[87,88,"pl-s"],[88,118,"pl-c1"],[118,119,"pl-s"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,54,"pl-c1"]],[[0,34,"pl-c1"]],[[0,64,"pl-c1"]],[[0,4,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,1,"pl-v"],[14,15,"pl-s"],[15,25,"pl-c1"],[25,26,"pl-s"]],[[2,3,"pl-v"],[11,12,"pl-s"],[12,43,"pl-c1"],[43,44,"pl-s"]],[[4,5,"pl-v"],[10,11,"pl-s"],[11,52,"pl-c1"],[52,53,"pl-s"],[57,58,"pl-s"],[58,101,"pl-c1"],[101,102,"pl-s"]],[[2,3,"pl-v"],[21,22,"pl-s"],[22,27,"pl-c1"],[27,28,"pl-s"]],[[2,3,"pl-v"],[11,12,"pl-s"],[12,44,"pl-c1"],[44,45,"pl-s"],[51,52,"pl-s"],[52,90,"pl-c1"],[90,91,"pl-s"]],[[2,3,"pl-v"],[11,12,"pl-s"],[12,41,"pl-c1"],[41,42,"pl-s"]],[[2,3,"pl-v"],[11,12,"pl-s"],[12,43,"pl-c1"],[43,44,"pl-s"],[51,52,"pl-s"],[52,84,"pl-c1"],[84,85,"pl-s"]],[[2,3,"pl-v"],[12,13,"pl-s"],[13,31,"pl-c1"],[31,32,"pl-s"],[36,37,"pl-s"],[37,60,"pl-c1"],[60,61,"pl-s"]],[[2,3,"pl-v"],[12,13,"pl-s"],[13,30,"pl-c1"],[30,31,"pl-s"],[35,36,"pl-s"],[36,54,"pl-c1"],[54,55,"pl-s"]],[[2,3,"pl-v"]],[[4,5,"pl-v"],[6,7,"pl-s"],[7,24,"pl-c1"],[24,25,"pl-s"],[38,39,"pl-s"],[39,55,"pl-c1"],[55,56,"pl-s"]],[[4,5,"pl-v"],[6,7,"pl-s"],[7,23,"pl-c1"],[23,24,"pl-s"],[37,38,"pl-s"],[38,53,"pl-c1"],[53,54,"pl-s"]],[[4,5,"pl-v"],[6,7,"pl-s"],[7,19,"pl-c1"],[19,20,"pl-s"],[33,34,"pl-s"],[34,48,"pl-c1"],[48,49,"pl-s"]],[[4,5,"pl-v"],[6,7,"pl-s"],[7,24,"pl-c1"],[24,25,"pl-s"],[38,39,"pl-s"],[39,58,"pl-c1"],[58,59,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,1,"pl-v"],[55,123,"pl-corl"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[39,40,"pl-s"],[40,54,"pl-c1"],[54,55,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[18,19,"pl-s"],[19,26,"pl-c1"],[26,27,"pl-s"],[30,31,"pl-s"],[31,45,"pl-c1"],[45,46,"pl-s"]],[[0,1,"pl-v"],[159,160,"pl-s"],[160,180,"pl-c1"],[180,181,"pl-s"],[189,190,"pl-s"],[190,216,"pl-c1"],[216,217,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,27,"pl-c1"],[27,28,"pl-s"],[35,36,"pl-s"],[36,45,"pl-c1"],[45,46,"pl-s"],[87,88,"pl-s"],[88,97,"pl-c1"],[97,98,"pl-s"]],[[0,1,"pl-v"],[70,71,"pl-s"],[71,80,"pl-c1"],[80,81,"pl-s"]],[],[[0,8,"pl-mh"],[3,8,"pl-en"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"],[102,103,"pl-s"],[103,130,"pl-c1"],[130,131,"pl-s"],[134,135,"pl-s"],[135,161,"pl-c1"],[161,162,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[52,53,"pl-s"],[53,64,"pl-c1"],[64,65,"pl-s"],[141,142,"pl-s"],[142,152,"pl-c1"],[152,153,"pl-s"],[179,180,"pl-s"],[180,194,"pl-c1"],[194,195,"pl-s"],[269,270,"pl-s"]],[[0,1,"pl-v"],[50,51,"pl-s"],[51,61,"pl-c1"],[61,62,"pl-s"],[75,76,"pl-s"],[76,90,"pl-c1"],[90,91,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"],[91,92,"pl-s"],[92,112,"pl-c1"],[112,113,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[6,10,"pl-s"],[7,10,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[43,44,"pl-s"],[44,64,"pl-c1"],[64,65,"pl-s"],[90,91,"pl-s"],[91,105,"pl-c1"],[105,106,"pl-s"],[120,121,"pl-s"],[121,125,"pl-c1"],[125,126,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"],[78,90,"pl-s"],[79,90,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[61,62,"pl-s"],[62,82,"pl-c1"],[82,83,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,26,"pl-c1"],[26,27,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[55,56,"pl-s"],[56,74,"pl-c1"],[74,75,"pl-s"],[97,98,"pl-s"],[98,118,"pl-c1"],[118,119,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,26,"pl-c1"],[26,27,"pl-s"]],[[0,1,"pl-v"],[55,56,"pl-s"],[56,66,"pl-c1"],[66,67,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,31,"pl-c1"],[31,32,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,27,"pl-c1"],[27,28,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,23,"pl-c1"],[23,24,"pl-s"]],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"],[85,86,"pl-s"],[86,96,"pl-c1"],[96,97,"pl-s"],[115,116,"pl-s"],[116,140,"pl-c1"],[140,141,"pl-s"]],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"]],[[0,1,"pl-v"],[59,60,"pl-s"],[60,69,"pl-c1"],[69,70,"pl-s"]],[],[[0,33,"pl-mh"],[3,33,"pl-en"]],[],[[0,1,"pl-v"],[2,3,"pl-s"],[3,20,"pl-c1"],[20,21,"pl-s"],[24,25,"pl-s"],[25,43,"pl-c1"],[43,44,"pl-s"],[50,51,"pl-s"],[51,67,"pl-c1"],[67,68,"pl-s"],[71,72,"pl-s"],[72,89,"pl-c1"],[89,90,"pl-s"],[98,99,"pl-s"],[99,114,"pl-c1"],[114,115,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,120,"pl-c1"],[120,121,"pl-s"],[131,132,"pl-s"],[132,146,"pl-c1"],[146,147,"pl-s"],[148,149,"pl-s"],[149,168,"pl-c1"],[168,169,"pl-s"],[197,198,"pl-s"],[198,213,"pl-c1"],[213,214,"pl-s"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[6,9,"pl-s"],[7,9,"pl-corl"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[8,9,"pl-s"],[9,26,"pl-c1"],[26,27,"pl-s"]],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,7,"pl-mh"],[2,7,"pl-en"]],[],[[0,1,"pl-v"],[89,90,"pl-s"],[90,143,"pl-c1"],[143,144,"pl-s"]],[[0,1,"pl-v"],[92,93,"pl-s"],[93,108,"pl-c1"],[108,109,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,3,"pl-smi"],[4,16,"pl-en"],[17,26,"pl-en"],[27,29,"pl-k"]],[],[[4,13,"pl-smi"],[14,24,"pl-en"],[25,36,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[0,1,"pl-v"],[40,41,"pl-s"],[41,50,"pl-c1"],[50,51,"pl-s"]],[[0,1,"pl-v"]],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"],[110,111,"pl-s"],[115,116,"pl-s"],[116,117,"pl-s"],[117,148,"pl-corl"],[148,149,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,26,"pl-c1"],[26,27,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,22,"pl-c1"],[22,23,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[60,61,"pl-s"],[61,67,"pl-c1"],[67,68,"pl-s"]],[[2,3,"pl-v"],[4,5,"pl-s"],[5,14,"pl-c1"],[14,15,"pl-s"],[58,59,"pl-s"],[59,63,"pl-c1"],[63,64,"pl-s"]],[[0,1,"pl-v"],[115,116,"pl-s"],[120,121,"pl-s"]],[[0,1,"pl-v"],[34,35,"pl-s"],[35,42,"pl-c1"],[42,43,"pl-s"],[63,64,"pl-s"],[64,79,"pl-c1"],[79,80,"pl-s"],[162,163,"pl-s"],[163,172,"pl-c1"],[172,173,"pl-s"]],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[],[[0,1,"pl-s"],[17,18,"pl-s"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[29,30,"pl-s"],[30,42,"pl-c1"],[42,43,"pl-s"]],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"],[11,55,"pl-corl"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,71,"pl-c1"],[71,72,"pl-s"]],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,36,"pl-c1"]],[[0,36,"pl-c1"]],[[0,36,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,32,"pl-c1"]],[[0,18,"pl-c1"]],[[0,18,"pl-c1"]],[[0,18,"pl-c1"]],[[0,3,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[12,13,"pl-s"],[13,105,"pl-c1"],[105,106,"pl-s"]],[],[[0,1,"pl-v"],[17,18,"pl-s"],[18,44,"pl-c1"],[44,45,"pl-s"],[62,63,"pl-s"],[63,77,"pl-c1"],[77,78,"pl-s"]],[[0,1,"pl-v"],[8,9,"pl-s"],[9,67,"pl-c1"],[67,68,"pl-s"],[83,84,"pl-s"],[84,97,"pl-c1"],[97,98,"pl-s"]],[],[[0,1,"pl-s"],[17,18,"pl-s"]],[],[[0,1,"pl-v"]],[[0,1,"pl-v"],[97,98,"pl-s"],[98,111,"pl-c1"],[111,112,"pl-s"]],[[0,1,"pl-v"],[89,90,"pl-s"],[90,103,"pl-c1"],[103,104,"pl-s"]],[[0,1,"pl-v"],[14,15,"pl-s"],[15,96,"pl-c1"],[96,97,"pl-s"],[114,115,"pl-s"],[115,124,"pl-c1"],[124,125,"pl-s"],[147,148,"pl-s"],[148,163,"pl-c1"],[163,164,"pl-s"]],[],[],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"],[18,19,"pl-s"],[19,29,"pl-c1"],[29,30,"pl-s"],[71,86,"pl-s"],[72,86,"pl-corl"]],[[0,1,"pl-v"],[58,73,"pl-s"],[59,73,"pl-corl"]],[[0,1,"pl-v"],[72,82,"pl-s"],[73,82,"pl-corl"]],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"]],[],[[0,1,"pl-s"],[17,18,"pl-s"]],[],[[0,1,"pl-v"]],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"],[21,22,"pl-s"],[22,35,"pl-c1"],[35,36,"pl-s"]],[],[[0,8,"pl-mh"],[2,8,"pl-en"]],[],[[0,1,"pl-v"],[176,179,"pl-s"],[177,179,"pl-corl"]],[[0,1,"pl-v"],[62,63,"pl-s"],[63,71,"pl-c1"],[71,72,"pl-s"],[103,104,"pl-s"],[104,130,"pl-c1"],[130,131,"pl-s"],[170,171,"pl-s"],[171,203,"pl-c1"],[203,204,"pl-s"],[206,207,"pl-s"],[207,228,"pl-c1"],[228,229,"pl-s"],[231,232,"pl-s"],[232,244,"pl-c1"],[244,245,"pl-s"],[300,301,"pl-s"],[301,302,"pl-c1"],[302,303,"pl-s"],[307,308,"pl-s"],[308,309,"pl-c1"],[309,310,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,22,"pl-c1"],[22,23,"pl-s"],[33,34,"pl-s"],[34,60,"pl-c1"],[60,61,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,13,"pl-c1"],[13,14,"pl-s"]],[],[[0,1,"pl-s"],[17,18,"pl-s"]],[],[[0,1,"pl-v"],[36,37,"pl-s"],[37,47,"pl-c1"],[47,48,"pl-s"],[78,79,"pl-s"],[79,89,"pl-c1"],[89,90,"pl-s"],[104,105,"pl-s"],[105,121,"pl-c1"],[121,122,"pl-s"],[137,138,"pl-s"],[138,143,"pl-c1"],[143,144,"pl-s"],[158,159,"pl-s"],[159,175,"pl-c1"],[175,176,"pl-s"]],[[0,1,"pl-v"],[23,24,"pl-s"],[24,34,"pl-c1"],[34,35,"pl-s"],[69,70,"pl-s"],[70,84,"pl-c1"],[84,85,"pl-s"],[90,91,"pl-s"],[91,101,"pl-c1"],[101,102,"pl-s"],[114,115,"pl-s"],[115,125,"pl-c1"],[125,126,"pl-s"],[154,155,"pl-s"],[155,169,"pl-c1"],[169,170,"pl-s"],[245,246,"pl-s"],[246,270,"pl-c1"],[270,271,"pl-s"],[294,295,"pl-s"],[295,309,"pl-c1"],[309,310,"pl-s"]],[[0,1,"pl-v"],[2,3,"pl-s"],[3,24,"pl-c1"],[24,25,"pl-s"],[70,71,"pl-s"],[71,86,"pl-c1"],[86,87,"pl-s"]],[],[[0,24,"pl-mh"],[3,24,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,6,"pl-smi"],[7,15,"pl-en"],[16,25,"pl-s"],[16,17,"pl-pds"],[24,25,"pl-pds"],[27,30,"pl-en"],[31,33,"pl-k"],[34,45,"pl-en"],[47,57,"pl-en"],[58,61,"pl-en"],[63,65,"pl-k"],[66,69,"pl-smi"],[70,81,"pl-en"],[82,85,"pl-smi"]],[],[[0,41,"pl-c"],[0,2,"pl-c"]],[[0,0,"pl-c"],[0,6,"pl-k"],[7,12,"pl-k"],[13,22,"pl-en"],[24,34,"pl-en"]],[[2,8,"pl-k"],[9,19,"pl-en"],[20,31,"pl-en"],[32,39,"pl-en"],[40,43,"pl-en"]],[],[[0,19,"pl-c"],[4,6,"pl-c"]],[[0,0,"pl-c"],[4,10,"pl-k"],[11,15,"pl-smi"]],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[2,9,"pl-v"],[12,18,"pl-v"],[19,24,"pl-v"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,3,"pl-smi"],[4,15,"pl-en"],[16,19,"pl-smi"],[21,23,"pl-k"],[24,28,"pl-c1"],[29,30,"pl-k"],[31,35,"pl-c1"],[36,37,"pl-k"],[38,41,"pl-k"]],[[2,8,"pl-smi"],[9,10,"pl-k"],[11,14,"pl-smi"],[15,26,"pl-en"],[27,30,"pl-smi"],[32,38,"pl-smi"]],[[2,8,"pl-smi"],[9,10,"pl-k"],[11,14,"pl-smi"],[15,26,"pl-en"],[27,30,"pl-smi"],[32,38,"pl-smi"]],[],[[0,3,"pl-s"]],[],[[50,51,"pl-s"],[51,67,"pl-c1"],[67,68,"pl-s"]],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[1,4,"pl-en"],[6,9,"pl-en"],[11,13,"pl-k"],[14,30,"pl-en"],[31,34,"pl-smi"],[35,46,"pl-en"],[47,50,"pl-smi"],[53,68,"pl-smi"],[70,79,"pl-smi"],[82,101,"pl-c"],[82,84,"pl-c"]],[[0,0,"pl-c"]],[[0,57,"pl-c"],[0,2,"pl-c"]],[[0,0,"pl-c"],[0,6,"pl-k"],[7,13,"pl-k"],[14,30,"pl-en"],[31,41,"pl-smi"],[41,42,"pl-k"],[42,46,"pl-smi"],[46,47,"pl-k"],[47,54,"pl-smi"],[56,66,"pl-smi"],[66,68,"pl-k"],[69,78,"pl-smi"],[80,86,"pl-k"],[89,95,"pl-smi"],[97,113,"pl-smi"],[114,123,"pl-smi"]],[],[[0,15,"pl-c"],[2,4,"pl-c"]],[[0,0,"pl-c"],[2,4,"pl-en"],[6,15,"pl-smi"],[16,18,"pl-k"],[19,23,"pl-c1"]],[[4,10,"pl-smi"],[11,15,"pl-c1"]],[[0,35,"pl-c"],[2,4,"pl-c"]],[[0,0,"pl-c"],[2,5,"pl-smi"],[6,12,"pl-smi"],[13,14,"pl-k"],[15,24,"pl-smi"],[25,32,"pl-en"],[35,48,"pl-en"],[49,58,"pl-smi"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,6,"pl-smi"],[7,11,"pl-en"],[12,18,"pl-en"],[22,30,"pl-en"],[31,45,"pl-s"],[31,32,"pl-pds"],[44,45,"pl-pds"],[48,54,"pl-en"],[56,58,"pl-k"],[59,70,"pl-en"],[71,77,"pl-smi"],[78,80,"pl-smi"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[],[[2,8,"pl-v"]],[[4,16,"pl-v"]],[[6,12,"pl-v"]],[[6,12,"pl-v"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[[1,4,"pl-en"],[6,9,"pl-en"],[11,13,"pl-k"],[14,17,"pl-smi"],[18,24,"pl-smi"],[25,31,"pl-en"],[32,38,"pl-en"],[39,41,"pl-k"],[42,45,"pl-k"]],[[2,14,"pl-smi"],[15,16,"pl-k"],[17,33,"pl-en"],[34,37,"pl-smi"],[38,49,"pl-en"],[50,56,"pl-smi"],[57,59,"pl-smi"],[62,77,"pl-smi"],[79,88,"pl-smi"],[91,110,"pl-c"],[91,93,"pl-c"]],[[0,0,"pl-c"]],[],[],[[0,4,"pl-smi"],[5,8,"pl-smi"],[9,13,"pl-smi"],[14,20,"pl-smi"],[21,25,"pl-smi"],[26,28,"pl-smi"],[29,33,"pl-smi"],[34,37,"pl-smi"],[38,43,"pl-smi"],[44,48,"pl-smi"]],[],[],[],[[0,1,"pl-k"],[2,5,"pl-smi"],[6,9,"pl-smi"],[10,13,"pl-smi"],[14,20,"pl-smi"],[21,26,"pl-smi"],[27,32,"pl-smi"],[33,35,"pl-smi"],[36,39,"pl-smi"],[40,46,"pl-smi"],[48,51,"pl-smi"],[52,55,"pl-smi"],[58,74,"pl-en"],[75,87,"pl-s"],[75,76,"pl-pds"],[86,87,"pl-pds"],[91,93,"pl-smi"],[94,97,"pl-smi"],[98,103,"pl-smi"],[104,106,"pl-smi"],[107,110,"pl-smi"],[112,118,"pl-smi"],[119,126,"pl-en"],[127,129,"pl-k"],[132,149,"pl-en"],[150,162,"pl-s"],[150,151,"pl-pds"],[161,162,"pl-pds"],[167,173,"pl-smi"],[174,181,"pl-en"],[182,184,"pl-k"],[187,203,"pl-en"],[204,216,"pl-s"],[204,205,"pl-pds"],[215,216,"pl-pds"]],[[0,1,"pl-k"],[2,5,"pl-smi"],[7,15,"pl-en"],[16,26,"pl-smi"],[26,27,"pl-k"],[27,31,"pl-smi"],[31,32,"pl-k"],[32,41,"pl-smi"],[43,49,"pl-k"],[49,51,"pl-k"],[54,62,"pl-smi"]],[[0,1,"pl-k"],[2,11,"pl-smi"],[12,16,"pl-smi"],[17,19,"pl-k"],[20,28,"pl-en"],[29,32,"pl-en"],[33,34,"pl-en"],[36,41,"pl-en"],[43,52,"pl-en"],[53,55,"pl-en"],[56,59,"pl-en"],[60,67,"pl-en"],[68,72,"pl-en"],[73,75,"pl-en"],[76,78,"pl-en"],[79,81,"pl-en"],[82,85,"pl-en"],[86,90,"pl-en"],[91,100,"pl-en"],[101,103,"pl-en"],[104,107,"pl-en"],[108,115,"pl-en"]],[[2,10,"pl-en"],[13,20,"pl-en"],[21,24,"pl-en"],[26,41,"pl-en"],[43,51,"pl-en"],[52,56,"pl-en"],[58,66,"pl-en"],[71,77,"pl-en"],[78,81,"pl-en"],[83,88,"pl-en"],[89,106,"pl-en"],[108,112,"pl-en"],[113,118,"pl-en"],[124,129,"pl-smi"],[130,146,"pl-en"],[147,159,"pl-s"],[147,148,"pl-pds"],[158,159,"pl-pds"]],[],[],[],[[0,1,"pl-k"],[2,8,"pl-smi"],[9,10,"pl-k"],[11,23,"pl-smi"],[24,33,"pl-smi"],[34,37,"pl-k"]],[[37,47,"pl-smi"],[48,50,"pl-k"],[51,58,"pl-en"],[59,61,"pl-en"],[62,63,"pl-en"],[65,80,"pl-en"],[82,85,"pl-k"],[86,88,"pl-en"],[89,93,"pl-en"],[94,96,"pl-en"],[97,100,"pl-en"],[101,104,"pl-en"],[105,111,"pl-en"]],[],[],[],[[2,8,"pl-en"],[9,10,"pl-en"],[12,26,"pl-en"],[27,44,"pl-en"]],[[2,5,"pl-en"],[10,17,"pl-en"],[18,27,"pl-en"],[28,32,"pl-en"],[33,35,"pl-en"],[36,45,"pl-en"]],[[2,6,"pl-en"],[7,10,"pl-en"],[11,16,"pl-en"],[17,20,"pl-en"],[21,24,"pl-en"],[25,32,"pl-en"],[33,36,"pl-k"],[36,37,"pl-k"],[37,39,"pl-k"],[40,43,"pl-en"],[44,52,"pl-en"],[53,62,"pl-en"],[63,73,"pl-en"],[74,77,"pl-en"],[78,86,"pl-en"],[87,89,"pl-en"],[90,94,"pl-en"],[95,103,"pl-en"],[104,110,"pl-en"]],[[2,5,"pl-en"],[6,16,"pl-en"],[17,19,"pl-en"],[20,23,"pl-en"],[24,32,"pl-en"],[33,40,"pl-en"],[41,44,"pl-en"],[45,47,"pl-en"],[48,54,"pl-en"],[55,63,"pl-en"],[64,66,"pl-en"],[67,73,"pl-en"],[74,75,"pl-en"],[76,84,"pl-en"]],[[3,17,"pl-en"],[18,37,"pl-en"],[41,43,"pl-en"],[44,54,"pl-en"],[56,59,"pl-smi"],[61,74,"pl-smi"]],[[0,1,"pl-k"],[2,12,"pl-smi"],[13,16,"pl-smi"],[17,20,"pl-smi"],[21,29,"pl-smi"],[30,32,"pl-smi"],[33,39,"pl-smi"],[40,53,"pl-smi"]],[[0,1,"pl-k"],[2,5,"pl-smi"],[7,9,"pl-c1"],[10,11,"pl-k"],[12,21,"pl-smi"],[22,31,"pl-smi"],[32,37,"pl-smi"],[38,47,"pl-smi"],[48,51,"pl-k"]],[],[[116,127,"pl-smi"],[128,140,"pl-en"],[144,146,"pl-smi"],[148,162,"pl-smi"],[163,182,"pl-en"]],[],[[0,9,"pl-smi"],[10,18,"pl-smi"]],[],[[0,1,"pl-k"],[2,5,"pl-smi"],[6,11,"pl-k"],[12,16,"pl-en"]],[[218,226,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[49,53,"pl-en"],[54,61,"pl-en"],[62,64,"pl-en"],[65,70,"pl-en"],[71,74,"pl-en"],[75,77,"pl-en"],[78,81,"pl-en"],[82,89,"pl-en"],[90,92,"pl-en"],[93,97,"pl-en"]],[],[[88,89,"pl-en"],[90,94,"pl-en"]],[[86,91,"pl-en"],[92,99,"pl-en"],[100,103,"pl-en"],[104,106,"pl-en"],[107,110,"pl-en"],[111,113,"pl-en"],[114,119,"pl-en"],[120,123,"pl-en"],[124,127,"pl-en"],[128,135,"pl-en"]],[[48,50,"pl-en"],[51,53,"pl-en"]],[],[],[],[],[[60,63,"pl-en"],[64,69,"pl-en"],[70,72,"pl-en"],[73,78,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[[132,145,"pl-en"]],[[54,56,"pl-en"],[57,60,"pl-en"]],[],[],[],[],[],[],[],[],[[297,302,"pl-en"],[303,305,"pl-en"]],[[63,71,"pl-en"],[73,77,"pl-en"],[107,115,"pl-en"]],[[30,38,"pl-en"],[40,44,"pl-en"],[133,141,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[34,37,"pl-en"],[38,40,"pl-en"]],[[15,20,"pl-en"],[160,161,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[[59,60,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[76,78,"pl-en"],[79,82,"pl-en"],[83,85,"pl-en"],[86,93,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[183,185,"pl-en"],[186,190,"pl-en"],[277,287,"pl-en"],[288,290,"pl-en"],[291,301,"pl-en"],[302,305,"pl-en"],[306,308,"pl-en"],[309,312,"pl-en"]],[[143,144,"pl-en"]],[],[],[],[],[],[],[],[],[],[[58,61,"pl-en"],[62,70,"pl-en"],[71,77,"pl-en"],[78,88,"pl-en"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[[92,93,"pl-k"],[94,108,"pl-s"],[94,95,"pl-pds"],[107,108,"pl-pds"]],[[0,1,"pl-k"],[2,10,"pl-smi"],[11,17,"pl-smi"],[18,19,"pl-k"],[20,22,"pl-smi"],[23,26,"pl-smi"],[27,33,"pl-smi"],[34,37,"pl-smi"],[39,52,"pl-smi"],[53,63,"pl-en"],[67,69,"pl-smi"],[70,73,"pl-smi"],[74,81,"pl-smi"],[82,85,"pl-smi"],[86,91,"pl-smi"],[92,97,"pl-smi"],[99,113,"pl-smi"],[115,118,"pl-smi"],[119,123,"pl-smi"],[124,129,"pl-smi"],[131,145,"pl-smi"],[147,151,"pl-smi"],[152,155,"pl-smi"],[156,163,"pl-smi"],[164,172,"pl-smi"],[174,178,"pl-smi"],[179,184,"pl-smi"],[185,192,"pl-smi"],[193,195,"pl-k"],[196,200,"pl-en"],[201,210,"pl-en"],[211,212,"pl-en"],[213,217,"pl-en"],[218,226,"pl-en"],[227,231,"pl-en"],[233,236,"pl-en"],[237,242,"pl-en"],[243,247,"pl-en"],[248,250,"pl-en"],[251,257,"pl-en"],[258,262,"pl-en"],[263,270,"pl-en"],[271,273,"pl-en"],[274,279,"pl-en"],[280,286,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,9,"pl-en"],[10,16,"pl-en"],[17,19,"pl-en"],[20,24,"pl-en"],[25,30,"pl-en"],[31,41,"pl-en"],[42,48,"pl-en"],[49,53,"pl-en"],[54,55,"pl-en"],[56,64,"pl-en"],[65,71,"pl-en"],[73,77,"pl-en"],[78,84,"pl-en"],[85,88,"pl-en"],[89,105,"pl-en"],[106,108,"pl-k"],[109,114,"pl-en"],[115,123,"pl-en"],[124,128,"pl-en"],[129,138,"pl-en"],[139,146,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,11,"pl-en"],[12,17,"pl-en"],[18,27,"pl-en"],[28,34,"pl-en"],[36,39,"pl-en"],[40,44,"pl-en"],[45,46,"pl-en"],[47,52,"pl-en"],[53,56,"pl-k"],[57,58,"pl-en"],[59,67,"pl-en"],[69,74,"pl-en"],[75,80,"pl-en"],[81,83,"pl-en"],[84,89,"pl-en"]],[],[],[],[[2,7,"pl-en"],[8,13,"pl-en"],[14,23,"pl-en"],[24,31,"pl-en"],[32,34,"pl-en"]],[[2,5,"pl-en"],[6,11,"pl-en"],[12,17,"pl-en"],[18,24,"pl-en"],[25,29,"pl-en"],[30,37,"pl-en"],[38,47,"pl-en"],[48,52,"pl-en"],[54,57,"pl-en"],[58,64,"pl-en"],[65,72,"pl-en"],[73,75,"pl-en"],[76,80,"pl-en"]],[],[],[],[[0,1,"pl-k"],[2,5,"pl-smi"],[6,13,"pl-smi"],[14,17,"pl-k"],[82,85,"pl-smi"],[86,92,"pl-smi"],[93,95,"pl-en"],[96,106,"pl-en"]],[[0,1,"pl-k"],[2,9,"pl-smi"],[10,17,"pl-smi"],[18,21,"pl-k"]],[],[],[],[],[],[],[[3,7,"pl-smi"],[9,12,"pl-smi"],[14,20,"pl-smi"],[21,24,"pl-smi"],[26,33,"pl-smi"],[34,36,"pl-smi"],[37,45,"pl-smi"],[46,47,"pl-smi"],[48,54,"pl-smi"],[55,59,"pl-smi"],[60,64,"pl-smi"],[65,72,"pl-smi"],[73,82,"pl-smi"],[84,87,"pl-smi"],[88,94,"pl-smi"],[95,98,"pl-k"]],[],[],[],[[20,22,"pl-smi"],[23,26,"pl-smi"],[27,36,"pl-smi"],[37,44,"pl-smi"]],[],[],[],[[0,1,"pl-k"],[2,5,"pl-smi"],[6,9,"pl-smi"],[10,12,"pl-smi"],[13,21,"pl-smi"],[22,32,"pl-smi"],[33,34,"pl-smi"],[35,41,"pl-k"],[42,46,"pl-smi"],[47,49,"pl-smi"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[305,309,"pl-en"],[310,311,"pl-k"],[313,319,"pl-k"],[320,324,"pl-c1"],[326,328,"pl-en"],[329,330,"pl-k"],[332,336,"pl-en"],[338,342,"pl-c1"],[346,348,"pl-en"],[350,355,"pl-en"],[357,359,"pl-k"],[360,365,"pl-smi"],[366,368,"pl-smi"],[369,377,"pl-smi"],[378,379,"pl-k"],[380,382,"pl-smi"],[383,393,"pl-smi"],[394,399,"pl-en"],[400,401,"pl-en"],[402,404,"pl-k"],[405,406,"pl-smi"],[407,409,"pl-smi"],[410,412,"pl-k"],[413,418,"pl-smi"],[419,421,"pl-smi"],[423,437,"pl-en"],[440,441,"pl-k"],[442,444,"pl-smi"],[445,455,"pl-smi"],[456,461,"pl-en"],[462,463,"pl-en"],[464,466,"pl-k"],[467,468,"pl-smi"],[469,473,"pl-smi"],[474,476,"pl-k"],[477,482,"pl-smi"],[483,487,"pl-smi"],[489,503,"pl-en"],[507,571,"pl-s"],[507,508,"pl-pds"],[570,571,"pl-pds"]],[],[],[],[[0,1,"pl-k"],[2,7,"pl-smi"],[8,12,"pl-smi"],[13,15,"pl-smi"],[16,22,"pl-smi"],[23,24,"pl-smi"],[25,29,"pl-smi"],[30,37,"pl-smi"],[38,41,"pl-k"]],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[[109,115,"pl-smi"],[115,116,"pl-k"],[117,145,"pl-s"],[117,118,"pl-pds"],[144,145,"pl-pds"],[149,151,"pl-smi"],[152,156,"pl-smi"],[162,165,"pl-smi"],[166,168,"pl-smi"],[169,176,"pl-smi"],[177,181,"pl-smi"],[183,189,"pl-smi"],[190,198,"pl-en"],[199,206,"pl-s"],[199,200,"pl-pds"],[205,206,"pl-pds"],[208,211,"pl-k"],[213,219,"pl-smi"],[220,221,"pl-k"],[222,233,"pl-en"],[234,238,"pl-en"],[245,248,"pl-en"],[250,251,"pl-en"],[253,255,"pl-k"],[256,259,"pl-smi"],[260,265,"pl-smi"],[266,271,"pl-en"],[272,273,"pl-smi"],[274,280,"pl-smi"],[283,306,"pl-s"],[283,284,"pl-pds"],[305,306,"pl-pds"],[310,317,"pl-smi"],[318,321,"pl-smi"],[322,327,"pl-smi"],[328,332,"pl-smi"],[333,339,"pl-smi"],[340,345,"pl-k"],[346,349,"pl-en"],[350,356,"pl-en"],[357,364,"pl-en"],[365,367,"pl-en"],[368,371,"pl-en"],[373,377,"pl-en"],[379,385,"pl-en"]],[[2,5,"pl-en"],[7,11,"pl-en"],[14,19,"pl-en"],[21,29,"pl-en"],[30,33,"pl-en"],[34,42,"pl-en"],[43,46,"pl-en"],[47,51,"pl-en"],[52,54,"pl-en"],[55,58,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,9,"pl-en"],[10,20,"pl-en"],[21,24,"pl-en"],[25,31,"pl-en"],[32,34,"pl-en"],[35,41,"pl-en"],[43,49,"pl-en"]],[],[],[],[[2,9,"pl-en"],[10,15,"pl-en"],[17,26,"pl-en"],[30,36,"pl-en"],[37,41,"pl-en"],[42,46,"pl-en"],[47,51,"pl-en"],[52,55,"pl-en"],[56,65,"pl-en"],[66,75,"pl-en"]],[],[],[],[[2,9,"pl-en"],[10,17,"pl-en"],[18,31,"pl-en"],[32,34,"pl-en"],[35,45,"pl-en"],[46,50,"pl-en"],[51,53,"pl-en"],[54,64,"pl-en"],[65,72,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,11,"pl-en"],[12,16,"pl-en"],[17,23,"pl-en"],[24,27,"pl-en"],[28,35,"pl-en"],[36,38,"pl-en"],[39,48,"pl-en"],[49,58,"pl-en"],[59,61,"pl-en"],[62,65,"pl-en"],[66,73,"pl-en"]],[[2,8,"pl-en"],[9,14,"pl-en"],[15,23,"pl-en"],[24,28,"pl-en"],[29,36,"pl-en"],[37,46,"pl-en"],[47,50,"pl-en"],[51,52,"pl-en"],[53,55,"pl-en"],[56,62,"pl-en"],[63,65,"pl-en"],[66,68,"pl-en"],[69,75,"pl-en"]],[[2,10,"pl-en"],[11,19,"pl-en"],[20,29,"pl-en"],[30,32,"pl-en"],[33,43,"pl-en"],[44,47,"pl-en"],[48,56,"pl-en"],[57,59,"pl-en"],[60,63,"pl-en"],[64,73,"pl-en"],[74,84,"pl-en"]],[[2,5,"pl-en"],[6,15,"pl-en"],[16,21,"pl-en"],[22,26,"pl-en"],[27,36,"pl-en"],[37,40,"pl-en"],[41,47,"pl-en"],[48,54,"pl-en"]],[],[],[],[[2,8,"pl-en"],[9,12,"pl-en"],[13,19,"pl-en"],[20,22,"pl-en"],[23,29,"pl-en"],[30,32,"pl-en"],[34,40,"pl-en"],[42,45,"pl-en"],[46,51,"pl-en"],[52,56,"pl-en"],[58,62,"pl-en"],[64,67,"pl-en"],[68,70,"pl-en"],[71,74,"pl-en"],[75,82,"pl-en"]],[[2,5,"pl-en"],[6,8,"pl-en"],[9,14,"pl-en"],[15,19,"pl-en"],[20,29,"pl-en"],[30,36,"pl-en"],[37,41,"pl-en"],[42,43,"pl-en"],[44,52,"pl-en"],[53,59,"pl-en"]],[],[],[],[[2,9,"pl-en"],[10,19,"pl-en"],[20,22,"pl-en"],[23,29,"pl-en"],[30,34,"pl-en"],[35,38,"pl-en"],[39,41,"pl-en"],[42,46,"pl-en"],[50,56,"pl-en"],[58,62,"pl-en"],[68,74,"pl-en"],[76,80,"pl-en"],[81,83,"pl-en"],[84,88,"pl-en"],[89,91,"pl-en"],[92,94,"pl-en"],[95,99,"pl-en"],[100,103,"pl-en"],[104,109,"pl-en"]],[],[],[],[[2,11,"pl-en"],[12,17,"pl-en"],[18,21,"pl-en"],[22,24,"pl-en"],[25,33,"pl-en"],[35,37,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,10,"pl-en"],[11,17,"pl-en"],[18,22,"pl-en"],[23,31,"pl-en"],[32,36,"pl-en"]],[[2,8,"pl-en"],[9,13,"pl-en"],[14,20,"pl-en"],[21,25,"pl-en"],[26,30,"pl-en"],[32,34,"pl-en"],[38,39,"pl-en"],[40,41,"pl-en"],[46,52,"pl-en"],[53,55,"pl-en"],[64,66,"pl-en"],[67,71,"pl-en"],[72,75,"pl-en"],[77,82,"pl-en"],[86,92,"pl-en"],[93,97,"pl-en"]],[[2,5,"pl-en"],[6,11,"pl-en"],[12,16,"pl-en"],[17,26,"pl-en"],[27,28,"pl-en"],[29,32,"pl-en"],[33,35,"pl-en"],[36,39,"pl-en"],[40,48,"pl-en"],[49,51,"pl-en"],[52,53,"pl-en"],[54,59,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,7,"pl-en"],[8,13,"pl-en"],[14,19,"pl-en"],[20,26,"pl-en"],[27,30,"pl-en"],[31,37,"pl-en"],[38,46,"pl-en"],[47,51,"pl-en"],[52,55,"pl-en"],[56,61,"pl-en"],[62,68,"pl-en"],[69,73,"pl-en"],[74,76,"pl-en"],[78,89,"pl-en"]],[],[],[],[[2,5,"pl-en"],[6,13,"pl-en"],[14,21,"pl-en"],[22,25,"pl-en"],[26,35,"pl-en"]],[[6,13,"pl-en"],[14,20,"pl-en"],[21,23,"pl-en"],[24,32,"pl-en"],[33,37,"pl-en"],[38,40,"pl-en"],[41,48,"pl-en"]],[[2,9,"pl-en"],[11,21,"pl-en"],[23,31,"pl-en"]],[],[],[],[[3,8,"pl-en"],[9,28,"pl-en"],[29,36,"pl-en"],[38,47,"pl-en"],[48,50,"pl-en"],[52,71,"pl-en"],[72,79,"pl-en"],[81,83,"pl-en"],[84,90,"pl-en"],[91,102,"pl-en"],[103,107,"pl-en"],[108,111,"pl-en"],[112,118,"pl-en"],[119,121,"pl-en"],[122,124,"pl-en"],[125,132,"pl-en"]],[[2,5,"pl-en"],[6,13,"pl-en"],[14,21,"pl-en"],[22,31,"pl-en"],[32,34,"pl-en"],[35,41,"pl-en"],[43,46,"pl-en"],[47,54,"pl-en"],[55,61,"pl-en"]],[[2,4,"pl-en"],[5,12,"pl-en"],[14,27,"pl-en"],[28,38,"pl-en"],[39,44,"pl-en"],[49,58,"pl-en"],[59,60,"pl-en"],[61,64,"pl-en"],[65,71,"pl-en"],[72,77,"pl-en"],[78,81,"pl-en"],[82,85,"pl-en"],[86,90,"pl-en"],[91,95,"pl-en"],[96,97,"pl-en"],[98,104,"pl-en"],[106,108,"pl-en"],[110,118,"pl-en"],[120,124,"pl-en"],[125,128,"pl-en"],[129,137,"pl-en"],[138,142,"pl-en"],[143,145,"pl-en"],[147,149,"pl-en"],[152,153,"pl-en"],[154,155,"pl-en"],[157,158,"pl-en"],[159,164,"pl-en"],[166,172,"pl-en"],[174,178,"pl-en"],[179,186,"pl-en"],[187,188,"pl-en"],[190,201,"pl-en"],[202,208,"pl-en"],[211,215,"pl-en"],[216,222,"pl-en"],[223,225,"pl-en"],[226,227,"pl-en"],[229,235,"pl-en"],[236,238,"pl-en"],[241,246,"pl-en"]],[[2,6,"pl-en"],[7,14,"pl-en"],[15,17,"pl-en"],[18,23,"pl-en"],[25,29,"pl-en"],[31,33,"pl-en"],[34,37,"pl-en"],[38,47,"pl-en"],[48,54,"pl-en"],[55,57,"pl-en"],[58,63,"pl-en"],[64,71,"pl-en"]],[[2,9,"pl-en"],[10,13,"pl-en"],[15,20,"pl-en"],[22,29,"pl-en"],[30,33,"pl-en"],[34,41,"pl-en"]],[],[],[],[[2,7,"pl-en"],[8,15,"pl-en"],[16,19,"pl-en"],[20,27,"pl-en"],[28,34,"pl-en"],[35,42,"pl-en"],[43,47,"pl-en"],[48,53,"pl-en"],[54,57,"pl-en"],[59,80,"pl-en"]],[[2,5,"pl-en"],[6,10,"pl-en"],[11,18,"pl-en"],[19,24,"pl-en"],[25,32,"pl-en"],[33,42,"pl-en"],[43,45,"pl-en"],[46,54,"pl-en"],[55,56,"pl-en"],[57,60,"pl-en"],[61,66,"pl-en"]]],"colorizedLines":null}},"title":"EntityGraphQL/CHANGELOG.md at main · EntityGraphQL/EntityGraphQL","appPayload":{},"meta":{"title":"EntityGraphQL/CHANGELOG.md at main · EntityGraphQL/EntityGraphQL"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/EntityGraphQL/EntityGraphQL" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/EntityGraphQL/EntityGraphQL/tree/main" data-discover="true">EntityGraphQL</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">CHANGELOG.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_1cpla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_1cpla9lik5_ _R_1cpla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_1cpla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7p9la9lik5_" id="_R_99la9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7p9la9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_7pdla9lik5_" id="_R_9dla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_7pdla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/EntityGraphQL/EntityGraphQL/commits/main/CHANGELOG.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/EntityGraphQL/EntityGraphQL/commits/main/CHANGELOG.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="139 KB" style="--truncate-max-width:100%"><span>1862 lines (1276 loc) · 139 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/EntityGraphQL/EntityGraphQL/tree/main" data-discover="true">EntityGraphQL</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">CHANGELOG.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="139 KB" style="--truncate-max-width:100%"><span>1862 lines (1276 loc) · 139 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/EntityGraphQL/EntityGraphQL/raw/refs/heads/main/CHANGELOG.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.2.4</h1><a id="user-content-624" class="anchor" aria-label="Permalink: 6.2.4" href="#624"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes" class="anchor" aria-label="Permalink: Fixes" href="#fixes"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>No generic method 'SelectWithNullCheck'</code> for a sub-selection on a field returning <code>IAsyncEnumerable&lt;T&gt;</code> or <code>ValueTask&lt;TCollection&gt;</code> - <code>{ people { tags { name } } }</code> where <code>tags</code> has a <code>ResolveAsync</code> returning either. <code>MakeSelectWithDynamicType</code> emits a <code>SelectWithNullCheck</code> whose overload is resolved by the exact type of the expression it projects, and only <code>IEnumerable&lt;T&gt;</code> and <code>Task&lt;IEnumerable&lt;T&gt;&gt;</code> had one. <code>IAsyncEnumerable&lt;T&gt;</code> now has an overload of its own that projects lazily, so the stream is still buffered by the engine with the request's <code>CancellationToken</code> rather than being enumerated during compilation, and <code>ValueTask&lt;T&gt;</code> is handed on as the <code>Task&lt;T&gt;</code> the rest of the pipeline already handles, next to the existing <code>Task&lt;TCollection&gt;</code> normalization.</li>
<li>Fixed <code>Object of type 'Dynamic_...' cannot be converted to type 'Dynamic_...'</code> when buffering an <code>IAsyncEnumerable&lt;T&gt;</code> whose items are rebuilt - the list rebuild mismatch below, one layer down. <code>BufferAsyncEnumerable</code> created a <code>List&lt;T&gt;</code> from the declared element type before resolving anything and added each resolved item to it, so an item rebuilt to carry an awaited member no longer fit. Items are now resolved first and the list type chosen from them, which is what the <code>IEnumerable</code> path already did - both paths now share that step. The same guard added above for <code>Task&lt;T&gt;</code> and <code>ValueTask&lt;T&gt;</code> in <code>GetResolvedFieldType</code> applies to <code>IAsyncEnumerable&lt;T&gt;</code>, which is reachable now that these shapes compile.</li>
<li>Fixed <code>Object of type 'System.Collections.Generic.List</code>1[System.Object]' cannot be converted to type 'System.Collections.Generic.IEnumerable<code>1[Dynamic_...]'</code> for a query selecting an async service field below an async service <em>list</em> field - <code>{ people { tags { name label } } }</code> where <code>tags</code> has a <code>ResolveAsync</code> returning a list and <code>label</code> on the item type has one of its own. Resolving an item of the outer list rebuilds it, because the item projection holds an async member, so the finished list no longer holds the item type the outer field was declared with and correctly falls back to <code>List&lt;object&gt;</code>. <code>GetResolvedFieldType</code> unwrapped <code>Task&lt;T&gt;</code> to <code>T</code> unconditionally, so the rebuilt parent still declared the member <code>IEnumerable&lt;T&gt;</code> and setting the resolved list on it threw. <code>T</code> is now only kept when the resolved value still is one, otherwise the resolved value's own type is used - which is what the non-async path in the same method already did. <code>ValueTask&lt;T&gt;</code> had the same hole and takes the same guard.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.2.3</h1><a id="user-content-623" class="anchor" aria-label="Permalink: 6.2.3" href="#623"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-1" class="anchor" aria-label="Permalink: Fixes" href="#fixes-1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>An item with the same key has already been added</code> when a service field's resolver builds an object from more than one context member as an argument to the service call - <code>(ctx, srv) =&gt; srv.Get(new Key(ctx.A, ctx.B))</code>. <code>ExpressionExtractor</code> credited both member reads to the enclosing construction rather than to themselves, so it emitted the same <code>Expression</code> instance twice under the one name and <code>ExpressionReplacer</code> added each of them to a dictionary keyed by node identity. A construction is now walked through rather than treated as a leaf, so each read is extracted on its own. <code>ExpressionReplacer</code> also tolerates a repeated expression, which the extractor still emits for other shapes (a conditional argument, where the branch reads are both credited to the conditional).</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.2.2</h1><a id="user-content-622" class="anchor" aria-label="Permalink: 6.2.2" href="#622"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-2" class="anchor" aria-label="Permalink: Fixes" href="#fixes-2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed a field whose dotnet type is a nullable value type (<code>Instant?</code>, <code>DateTime?</code>, <code>int?</code>) resolving to <code>default(T)</code> instead of <code>null</code>, for a query that also selects an async field. Results are rebuilt after any async field is awaited, and each member's new type was taken from the resolved value's runtime type.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.2.1</h1><a id="user-content-621" class="anchor" aria-label="Permalink: 6.2.1" href="#621"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-3" class="anchor" aria-label="Permalink: Fixes" href="#fixes-3"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>IsNullable()</code> (and any other change to a field's return type) on a field whose dotnet type has an <code>AddTypeMapping</code> leaking to every other field of that type. The mapping's <code>GqlTypeInfo</code> was handed out as the field's own <code>ReturnType</code>, and that object is mutable - <code>IsNullable()</code> writes to it - so one <code>AddField(...).IsNullable(true)</code> rewrote the registered mapping itself, changing every field already using it and every field added afterwards. Fields now get a copy, so an explicit <code>IsNullable()</code> after <code>AddField()</code> applies to that field only and the mapping stays the default it describes.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.2.0</h1><a id="user-content-620" class="anchor" aria-label="Permalink: 6.2.0" href="#620"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes" class="anchor" aria-label="Permalink: Changes" href="#changes"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>A resolver can now be told what the engine will read off the objects it returns, so it can fetch only that instead of everything - the point of batching with <code>ResolveBulk</code> when the data comes from another database or service. Take an <code>IFieldSelection</code> parameter and the engine supplies it, the way it supplies <code>CancellationToken</code> and <code>QueryRequestContext</code>; new two-service <code>ResolveBulk</code>/<code>ResolveBulkAsync</code> overloads let a loader take it alongside its own service. It is not the caller's selection set: a selected field that is itself resolved from a service is replaced by the member its resolver reads, nested objects come through as paths (<code>Address.City</code>), <code>@skip</code>/<code>@include</code> are applied, fragments are expanded, aliases collapse, <code>__typename</code> is excluded, and one load is told the union of every place the field is selected. See <a href="https://entitygraphql.github.io/schema-creation/other-data-sources#fetching-only-the-fields-that-will-be-used" rel="nofollow">Fetching only the fields that will be used</a>.</li>
<li>New <code>[GraphQLFromContext]</code> on a <code>[GraphQLField]</code> method parameter binds it to a member of the field's context instead of exposing it as a GraphQL argument. This lets a <code>static</code> method with a body - one that loops, branches or <code>await</code>s, where an <code>Expression&lt;Func&lt;&gt;&gt;</code> cannot be used - be a service field on a type other than the root query type: the declared members (navigation properties included) are selected in the database-bound pass and the call is rewritten against that result, the same as <code>.Resolve()</code> dependency extraction, so nothing else on the entity is selected. Every dependency must be declared: a parameter taking the whole entity is rejected at schema build, as it would select the entity itself and a body reading a navigation property would silently see an empty collection. Instance methods on the entity remain unsupported - the entity is the call target and does not survive that pass - and now fail with a message naming the alternatives instead of an <code>ArgumentException</code> about a <code>Dynamic_</code> type. See <a href="https://entitygraphql.github.io/schema-creation/other-data-sources#declaring-what-a-method-reads-from-the-context" rel="nofollow">Declaring what a method reads from the context</a>.</li>
<li>A field with a <code>ResolveBulk</code>/<code>ResolveBulkAsync</code> resolver that has to resolve per item instead of bulk loading now logs a warning to the <code>ILogger</code> the schema was built with, naming the field and why the bulk load could not run - the query shape usually controls it, so it is something a caller can act on. Turn it off with <code>ExecutionOptions.WarnOnBulkResolverFallback = false</code>. <code>ISchemaProvider.Logger</code> is new (exceptions keep going through <code>LogException</code>); it returns null by default so existing implementations are unaffected.</li>
<li>New <code>field.SetMaxAliases(n)</code> caps how many times a single field may be aliased in one operation, alongside the document-wide <code>ExecutionOptions.MaxFieldAliases</code>. Useful for the few fields a batched-alias attack would target (a login mutation, an expensive report) without tightening the limit for everything. Counts aliased selections of that field, fragment contents included. <code>QueryLimitExceededContext.FieldName</code> names the field for report-only mode. See <a href="https://entitygraphql.github.io/schema-creation/query-limits#per-field-alias-limits" rel="nofollow">Query limits</a>.</li>
<li><code>ToGraphQLSchemaString()</code> takes an optional <code>includeDescriptions</code> argument. Pass <code>false</code> to leave the <code>"""..."""</code> descriptions out of the generated SDL.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-4" class="anchor" aria-label="Permalink: Fixes" href="#fixes-4"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed an <code>IArgumentsTracker</code> parameter on a mutation or subscription method failing with <code>Service IArgumentsTracker not found for dependency injection</code> whenever a service provider is passed to <code>ExecuteRequest</code> - i.e. in any real app. The engine builds and populates the tracker per call, but the branch binding it to the parameter sat below the dependency-injection catch-all, so it was only reachable with a null service provider (which is how the existing tests exercised it). Registering <code>IArgumentsTracker</code> in DI was not a workaround: it bound a different, empty tracker, so <code>IsSet</code> returned false for every argument and the mutation silently took the "nothing was supplied" path. It is now bound before the DI branch, the same as <code>CancellationToken</code>.</li>
<li>An <code>IArgumentsTracker</code> parameter now works on query fields built from methods (<code>[GraphQLField]</code> methods, <code>AddFieldsFrom</code>), not just mutations - it previously fell through to the service provider and failed with <code>Service IArgumentsTracker not found in service provider</code>. The field's arguments object is built deriving from <code>ArgumentsTracker</code> when a parameter asks for one, and the parameter binds to that object, so the tracker is not a service and a field that has no other services stays on the database-bound pass.</li>
<li>An argument explicitly supplied as <code>null</code> on a query field is now reported as set by <code>IArgumentsTracker</code> - previously only a non-null value or a schema default counted, so <code>IsSet</code> could not tell an explicit null from an omitted argument, which is the distinction it exists to make. This also applies to <code>[GraphQLArguments]</code> / input types deriving from <code>ArgumentsTracker</code>. Mutation arguments already behaved this way.</li>
<li><code>AddTypeMapping</code> now applies to every field returning the mapped dotnet type, not only the ones auto-created from the context. A mapping like <code>AddTypeMapping&lt;NpgsqlPolygon&gt;("[Point!]!")</code> describes the whole GraphQL type - list-ness and nullability come from the mapping string, not from the dotnet type - but only the auto-populated path returned the mapping's <code>GqlTypeInfo</code>. Everything else went through <code>SchemaBuilder.MakeGraphQlType</code>, which resolved the type <em>name</em> (<code>Point</code>) and then recomputed <code>IsList</code>/<code>TypeNotNullable</code> from the dotnet type, so <code>AddField()</code>, <code>AddField().Resolve()</code>, root fields on <code>Query()</code>, <code>[GraphQLField]</code> methods and expression fields all described the field as <code>Point</code> instead of <code>[Point!]!</code>. Introspection, the SDL and any client generated from them were wrong; execution is unchanged. Two notes: the <code>[GraphQLField]</code> method case is a regression in 6.0 (the other paths never honoured the mapping), and an <code>async</code> <code>[GraphQLField]</code> method now matches the mapping too - the lookup used to be made with the declared <code>Task&lt;T&gt;</code> return type. Type mappings still need to be registered in <code>SchemaBuilderOptions.PreBuildSchemaFromContext</code> so they exist before the context is reflected.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.7</h1><a id="user-content-617" class="anchor" aria-label="Permalink: 6.1.7" href="#617"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-5" class="anchor" aria-label="Permalink: Fixes" href="#fixes-5"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed a single-object field with a <code>ResolveBulk</code> resolver whose per-item resolver queries the schema context - e.g. <code>.Resolve&lt;MyContext&gt;((p, ctx) =&gt; ctx.Site.Movies.FirstOrDefault(m =&gt; m.DirectorId == p.Id))</code> - failing with <code>Could not find extension method Select on types System.Linq.Enumerable</code>. A regression in 6.1.3: such a field was moved onto the collection selection path (to keep it translatable), but a bulk resolver's value on that pass is the loaded dictionary's entry, a single object, so there is no collection to select through. Bulk resolved fields stay on the single-object projection. Reported in <a href="https://github.com/EntityGraphQL/EntityGraphQL/issues/543" data-hovercard-type="issue" data-hovercard-url="/EntityGraphQL/EntityGraphQL/issues/543/hovercard">#543</a> - thanks <a href="https://github.com/soilidokay">@soilidokay</a> for the reproduction.</li>
<li>Fixed a service field selected on the items of a paging field whose own resolver uses a service - e.g. <code>.Resolve&lt;MyService&gt;((p, srv) =&gt; p.Tasks.Where(t =&gt; srv.Include(t)))</code> with <code>UseOffsetPaging()</code>/<code>UseConnectionPaging()</code> on a nested type - failing with <code>Could not find field egql__x_Id on type X</code>. Such a paging field cannot be split across the two passes so it is built in one go on the services pass, from the entity rather than from a first-pass projection; a service field on its items had nowhere to read its own extracted dependency from. It now reads that dependency straight off the entity.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.6</h1><a id="user-content-616" class="anchor" aria-label="Permalink: 6.1.6" href="#616"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-6" class="anchor" aria-label="Permalink: Fixes" href="#fixes-6"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>The field-error logging added in 6.1.5 is now covered for the case it exists for: outside development mode the caller gets only <code>Field 'x' - Error occurred</code> while the original exception - its own message and stack trace - reaches the <code>ILogger</code>. 6.1.5's test ran with the default <code>IsDevelopment = true</code>, where nothing is swallowed, so it did not check that.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.5</h1><a id="user-content-615" class="anchor" aria-label="Permalink: 6.1.5" href="#615"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-7" class="anchor" aria-label="Permalink: Fixes" href="#fixes-7"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Field-level exceptions are logged again, with the field name and stack trace, to the <code>ILogger</code> the schema was built with. A regression in 6.0: partial results turned a field failure into a GraphQL error instead of rethrowing it, so nothing reached the request-level log and the only way to see why a field failed was development mode or <code>AllowedExceptions</code> - both of which return the detail to the caller. Responses are unchanged. Document and validation errors, whose message the caller already gets in full, are not logged.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.4</h1><a id="user-content-614" class="anchor" aria-label="Permalink: 6.1.4" href="#614"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-8" class="anchor" aria-label="Permalink: Fixes" href="#fixes-8"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>ResolveBulk</code> / <code>ResolveBulkAsync</code> nested under a <strong>root service-resolved list</strong> (e.g. <code>Query.apiKeys</code> from <code>.Resolve&lt;TService&gt;(...)</code> rather than a context/<code>DbSet</code> property) so nested bulk fields load once instead of falling back to per-item <code>Resolve</code> (or previously failing with a null <code>BulkParameter</code>). Root service list fields now participate in the two-pass flow. <code>UseFilter()</code>/<code>UseSort()</code> on those root lists still apply on the first pass and are not re-applied against the first-pass Dynamic on the second. Regression tests in <code>ServiceRootListBulkTests</code> / <code>ServiceBackedCollectionExtensionsTests</code>. A root service list/object only takes the two-pass path when the selection actually has a bulk resolver in it (including through a fragment spread) - otherwise it stays on the single-pass path, as the extra pass costs a compile and a projection of every row for nothing. Note that for the fields that do take it, the service now runs during the <em>first</em> pass, so a <code>BeforeExecuting</code> hook sees two executions for them (<code>isFinal</code> false then true) where it saw one.</li>
<li>Fixed <code>ResolveBulk</code> nested under a <strong>root service-resolved object</strong> that exposes a list (status-page shape: <code>statusPage { items { bulkField } }</code>). First pass used to return only <code>ExtractedFieldsFromServices</code> for root service objects, so nested list selection and bulk registration were skipped; the second pass then either N+1'd via <code>Resolve</code> or failed converting entity types to first-pass <code>Dynamic_*</code> types (<code>No coercion operator...</code>). Root service objects now participate in the two-pass flow (like root service lists), wrap once with <code>ProjectWithNullCheck</code> on the first pass, and on the second pass select from the materialized anon instead of re-invoking the service. Also rebinds the <code>ResolveBulk</code> <code>DataSelector</code> parameter (a different <code>ParameterExpression</code> than <code>FieldParam</code>) so multi-property keys no longer fail with <code>variable 'row' ... is not defined</code>. Nullable-nav bulk keys (<code>row.DetexyBoard == null ? null : row.DetexyBoard.SerialNumber</code>) are rewritten via <code>ExpressionReplacer.VisitConditional</code> onto the first-pass extracted field instead of leaving a second navigation <code>MemberExpression</code> unbound. Exact regression: <code>HardwareSensorStatusPageBulkTests</code> (mirrors Offline Active <code>hardwareSensorStatusPage { items { lastSeen isOffline floor { currentFloorStatus } } }</code>). Also: <code>ServiceResolvedPage_ItemsWithResolveBulk_Works</code>, <code>ServiceResolvedPage_ItemsWithComplexResolveBulkKey_Works</code>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.3</h1><a id="user-content-613" class="anchor" aria-label="Permalink: 6.1.3" href="#613"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-9" class="anchor" aria-label="Permalink: Fixes" href="#fixes-9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed a field resolved from the query context - e.g. <code>.Resolve&lt;MyDbContext&gt;((c, db) =&gt; db.Things.Where(t =&gt; t.ParentId == c.Id))</code>, the pattern for a child collection that is not a navigation property - being projected with one of EntityGraphQL's own methods (<code>SelectWithNullCheck</code>, or <code>ProjectWithNullCheck</code> for a single object), which no database provider can translate. Selecting another such field below it failed the operation with <code>The LINQ expression 'p_Thing =&gt; new Dynamic_things{...}' could not be translated</code>. Lists keep a plain <code>Select</code> (a regression from 6.0.0-beta3), and a single object is projected inside the query - <code>Where().Select().FirstOrDefault()</code>, as it already was for a field like <code>movie(id: 1)</code>. Fields using a service other than the query context still get the null check, as they can return <code>null</code>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.2</h1><a id="user-content-612" class="anchor" aria-label="Permalink: 6.1.2" href="#612"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-10" class="anchor" aria-label="Permalink: Fixes" href="#fixes-10"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed a <code>ResolveBulk</code> field selected on data that the first (no-service) pass never produces failing the whole root field with <code>Field '&lt;name&gt;' - Error occurred</code> (<code>ArgumentException: Static property requires null instance...</code>, or <code>KeyNotFoundException</code> for the bulk data key). The clearest case is a root field resolved from services - <code>schema.Query().AddField("comments", ...).Resolve&lt;IMyService, MyDbContext&gt;(...)</code> selecting <code>{ isReadByCurrentUser }</code> - where the first pass produces no expression at all, so no bulk load is registered while the second pass still compiled the lookup; the same applied below another service field's selection and with <code>ExecuteServiceFieldsSeparately = false</code>. These fields now fall back to their per-item resolver (one service call per item) instead of failing. Bulk loading them needs the service-resolved parent executed before the keys are collected - a further execution pass, not implemented. Repro tests from <a href="https://github.com/EntityGraphQL/EntityGraphQL/pull/538" data-hovercard-type="pull_request" data-hovercard-url="/EntityGraphQL/EntityGraphQL/pull/538/hovercard">#538</a>.</li>
<li>Fixed a <code>ResolveBulk</code>/<code>ResolveBulkAsync</code> resolver whose values are lists - e.g. <code>ResolveBulk&lt;MyService, string, IEnumerable&lt;Item&gt;&gt;(...)</code> returning <code>IDictionary&lt;string, IEnumerable&lt;Item&gt;&gt;</code> - failing with <code>Specified cast is not valid</code> (<code>InvalidCastException</code>) when the field was resolved. A list field's dotnet return type is promoted to <code>IQueryable&lt;T&gt;</code> and the bulk data lookup was built against <code>Dictionary&lt;TKey, IQueryable&lt;Item&gt;&gt;</code>, which the loaded <code>Dictionary&lt;TKey, IEnumerable&lt;Item&gt;&gt;</code> cannot be cast to (a dictionary's generic arguments are invariant). The lookup now takes its dictionary type from the resolver's own signature and casts to <code>IDictionary&lt;,&gt;</code>, so any dictionary implementation and value type the resolver declares works. Reported in <a href="https://github.com/EntityGraphQL/EntityGraphQL/issues/534" data-hovercard-type="issue" data-hovercard-url="/EntityGraphQL/EntityGraphQL/issues/534/hovercard">#534</a> - thanks <a href="https://github.com/soilidokay">@soilidokay</a>.</li>
<li><code>ResolveBulk()</code>/<code>ResolveBulkAsync()</code> on a field with no resolver now throws <code>EntityGraphQLSchemaException</code> naming the field and the fix, instead of a <code>NullReferenceException</code> from inside the schema-building call. A bulk resolver builds on a resolver rather than replacing it - the per-item resolver runs whenever the bulk load cannot (e.g. the field is selected below another service field), so a bulk-only field could not resolve at all. Also from <a href="https://github.com/EntityGraphQL/EntityGraphQL/issues/534" data-hovercard-type="issue" data-hovercard-url="/EntityGraphQL/EntityGraphQL/issues/534/hovercard">#534</a>.</li>
<li>Fixed an async field (<code>ResolveAsync</code>, or a <code>ResolveBulkAsync</code> field falling back to its per-item resolver) below a <strong>root list resolved from services</strong> leaving an unawaited <code>Task&lt;T&gt;</code> in the response instead of its value - typically surfacing as a serialized empty object or <code>{"result": ...}</code>-shaped noise for that field. Nested async results were resolved only when services executed in a single pass or on the second pass of a two-pass execution; a root field resolved from services has no first pass to run, so its one execution is the final one while <code>ExecuteServiceFieldsSeparately</code> is still on and it matched neither case. Keyed off the final execution now. The same field below a context/<code>DbSet</code> root list was always awaited.</li>
<li>Fixed the same <code>ResolveBulk</code> field selected at more than one level of a self-referencing type - <code>comments { isReadByCurrentUser replies { isReadByCurrentUser } }</code> - failing with <code>KeyNotFoundException</code> for a key that was never loaded. The loaded data is keyed by the bulk resolver name, and each level was loaded separately, so the last level's data replaced the previous level's. Every level's keys now go into one load call.</li>
<li><code>schema.Validate()</code> now checks field arguments as well as return types. An argument whose type is not in the schema, or that can never be built from a query variable because its GraphQL type is registered against a different dotnet type (<code>AddTypeMapping</code> is one-way), now fails at validate time naming the dotnet types and the fix, instead of on the first request with a message naming only the GraphQL types. Built-in mappings and list arguments are unaffected. <code>Validate()</code> is opt-in - call it once your schema is set up, see <a href="https://entitygraphql.github.io/schema-creation/schema-creation#validating-your-schema" rel="nofollow">Validating your schema</a>. A schema with either problem that passed <code>Validate()</code> before will now throw from it.</li>
<li>A missing required argument on a field taking an arguments class is now reported by its schema name instead of its dotnet property name - <code>missing required argument 'from'</code>, not <code>'From'</code>. <code>ArgType</code> already used the schema name, so the two validation paths disagreed and a query missing one argument could produce both spellings. Reading the capitalised name naturally suggests the schema stopped applying <code>SchemaFieldNamer</code> to arguments, which sends you looking in the wrong place entirely.</li>
<li><code>Variable or value used for argument 'x' does not match argument type 'Y' on field 'z'</code> now carries the reason the value could not be built (e.g. <code>Object must implement IConvertible.</code>) when the schema is in development mode or the exception is allowed via <code>AllowedExceptions</code>/<code>AllowedExceptionAttribute</code>. Both types in that message are GraphQL types and are frequently the same on each side, so the message could describe a conversion failing between two dotnet types while naming neither - the underlying exception was caught and discarded. Messages outside development are unchanged. <code>ISchemaProvider.IsAllowedException(Exception)</code> is new (it was already the private gate behind <code>AllowedExceptionMessage</code>) - custom <code>ISchemaProvider</code> implementations need to add it.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.1</h1><a id="user-content-611" class="anchor" aria-label="Permalink: 6.1.1" href="#611"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-11" class="anchor" aria-label="Permalink: Fixes" href="#fixes-11"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>ResolveBulk</code> fields selected through a fragment spread or inline fragment failing with <code>KeyNotFoundException</code> (<code>The given key 'bulk_Type.field' was not present in the dictionary</code>) anywhere below a list-to-single selection - e.g. a mutation returning <code>ctx.Things.First(...)</code> selected as <code>thing { child { ...ChildFields } }</code>, or <code>thing(id: 1) { ...ThingFields }</code>. Apollo/Relay clients hoist selections into named fragments, so this showed up as soon as a bulk field was used from a real frontend. A fragment spread is parsed with the parent of the node it is spread on, so the "is this field selected directly on a list-to-single node?" check read the wrong node: bulk loading was skipped for the field while the second pass still compiled the lookup, leaving it reading data that was never loaded. Both the registration and the lookup now ask the compile context which node is compiling its selection set, so they always agree, and the per-compile copy of a list-to-single node keeps its to-single marker instead of looking like a plain list selection. A bulk field selected via a fragment directly on a list-to-single field now uses the per-item resolver, matching how it already behaved when selected directly. Repro and regression tests from <a href="https://github.com/EntityGraphQL/EntityGraphQL/pull/536" data-hovercard-type="pull_request" data-hovercard-url="/EntityGraphQL/EntityGraphQL/pull/536/hovercard">#536</a> - thanks <a href="https://github.com/alex-birch">@alex-birch</a>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.1.0</h1><a id="user-content-610" class="anchor" aria-label="Permalink: 6.1.0" href="#610"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-1" class="anchor" aria-label="Permalink: Changes" href="#changes-1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>New report-only mode and logging hook for query limits: <code>ExecutionOptions.QueryLimitsMode</code> (<code>Enforce</code>, the default, or <code>ReportOnly</code>) and <code>ExecutionOptions.OnQueryLimitExceeded</code> callback (or register an <code>IQueryLimitObserver</code> in the service provider for DI-injected observers - the explicit callback wins when both are present) with the limit kind, actual vs maximum value and operation name. <code>ReportOnly</code> reports the query's real depth/counts and lets the query execute. Use it to observe real client behavior, then flip to <code>Enforce</code> with confident numbers. The callback also fires in <code>Enforce</code> mode just before rejection, so enforced rejections can be logged with structured detail instead of matching error message text. Fully additive - defaults are unchanged.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-12" class="anchor" aria-label="Permalink: Fixes" href="#fixes-12"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Custom directives (<code>DirectiveProcessor.VisitNode</code>) that return a rebuilt field node no longer lose root-field handling - position-derived state (<code>IsRootField</code>) is now preserved on the returned node automatically. Previously a rebuilt root list node fell into nested-field handling on the second (services) pass and the engine tried to re-apply the root list expression (e.g. <code>WhereWhen</code>/<code>OrderBy</code>) against the already-materialised first-pass result, failing with <code>No generic method 'WhereWhen' on type 'Queryable'...</code>. Repro and regression tests from <a href="https://github.com/EntityGraphQL/EntityGraphQL/pull/527" data-hovercard-type="pull_request" data-hovercard-url="/EntityGraphQL/EntityGraphQL/pull/527/hovercard">#527</a> - thanks <a href="https://github.com/alex-birch">@alex-birch</a>.</li>
<li>Multiple node-modifying directives on one field now chain correctly - each directive receives the previous directive's result instead of all receiving the original node (previously only the last directive's rebuild took effect), and a <code>null</code> (excluded) result short-circuits so a later directive cannot re-include a field excluded by e.g. <code>@skip</code>.</li>
<li>Fixed <code>ResolveAsync&lt;TService&gt;()</code> fields returning an object type with sub-selections (e.g. <code>widget(id: ...) { id name }</code>) not propagating a <code>null</code> resolver result to the field - the response held a non-null object with default/null sub-fields instead of a <code>null</code> field. The two-pass service-field execution rebuilds the field's expression with <code>contextChanged: true</code>, which was used as a (incorrect) proxy for "this field's value is already resolved, not still a raw <code>Task&lt;T&gt;</code>" - for a field whose own resolver is the async work (not a value read back from a prior pass), the expression here is still genuinely <code>Task&lt;T&gt;</code> even though <code>contextChanged</code> is <code>true</code>, so the code built the object selection directly against the <code>Task&lt;T&gt;</code> parameter instead of its awaited result, and <code>Expression.Call</code> silently bound to the wrong (synchronous, always-"not null") overload of <code>ProjectWithNullCheck</code>. Now checked via the expression's actual type (<code>IsAwaitableGenericType()</code>) instead of <code>contextChanged</code>. <code>.Resolve&lt;TService&gt;()</code> (the sync API wrapping <code>.GetAwaiter().GetResult()</code>) was unaffected.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.1</h1><a id="user-content-601" class="anchor" aria-label="Permalink: 6.0.1" href="#601"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-13" class="anchor" aria-label="Permalink: Fixes" href="#fixes-13"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Package dependencies now use per-target-framework versions - the <code>net8.0</code> build asks for <code>Microsoft.Extensions.Logging.Abstractions</code>/<code>System.Runtime.Caching</code> 8.x and <code>net9.0</code> for 9.x, instead of all target frameworks demanding 10.x. 6.0.0 forced net8/net9 consumers onto 10.x runtime libraries, which collided with other packages' version bounds (e.g. <code>NU1608</code> warning floods via transitive <code>System.Diagnostics.DiagnosticSource</code> where a dependency caps it below 9.0). No API changes.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0</h1><a id="user-content-600" class="anchor" aria-label="Permalink: 6.0.0" href="#600"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">EntityGraphQL 6.0 is the culmination of the 6.0.0-beta1 through 6.0.0-beta9 releases. The beta sections below carry the full, detailed lists of changes, fixes and migration notes - and see the <a href="https://entitygraphql.github.io/upgrade-6-0" rel="nofollow">upgrade guide</a> for a consolidated migration path from 5.x.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">6.0 Highlights</h2><a id="user-content-60-highlights" class="anchor" aria-label="Permalink: 6.0 Highlights" href="#60-highlights"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><strong>GraphQL spec conformance</strong> - partial results per the spec (failing top-level fields no longer fail the whole operation), <a href="https://spec.graphql.org/September2025/" rel="nofollow">September 2025 GraphQL spec</a> support (<code>@oneOf</code>, argument/input-field deprecation, document descriptions, stricter validation) and <code>MapGraphQL()</code> follows the <a href="https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md">GraphQL over HTTP spec</a> by default.</li>
<li><strong>A real async model</strong> - <code>ResolveAsync&lt;TService&gt;()</code> fields, end-to-end <code>CancellationToken</code> support (into resolvers, mutations, subscriptions and the in-flight EF query), async database materialization for root list fields, and concurrency control per field, per service and per query (<code>MaxQueryConcurrency</code> defaults to 100).</li>
<li><strong>Security hardening</strong> - authorization fails closed, introspection respects authorization, a parser recursion backstop against deeply-nested document DoS, opt-in query guards (<code>MaxQueryDepth</code>, <code>MaxFieldSelections</code>, <code>MaxFieldAliases</code>, <code>MaxQueryComplexity</code>) and per-field rate limiting.</li>
<li><strong>New schema-building features</strong> - <code>UseAggregate()</code> for SQL-translated aggregates over collections, <code>AddFieldsFrom&lt;T&gt;()</code>/<code>AddQueryFieldsFrom&lt;T&gt;()</code> to group field definitions into classes, filter improvements (GraphQL variables, service fields, <code>selectMany</code>, filtering by paged child fields) and async subscription setup for external brokers.</li>
<li><strong>Performance</strong> - paging answers <code>hasNextPage</code> with a cheap <code>EXISTS</code> instead of <code>COUNT(*)</code>, async result processing is compiled and targeted (~2x faster on async-heavy results), opt-in compiled-delegate caching, and WebSocket subscription delivery is ordered and non-blocking.</li>
<li><strong>Modern targets</strong> - <code>net8.0</code>, <code>net9.0</code> and <code>net10.0</code> with a dependency-light core package.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes from Beta 9</h2><a id="user-content-breaking-changes-from-beta-9" class="anchor" aria-label="Permalink: Breaking Changes from Beta 9" href="#breaking-changes-from-beta-9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>
<p dir="auto"><code>MapGraphQL()</code> HTTP status codes now fully follow the <a href="https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md">GraphQL over HTTP spec</a> for the <code>application/graphql-response+json</code> media type (the default response type): a response with no <code>data</code> entry (a request error - e.g. document parse/validation failure) returns <code>400</code> instead of <code>200</code>, and a response with both <code>data</code> and <code>errors</code> (partial success) returns <code>294</code> per the spec. Clean results remain <code>200</code>. Responses negotiated as legacy <code>application/json</code> keep returning <code>200</code> for every well-formed request. Clients following the spec read the response body regardless of status code for <code>application/graphql-response+json</code>.</p>
</li>
<li>
<p dir="auto"><code>AddFieldsFrom&lt;TFrom&gt;()</code> / <code>AddQueryFieldsFrom&lt;TType&gt;()</code> (introduced in beta 9) now require the grouping class to implement the new <code>IFieldsFor&lt;TContext&gt;</code> marker interface declaring which type its <code>[GraphQLField]</code> methods are written against - the entity type for <code>schema.Type&lt;Person&gt;().AddFieldsFrom&lt;T&gt;()</code>, the query context for <code>AddQueryFieldsFrom&lt;T&gt;()</code>. Registering a class against the wrong schema type is now a compile error instead of a schema-build surprise, and the marker gives compile-time tooling the intended context type. The interface is contravariant, so a fields class written for a base type or shared interface can be added to types deriving from/implementing it. A class may also implement <code>IFieldsFor&lt;&gt;</code> for several contexts to group a feature across types (e.g. occupancy fields for <code>Building</code>, <code>Floor</code> and <code>Space</code> in one class) - each registration only adds the methods written for that context. See <a href="https://entitygraphql.github.io/schema-creation/fields#grouping-fields-across-multiple-types" rel="nofollow">Grouping fields across multiple types</a>. Migration: add <code>: IFieldsFor&lt;TheContextType&gt;</code> to each grouping class.</p>
</li>
<li>
<p dir="auto">A <code>[GraphQLField]</code> method parameter whose type is a schema entity type (and not the field's context type) now fails at schema build with a clear error instead of being silently classified as a DI service - that classification almost always meant a mistyped context parameter that resolved (or failed confusingly) at query time. The query context type is excluded (a <code>DbContext</code> parameter remains a service), and the new <code>[GraphQLService]</code> parameter attribute opts out for the rare case where an entity type really is a DI service.</p>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes since Beta 9</h2><a id="user-content-changes-since-beta-9" class="anchor" aria-label="Permalink: Changes since Beta 9" href="#changes-since-beta-9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>[GraphQLField]</code> methods (via <code>AddFieldsFrom&lt;T&gt;()</code>/<code>AddQueryFieldsFrom&lt;T&gt;()</code> or static on a schema type) can now return an <code>Expression&lt;Func&lt;TContext, ...&gt;&gt;</code> instead of a value. The method is a factory invoked once at schema build time and the returned expression is registered exactly like <code>AddField(...).Resolve(...)</code> - a service-free expression composes fully into the database-bound pass (translates to SQL, only the columns it uses are selected), and extra expression parameters after the context are resolved as services with the standard two-pass execution and dependency extraction. The factory method itself takes no parameters. See <a href="https://entitygraphql.github.io/schema-creation/fields#expression-fields-with-addfieldsfrom" rel="nofollow">Expression fields with AddFieldsFrom</a>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Bug Fixes since Beta 9</h2><a id="user-content-bug-fixes-since-beta-9" class="anchor" aria-label="Permalink: Bug Fixes since Beta 9" href="#bug-fixes-since-beta-9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>ResolveBulk</code> fields failing with <code>KeyNotFoundException</code> when selected via a fragment spread (<code>...MyFragment</code>) or an inline fragment (<code>... on Type { bulkField }</code>) - the bulk loader was never registered because fragments expand after bulk registration ran. Bulk fields are now registered through fragments at any nesting depth, the bulk list expression path is taken from the compile-time selection path rather than a field's parent-node chain (which for fragment-selected fields pointed at the fragment definition, not the selection point), and selecting the same bulk field both directly and via a fragment loads the data once, not twice.</li>
<li>Fixed <code>ResolveBulk</code> fields failing when reached through a nested single-object navigation (e.g. <code>tasks { project { createdBy } }</code>) or a mutation result selection (e.g. <code>mutation { updateTask { project { createdBy } } }</code>) - single-object contexts are now wrapped for the bulk key batching, object navigations off a list context project per element, and the duplicate mutation result-selection path node is skipped by reference. Also released in 5.7.3. Thanks <a href="https://github.com/alex-birch">@alex-birch</a> <a href="https://github.com/EntityGraphQL/EntityGraphQL/pull/526" data-hovercard-type="pull_request" data-hovercard-url="/EntityGraphQL/EntityGraphQL/pull/526/hovercard">#526</a></li>
<li>Fixed custom type converters (<code>AddCustomTypeConverter</code>) registered for a base type never matching values of derived types - the lookup was an exact type match, so the documented Newtonsoft pattern <code>AddCustomTypeConverter&lt;JToken&gt;(...)</code> never fired (<code>JToken</code> is abstract; runtime values are <code>JArray</code>/<code>JValue</code>/<code>JObject</code>), breaking e.g. list-of-enum variables sent through Newtonsoft.Json with <code>Supplied variable can not be applied to defined variable type</code>. From-type converter lookup now walks the base-type chain (the most derived registration wins).</li>
<li>Fixed <code>ResolveBulk</code> fields reached through chained single-object navigations (e.g. <code>projects { tasks { assignee { manager { bulkField } } } }</code>) throwing <code>Value cannot be null</code> - the null-guard built while collecting the bulk keys assumed every navigation step was a list. Single-object steps are now null-guarded properly (a null parent yields null and is filtered before the bulk key selection). Also released in 5.7.3.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta9</h1><a id="user-content-600-beta9" class="anchor" aria-label="Permalink: 6.0.0-beta9" href="#600-beta9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">The final beta planned before 6.0.0.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Dropped the <code>netstandard2.1</code> target. EntityGraphQL now targets <code>net8.0</code>, <code>net9.0</code> and <code>net10.0</code>. This also removes the <code>System.Text.Json</code>, <code>Microsoft.CSharp</code> and <code>System.ComponentModel.Annotations</code> package dependencies that only the netstandard target required.</li>
<li><strong>Security (fail closed)</strong> — authorization now denies by default when a requirement is present but cannot be satisfied. A bare <code>[GraphQLAuthorize]</code> / <code>[Authorize]</code> (no roles or policy) now correctly requires an authenticated user instead of being a silent no-op, and <code>IsAuthorized</code> requires <code>Identity.IsAuthenticated</code>. In <code>EntityGraphQL.AspNet</code>, a policy-protected field is now denied (rather than allowed through) when no <code>IAuthorizationService</code> is registered or the user is <code>null</code>. Fields/types with no authorization attribute are unaffected. This is a behavior change: previously-open access that relied on any of these gaps will now be blocked.</li>
<li><strong>Introspection now respects authorization</strong> — introspection queries (<code>__schema</code> / <code>__type</code>) only return the types and fields the requesting user is authorized to access, so anonymous users can no longer enumerate role/policy-protected type, field and argument names. <code>schema.ToGraphQLSchemaString()</code> is unchanged and always outputs the full schema (for SDL files / codegen). Note introspection output can now differ per user, which may affect schema-caching tooling running as an unprivileged user.</li>
<li><strong><code>ExecutionOptions.MaxQueryConcurrency</code> now defaults to 100</strong> (previously unlimited). An async field resolved for a list runs per item, so an unbounded default turned a large result set into an unbounded number of concurrent operations (socket/thread-pool exhaustion, hammering rate-limited APIs). Set <code>MaxQueryConcurrency = null</code> to restore unlimited. Note this does not make non-thread-safe services (e.g. a scoped <code>DbContext</code>) safe in async list fields — use <code>ServiceConcurrencyLimits</code> or <code>maxConcurrency: 1</code> for those. Also fixed the concurrency wrapper for field shapes it previously failed on (value-type service parameters such as <code>CancellationToken</code>, rebound per-element parameters, nested list results — errors like <code>unbound variable</code> or <code>No coercion operator</code>), and <code>IAsyncEnumerable</code> fields are no longer wrapped (the stream's enumeration, not its creation, is the async work).</li>
<li>API surface — <code>LinqRuntimeTypeBuilder</code> and <code>ExpressionReplacer</code> are now <code>internal</code>; <code>ExpressionUtil.ListToSingleMethods</code> is no longer public (it was a mutable static). <code>GraphQLHelper.InjectServices</code> gained optional parameters and accepts a null service provider. <code>ConcurrencyLimitFieldExtension.ExecuteWithConcurrencyLimitAsync</code> is now generic (<code>&lt;TResult&gt;</code>) so the wrapped expression keeps its static type.</li>
<li>New GraphQL spec validations may reject previously accepted (invalid) documents — duplicate non-repeatable directives, conflicting field selection merges, <code>@skip</code>/<code>@include</code> on a subscription root field and deprecating a required argument are now errors. See the spec compliance entry under Changes.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-2" class="anchor" aria-label="Permalink: Changes" href="#changes-2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>New <code>schema.Query().AddFieldsFrom&lt;T&gt;()</code> (and any object type) plus the <code>schema.AddQueryFieldsFrom&lt;T&gt;()</code> shortcut - group related field definitions into classes using <code>[GraphQLField]</code> marked methods instead of many <code>AddField()</code> calls. Method parameters of the declaring type bind to the field context (the query context for root fields - this also applies to existing <code>[GraphQLField]</code> methods on the context type, which previously resolved the context from the service provider), other complex types resolve as services and remaining parameters become GraphQL arguments. Methods returning <code>IQueryable&lt;T&gt;</code> compose with EF - filters and selections translate to SQL.</li>
<li>Updated dependencies: <code>Humanizer.Core</code> 2.14.1 -&gt; 3.0.10 (used for singularizing names when building schemas - inflection rule changes could alter a generated name in rare cases), <code>Parlot</code> 1.4.3 -&gt; 1.5.7, <code>System.Runtime.Caching</code> and <code>Microsoft.Extensions.Logging.Abstractions</code> 9.0.9 -&gt; 10.0.9.</li>
<li><code>ParameterReplacer.ReplaceByType</code> is marked obsolete and will be removed in 7.0 - it replaces any parameter of the matching type, which can capture parameters you did not intend. It remains functional in 6.x.</li>
<li>Root-level list fields are now materialized asynchronously when the LINQ provider's query objects implement <code>IAsyncEnumerable&lt;T&gt;</code> - EF Core's do, so the database round-trip no longer blocks a thread and the request's <code>CancellationToken</code> can cancel the in-flight query. No EF dependency was added; in-memory data is enumerated synchronously as before. Note for <code>ExecutionOptions.BeforeExecuting</code> users: root list fields on the database-bound pass no longer end in an in-tree <code>ToList()</code> call - the deferred query is materialized after the expression executes.</li>
<li><strong>September 2025 GraphQL spec compliance</strong> (document descriptions, full Unicode and OneOf runtime behavior shipped in earlier betas):
<ul dir="auto">
<li><code>__Type.isOneOf</code> is now exposed per the spec (previously the non-standard name <code>oneField</code>). It is <code>false</code> for input object types, <code>true</code> for <code>@oneOf</code> types and <code>null</code> for other types.</li>
<li><code>__Directive.isRepeatable</code> added to introspection (all built-in directives are non-repeatable). Custom <code>IDirectiveProcessor</code> implementations can override the new <code>IsRepeatable</code> property (defaults to <code>false</code>).</li>
<li>Using a non-repeatable directive more than once at a single location (e.g. <code>@skip(...) @skip(...)</code>) is now a validation error.</li>
<li><code>@skip</code>/<code>@include</code> on the root field of a subscription operation is now a validation error per the spec.</li>
<li>Arguments and input fields can now be deprecated (<code>[Obsolete]</code> on an argument property or <code>field.Deprecate(...)</code> on an input field). They are hidden from introspection by default with new <code>includeDeprecated</code> arguments on <code>__Field.args</code>, <code>__Directive.args</code> and <code>__Type.inputFields</code>, <code>__InputValue</code> gains <code>isDeprecated</code>/<code>deprecationReason</code>, and the SDL output annotates them with <code>@deprecated</code>. Deprecating a required argument is a schema error per the spec.</li>
<li><code>Implements()</code> now validates field covariance — a field on an implementing type must be the same type or a sub-type of the interface's field (only fields present at the time of the call are checked, so the add-fields-after-implements pattern is unaffected).</li>
<li>Field selection merging is now validated: selections with the same response name must be the same field with identical arguments (<code>{ x: id x: name }</code> or <code>{ project(id: 1) project(id: 2) }</code> are errors — use different aliases), and across mutually exclusive fragments the response shapes must be compatible (<code>... on Cat { value: lives }</code> with <code>... on Dog { value: name }</code> is an error).</li>
</ul>
</li>
<li><code>__type(name: ...)</code> now returns <code>null</code> for an unknown type name per the GraphQL spec, instead of an execution error.</li>
<li>Async result processing is now targeted and compiled instead of a full-result reflection walk: only branches of the result whose types can hold an async value are visited (non-async branches are returned untouched). On a 10,000-row result with one async field and non-async nested collections this cut request time from ~140ms to ~63ms in benchmarks (the no-async baseline being ~19ms). This also stops the walk reading every property of every result object, which could trigger EF lazy-loading of navigation properties the query never selected.</li>
<li>Subscription events are no longer executed synchronously on the publisher's thread. Each subscription processes its events on an ordered background queue - <code>observer.OnNext</code> returns immediately instead of blocking while the (potentially async/service-backed) result selection executes for every subscriber. Event order per subscription is preserved, including the terminal error/complete messages.</li>
<li><strong>Policy evaluation is now truly async</strong> — <code>PolicyOrRoleBasedAuthorization</code> pre-evaluates all policies used in the schema once at the start of each request (properly awaited) instead of blocking with sync-over-async <code>AuthorizeAsync</code> calls per field/type check during compilation. New optional <code>IGqlAuthorizationService.PrepareForRequestAsync</code> hook (has a default implementation — custom implementations are unaffected).</li>
<li><strong>WebSocket hardening</strong> — new <code>GraphQLWebSocketOptions</code> (optional parameter on <code>UseGraphQLWebSockets</code>): incoming messages larger than <code>MaxMessageSizeBytes</code> (default 1 MB) close the connection with <code>1009 MessageTooBig</code> instead of buffering unbounded; malformed JSON closes with <code>4400</code> instead of throwing out of the receive loop; and clients that never send <code>connection_init</code> are closed with <code>4408</code> after <code>ConnectionInitTimeout</code> (default 10s) per the graphql-ws protocol.</li>
<li><strong>Security (DoS)</strong> — the GraphQL document parser now enforces a hard recursion-depth backstop of 128 (nested selection sets and nested argument/input values) during parsing, returning a <code>DocumentError</code> before a maliciously deep document can exhaust the stack. This runs independently of, and before, the configurable <code>ExecutionOptions.MaxQueryDepth</code>.</li>
<li>Hardening: the dynamic (projection) type cache now uses a full, collision-free key (field names, field types and parent type) instead of a 32-bit hash, removing an unlikely-but-possible hash collision handing a query a cached type with the wrong fields.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Bug Fixes</h2><a id="user-content-bug-fixes" class="anchor" aria-label="Permalink: Bug Fixes" href="#bug-fixes"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed a compiled-delegate cache key collision when <code>CacheCompiledDelegates</code> is enabled and an operation has multiple root fields - the second root field was served the first field's compiled delegate, returning the wrong field's data. The cache key now includes the root field name.</li>
<li>Fixed async argument validators (<code>IArgumentValidator</code> via <code>AddValidator&lt;T&gt;()</code>) being fire-and-forgotten — a validator doing real async work before adding its errors raced the request and its errors could be silently lost. Validators are now stored as async delegates and genuinely awaited for mutation and subscription arguments. Note validators on query field arguments still run during (synchronous) query compilation — avoid I/O in those. Breaking: <code>IField.Validators</code> is now <code>IReadOnlyCollection&lt;Func&lt;ArgumentValidatorContext, Task&gt;&gt;</code>.</li>
<li>Fixed per-request state being written onto the cached query document (<code>EnableQueryCache</code>, on by default) during execution. Concurrent requests of the same query text share the parsed document; the dynamic types built for an interface/union selection during a request's first (database) pass were stored on the shared AST node and read in its second (services) pass, so an interleaved request whose <code>@include</code>/<code>@skip</code> variables expanded a different selection could poison another request's second pass — failing it with <code>No coercion operator is defined between types ...</code> or silently dropping fragment fields. That state now lives on the per-request compile context, and mutations returning lists no longer write their per-request parameters onto the shared selection node.</li>
<li>Fixed <code>SchemaBuilder.FromObject</code> registering an abstract base class as an interface but not linking its implementing types to it (unless <code>AutoCreateInterfaceTypes</code> was on). The half-configured schema made inline fragments on the interface silently mis-project — <code>animals { ... on Cat { lives } }</code> returned the whole <code>Cat</code> object for <code>lives</code> instead of the value. <code>FromObject</code> now links every object type to any of its base types/interfaces that are registered in the schema as interfaces, regardless of the order the types were discovered in.</li>
<li>Fixed <code>@include(if: $variable)</code> / <code>@skip(if: $variable)</code> on an <strong>inline fragment</strong> failing with <code>Variable or value used for argument 'if' does not match argument type 'Boolean!'</code>. The parser executed inline-fragment directives at parse time — before variable values exist (literal values worked). Directives on inline fragments are now processed at execution time like field directives.</li>
<li>Async result processing fixes: a <code>Dictionary&lt;,&gt;</code> value in a result with async fields now stays a dictionary (previously it was turned into a list of key/value pairs, changing the serialized shape); user types that happen to live in an <code>EntityGraphQL.*</code> namespace are no longer treated as the engine's internal projection types and rebuilt; a non-generic <code>ValueTask</code> value is awaited instead of being walked as an object.</li>
<li>Mutation and subscription methods can now declare a <code>CancellationToken</code> parameter and receive the executing request's token (previously this failed with a service-not-found/argument error, despite query field resolvers supporting it). The parameter is not exposed as a GraphQL argument.</li>
<li>Fixed <code>UseFilter()</code>/<code>UseSort()</code> being silently ignored on a nested field whose own resolver is service-backed (e.g. <code>schema.Type&lt;Project&gt;().AddField(...).Resolve&lt;Service&gt;(...).UseFilter()</code>). Such a collection only exists in the services execution pass, where both extensions assumed the filtering/sorting had already happened in the first (database) pass — the query returned unfiltered/unsorted data with no error. Root-level service-backed fields were unaffected.</li>
<li>Fixed three issues in the async field concurrency limiting (<code>maxConcurrency</code> / <code>MaxQueryConcurrency</code> / <code>ServiceConcurrencyLimits</code>): the per-request <code>CancellationToken</code> and limiter registry were baked into the expression as constants, so with <code>CacheCompiledDelegates</code> on, request 1's token lived inside the cached delegate and, once cancelled, failed every later request of that query (they are now passed as per-request execution parameters); a cancelled semaphore acquire leaked the permits already acquired (acquisition now happens inside the try/finally); and the wrapped operation lambda was compiled per list element (now compiled once per expression and cached).</li>
<li>Fixed the (opt-in) <code>CacheCompiledDelegates</code> cache key hashing variable values with <code>ToString()</code>. Collection values (<code>List&lt;&gt;</code>, arrays, <code>Dictionary&lt;,&gt;</code>) stringify to their type name — identical for different contents — so two requests differing only in such a variable (e.g. a <code>sort</code> input) could share one cache entry and the second request would be served the first request's compiled plan (wrong ORDER BY field/direction). Values are now hashed by content, and a request whose variable values cannot be represented by value skips delegate caching for that request instead of risking a wrong-plan hit.</li>
<li>Fixed bulk resolvers (<code>ResolveBulk</code>) leaking across sibling root fields. In a query with multiple root fields, a bulk resolver registered while executing one root field was re-run during each following root field's execution — re-calling the service (extra bulk loads) and, when the sibling's data had a different shape, failing that field with <code>Could not find field egql__... on type ...</code>.</li>
<li>Fixed an operator-precedence bug in filter expression compilation that mis-detected string conversions: comparing a <code>DateTime</code>/<code>DateTimeOffset</code>/<code>TimeSpan</code>/<code>DateOnly</code>/<code>TimeOnly</code> field to a nullable value of the same type failed to compile, and a <code>Guid</code> vs <code>Guid?</code> comparison was built as <code>Guid.Parse(x.ToString())</code> (in-memory only, not translatable to SQL). These now use simple nullable promotion.</li>
<li>#378 - Filtering by a paged child field now works. Within a filter expression a field using <code>UseOffsetPaging()</code>/<code>UseConnectionPaging()</code> resolves to its underlying collection (the page wrapper only exists in the GraphQL schema), so <code>enquiries(filter: "enquirerDaps.count() &gt; 0")</code>, <code>"enquirerDaps.items.count() &gt; 0"</code> (<code>items</code>/<code>edges</code> are the collection) and <code>"enquirerDaps.totalItems &gt; 0"</code> (<code>totalItems</code>/<code>totalCount</code> map to <code>Count()</code>) all compile and translate to SQL under EF. Previously these failed with <code>Method 'count' not found on current context 'OffsetPage'</code> or a <code>NullReferenceException</code>. Other page metadata (e.g. <code>hasNextPage</code>) raises a clear error when used in a filter.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta8</h1><a id="user-content-600-beta8" class="anchor" aria-label="Permalink: 6.0.0-beta8" href="#600-beta8"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">New Features</h2><a id="user-content-new-features" class="anchor" aria-label="Permalink: New Features" href="#new-features"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Added the <code>UseAggregate()</code> field extension for exposing aggregate data over a collection field — <code>count</code> plus <code>min</code>/<code>max</code>/<code>sum</code>/<code>average</code> over its fields, computed over the whole collection and translated to a single SQL query under EF. The shape is function-first: <code>{ count, min { fieldA }, max { fieldA }, sum { fieldA }, average { fieldA } }</code>. <code>min</code>/<code>max</code> apply to any orderable field (numbers, dates, strings); <code>sum</code>/<code>average</code> to numerics (<code>short</code>, <code>int</code>, <code>long</code>, <code>float</code>, <code>double</code>, <code>decimal</code> and nullable forms). Aggregates over an empty set return <code>null</code>.
<ul dir="auto">
<li>Placement is controlled by <code>AggregatePlacement</code> and defaults to <code>Auto</code>: a paged field attaches an <code>aggregate</code> field to the paging result (<code>PagingWrapper</code>), otherwise the field is wrapped as <code>{ items, aggregate }</code> (<code>OwnWrapper</code>), which handles every field uniformly including service-backed resolvers and custom arguments. An additive sibling <code>{field}Aggregate</code> field (<code>SiblingField</code>) is available as an opt-in so aggregates can be added to an existing field without a breaking shape change; it carries the source field's arguments (filter and custom resolver arguments) but cannot be used on a service-backed collection resolver.</li>
<li>Pass a field selection to restrict the aggregatable fields, e.g. <code>UseAggregate((Person p) =&gt; new { p.Height, p.Age })</code>.</li>
</ul>
</li>
<li>A scalar field whose resolver reduces a collection using a service (e.g. <code>(db, svc) =&gt; db.People.Sum(p =&gt; svc.Score(p.Id))</code>) now executes via the two-pass model — the element values the service needs are projected and materialized in the first (DB) pass, and the reduction runs in memory in the second — instead of failing to translate under EF.</li>
<li><code>UseAggregate</code> can aggregate a service-backed element field (e.g. <code>person.score</code> resolved via <code>Resolve&lt;Service&gt;(...)</code>). The per-element service values are projected/materialized in the first pass and reduced in memory in the second, so <code>aggregate { sum { score } }</code> works under EF.</li>
<li>Aggregating a <strong>bulk-resolved</strong> element field (<code>ResolveBulk</code>) uses the bulk loader: the keys are projected/materialized in the first pass and all values are fetched in a single bulk call in the second, then reduced in memory — so it doesn't fall back to one service call per element. (Sync, no-argument bulk resolvers; async/argument bulk resolvers use the per-element fallback.)</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-3" class="anchor" aria-label="Permalink: Changes" href="#changes-3"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Paging performance: <code>hasNextPage</code> no longer runs a <code>COUNT(*)</code> query when the total isn't otherwise needed. <code>UseOffsetPaging</code> (when <code>totalItems</code> isn't selected) and <code>UseConnectionPaging</code> (forward paging with a <code>pageInfo</code> selection of only <code>hasNextPage</code>/<code>hasPreviousPage</code>) answer it with a cheap <code>EXISTS</code> query — skip past the current page and check for any row. Selections needing the total (<code>totalCount</code>/<code>totalItems</code>, <code>endCursor</code>/<code>startCursor</code>, or the <code>last</code>/<code>before</code> arguments) behave as before.</li>
<li>Connection paging cursor assignment no longer evaluates the (dynamic) cursor arguments per row — the cursor base is computed once per request (<code>ConnectionHelper.ApplyCursors</code>) and each edge's cursor derived from it while enumerating.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta7</h1><a id="user-content-600-beta7" class="anchor" aria-label="Permalink: 6.0.0-beta7" href="#600-beta7"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Bug Fixes</h2><a id="user-content-bug-fixes-1" class="anchor" aria-label="Permalink: Bug Fixes" href="#bug-fixes-1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed <code>ArgumentNullException</code> ("Value cannot be null. (Parameter 'type')") when a service-resolved field on a parent type was queried together with a child collection field whose type uses <code>AddTypeMapping</code> to map a CLR type to a GraphQL list type (e.g. <code>AddTypeMapping&lt;NpgsqlPolygon&gt;("[Point!]!")</code>). The two-pass execution failed to infer the list element type for a non-generic CLR type that implements <code>IEnumerable&lt;T&gt;</code>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta6</h1><a id="user-content-600-beta6" class="anchor" aria-label="Permalink: 6.0.0-beta6" href="#600-beta6"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-1" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#515 - <code>DefaultGraphQLResponseSerializer</code> and <code>DefaultGraphQLRequestDeserializer</code> default <code>JsonSerializerOptions</code> now use <code>JsonSerializerDefaults.Web</code>. For the request deserializer this enables case-insensitive property matching and reading numbers from JSON strings. The response serializer's output is unchanged (it was already camelCase).</li>
<li><code>ExecutionOptions.MaxQueryNodes</code> renamed to <code>MaxFieldSelections</code> — it counts field selections (the GraphQL spec term) after fragment expansion, not AST or result nodes.</li>
<li><code>ExecutionOptions.UserKeySelector</code> renamed to <code>RateLimitUserKeySelector</code> to reflect that it only affects per-field rate limiters tagged <code>userSpecific: true</code>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta5</h1><a id="user-content-600-beta5" class="anchor" aria-label="Permalink: 6.0.0-beta5" href="#600-beta5"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-2" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>AddGraphQLOptions&lt;TContext&gt;</code> now exposes overloaded <code>ConfigureSchema(...)</code> methods instead of settable schema-configuration delegate properties. Use <code>options.ConfigureSchema(schema =&gt; { ... })</code> for the common case, or <code>options.ConfigureSchema((schema, services) =&gt; { ... })</code> when schema setup needs the active <code>IServiceProvider</code>.</li>
<li><code>AddGraphQLSchema()</code> in <code>EntityGraphQL.AspNet</code> now returns a dedicated <code>GraphQLSchemaBuilder&lt;TContext&gt;</code> instead of <code>IServiceCollection</code>. Schema-shape customization should now be chained with <code>ConfigureGraphQLSchema(...)</code>, for example:
<ul dir="auto">
<li><code>services.AddGraphQLSchema&lt;MyContext&gt;(options =&gt; { ... }).ConfigureGraphQLSchema&lt;MyContext&gt;(schema =&gt; { ... });</code></li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-4" class="anchor" aria-label="Permalink: Changes" href="#changes-4"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#508 - Added a <code>src/examples/tooling</code> example showing GraphiQL and Hot Chocolate Nitro hosted against an <code>EntityGraphQL.AspNet</code> <code>/api/graphql</code> endpoint.</li>
<li>Query/document errors now preserve structured source locations in addition to the existing message text, and <code>GraphQLError</code> responses now emit <code>locations</code> metadata when available. Also normalized invalid field-directive registration to throw <code>EntityGraphQLSchemaException</code> instead of <code>InvalidOperationException</code> on the public schema API surface.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta4</h1><a id="user-content-600-beta4" class="anchor" aria-label="Permalink: 6.0.0-beta4" href="#600-beta4"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-3" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-3"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Simplified <code>IFieldExtension</code> compilation hooks by replacing long positional parameter lists with context objects:
<ul dir="auto">
<li><code>GetExpressionAndArguments()</code> now takes <code>FieldExtensionExpressionContext</code></li>
<li><code>ProcessExpressionPreSelection()</code> now takes <code>FieldExtensionPreSelectionContext</code></li>
<li><code>ProcessExpressionSelection()</code> now takes <code>FieldExtensionSelectionContext</code></li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-5" class="anchor" aria-label="Permalink: Changes" href="#changes-5"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#513 - <code>AddGraphQLSchema()</code> now supports configuring the registered <code>SchemaProvider&lt;TContext&gt;</code> lifetime via <code>AddGraphQLOptions.SchemaLifetime</code>. The default remains singleton, with scoped/transient lifetimes available for request-specific schema construction.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-14" class="anchor" aria-label="Permalink: Fixes" href="#fixes-14"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#498 - fix ExecutableDirectiveLocation naming regression introduced in beta3</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta3</h1><a id="user-content-600-beta3" class="anchor" aria-label="Permalink: 6.0.0-beta3" href="#600-beta3"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-4" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-4"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fields in <code>ExecutableDirectiveLocation</code> enum have been renamed in C# style</li>
<li>#476 - Introduce generic custom type converters (from-to, to-only, from-only) for flexible runtime value conversion.
<ul dir="auto">
<li>Expand <code>isAny</code> to support additional types through the method provider</li>
<li>Removes <code>ICustomTypeConverter</code>. See updated docs and the more flexible converting methods available</li>
</ul>
</li>
<li>Renamed <code>SchemaBuilderSchemaOptions</code> to <code>SchemaProviderOptions</code> for better clarity between schema builder reflection options and schema provider configuration options</li>
<li><code>AddGraphQLOptions&lt;TSchemaContext&gt;</code> refactored from inheritance to composition:
<ul dir="auto">
<li>Now exposes <code>Builder</code> property for <code>SchemaBuilderOptions</code> (controls building/reflection behavior)</li>
<li>Now exposes <code>Schema</code> property for <code>SchemaProviderOptions</code> (controls schema provider configuration like authorization, introspection, error handling, field naming)</li>
<li>Removed <code>FieldNamer</code> property - now accessed via <code>options.Schema.FieldNamer</code></li>
<li><strong><code>PreBuildSchemaFromContext</code> moved from <code>SchemaProviderOptions</code> to <code>SchemaBuilderOptions</code></strong> - now accessed via <code>options.Builder.PreBuildSchemaFromContext</code> (it's called during the schema building phase, not runtime)</li>
</ul>
</li>
<li>Removed <code>introspectionEnabled</code> parameter from <code>AddGraphQLSchema</code> extension method - configure via <code>options.Schema.IntrospectionEnabled</code> instead</li>
<li><strong>Authorization refactoring</strong>: <code>RequiredAuthorization</code> now uses a keyed data structure for extensibility
<ul dir="auto">
<li><code>RequiredAuthorization</code> no longer has separate <code>Roles</code> backing field - roles are stored via <code>"egql:core:roles"</code> key in <code>KeyedData</code> dictionary</li>
<li>The <code>Roles</code> property is now nullable and computed from keyed data</li>
<li>Policy support moved entirely to <code>EntityGraphQL.AspNet</code> package using <code>"egql:aspnet:policies"</code> key</li>
<li><code>RequiredAuthorization</code> constructor that took roles parameter has been removed - use <code>RequiresAnyRole()</code> or <code>RequiresAllRoles()</code> methods instead</li>
<li>Custom authorization implementations should use namespaced keys (e.g., <code>"myapp:custom-auth"</code>) to avoid conflicts</li>
</ul>
</li>
<li>Added <code>withoutServiceFields</code> parameter to <code>IFieldExtension.GetExpressionAndArguments()</code> to allow extensions to know when they're in the first pass of two-pass execution and should skip service-dependent expressions.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-6" class="anchor" aria-label="Permalink: Changes" href="#changes-6"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Added pre-execution query guards (<code>MaxQueryDepth</code>, <code>MaxQueryNodes</code>, <code>MaxFieldAliases</code>, <code>MaxQueryComplexity</code>) to <code>ExecutionOptions</code>. All default to unlimited (opt-in). A limit violation returns a GraphQL <code>DocumentError</code> and prevents any resolver from running. Configure in <code>ExecutionOptions</code> in your call to <code>schema.ExecuteRequest(...)</code>.</li>
<li>Added complexity scoring via <code>field.SetComplexity(int)</code> (fixed cost) or <code>field.SetComplexity(ctx =&gt; ctx.Args.take * (1 + ctx.ChildComplexity))</code> (args-aware). Pluggable via <code>IQueryComplexityAnalyzer</code> / <code>ExecutionOptions.QueryComplexityAnalyzer</code>.</li>
<li>Added per-field rate limiting via <code>field.AddRateLimit("policy-name")</code>. <code>EntityGraphQL.AspNet</code> ships a <code>PartitionedRateLimiter</code>-backed default registered with <code>services.AddGraphQLFieldRateLimit(opts =&gt; { opts.AddFixedWindowPolicy(...); opts.AddConcurrencyPolicy(...); ... })</code>. Rate limits count per-selection (aliases each burn a permit) and support <code>userSpecific: true</code> partitioning by user key.</li>
<li>Added support for <a href="https://spec.graphql.org/September2025/#sec-Descriptions" rel="nofollow">document descriptions</a> as outlined in the latest 2025 spec. Basically string comments in the query document</li>
<li>#474 - Add support for <code>TimeSpan</code> as a scalar in the default schema</li>
<li>#500 - Expose parsed executable directive metadata via <code>BaseGraphQLField.Directives</code> by making <code>GraphQLDirective.Name</code> and <code>GraphQLDirective.Processor</code> public for custom query processing scenarios</li>
<li>Replaced the previous 3rd party GraphQL document parser.</li>
<li>Add <code>net10.0</code> as a target</li>
<li>When using Offset Paging the total items expression is now only executed if the query requests <code>hasNextPage</code> or <code>totalItems</code> fields</li>
<li>When using Connection Paging the total count expression is now only executed if the query requests <code>totalCount</code> or <code>pageInfo</code> fields or the 'last' argument is used</li>
<li>Added <code>IField.AsService()</code> to signal that a field should (or can) be treated as a service field. This means null-checks are differently and they are executed after EF related calls (if <code>ExecutionOptions.ExecuteServiceFieldsSeparately = true</code>). Useful for fields that operate with data fully in-memory and do not need a registered service to fetch data or work</li>
<li><code>AddGraphQLSchema</code> in ASP.NET now automatically detects and applies environment-based defaults:
<ul dir="auto">
<li>Uses <code>PolicyOrRoleBasedAuthorization</code> by default (instead of requiring explicit configuration)</li>
<li>Automatically sets <code>IsDevelopment = false</code> in non-Development environments</li>
</ul>
</li>
<li>Subscription fields now support <code>Task&lt;IObservable&lt;T&gt;&gt;</code> and <code>ValueTask&lt;IObservable&lt;T&gt;&gt;</code> as return types in addition to <code>IObservable&lt;T&gt;</code>. This allows subscription setup methods to be async, which is useful when subscribing to an external message broker (Redis, RabbitMQ, etc.) requires an async connection step.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-15" class="anchor" aria-label="Permalink: Fixes" href="#fixes-15"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Rewrote WebSocket subscription send path (<code>GraphQLWebSocketServer</code>) to use a <code>Channel</code>-backed drain task. All outbound frames are now serialised through a single writer, eliminating the concurrent <code>WebSocket.SendAsync</code> violation that could corrupt the frame stream when multiple subscriptions fired simultaneously. The <code>IObserver&lt;T&gt;</code> callbacks (<code>OnNext</code>/<code>OnError</code>/<code>OnCompleted</code>) now enqueue to the channel rather than blocking on <code>GetAwaiter().GetResult()</code>, freeing the observable/Redis thread immediately. <code>subscriptions</code> dictionary replaced with <code>ConcurrentDictionary</code> for thread-safety.</li>
<li>Fixed <code>SelectWithNullCheck</code> error when using <code>.ResolveAsync&lt;TService&gt;()</code> on a field that returns a list of complex objects with subfield selection (e.g. <code>toolCatalog { name }</code>), where the parent field returns a single object. In the two-pass execution path the element-type parameter was incorrectly derived from <code>Task&lt;IEnumerable&lt;T&gt;&gt;</code> rather than <code>T</code>, and the resolved collection was not preserved as a typed <code>List&lt;T&gt;</code> when rebuilding the async result graph.</li>
<li>#498 - Fixed introspection types and fields incorrectly using the configured <code>FieldNamer</code>. Spec-defined introspection names now remain standard camelCase even when the application schema uses a custom naming convention.</li>
<li>#486 - Fixed directives on root-level fields failing to resolve query variable arguments (e.g. <code>@include(if: $var)</code>). <code>OpVariableParameter</code> and <code>docVariables</code> were not being passed through to directive evaluation in <code>GraphQLQueryStatement</code>, causing any directive that references a variable to throw a type-mismatch error.</li>
<li>#481 - handle <code>ResolveAsync</code> on a top level field</li>
<li>#488 - Support async fields with <code>[GraphQLField]</code></li>
<li>#487 - Fix <code>ResolveAsync</code> with arguments</li>
<li>#484 - Better support for nullable numeric types in filter expressions. Nullable int/short/long fields can now be compared to numeric literals without type mismatch errors. The fix also prioritizes converting literals over field expressions to avoid database column casts that could prevent index usage.</li>
<li>#459 - Fixed error "variable 'service' ... is not defined" when using <code>Resolve&lt;TService&gt;()</code> directly on a field that also uses <code>UseConnectionPaging()</code> or <code>UseOffsetPaging()</code>. When the paging field's own resolver depends on a service, the field now falls back to single-pass execution so the service parameter is always in scope. Fields with services on child types (not the paging field itself) continue to use the normal two-pass execution path where the DB query runs first and the service is resolved in-memory against the paged results.</li>
<li>As per spec - <code>_Type.fields</code> should be <code>null</code> for <code>INPUT_OBJECT</code>. Previously the <code>inputFields</code> were repeated.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta2</h1><a id="user-content-600-beta2" class="anchor" aria-label="Permalink: 6.0.0-beta2" href="#600-beta2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-7" class="anchor" aria-label="Permalink: Changes" href="#changes-7"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Added <code>selectMany</code> method support to filter expressions, enabling flattening using nested collections within queries.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-16" class="anchor" aria-label="Permalink: Fixes" href="#fixes-16"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fixed (maybe a regression introduced in 6.0.0-beta1) <code>UseFilter()</code> incorrectly adding a default value to the filter argument when applied to fields that already have other arguments defined.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">6.0.0-beta1</h1><a id="user-content-600-beta1" class="anchor" aria-label="Permalink: 6.0.0-beta1" href="#600-beta1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-5" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-5"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>
<p dir="auto">Support for partial results as per spec. <strong>This actually <em>fixes</em> EntityGraphQL to follow the GraphQL spec regarding partial results.</strong> However it does change behavior.</p>
<ul dir="auto">
<li>EntityGraphQL basically executes each "top level" field in the operation separately, now if any fail, you'll get the partial results of those that succeeded and error information about the failed ones.</li>
<li><code>AddGraphQLValidator</code> now registers <code>IGraphQLValidator</code> as <code>Transient</code>. This <em>was</em> the original intent as the docs have examples of bailing early by checking if the validator has any errors. The intent was errors for that field. This change helps enable partial results. If you want the old behavior, remove the use of <code>AddGraphQLValidator</code> and just add <code>IGraphQLValidator</code> yourself as <code>Scoped</code></li>
<li>As per spec <a href="https://spec.graphql.org/draft/#sec-Data" rel="nofollow">If an error was raised during the execution that prevented a valid response, the "data" entry in the response should be null</a>. This was not always the case</li>
</ul>
</li>
<li>
<p dir="auto">Removed methods/properties marked as obsolete</p>
<ul dir="auto">
<li><code>IField.UseArgumentsFromField</code> use <code>GetExpressionAndArguments</code></li>
<li><code>IField.UseArgumentsFrom</code> use <code>GetExpressionAndArguments</code></li>
<li><code>IField.ResolveWithService</code> use <code>Resolve</code></li>
<li><code>IFieldExtension.GetExpression</code> use the new <code>GetExpressionAndArguments</code></li>
</ul>
</li>
<li>
<p dir="auto"><code>MapGraphQL</code> <code>followSpec = true</code> is now the default behavior, it follows <a href="https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md">https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md</a></p>
</li>
<li>
<p dir="auto">You can no longer add filter support by using <code>ArgumentHelper.EntityQuery</code> or <code>EntityQueryType</code> in the field args, e.g. <code>schemaProvider.Query().ReplaceField("users", new { filter = ArgumentHelper.EntityQuery&lt;User&gt;() }, "Users optionally filtered")</code>. Please use the <code>UseFilter</code> extension which supports filters referencing service fields.</p>
</li>
<li>
<p dir="auto"><code>IFieldExtension.GetExpressionAndArguments</code> now takes the current GraphQL node <code>BaseGraphQLField fieldNode</code> as an argument. <code>parentNode</code> has been removed. Access it via <code>fieldNode.ParentNode</code>.</p>
</li>
<li>
<p dir="auto"><code>EntityGraphQL.AspNet</code> package drops <code>net6.0</code> and <code>net7.0</code> as targets. <code>EntityGraphQL</code> package drops <code>net6.0</code> as a target however as it still targets <code>netstandard2.1</code> you can still use it with those previous dotnet versions.</p>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-8" class="anchor" aria-label="Permalink: Changes" href="#changes-8"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Partial results support</li>
<li>#467 - New implementation for handling <code>async</code> fields. See updated docs and use the <code>.ResolveAsync&lt;&gt;()</code> methods when adding fields.</li>
<li>New support for <code>CancellationToken</code>. A <code>CancellationToken</code> can be passed into the <code>ExecuteRequestAsync</code> method. The token will be checked throughout execution and passed to other async operations. You can use it in <code>.ResolveAsync&lt;MyService, CancellationToken&gt;((context, service, ct) =&gt; service.DoSomethingAsync(context.Field, ct))</code> to pass it to your <code>async</code> fields. If you use <code>MapGraphQL()</code> for ASP.NET it will use the <code>context.RequestAborted</code> as the cancellation token.</li>
<li>#469 - Make filter grammar immutable as it should be for performance</li>
<li>#303 - You can now reference service fields in the <code>UseFilter/[UseFilter]</code> expression. Like normal the filter will first be applied with non service fields, then applied again with service fields is <code>ExecutionOptions.ExecuteServiceFieldsSeparately == true</code> (default).</li>
<li>#396 - Filter expressions now support GraphQL variables using <code>$variableName</code> syntax. This allows parameterized and dynamic filters (e.g., <code>filter: "name == $searchTerm &amp;&amp; age &gt; $minAge"</code>).</li>
<li>Related to #331 and the <code>followSpec = true</code> above, errors and exceptions were refactored internally. Following the GraphQL spec if the core library gets an error it will still return a <code>GraphQLResult</code> with the errors (and potentially partial results).</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">Fixes</h1><a id="user-content-fixes-17" class="anchor" aria-label="Permalink: Fixes" href="#fixes-17"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#429 Validation attributes now work with <code>[GraphQLInputType]</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.7.3</h1><a id="user-content-573" class="anchor" aria-label="Permalink: 5.7.3" href="#573"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-18" class="anchor" aria-label="Permalink: Fixes" href="#fixes-18"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#526 - Fixed <code>ResolveBulk</code> fields failing when reached through a nested single-object navigation (e.g. <code>tasks { project { createdBy } }</code>) or a mutation result selection - single-object contexts are now wrapped for the bulk key batching, object navigations off a list context project per element, and null navigations anywhere in the chain no longer throw. Thanks @alex-birch</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.7.2</h1><a id="user-content-572" class="anchor" aria-label="Permalink: 5.7.2" href="#572"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-19" class="anchor" aria-label="Permalink: Fixes" href="#fixes-19"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#512 - Updated <code>HotChocolate.Language</code> dependency from 13.9.14 to 13.9.16 to resolve critical vulnerability (GHSA-qr3m-xw4c-jqw3: stack overflow via deeply nested GraphQL documents)</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.7.1</h1><a id="user-content-571" class="anchor" aria-label="Permalink: 5.7.1" href="#571"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-20" class="anchor" aria-label="Permalink: Fixes" href="#fixes-20"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#466 Include enum-typed input fields in introspection per GraphQL spec</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.7.0</h1><a id="user-content-570" class="anchor" aria-label="Permalink: 5.7.0" href="#570"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-9" class="anchor" aria-label="Permalink: Changes" href="#changes-9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>QueryInfo Support: Added optional query execution information that can be included in the result extensions. Enable with <code>ExecutionOptions.IncludeQueryInfo = true</code> to get metadata about:
<ul dir="auto">
<li>Operation type (Query, Mutation, Subscription)</li>
<li>Operation name</li>
<li>Types queried and their selected fields</li>
<li>Total number of types and fields queried</li>
<li>This is useful for query analysis, debugging, and monitoring GraphQL usage patterns</li>
</ul>
</li>
<li>Fix #441 (PR #455) - Have your argument class (including an <code>InputType</code>) class inherit <code>ArgumentsTracker</code> or implement <code>IArgumentsTracker</code> to be able to tell if a variable is just the dotnet default value or is set from the query (variable or inline) with <code>args.IsSet</code>. You can also include <code>IArgumentsTracker</code> as an argument in your mutations etc. This is useful if you method usings simple arguments e.g. <code>MyMutation(Guid id, string name)</code> vs. a <code>[GraphQLArguments]</code> object.</li>
<li>#461 - <code>EntityGraphQLEndpointRouteExtensions.MapGraphQL</code> now supports chunked requests</li>
<li><code>RequiredAuthorization</code> is not settable allowing you to change or overwrite it after creation. Also now has <code>Clear()</code> methods to remove authentication</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-21" class="anchor" aria-label="Permalink: Fixes" href="#fixes-21"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Throw error on a query that has fragments with a cycle as per the GraphQL spec and to prevent infinite loops.</li>
<li>#442 - Fix issue when a service field with a bulk resolver is on a parent field named differently to the dotnet underlying object property</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.6.1</h1><a id="user-content-561" class="anchor" aria-label="Permalink: 5.6.1" href="#561"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-22" class="anchor" aria-label="Permalink: Fixes" href="#fixes-22"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#443 - Allow <code>*/*</code> &amp; <code>application/*</code> <code>Accept</code> headers in <code>followSpec</code> option for <code>MapGraphQL</code></li>
<li>#443 - Allow expected headers to not be listed first when using <code>followSpec</code> option for <code>MapGraphQL</code></li>
<li>Better support for multiple items in a single <code>Accept</code> header when using <code>followSpec</code> option for <code>MapGraphQL</code></li>
<li>#449 - Fix issues with self referencing query and connection paging</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.6.0</h1><a id="user-content-560" class="anchor" aria-label="Permalink: 5.6.0" href="#560"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-10" class="anchor" aria-label="Permalink: Changes" href="#changes-10"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Added additional framework target <code>net9.0</code></li>
<li><code>ResolveWithService</code> and <code>ResolveWithServices</code> methods are now marked obsolete. Please use <code>Resolve</code> in the same way</li>
<li>#430 - <code>MapGraphQL</code> has new parameter <code>followSpec</code> which changes the behavior to follow <a href="https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md">https://github.com/graphql/graphql-over-http/blob/main/spec/GraphQLOverHTTP.md</a> and is <code>false</code> by default in v5.x. If set to <code>true</code> it will follow the spec, the major change being that if the HTTP request was valid you'll get a <code>200</code> status code even if there may be GraphQL errors in the response. <em>Note this will be the default behavior in version v6.</em></li>
<li>Add <code>IsNullable</code> to the <code>IField</code> interface to control setting the nullability of the field return type in the schema</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-23" class="anchor" aria-label="Permalink: Fixes" href="#fixes-23"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#435 - fix <code>isAny()</code> in <code>filter</code></li>
<li>Fix issue selecting fields from an object a service field returns where the GraphQL field name differs from the dotnet property name.</li>
</ul>
<p dir="auto">Example a field that returns a <code>User</code> type using a service and you are changing the field names in the schema like below</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="schema.Type&lt;User&gt;().AddField(&quot;username&quot;, u =&gt; u.Name, &quot;Username&quot;)"><pre><span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">Type</span><span class="pl-c1">&lt;</span><span class="pl-smi">User</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">AddField</span><span class="pl-kos">(</span><span class="pl-s">"username"</span><span class="pl-kos">,</span> u <span class="pl-c1">=&gt;</span> <span class="pl-s1">u</span><span class="pl-kos">.</span><span class="pl-s1">Name</span><span class="pl-kos">,</span> <span class="pl-s">"Username"</span><span class="pl-kos">)</span><span class="pl-kos"></span></pre></div>
<ul dir="auto">
<li>#439 - Fix using fields / properties with key words (<code>null</code>, <code>true</code>, <code>false</code>) at the start of the name in the filter expressions</li>
<li>Related to #430 - Make sure if the schema says a field is not nullable, that it is not returned as <code>null</code> when using <code>null</code> to exit a mutation or field on error.</li>
<li>Fix issue where an expression extracted from a service field may clash with a existing field name</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.5.3</h1><a id="user-content-553" class="anchor" aria-label="Permalink: 5.5.3" href="#553"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-24" class="anchor" aria-label="Permalink: Fixes" href="#fixes-24"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#432 - filter expression was incorrectly using bit-wise <code>Or</code> instead of <code>OrElse</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.5.2</h1><a id="user-content-552" class="anchor" aria-label="Permalink: 5.5.2" href="#552"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-25" class="anchor" aria-label="Permalink: Fixes" href="#fixes-25"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#418 - Fix issue where field expressions using <code>ctx.Entities.FirstOrDefault(&lt;filter&gt;)</code> (<code>First*</code>, <code>Last*</code>, <code>Single*</code> methods with a filter) would duplicate the filter expression on each execution (e.g. making <code>ctx.Entities.Where(&lt;filter&gt;).Where(&lt;filter&gt;).FirstOrDefault()</code>). This also caused EntityFramework not to use it's cache for the expression</li>
<li>Fix issue with <code>RequiresAnyRole()</code> being called on a field with multiple roles added them as requiring all those roles vs. any role. This did not effect the <code>[GraphQLAuthorize]</code> attribute</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.5.1</h1><a id="user-content-551" class="anchor" aria-label="Permalink: 5.5.1" href="#551"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-26" class="anchor" aria-label="Permalink: Fixes" href="#fixes-26"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#425 - As per GraphQL Spec, Interfaces are not supported for Input Types</li>
<li>#426 - Fix custom directives with no arguments.</li>
<li>#427/#428 - Fix issue with connection style paging field extension when using last and before arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.5.0</h1><a id="user-content-550" class="anchor" aria-label="Permalink: 5.5.0" href="#550"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-11" class="anchor" aria-label="Permalink: Changes" href="#changes-11"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add <code>IgnoreAttributes</code> to <code>SchemaBuilderOptions</code> - A list of Attribute types which will cause the builder to ignore the field/property when building the schema. These are additional to GraphQLIgnoreAttribute</li>
<li><code>.Resolve&lt;&gt;()</code> method on field changes return type to <code>object?</code> to avoid warnings when returning a valid nullable service call etc.</li>
<li>Add support for using a <code>struct</code> type as an object type in the schema, allowing you to query the fields on it. Previously it only worked if you added the <code>struct</code> as a Scalar Type</li>
<li>#419 - Add support for using <code>isAny([])</code> on nullable types</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-27" class="anchor" aria-label="Permalink: Fixes" href="#fixes-27"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Make sure top level types have access checked (Query, Mutation and Subscription)</li>
<li>Fix #392 - Better handle <code>null</code> checks when executing against in-memory data</li>
<li>#363 - Only use <code>ToListWithNullCheck</code> when we know we are executing with services, or have been told not to separate the execution.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.6</h1><a id="user-content-546" class="anchor" aria-label="Permalink: 5.4.6" href="#546"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-28" class="anchor" aria-label="Permalink: Fixes" href="#fixes-28"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue with inline arguments for mutation methods not being validated or trying to look for a service. e.g.</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="[GraphQLMutation]
public static Expression&lt;Func&lt;MyContext, Movie&gt;&gt; AddMovie(
    [Required(ErrorMessage = &quot;Title is required&quot;)] string title,
    [Range(1, 100, ErrorMessage = &quot;Price must be between $1 and $100&quot;)] decimal price,
    [StringLength(5, ErrorMessage = &quot;Rating must be less than 5 characters&quot;)] string rating
)"><pre><span class="pl-kos">[</span><span class="pl-c1">GraphQLMutation</span><span class="pl-kos">]</span>
<span class="pl-k">public</span> <span class="pl-k"><span class="pl-k">static</span></span> <span class="pl-smi">Expression</span><span class="pl-c1">&lt;</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">MyContext</span><span class="pl-kos">,</span> <span class="pl-smi">Movie</span><span class="pl-c1">&gt;</span><span class="pl-c1">&gt;</span> <span class="pl-en">AddMovie</span><span class="pl-kos">(</span>
    <span class="pl-kos">[</span><span class="pl-c1">Required</span><span class="pl-kos">(</span><span class="pl-s1">ErrorMessage</span> <span class="pl-c1">=</span> <span class="pl-s">"Title is required"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-smi">string</span> <span class="pl-s1">title</span><span class="pl-kos">,</span>
    <span class="pl-kos">[</span><span class="pl-c1">Range</span><span class="pl-kos">(</span><span class="pl-c1">1</span><span class="pl-kos">,</span> <span class="pl-c1">100</span><span class="pl-kos">,</span> <span class="pl-s1">ErrorMessage</span> <span class="pl-c1">=</span> <span class="pl-s">"Price must be between $1 and $100"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-smi">decimal</span> <span class="pl-s1">price</span><span class="pl-kos">,</span>
    <span class="pl-kos">[</span><span class="pl-c1">StringLength</span><span class="pl-kos">(</span><span class="pl-c1">5</span><span class="pl-kos">,</span> <span class="pl-s1">ErrorMessage</span> <span class="pl-c1">=</span> <span class="pl-s">"Rating must be less than 5 characters"</span><span class="pl-kos">)</span><span class="pl-kos">]</span> <span class="pl-smi">string</span> <span class="pl-s1">rating</span>
<span class="pl-kos">)</span><span class="pl-kos"></span></pre></div>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.5</h1><a id="user-content-545" class="anchor" aria-label="Permalink: 5.4.5" href="#545"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-29" class="anchor" aria-label="Permalink: Fixes" href="#fixes-29"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix auth not correctly being checked for mutations or subscriptions. Issue was introduced in 5.4.2</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.4</h1><a id="user-content-544" class="anchor" aria-label="Permalink: 5.4.4" href="#544"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-30" class="anchor" aria-label="Permalink: Fixes" href="#fixes-30"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Argument validator was incorrectly traversing types and properties it shouldn't which could cause stack overflows for some types</li>
<li>Fix validating inline arguments for mutation methods</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.3</h1><a id="user-content-543" class="anchor" aria-label="Permalink: 5.4.3" href="#543"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-31" class="anchor" aria-label="Permalink: Fixes" href="#fixes-31"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#399 - Serialize <code>null</code> values if the field is requested as per the GraphQL spec</li>
<li>Make sure the naming policy set in <code>DefaultGraphQLResponseSerializer</code> is used for all fields</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.2</h1><a id="user-content-542" class="anchor" aria-label="Permalink: 5.4.2" href="#542"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-32" class="anchor" aria-label="Permalink: Fixes" href="#fixes-32"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#393 - Handle <code>DateTimeOffset</code> in filter expressions</li>
<li>#398 - Make sure user credentials are not cached if using the compiled query cache</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.1</h1><a id="user-content-541" class="anchor" aria-label="Permalink: 5.4.1" href="#541"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-33" class="anchor" aria-label="Permalink: Fixes" href="#fixes-33"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#370 - Sort field extension (<code>[UseSort]</code> or <code>.UseSort()</code>), if building the sort argument input type from the dotnet fields/properties will now respect the <code>[GraphQLIgnore]</code> attribute on any fields.</li>
<li>#386 / #387 - Fix regressions in filter expressions</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.4.0</h1><a id="user-content-540" class="anchor" aria-label="Permalink: 5.4.0" href="#540"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-12" class="anchor" aria-label="Permalink: Changes" href="#changes-12"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#367 - Remove Antlr dependency for generating the filter expression parser. Replaced with Parlot, a dotnet only solution to remove a barrier for contributors. This also results in the filter (FilterExpression field extension) expressions being compiled up to twice as fast.</li>
<li>#334 - add <code>isAny([])</code> method to the filter expression language</li>
<li><code>Broadcaster</code> exposes its properties and methods are virtual allowing you to extend its functionality instead of writing your own fully</li>
<li>#374 - Sort field extension now has an <code>useSchemaFields</code> option. This will use the fields on the type you are sorting from the schema to build the input argument. Instead of the fields on the dotnet type. Because the input type is build once at the beginning it will only include schema fields currently known at the time you call <code>.UseSort()</code>.</li>
<li>#375 - Allow specifying <code>introspectionEnabled</code> when calling the <code>AddGraphQLSchema</code> extension methods</li>
<li>#222 - EntityGraphQL can now build a argument objects via their constructor. The parameter names need to match the field names. E.g.</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="// empty constructor - the properties set are called
public class PersonArg
{
    public string name { get; set; }
}

// with a constructor
public class PersonArgConstructor
{
    public PersonArgConstructor(string name)
    {
        Name = name;
    }

    public string Name { get; }
}"><pre><span class="pl-c">// empty constructor - the properties set are called</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">PersonArg</span>
<span class="pl-kos">{</span>
    <span class="pl-k">public</span> <span class="pl-smi">string</span> <span class="pl-s1">name</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">set</span><span class="pl-kos">;</span> <span class="pl-kos">}</span>
<span class="pl-kos">}</span>

<span class="pl-c">// with a constructor</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">PersonArgConstructor</span>
<span class="pl-kos">{</span>
    <span class="pl-k">public</span> <span class="pl-v">PersonArgConstructor</span><span class="pl-kos">(</span><span class="pl-smi">string</span> <span class="pl-s1">name</span><span class="pl-kos">)</span>
    <span class="pl-kos">{</span>
        <span class="pl-s1">Name</span> <span class="pl-c1">=</span> <span class="pl-s1">name</span><span class="pl-kos">;</span>
    <span class="pl-kos">}</span>

    <span class="pl-k">public</span> <span class="pl-smi">string</span> <span class="pl-s1">Name</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-34" class="anchor" aria-label="Permalink: Fixes" href="#fixes-34"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue where a subscription execution had access to a disposed <code>IServiceProvider</code></li>
<li><code>Broadcaster</code> is thread safe when removing observers</li>
<li>Fixes in the implementation of the <a href="https://github.com/enisdenjo/graphql-ws/blob/main/PROTOCOL.md">GraphQL over Websockets</a>
<ul dir="auto">
<li>ID is now a <code>string</code> as it does not specify that it must be a <code>Guid</code></li>
<li>Better errors on invalid messages</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.3.0</h1><a id="user-content-530" class="anchor" aria-label="Permalink: 5.3.0" href="#530"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-13" class="anchor" aria-label="Permalink: Changes" href="#changes-13"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>ISchemaProvider.Validate()</code> added to allow you to validate the schema is complete to avoid potential errors at runtime/query time. As fields and types can be added to the schema out of dependency order, this checks that all required types are in the schema.</li>
<li>#362 - The Sort field extension now supports defining more complex sort expressions that will be used. E.g.</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="schema.Type&lt;TestDataContext&gt;().GetField(&quot;people&quot;, null)
  .UseSort((Person person) =&gt; new
  {
    // [{managerName: ASC}] in GQL can be used and the full expression person.Manager.Name will be used in the OrderBy()
    managerName = person.Manager.Name,
  });"><pre><span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">Type</span><span class="pl-c1">&lt;</span><span class="pl-smi">TestDataContext</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">GetField</span><span class="pl-kos">(</span><span class="pl-s">"people"</span><span class="pl-kos">,</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>
  <span class="pl-kos">.</span><span class="pl-en">UseSort</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">Person</span> <span class="pl-s1">person</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-k">new</span>
  <span class="pl-kos">{</span>
    <span class="pl-c">// [{managerName: ASC}] in GQL can be used and the full expression person.Manager.Name will be used in the OrderBy()</span>
    <span class="pl-s1">managerName</span> <span class="pl-c1">=</span> <span class="pl-s1">person</span><span class="pl-kos">.</span><span class="pl-s1">Manager</span><span class="pl-kos">.</span><span class="pl-s1">Name</span><span class="pl-kos">,</span>
  <span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<ul dir="auto">
<li>
<p dir="auto">#169 - <code>ExecutionOptions</code> now has a <code>BeforeRootFieldExpressionBuild</code> callback you can use to make modifications to a fields expression before it is then used to build the whole query. This is <em>only</em> called for root fields in your GraphQL operation. A common use case for this might be to call the EF <code>TagWith</code> extension method passing it the operation name to help with debugging queries.</p>
</li>
<li>
<p dir="auto">#308 - Support a dotnet <code>Type</code> being used for an input type and a query type. This may change in future versions but some simple cases are now supported</p>
</li>
<li>
<p dir="auto"><code>IField.UseArgumentsFrom</code> &amp; <code>IField.UseArgumentsFromField</code> is now Obsolete. Using it (typically in a field extension) creates issues. See #358 fix below</p>
</li>
<li>
<p dir="auto"><code>IFieldExtension.GetExpressionAndArguments</code> has been added to allow field extensions to handle arguments and add them to the compile context. This interface will merge with the existing (now obsolete) <code>IFieldExtension.GetExpression</code> in version 6.0. This was introduced to fix #358 and avoid breaking changes</p>
</li>
<li>
<p dir="auto"><code>GetSchemaType(string typeName, QueryRequestContext? requestContext)</code> is now Obsolete, use <code>GetSchemaType(string typeName, bool inputTypeScope, QueryRequestContext? requestContext)</code> and provide <code>inputTypeScope = true</code> if the type is an Input type.</p>
</li>
<li>
<p dir="auto">#359 - For targets .net6 and above <code>DateOnly</code> &amp; <code>TimeOnly</code> are added as scalar types by default.</p>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-35" class="anchor" aria-label="Permalink: Fixes" href="#fixes-35"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#356 - Look up the correct field return type for <code>InputType</code>s</li>
<li>#358 - <code>OffsetPaging</code> and <code>ConnectionPaging</code> field extensions can now be used on multiple fields that return the same type. e.g.</li>
<li>#148 - Return a more descriptive error message for a missing type when we know the field we are trying to find the type of</li>
<li>#361 - Handle union/interface types when accessed from a object projection</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="// both fields return a list of people but have different expressions
schema.Query().AddField(&quot;peopleOver&quot;, new
  {
      over = ArgumentHelper.Required&lt;int&gt;()
  },
  (ctx, args) =&gt; ctx.People.Where(p =&gt; p.Height &gt; args.over).OrderBy(p =&gt; p.Id), &quot;Return list of people with paging metadata&quot;)
  .UseOffsetPaging();
schema.Query().AddField(&quot;peopleUnder&quot;, new
  {
      under = ArgumentHelper.Required&lt;int&gt;()
  },
  (ctx, args) =&gt; ctx.People.Where(p =&gt; p.Height &lt; args.under).OrderBy(p =&gt; p.Id), &quot;Return list of people with paging metadata&quot;)
  .UseOffsetPaging();"><pre class="notranslate"><code>// both fields return a list of people but have different expressions
schema.Query().AddField("peopleOver", new
  {
      over = ArgumentHelper.Required&lt;int&gt;()
  },
  (ctx, args) =&gt; ctx.People.Where(p =&gt; p.Height &gt; args.over).OrderBy(p =&gt; p.Id), "Return list of people with paging metadata")
  .UseOffsetPaging();
schema.Query().AddField("peopleUnder", new
  {
      under = ArgumentHelper.Required&lt;int&gt;()
  },
  (ctx, args) =&gt; ctx.People.Where(p =&gt; p.Height &lt; args.under).OrderBy(p =&gt; p.Id), "Return list of people with paging metadata")
  .UseOffsetPaging();
</code></pre></div>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.2.1</h1><a id="user-content-521" class="anchor" aria-label="Permalink: 5.2.1" href="#521"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-36" class="anchor" aria-label="Permalink: Fixes" href="#fixes-36"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#355 - make error variable values more distinctive</li>
<li>EntityGraphQL is now more specific in which methods it tries to optimize the pattern of a list to single. E.g. If a field has an expression like <code>ctx =&gt; ctx.People.FirstOrDefault(filter)</code> EntityGraphQL treats that as a ListToSingle field and will build a full expression similar to <code>ctx =&gt; ctx.People.Where(filter).Select(x =&gt; new {...}).FirstOrDefault()</code> to avoid over fetching when using EntityFramework. Previously EntityGraphQL would try to break up and rebuild expressions.methods it didn't know how to. It now correctly only tries this optimization on <code>First</code>, <code>FirstOrDefault</code>, <code>Single</code>, <code>SingleOrDefault</code>, <code>Last</code> &amp; <code>LastOrDefault</code> from <code>Queryable</code> &amp; <code>Enumerable</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.2.0</h1><a id="user-content-520" class="anchor" aria-label="Permalink: 5.2.0" href="#520"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Check release notes for the 5.2.0-beta1 and beta2 below.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-14" class="anchor" aria-label="Permalink: Changes" href="#changes-14"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#347 - The handler for the subscriptions end point added by <code>UseGraphQLWebSockets</code> no longer returns <code>400</code> if the request is not a web socket request. Allowing the request to get passed to the next handlers. This allows you to have the same endpoint for queries/mutations and subscriptions.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-37" class="anchor" aria-label="Permalink: Fixes" href="#fixes-37"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#350 - Index accessors properties (which are methods to dotnet) on types are ignored when using <code>SchemaBuilder</code>. Previously they would fail.</li>
<li>#333 - Fixes to method and service calls on interfaces/unions</li>
<li>#344 - Support paging field extensions with <code>field.ResolveBulk&lt;TService, TKey, TResult&gt;()</code></li>
<li>Fix bulk resolve services within a List to Single node</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.2.0-beta2</h1><a id="user-content-520-beta2" class="anchor" aria-label="Permalink: 5.2.0-beta2" href="#520-beta2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Check release notes for the 5.2.0-beta1 below.</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-38" class="anchor" aria-label="Permalink: Fixes" href="#fixes-38"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix error when using a service at a query root field that uses <code>First()</code> as friends (List to single pattern). E.g. <code>(ctx, service) =&gt; ctx.SomeList.First(i =&gt; i.Thing == service.Other)</code></li>
<li>#318 - Fix issue comparing <code>int</code> style fields against <code>float</code> style fields in the filter expression</li>
<li>Better error message when comparing different enum types in the filter language</li>
<li>Include descriptions for scalars and directives in introspection and schema output</li>
<li>Fix issue using the default <code>SchemaBuilderOptions</code> with a mutation method that has a list argument. The argument input type was not being correctly added to the schema. Not an issue if you were already adding the type manually</li>
<li>#336 - Fix conversion of non-nullable/nullable types</li>
<li>#342 - Fix argument incorrectly being renamed when using <code>[GraphQLField]</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-15" class="anchor" aria-label="Permalink: Changes" href="#changes-15"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#318 - Support Unicode characters in the string of the filter language</li>
<li>Support more cases with <code>field.ResolveBulk&lt;TService, TKey, TResult&gt;()</code></li>
<li>Add a net8.0 target output for the base EntityGraphQL library.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.2.0-beta1</h1><a id="user-content-520-beta1" class="anchor" aria-label="Permalink: 5.2.0-beta1" href="#520-beta1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-16" class="anchor" aria-label="Permalink: Changes" href="#changes-16"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Make more properties public in nodes like <code>GraphQLCollectionToSingleField</code> to better support customisation in custom directives</li>
<li>Added <code>field.Resolve&lt;TService, ...&gt;()</code> to replace <code>ResolveWithService&lt;&gt;()</code>. Recommended to use <code>Resolve()</code>. Release 5.3 will mark <code>ResolveWithService</code> as deprecated and release 6.0 will remove them.</li>
<li>Add <code>field.ResolveBulk&lt;TService, TKey, TResult&gt;()</code> to allow you to use services to bulk load data to avoid multiple calls to a service resolve expression that may call an external service in a list result. Example</li>
<li>Add <code>schema.AddEnum&lt;TEnum&gt;(typeName, description)</code> to the schema building API</li>
<li>Add <code>net8.0</code> as a target for EntityGraphQL.AspNet project</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var schema = SchemaBuilder.FromObject&lt;MyContext&gt;();
schema.UpdateType&lt;Project&gt;(type =&gt;
{
    type.ReplaceField(&quot;createdBy&quot;, &quot;Get user that created it&quot;)
      // normal service to fetch the User object for creator of the Project type
      .ResolveWithService&lt;UserService&gt;((proj, users) =&gt; users.GetUserById(proj.CreatedById))
      // Bulk service used to fetch many User objects
      .ResolveBulk&lt;UserService, int, User&gt;(proj =&gt; proj.CreatedById, (ids, srv) =&gt; srv.GetAllUsers(ids));
});"><pre><span class="pl-k">var</span> <span class="pl-s1">schema</span> <span class="pl-c1">=</span> <span class="pl-s1">SchemaBuilder</span><span class="pl-kos">.</span><span class="pl-smi">FromObject</span><span class="pl-c1">&lt;</span><span class="pl-smi">MyContext</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">UpdateType</span><span class="pl-c1">&lt;</span><span class="pl-smi">Project</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span>type <span class="pl-c1">=&gt;</span>
<span class="pl-kos">{</span>
    <span class="pl-s1">type</span><span class="pl-kos">.</span><span class="pl-en">ReplaceField</span><span class="pl-kos">(</span><span class="pl-s">"createdBy"</span><span class="pl-kos">,</span> <span class="pl-s">"Get user that created it"</span><span class="pl-kos">)</span>
      <span class="pl-c">// normal service to fetch the User object for creator of the Project type</span>
      <span class="pl-kos">.</span><span class="pl-smi">ResolveWithService</span><span class="pl-c1">&lt;</span><span class="pl-smi">UserService</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">proj</span><span class="pl-kos">,</span> <span class="pl-s1">users</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">users</span><span class="pl-kos">.</span><span class="pl-en">GetUserById</span><span class="pl-kos">(</span><span class="pl-s1">proj</span><span class="pl-kos">.</span><span class="pl-s1">CreatedById</span><span class="pl-kos">)</span><span class="pl-kos">)</span>
      <span class="pl-c">// Bulk service used to fetch many User objects</span>
      <span class="pl-kos">.</span><span class="pl-smi">ResolveBulk</span><span class="pl-c1">&lt;</span><span class="pl-smi">UserService</span><span class="pl-kos">,</span> <span class="pl-smi">int</span><span class="pl-kos">,</span> <span class="pl-smi">User</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span>proj <span class="pl-c1">=&gt;</span> <span class="pl-s1">proj</span><span class="pl-kos">.</span><span class="pl-s1">CreatedById</span><span class="pl-kos">,</span> <span class="pl-kos">(</span><span class="pl-s1">ids</span><span class="pl-kos">,</span> <span class="pl-s1">srv</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">GetAllUsers</span><span class="pl-kos">(</span><span class="pl-s1">ids</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">If you have a query like</p>
<div class="highlight highlight-source-graphql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  # ResolveBulk
  projects {
    # project fields
    name
    id
    # service field - resolved with ResolveBulk expression for all Projects loaded
    createdBy {
      name
    }
  }

  # ResolveWithService
  project(id: 78) {
    # project fields
    name
    id
    # service field - resolved with ResolveWithService expression for the single project loaded
    createdBy {
      name
    }
  }
}"><pre>{
<span class="pl-c">  # ResolveBulk</span>
  <span class="pl-v">projects</span> {
<span class="pl-c">    # project fields</span>
    <span class="pl-v">name</span>
    <span class="pl-v">id</span>
<span class="pl-c">    # service field - resolved with ResolveBulk expression for all Projects loaded</span>
    <span class="pl-v">createdBy</span> {
      <span class="pl-v">name</span>
    }
  }

<span class="pl-c">  # ResolveWithService</span>
  <span class="pl-v">project</span>(<span class="pl-v">id</span>: <span class="pl-c1">78</span>) {
<span class="pl-c">    # project fields</span>
    <span class="pl-v">name</span>
    <span class="pl-v">id</span>
<span class="pl-c">    # service field - resolved with ResolveWithService expression for the single project loaded</span>
    <span class="pl-v">createdBy</span> {
      <span class="pl-v">name</span>
    }
  }
}</pre></div>
<p dir="auto">Instead of calling <code>users.GetUserById()</code> for each project to resolve <code>createdBy { name }</code>, EntityGraphQL will build a list of keys using the <code>proj =&gt; proj.CreatedById</code> expression from the list of projects and then call the <code>(ids, srv) =&gt; srv.GetAllUsers(ids)</code> expression once for the whole list of projects in the results. See updated documentation for further details.</p>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.1.1</h1><a id="user-content-511" class="anchor" aria-label="Permalink: 5.1.1" href="#511"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-39" class="anchor" aria-label="Permalink: Fixes" href="#fixes-39"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #337 - Description attribute accidentally updating name instead of description</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.1.0</h1><a id="user-content-510" class="anchor" aria-label="Permalink: 5.1.0" href="#510"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-17" class="anchor" aria-label="Permalink: Changes" href="#changes-17"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Upgrade to the latest standard Antlr4 - the parser/tool used for the filter expression strings. Fixing precedence of operators</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-40" class="anchor" aria-label="Permalink: Fixes" href="#fixes-40"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#319 - Only convert strings to <code>Guid</code> or <code>DateTime</code> when required</li>
<li>If you add a field connecting back to the Query Context that ends in a method to go from a list to a single result the graph object projection will now correctly be inserted before the last call. Example</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="var schema = SchemaBuilder.FromObject&lt;MyContext&gt;();
schema.AddType&lt;ExternalData&gt;(&quot;ExternalData&quot;).AddAllFields();

schema.UpdateType&lt;ExternalData&gt;(ed =&gt;
{
    // connect back to the MyContext types
    ed.AddField(&quot;movie&quot;, &quot;Get movie&quot;)
      // here FirstOrDefault() goes from list -&gt; single
      .ResolveWithService&lt;MyContext&gt;((ed, db) =&gt; db.Movies.Where(m =&gt; m.Id == ed.Id).FirstOrDefault());
});

schema.Query().AddField(&quot;externalData&quot;, &quot;Get Data&quot;)
    .ResolveWithService&lt;ExternalDataService&gt;((p, srv) =&gt; srv.GetData());"><pre><span class="pl-k">var</span> <span class="pl-s1">schema</span> <span class="pl-c1">=</span> <span class="pl-s1">SchemaBuilder</span><span class="pl-kos">.</span><span class="pl-smi">FromObject</span><span class="pl-c1">&lt;</span><span class="pl-smi">MyContext</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">AddType</span><span class="pl-c1">&lt;</span><span class="pl-smi">ExternalData</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-s">"ExternalData"</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">AddAllFields</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">UpdateType</span><span class="pl-c1">&lt;</span><span class="pl-smi">ExternalData</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span>ed <span class="pl-c1">=&gt;</span>
<span class="pl-kos">{</span>
    <span class="pl-c">// connect back to the MyContext types</span>
    <span class="pl-s1">ed</span><span class="pl-kos">.</span><span class="pl-en">AddField</span><span class="pl-kos">(</span><span class="pl-s">"movie"</span><span class="pl-kos">,</span> <span class="pl-s">"Get movie"</span><span class="pl-kos">)</span>
      <span class="pl-c">// here FirstOrDefault() goes from list -&gt; single</span>
      <span class="pl-kos">.</span><span class="pl-smi">ResolveWithService</span><span class="pl-c1">&lt;</span><span class="pl-smi">MyContext</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">ed</span><span class="pl-kos">,</span> <span class="pl-s1">db</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">db</span><span class="pl-kos">.</span><span class="pl-s1">Movies</span><span class="pl-kos">.</span><span class="pl-en">Where</span><span class="pl-kos">(</span>m <span class="pl-c1">=&gt;</span> <span class="pl-s1">m</span><span class="pl-kos">.</span><span class="pl-s1">Id</span> <span class="pl-c1">==</span> <span class="pl-s1">ed</span><span class="pl-kos">.</span><span class="pl-s1">Id</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">FirstOrDefault</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-en">Query</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">AddField</span><span class="pl-kos">(</span><span class="pl-s">"externalData"</span><span class="pl-kos">,</span> <span class="pl-s">"Get Data"</span><span class="pl-kos">)</span>
    <span class="pl-kos">.</span><span class="pl-smi">ResolveWithService</span><span class="pl-c1">&lt;</span><span class="pl-smi">ExternalDataService</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">p</span><span class="pl-kos">,</span> <span class="pl-s1">srv</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">GetData</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">In the above case if you select</p>
<div class="highlight highlight-source-graphql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  externalData {
    movie {
      director {
        name
      }
    }
  }
}"><pre>{
  <span class="pl-v">externalData</span> {
    <span class="pl-v">movie</span> {
      <span class="pl-v">director</span> {
        <span class="pl-v">name</span>
      }
    }
  }
}</pre></div>
<p dir="auto">The movie field will have the selection inserted allowing EF to resolve fields without lazy loading turned on. Without this the <code>m.Director.Name</code> would also be <code>null</code> as no relation was included. e.g.</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="db.Movies.Where(m =&gt; m.Id == ed.Id)
.Select(m =&gt; new [
  director = new {
    name = m.Director.Name
  }
])
.FirstOrDefault();"><pre><span class="pl-s1">db</span><span class="pl-kos">.</span><span class="pl-s1">Movies</span><span class="pl-kos">.</span><span class="pl-en">Where</span><span class="pl-kos">(</span>m <span class="pl-c1">=&gt;</span> <span class="pl-s1">m</span><span class="pl-kos">.</span><span class="pl-s1">Id</span> <span class="pl-c1">==</span> <span class="pl-s1">ed</span><span class="pl-kos">.</span><span class="pl-s1">Id</span><span class="pl-kos">)</span>
<span class="pl-kos">.</span><span class="pl-en">Select</span><span class="pl-kos">(</span>m <span class="pl-c1">=&gt;</span> <span class="pl-k">new</span> <span class="pl-kos">[</span>
  director <span class="pl-c1">=</span> <span class="pl-k">new</span> <span class="pl-kos">{</span>
    <span class="pl-s1">name</span> <span class="pl-c1">=</span> <span class="pl-s1">m</span><span class="pl-kos">.</span><span class="pl-s1">Director</span><span class="pl-kos">.</span><span class="pl-s1">Name</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">]</span><span class="pl-kos">)</span>
<span class="pl-kos">.</span><span class="pl-en">FirstOrDefault</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.0.1</h1><a id="user-content-501" class="anchor" aria-label="Permalink: 5.0.1" href="#501"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-41" class="anchor" aria-label="Permalink: Fixes" href="#fixes-41"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #314 - Some clean up of the Antlr4 grammar for the filter expressions</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.0.0</h1><a id="user-content-500" class="anchor" aria-label="Permalink: 5.0.0" href="#500"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Make sure to check out the changes 5.0.0-beta1</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-6" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-6"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Generated schema type name for field sort inputs now include the name of the schema type the field is on to avoid conflicts</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-18" class="anchor" aria-label="Permalink: Changes" href="#changes-18"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>IField.AddExtension</code> now returns the <code>IField</code></li>
<li><code>UseSort()</code> field extension now can take a list of default sort fields e.g.</li>
<li><code>Broadcaster</code> (inbuilt <code>IObservable&lt;TType&gt;</code> you can use for subscriptions) now has a <code>OnUnsubscribe</code> callback</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="schema.ReplaceField(&quot;people&quot;,
    ctx =&gt; ctx.People,
    &quot;Return a list of people. Optional sorted&quot;)
    .UseSort(
        new Sort&lt;Person&gt;((person) =&gt; person.Height, SortDirection.ASC),
        new Sort&lt;Person&gt;((person) =&gt; person.LastName, SortDirection.ASC)
    );"><pre><span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-en">ReplaceField</span><span class="pl-kos">(</span><span class="pl-s">"people"</span><span class="pl-kos">,</span>
    ctx <span class="pl-c1">=&gt;</span> <span class="pl-s1">ctx</span><span class="pl-kos">.</span><span class="pl-s1">People</span><span class="pl-kos">,</span>
    <span class="pl-s">"Return a list of people. Optional sorted"</span><span class="pl-kos">)</span>
    <span class="pl-kos">.</span><span class="pl-en">UseSort</span><span class="pl-kos">(</span>
        <span class="pl-k">new</span> <span class="pl-smi">Sort</span><span class="pl-c1">&lt;</span><span class="pl-smi">Person</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">person</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">person</span><span class="pl-kos">.</span><span class="pl-s1">Height</span><span class="pl-kos">,</span> <span class="pl-s1">SortDirection</span><span class="pl-kos">.</span><span class="pl-s1">ASC</span><span class="pl-kos">)</span><span class="pl-kos">,</span>
        <span class="pl-k">new</span> <span class="pl-smi">Sort</span><span class="pl-c1">&lt;</span><span class="pl-smi">Person</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-s1">person</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">person</span><span class="pl-kos">.</span><span class="pl-s1">LastName</span><span class="pl-kos">,</span> <span class="pl-s1">SortDirection</span><span class="pl-kos">.</span><span class="pl-s1">ASC</span><span class="pl-kos">)</span>
    <span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<ul dir="auto">
<li><code>SchemaBuilderOptions</code> now has a <code>OnFieldCreated</code> callback to make changes to fields as <code>SchemaBuilder</code> is building the schema.</li>
<li><code>.contains(string)</code>, <code>.startsWith(string)</code>, <code>.endsWith(string)</code> &amp; <code>.toLower()</code> / <code>.toUpper()</code> string methods now available in the filter argument expression.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-42" class="anchor" aria-label="Permalink: Fixes" href="#fixes-42"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix naming of fields extracted from service calls when those field use convert</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">5.0.0-beta1</h1><a id="user-content-500-beta1" class="anchor" aria-label="Permalink: 5.0.0-beta1" href="#500-beta1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-7" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-7"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>EntityGraphQL.AspNet</code> now targets <code>net6.0</code> and <code>net7.0</code>, dropping targets <code>netcoreapp3.1</code> and <code>net5.0</code>. You can still use the base <code>EntityGraphQL</code> library with older targets.</li>
<li>Interface <code>IExposableException</code> has been removed. Use <code>SchemaBuilderSchemaOptions.AllowedExceptions</code> or the new <code>AllowedExceptionAttribute</code> to define which exceptions are rendered into the results</li>
<li>#254 - Previously passing <code>null</code> for the <code>ClaimsPrincipal</code> in <code>ExecuteRequest()</code> would skip any authorization checks. All authorization checks are now done regardless of the <code>ClaimsPrincipal</code> value. Meaning <code>null</code> will fail if there is fields requiring authorization.</li>
<li><code>IDirectiveProcessor</code> interface has changed. See upgrade docs for changes</li>
<li><code>SchemaBuilderMethodOptions</code> removed, see updated properties on <code>SchemaBuilderOptions</code> and upgrade docs. This was because you can also now add methods as query fields with <code>GraphQLFieldAttribute</code></li>
<li><code>SchemaBuilderOptions.AutoCreateInputTypes</code> now defaults to <code>true</code>. Meaning in <code>SchemaBuilder</code> when adding mutations etc any complex types will be added to the schema if they are not there already.</li>
<li>The rules for reflection on method parameters have been changed to make them clearer. See the upgrade to 5.0 docs and the mutation docs that cover examples.</li>
<li><code>GraphQLValidator</code> is no longer magically added to your method fields (mutations/subscriptions). If you wish to use it please register it in your services. There is a new helper method in EntityGraphQL.AspNet <code>AddGraphQLValidator()</code>. This means you can implement and register your own implementation.</li>
<li><code>SchemaProvider.ExecuteRequest</code> &amp; <code>SchemaProvider.ExecuteRequestAsync</code> have been renamed to <code>ExecuteRequestWithContext</code> &amp; <code>ExecuteRequestWithContextAsync</code>. The schema context instance provided will be used for all context references within that query.</li>
<li>#309 - Introduced new <code>SchemaProvider.ExecuteRequest</code> &amp; <code>SchemaProvider.ExecuteRequestAsync</code> which take no schema context instance as an argument. The context will be fetched from the provided <code>ServiceProvider</code> meaning the lifetime rules are adhered to - e.g. <code>ServiceLifetime.Transient</code> is now correctly used. This is the preferred way to execute a query</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-19" class="anchor" aria-label="Permalink: Changes" href="#changes-19"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>EntityGraphQL</code> (the core library) targets both <code>netstandard2.1</code> &amp; <code>net6</code>. <code>netstandard2.1</code> will be dropped around the time of <code>net8.0</code> being released.</li>
<li>Introduced <code>GraphQLFieldAttribute</code> to allow you to rename fields in the schema as well as mark methods as fields in the schema. Method parameters will become field arguments in the same way as mutation methods. See updated docs for more information.</li>
<li>Argument types used for directives now read <code>DescriptionAttribute</code> and <code>GraphQLFieldAttribute</code> to use different field name in the schema and set a description</li>
<li>Added <code>GraphQLInputTypeAttribute</code>. Whereas <code>GraphQLArgumentsAttribute</code> flattens the types properties into the schema, <code>GraphQLInputTypeAttribute</code> assumes the type is an input type and uses that as the schema argument</li>
<li>You may implement you own <code>GraphQLValidator</code> by implementing (and registering) <code>IGraphQLValidator</code></li>
<li>Added a <code>options.BeforeExecuting</code> callback to allow modification of the expression before execution</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-43" class="anchor" aria-label="Permalink: Fixes" href="#fixes-43"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#266 - Fix error calling <code>AddPossibleType()</code> when some of the types have already been added to the schema</li>
<li><code>ExecutionOptions</code> passed into <code>IApplicationBuilder.UseGraphQLWebSockets()</code> are now used when executing the queries for the subscription</li>
<li>#284 - Support generic class types as mutation arguments. <code>MyClass&lt;OtherClass&gt;</code> will become <code>input MyClassOtherClass {}</code></li>
<li>#302 - Fix issue where using service fields with <code>IQueryable</code>/<code>DbContext</code> fields</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.3.1</h1><a id="user-content-431" class="anchor" aria-label="Permalink: 4.3.1" href="#431"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-44" class="anchor" aria-label="Permalink: Fixes" href="#fixes-44"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue using the <code>OneOf</code> directive with <code>ArgumentHelper.Required&lt;T&gt;()</code> in a query field argument.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.3.0</h1><a id="user-content-430" class="anchor" aria-label="Permalink: 4.3.0" href="#430"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-20" class="anchor" aria-label="Permalink: Changes" href="#changes-20"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#285 - Add support for implicit operators when converting types</li>
<li>Fix how EntityGraphQL evaluates the root level fields that return lists. If the return type of the field is nullable a <code>null</code> will be returned if the result is <code>null</code>. If the return type is non-nullable an empty <code>List&lt;T&gt;</code> will be returned.</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="public class UserDbContextNonNullable
{
    // empty list will be returned if UserIds resolves to null. If you use nullable types you can control with the ? operator (to return null)
    [GraphQLNotNull]
    public List&lt;string&gt; UserIds { get; set; }
}"><pre><span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">UserDbContextNonNullable</span>
<span class="pl-kos">{</span>
    <span class="pl-c">// empty list will be returned if UserIds resolves to null. If you use nullable types you can control with the ? operator (to return null)</span>
    <span class="pl-kos">[</span><span class="pl-c1">GraphQLNotNull</span><span class="pl-kos">]</span>
    <span class="pl-k">public</span> <span class="pl-smi">List</span><span class="pl-c1">&lt;</span><span class="pl-smi">string</span><span class="pl-c1">&gt;</span> <span class="pl-s1">UserIds</span> <span class="pl-kos">{</span> <span class="pl-k">get</span><span class="pl-kos">;</span> <span class="pl-k">set</span><span class="pl-kos">;</span> <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-45" class="anchor" aria-label="Permalink: Fixes" href="#fixes-45"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#288 - fix stack overflow in <code>RuntimeTypeJsonConverter</code></li>
<li>#291 - Fix <code>ResolveWithService</code> being called twice due to <code>Expression.Condition</code> if the field is a list and at the root level of the Query type</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.2.1</h1><a id="user-content-421" class="anchor" aria-label="Permalink: 4.2.1" href="#421"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-46" class="anchor" aria-label="Permalink: Fixes" href="#fixes-46"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue selecting repeated fields from an interface and a fragment selection</li>
<li>Fix issue selecting interface fields from the concrete type in a fragment</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.2.0</h1><a id="user-content-420" class="anchor" aria-label="Permalink: 4.2.0" href="#420"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-21" class="anchor" aria-label="Permalink: Changes" href="#changes-21"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#281 - Implement allowed exceptions to allow exceptions to come into the error result when running with <code>IsDevelopment == false</code> as users not be able to modify the exceptions being thrown in order to have them implement <code>IExposableException</code>. Exceptions may be allowed with an exact type match, or allowed including all types that inherit it</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-47" class="anchor" aria-label="Permalink: Fixes" href="#fixes-47"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Prevent double SQL (when using against EF) query on base type (4.1 regression)</li>
<li>#279 - Remove duplicate fields when creating expressions</li>
<li>#280 - Fix for mutations that return interfaces/unions</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.1.2</h1><a id="user-content-412" class="anchor" aria-label="Permalink: 4.1.2" href="#412"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-48" class="anchor" aria-label="Permalink: Fixes" href="#fixes-48"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue when using paging extension and aliases in the query e.g. <code>{ myList { myEdges: edges { .. } } }</code> previously would fail</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.1.1</h1><a id="user-content-411" class="anchor" aria-label="Permalink: 4.1.1" href="#411"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-49" class="anchor" aria-label="Permalink: Fixes" href="#fixes-49"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#221 - Apply null check on the <code>ToList</code> expression built to resolve list expressions</li>
<li>Better support for service fields at the root query level</li>
<li>Fix support for service fields that take a complex type (object or enumerable) as arguments</li>
<li>Fix <code>UseFilter()</code> <code>filter</code> and <code>UseSort()</code> <code>sort</code> field arguments were incorrectly being marked as required in schema introspection</li>
<li>Fix issues with default sort values for <code>UseSort()</code> not appearing in the schema as default values</li>
<li>Fix output of default values in schema for lists and objects</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.1.0</h1><a id="user-content-410" class="anchor" aria-label="Permalink: 4.1.0" href="#410"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-22" class="anchor" aria-label="Permalink: Changes" href="#changes-22"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#262/#205 - Option to prevent leaking internal exceptions into the 'errors' field on a result.</li>
</ul>
<p dir="auto">When running in development (read via <code>IWebHostEnvironment.IsEnvironment("Development")</code> or when manually creating <code>SchemaProvider</code>), messages of exceptions will not be dumped out into the 'errors' field of a query result, unless they implement the newly created (and empty) interface <code>IExposableException</code>.</p>
<ul dir="auto">
<li>#260 - Support default values in C# methods for mutations</li>
<li>#264 - Versions prior to .NET 7, <code>System.Text.Json</code> doesn't support the serialization of polymorphic type hierarchies. EntityGraphQL now registers a <code>RuntimeTypeJsonConverter</code> class as part of the <code>DefaultGraphQLResponseSerializer</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-50" class="anchor" aria-label="Permalink: Fixes" href="#fixes-50"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#264 - Interface/union queries used to require you to query for at least 2 of the subtypes at once.</li>
<li>Fix issue with service fields that take nullable type fields as arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.0.1</h1><a id="user-content-401" class="anchor" aria-label="Permalink: 4.0.1" href="#401"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-51" class="anchor" aria-label="Permalink: Fixes" href="#fixes-51"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#248 - Make sure directives run on fields that map a list of items to a single item (e.g. <code>myItem(id: Int!) @include(...) { ... }</code>)</li>
<li>#213 - Multiple levels of <code>TargetInvocationException</code> will now be unwrapped</li>
<li>#82 - SchemaBuilder can now handle fields that return <code>Task&lt;&gt;</code>. Note that the way that queries expressions are built you may still encounter issues with <code>async</code> fields not at the root query level. Please open an issue if you do</li>
<li>#259 - Fix introspection of nullable/non-nullable lists with nullable/non-nullable items</li>
<li>#239 - Fix issues rejoining main context from a service field</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.0.0</h1><a id="user-content-400" class="anchor" aria-label="Permalink: 4.0.0" href="#400"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-52" class="anchor" aria-label="Permalink: Fixes" href="#fixes-52"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#243 - support <code>application/json; charset=utf-8</code> content type</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.0.0-beta2</h1><a id="user-content-400-beta2" class="anchor" aria-label="Permalink: 4.0.0-beta2" href="#400-beta2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-53" class="anchor" aria-label="Permalink: Fixes" href="#fixes-53"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue related to #235 where the multiple fields are the same field with different alias and arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking Changes</h2><a id="user-content-breaking-changes-8" class="anchor" aria-label="Permalink: Breaking Changes" href="#breaking-changes-8"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>IFieldExtension.ProcessExpressionSelection</code> now takes a <code>ParameterExpression? argumentParam</code> argument which is the argument parameter used at execution time (if there is one). Relating to #235</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">4.0.0-beta1</h1><a id="user-content-400-beta1" class="anchor" aria-label="Permalink: 4.0.0-beta1" href="#400-beta1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking changes</h2><a id="user-content-breaking-changes-9" class="anchor" aria-label="Permalink: Breaking changes" href="#breaking-changes-9"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>DateTimeOffset</code> is now added as a default scalar type in schema creation. It is a very common used type in EF contexts and trips up new users. If you previously were adding it as a scalar type you no longer need to. Or if you'd like to add it differently (like map it to Date) you can</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="services.AddGraphQLSchema&lt;DemoContext&gt;(options =&gt;
{
    options.PreBuildSchemaFromContext = (schema) =&gt;
    {
        schema.RemoveType&lt;DateTimeOffset&gt;();
        // add it how you want
    };
});"><pre><span class="pl-s1">services</span><span class="pl-kos">.</span><span class="pl-smi">AddGraphQLSchema</span><span class="pl-c1">&lt;</span><span class="pl-smi">DemoContext</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span>options <span class="pl-c1">=&gt;</span>
<span class="pl-kos">{</span>
    <span class="pl-s1">options</span><span class="pl-kos">.</span><span class="pl-s1">PreBuildSchemaFromContext</span> <span class="pl-c1">=</span> <span class="pl-kos">(</span><span class="pl-s1">schema</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span>
    <span class="pl-kos">{</span>
        <span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">RemoveType</span><span class="pl-c1">&lt;</span><span class="pl-smi">DateTimeOffset</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
        <span class="pl-c">// add it how you want</span>
    <span class="pl-kos">}</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<ul dir="auto">
<li><code>AddMutationsFrom</code> and friends now take an optional <code>SchemaBuilderMethodOptions</code> options object to configure how mutations are built, following the <code>SchemaBuilderOptions</code> used elsewhere. See updated docs. Important defaults:</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="bool AutoCreateInputTypes = true; // Any input types seen will be added to the schema
bool AddNonAttributedMethods = false; // GraphQLMutationAttributes are still required by default
bool AutoCreateNewComplexTypes = true; // Return types of mutations will be added to the schema"><pre><span class="pl-smi">bool</span> <span class="pl-s1">AutoCreateInputTypes</span> <span class="pl-c1">=</span> <span class="pl-c1">true</span><span class="pl-kos">;</span> <span class="pl-c">// Any input types seen will be added to the schema</span>
<span class="pl-smi">bool</span> <span class="pl-s1">AddNonAttributedMethods</span> <span class="pl-c1">=</span> <span class="pl-c1">false</span><span class="pl-kos">;</span> <span class="pl-c">// GraphQLMutationAttributes are still required by default</span>
<span class="pl-smi">bool</span> <span class="pl-s1">AutoCreateNewComplexTypes</span> <span class="pl-c1">=</span> <span class="pl-c1">true</span><span class="pl-kos">;</span> <span class="pl-c">// Return types of mutations will be added to the schema</span></pre></div>
<ul dir="auto">
<li><code>SchemaBuilderOptions.IgnoreTypes</code> Now uses <code>Type</code> instead of <code>string</code>. It is a <code>HashSet&lt;Type&gt;</code> now to avoid confusion of which name to use (full name space or not)</li>
<li><code>ProcessExpressionSelection</code> used in Field Extensions now takes <code>Dictionary&lt;IFieldKey, CompiledField&gt;</code> for the <code>selectionExpressions</code> parameter. <code>IFieldKey</code> is the field name and the schema type the field belongs too. Helps when dealing with inline fragments/union types where we may have multiple fields with the same name from different types.</li>
<li><code>MutationArgumentsAttribute</code> renamed to <code>GraphQLArgumentsAttribute</code> and is used with subscriptions or mutation method arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-23" class="anchor" aria-label="Permalink: Changes" href="#changes-23"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add support for GraphQL subscriptions - see updated documentation</li>
<li>Added support for defining Union types in the schema (#107)</li>
<li>Core library <code>EntityGraphQL</code> only targets <code>netstandard2.1</code> as we do not need to multi-target and this still supports a large dotnet base (3.1+)</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-54" class="anchor" aria-label="Permalink: Fixes" href="#fixes-54"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #206 - If a service field included a binary expression EntityGraphQL would sometimes build an incorrect selection expression</li>
<li>Fix #214 - The implicit conversion return type of a <code>ArgumentHelper.Required&lt;&gt;()</code> field argument is non-null</li>
<li>Fix #212 - Regression using a static or instance method in a service field</li>
<li>Fix #223 - Mutations with inline args don't support variables with different name to argument name</li>
<li>Fix #225 - Mutations with separate (not using <code>MutationArgumentsAttribute</code>) parameters fail if called without variables</li>
<li>Fix #229 - Using <code>Field.Resolve()</code> would incorrectly assume the field had a service</li>
<li>#219 - Handle conversion of variables as lists to a <code>RequiredField&lt;&gt;</code> arg of the list type</li>
<li>#215 - Fix issue using GraphQLValidator if using inline mutation arguments</li>
<li>#235 - Fix issue where arguments with the same name at the same level in a query would receive the same value</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">3.0.5</h1><a id="user-content-305" class="anchor" aria-label="Permalink: 3.0.5" href="#305"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-55" class="anchor" aria-label="Permalink: Fixes" href="#fixes-55"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #197 - If a mutation returns <code>Task&lt;T&gt;</code> use <code>T</code> as the return type</li>
<li>Fix #204 - Nullable reference types correctly produce a nullable argument in the schema</li>
<li>If not using <code>MutationArgumentsAttribute</code> in mutation methods <code>autoAddInputTypes</code> was being ignored</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">3.0.4</h1><a id="user-content-304" class="anchor" aria-label="Permalink: 3.0.4" href="#304"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-56" class="anchor" aria-label="Permalink: Fixes" href="#fixes-56"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #194 - <code>HasType()</code> was not checking type mappings</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">3.0.3</h1><a id="user-content-303" class="anchor" aria-label="Permalink: 3.0.3" href="#303"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-57" class="anchor" aria-label="Permalink: Fixes" href="#fixes-57"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Prevent creation of invalid GraphQL schemas
<ul dir="auto">
<li>Exception is thrown if you try to add a field with arguments to types that do not support arguments - <code>Enum</code> &amp; <code>Input</code> types</li>
<li>Exception is thrown if you try to add fields to a <code>Scalar</code> type</li>
<li>Exception is thrown on invalid type name</li>
</ul>
</li>
<li>Schema builder now creates a valid GraphQL type name for generic types</li>
<li>Enum types are now added to the schema as a typed <code>SchemaType&lt;T&gt;</code> instance. Meaning you can fetch them using <code>schema.Type&lt;MyEnum&gt;()</code></li>
<li>Fix #181 - Schema builder now correctly respects <code>SchemaBuilderOptions.IgnoreTypes</code>. Note it compares names against the <code>Type.FullName</code></li>
<li>Fix #182 - Add missing dotnet scalar type for <code>char</code>. By default this is added as a schema scalar type named <code>Char</code> so the client can decide how to handle it. Over the wire it will serialize as a string (default for <code>System.Text.Json</code>). You can change default scalars and mappings by using the <code>PreBuildSchemaFromContext</code> action when adding your schema</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="services.AddGraphQLSchema&lt;TContext&gt;(options =&gt; {
  options.PreBuildSchemaFromContext = schema =&gt;
  {
      // remove and/or add scalar types or mappings here. e.g.
      schema.AddScalarType&lt;KeyValuePair&lt;string, string&gt;&gt;(&quot;StringKeyValuePair&quot;, &quot;Represents a pair of strings&quot;);
  };
})"><pre class="notranslate"><code>services.AddGraphQLSchema&lt;TContext&gt;(options =&gt; {
  options.PreBuildSchemaFromContext = schema =&gt;
  {
      // remove and/or add scalar types or mappings here. e.g.
      schema.AddScalarType&lt;KeyValuePair&lt;string, string&gt;&gt;("StringKeyValuePair", "Represents a pair of strings");
  };
})
</code></pre></div>
<ul dir="auto">
<li>When generating a field name for the field that takes an ID argument if the name generated matches the current field EntityGraphQL will add <code>ById</code> to the field name. E.g. a property <code>List&lt;LinePath&gt; Line { get; set; }</code> previously would try to add the <code>line: [LinePath]</code> field with no arguments and another field named <code>line(id: ID!): LinePath</code>. This causes an error. EntityGraphQL will name add <code>lineById(id: ID!): LinePath</code>. This is because the singularized version of "line" is "line".</li>
<li>In built field extensions now check if their extra types have already been added by using <code>Type</code> instead of name allowing you to add them with your own descriptions etc.</li>
<li>Fix mutations without any mutation arguments would incorrectly include the query context as an argument</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">3.0.2</h1><a id="user-content-302" class="anchor" aria-label="Permalink: 3.0.2" href="#302"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-58" class="anchor" aria-label="Permalink: Fixes" href="#fixes-58"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>InputValue</code> type was being registered under wrong name #184</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">3.0.1</h1><a id="user-content-301" class="anchor" aria-label="Permalink: 3.0.1" href="#301"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-59" class="anchor" aria-label="Permalink: Fixes" href="#fixes-59"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Input Types were incorrectly getting field arguments added when using <code>AutoCreateFieldWithIdArguments</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">3.0.0</h1><a id="user-content-300" class="anchor" aria-label="Permalink: 3.0.0" href="#300"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking changes</h2><a id="user-content-breaking-changes-10" class="anchor" aria-label="Permalink: Breaking changes" href="#breaking-changes-10"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>IDirectiveProcessor</code> now requires a <code>List&lt;ExecutableDirectiveLocation&gt; On { get; }</code> to define where the directive is allowed to be used</li>
<li>Removed obsolete <code>ISchemaType.BaseType</code>. Use <code>ISchemaType.BaseTypes</code></li>
<li>Cleaned up <code>SchemaType</code> constructors - using <code>GqlTypeEnum</code> instead of many boolean flags</li>
<li>Removed obsolete <code>SchemaProvider.AddInheritedType&lt;TBaseType&gt;</code></li>
<li>Removed the instance parameter from <code>AddMutationsFrom</code> and friends. Mutation "controllers" are now always created per request like an asp.net controller. Use DI for any constructor parameters</li>
<li>Renamed <code>ISchemaType.AddBaseType</code> to <code>ISchemaType.Implements</code> to align with GraphQL language
<ul dir="auto">
<li><code>ISchemaType.Implements</code> will throw an exception if you try to implement a non-interface</li>
</ul>
</li>
<li>Renamed <code>ISchemaType.AddAllBaseTypes</code> to <code>ISchemaType.ImplementAllBaseTypes</code> to align with GraphQL language</li>
<li><code>Create</code> &amp; <code>FromObject</code> on <code>SchemaBuilder</code> now take option classes to configure the create of the schema through reflection
<ul dir="auto">
<li><code>ISchemaType.AddAllFields</code> also takes the option class to configure it's behavior</li>
<li><code>ISchemaType.AddAllFields</code> default behavior now auto adds any complex types found really reflection the properties &amp; fields and will add those to the schema</li>
</ul>
</li>
<li>Added new option when building a schema with <code>SchemaBuilder.FromObject</code> - <code>AutoCreateInterfaceTypes</code>. Defaults to <code>false</code>. If <code>true</code> any abstract classes or interfaces on types reflected with be added as Interfaces in the schema. This is useful if you expose lists of entities on a base/interface type.</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-24" class="anchor" aria-label="Permalink: Changes" href="#changes-24"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>ToGraphQLSchemaString</code> now outputs directives in the schema</li>
<li>#154 - Dynamically generated types used in the expressions now include the field name the type is being built for to aid in debugging issues</li>
<li>#146 - Allow GraphQL mutation arguments as separate arguments in the method signature. Avoiding the need to create the mutation argument classes. e.g.</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="[GraphQLMutation]
public Person AddPersonSeparateArguments(string name, List&lt;string&gt; names, InputObject nameInput, Gender? gender)
{
  // ...
}

[GraphQLMutation]
public Person AddPersonSingleArgument(InputObject nameInput)
{
  // ...
}"><pre class="notranslate"><code>[GraphQLMutation]
public Person AddPersonSeparateArguments(string name, List&lt;string&gt; names, InputObject nameInput, Gender? gender)
{
  // ...
}

[GraphQLMutation]
public Person AddPersonSingleArgument(InputObject nameInput)
{
  // ...
}
</code></pre></div>
<p dir="auto">Turn into</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="type Mutation {
  addPersonSeparateArguments(name: String, names: [String!], nameInput: InputObject, gender: Gender): Person
  addPersonSingleArgument(nameInput: InputObject): Person
}"><pre class="notranslate"><code>type Mutation {
  addPersonSeparateArguments(name: String, names: [String!], nameInput: InputObject, gender: Gender): Person
  addPersonSingleArgument(nameInput: InputObject): Person
}
</code></pre></div>
<ul dir="auto">
<li>#160 - Nested data annotations for validation is now supported</li>
<li>Main <code>EntityGraphQL</code> package now targets <code>net6.0;net5.0;netstandard2.1</code></li>
<li>#170 - EntityGraphQL now replaces query context expressions in service fields by matching the expression instance it extracted. This allows for more complex expressions when passing data to a service field</li>
<li>Added support for <a href="https://github.com/graphql/graphql-spec/pull/825" data-hovercard-type="pull_request" data-hovercard-url="/graphql/graphql-spec/pull/825/hovercard">@oneOf Input Types</a>. Mark an input type with <code>GraphQLOneOfAttribute</code> and EntityGraphQL will mark the type with <code>@oneOf</code> in the schema and validate the input meets the requirements on execution</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-60" class="anchor" aria-label="Permalink: Fixes" href="#fixes-60"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#171 inheritance support for nested properties / conditional fields</li>
<li>#176 - allow fully qualified enums in the filter query language</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.3.2</h1><a id="user-content-232" class="anchor" aria-label="Permalink: 2.3.2" href="#232"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-61" class="anchor" aria-label="Permalink: Fixes" href="#fixes-61"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #159 - SchemaBuilder will no longer try to create schema fields for <code>const</code> fields on mutation args or input types</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.3.1</h1><a id="user-content-231" class="anchor" aria-label="Permalink: 2.3.1" href="#231"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-62" class="anchor" aria-label="Permalink: Fixes" href="#fixes-62"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>#163 - Fix to handle null property in a nested object when processing a System.Text.Json deserialised query document</li>
<li>#164 - Fix to support inline fragments in a fragment</li>
<li>#166 - Add missing <code>!=</code> operator in the filter expression language and make sure precedence is correct for logic operators</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.3.0</h1><a id="user-content-230" class="anchor" aria-label="Permalink: 2.3.0" href="#230"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-25" class="anchor" aria-label="Permalink: Changes" href="#changes-25"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>AddMutationsFrom</code> now can use the <code>ServiceProvider</code> instance to create the mutation class allowing dependency injection at the constructor level like Controllers.</li>
<li>You can still provide an instance of the mutation class that will be used instead which is the same behavior as previous, however this method is considered obsolete and will be removed in a future version. We suggest you utilse the ServiceProvider to register your mutation classes with your desired lifetime.</li>
<li>Allow types to inherit from multiple base classes/interfaces</li>
<li>Cleanup SchemaType to use an enum instead of lots of boolean type variables. Previous constructor is obsolete</li>
<li>Cleanup Interfaces api - added a <code>AddAllBaseTypes</code>, <code>AddBaseType</code> and <code>AddBaseType(string)</code> which provides a lot more flexibility. See updated docs</li>
<li>Added support for Inline Fragments for types that have interfaces</li>
<li><code>ToGraphQLSchemaString</code> now orders types and fields by name for consistency regardless of order of fields added and to reduce differences when diffing the schema</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-63" class="anchor" aria-label="Permalink: Fixes" href="#fixes-63"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #120 - Error when using <code>schema.RemoveTypeAndAllFields</code> and a field of the removing type had a type that has not been added to the schema</li>
<li>Fix #143 - Error building a null check expression in certain cases.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.2.0</h1><a id="user-content-220" class="anchor" aria-label="Permalink: 2.2.0" href="#220"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-26" class="anchor" aria-label="Permalink: Changes" href="#changes-26"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>FromObject</code> / default schema generator now adds single fields within non root-level fields. E.g. if a root-level field is a list of <code>people</code> and each person has a list of <code>projects</code> (and projects has an id) is will create a field on <code>project(id)</code> field on person</li>
<li>Add support for nullable reference types - meaning the correct GraphQL schema nullable definitions are generated. @bzbetty</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-64" class="anchor" aria-label="Permalink: Fixes" href="#fixes-64"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix generation of singular field with <code>id</code> arguments on list fields that use a paging extension when generating a schema. @bzbetty</li>
<li>Fix - when adding Mutation argument types only search for public instance properties. @breyed</li>
<li>Fix interface query introspection. @bzbetty</li>
<li>Fix #137 - multiple line endings were used in the schema output</li>
<li>Fix - make sure we use an array for arguments when expected instead of a list&lt;&gt;</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.1.5</h1><a id="user-content-215" class="anchor" aria-label="Permalink: 2.1.5" href="#215"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix null exception in service field from an object field</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.1.4</h1><a id="user-content-214" class="anchor" aria-label="Permalink: 2.1.4" href="#214"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #123 do not output types with no fields in the schema definition</li>
<li>Fix issue calling <code>ToList</code> in an expression that then used a <code>IQueryable</code> <code>FirstOrDefault</code> or friends. Resulting in an invalid expression at runtime</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.1.3</h1><a id="user-content-213" class="anchor" aria-label="Permalink: 2.1.3" href="#213"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix - Throw an error if your query document defines a non-null variable and a null value is supplied</li>
<li>Service fields that return a list of items are now wrapped in a null check expression like service fields that return a single object are</li>
<li>Fix - Object fields not included in the schema could be returned when the selection set was missing from the query. Now missing selection sets on list or object fields in queries throw an error. Selection sets are required in graphql queries for non scalar/enum field types. Thanks @breyed</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.1.2</h1><a id="user-content-212" class="anchor" aria-label="Permalink: 2.1.2" href="#212"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix - issue with a field using a static member e.g. DateTime.MaxValue</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.1.1</h1><a id="user-content-211" class="anchor" aria-label="Permalink: 2.1.1" href="#211"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix - issue where a nullable value was incorrectly being called</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.1.0</h1><a id="user-content-210" class="anchor" aria-label="Permalink: 2.1.0" href="#210"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Added support for interfaces - thanks @bzbetty</li>
<li>Added <code>EntityGraphQLException</code> - use this to throw exceptions and add more error data to the error result via extensions</li>
<li><code>GraphQLValidator</code> now supports adding custom data via the extensions field</li>
<li><code>ResolveWithService</code> methods will throw an exception if the expression returns <code>Task</code> as we need the result. Use <code>.GetAwaiter().GetResult()</code>. Expression do not support <code>async</code>/<code>await</code> as it is a compiler feature and we need the actual result to build the expression and return the data</li>
<li>Fix using QueryFilter with an empty string treats it as no value - i.e. no filter</li>
<li>Fix - the type of an array variable defined as required <code>[Type!]!</code> was incorrectly reflected</li>
<li>Fix - service type's field used in a field's expression was not being extracted into the select. E.g. service field <code>User.project</code> has an expression requiring the <code>user.id</code> which is not included in the GraphQL query.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.0.3</h1><a id="user-content-203" class="anchor" aria-label="Permalink: 2.0.3" href="#203"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix thread safety issue with cached queries</li>
<li>Fix support for using arrays in field argument definitions</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.0.2</h1><a id="user-content-202" class="anchor" aria-label="Permalink: 2.0.2" href="#202"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>fix regression where non-required (nullable) document variables would be set their non-nullable default value. E.g. <code>Guid</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.0.1</h1><a id="user-content-201" class="anchor" aria-label="Permalink: 2.0.1" href="#201"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix regression where non service fields in service fields were not being pulled forward to the stage one expression execution.</li>
<li>Fix regression where services were not be passed to a mutation with no arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">2.0.0</h1><a id="user-content-200" class="anchor" aria-label="Permalink: 2.0.0" href="#200"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Breaking changes</h2><a id="user-content-breaking-changes-11" class="anchor" aria-label="Permalink: Breaking changes" href="#breaking-changes-11"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Interface for Field Extensions now are passed a flag telling the extension if this is pre or post the call with service fields</li>
<li><code>GetExpression</code> in Field Extensions is passed the parent IGraphQLNode - useful when your extension changed the original shape of the object graph, like the paging extensions</li>
<li><code>services.AddGraphQLSchema</code> adopts a more ASP.NET style <code>options</code> callback overload to configure the creation of the schema</li>
<li><code>MapGraphQL</code> implementation now returns <code>400</code> Bad Request status code if the query results contains errors, as a bad query was sent</li>
<li>Directive interface for building custom directives has changed</li>
<li><code>UseSort</code> field extension now takes an array of <code>SortInput&lt;T&gt;</code> so order of sorts is used</li>
<li>Parsing floats/doubles/decimals now uses <code>CultureInfo.InvariantCulture</code>
Clean up on the schema building APIs to make them more consistent, documented and concise</li>
<li>Fix #89 - Remove JSON.NET dependency - This means internally if EntityGraphQL hits a <code>JObject</code> or <code>JToken</code> it does not know what to do with them. Make sure <code>QueryRequest.Variables</code> are fully deserialized. I.e. do not have any <code>JObject</code>/<code>JToken</code>s in there. Deserialize them to nested <code>Dictionary&lt;string, object&gt;</code>.</li>
</ul>
<p dir="auto">If you use the EntityGraphQL.AspNet package and the <code>MapGraphQL()</code> method you do not need to worry about anything. EntityGraphQL.AspNet uses <code>System.Text.Json</code> and handles the nested <code>JsonElement</code>s with a custom type converter.</p>
<p dir="auto">If you are directly using <code>SchemaProvider.ExecuteRequest()</code> (i.e. from a Controller or elsewhere), and you are using <code>Newtonsoft.Json</code> to deserialize the incoming <code>QueryRequest</code> you can add a custom converter to your schema to handle nested <code>JObject</code>/<code>JToken</code>s when encountered in query variables.</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="schema.AddCustomTypeConverter(new JObjectTypeConverter());
schema.AddCustomTypeConverter(new JTokenTypeConverter());"><pre class="notranslate"><code>schema.AddCustomTypeConverter(new JObjectTypeConverter());
schema.AddCustomTypeConverter(new JTokenTypeConverter());
</code></pre></div>
<p dir="auto">See the <a href="https://github.com/EntityGraphQL/EntityGraphQL/blob/main/src/tests/EntityGraphQL.Tests/SerializationTests.cs">serialization tests for an example</a>.</p>
<ul dir="auto">
<li>Remove the <code>WithService()</code> method used inside a field expression and replace it with <code>ResolveWithService&lt;TService&gt;()</code> on the field for easier discovery in your IDE. Example</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="schema.Type&lt;Person&gt;().AddField(&quot;age&quot;, &quot;A persons age&quot;)
  .ResolveWithService&lt;AgeService&gt;(
      (person, ageService) =&gt; ageService.GetAge(person.Birthday)
  );"><pre class="notranslate"><code>schema.Type&lt;Person&gt;().AddField("age", "A persons age")
  .ResolveWithService&lt;AgeService&gt;(
      (person, ageService) =&gt; ageService.GetAge(person.Birthday)
  );
</code></pre></div>
<ul dir="auto">
<li>Clean up of <code>SchemaType</code> APIs to add/replace/remove fields.
<ul dir="auto">
<li>Remove <code>SchemaProvider.Add/ReplaceField</code> methods.
<ul dir="auto">
<li>Use <code>SchemaProvider.Query().Add/ReplaceField()</code> or <code>SchemaProvider.UpdateQuery(queryType =&gt; {})</code> to make changes to the root Query type in the schema</li>
</ul>
</li>
<li>Additions to the <code>Field</code> API to add more uncommon functionality to chaining methods</li>
<li>Remove <code>SchemaProvider.UpdateQueryType()</code>, use <code>SchemaProvider.UpdateQuery(type =&gt; {})</code></li>
<li>Remove <code>SchemaProvider.TypeHasField()</code></li>
<li>Remove <code>SchemaProvider.GetQueryFields()</code> - use <code>SchemaProvider.Query.GetFields()</code></li>
<li>Renamed <code>GetGraphQLSchema()</code> to <code>ToGraphQLSchemaString()</code></li>
<li>Renamed <code>AddMutationFrom()</code> to <code>AddMutationsFrom()</code></li>
<li>Removed Obsolete methods:
<ul dir="auto">
<li><code>RequiresAllClaims</code> replaced by <code>RequiresAllRoles</code></li>
<li><code>RequiresAnyClaim</code> replaced by <code>RequiresAnyRole</code></li>
<li><code>ExecuteQuery</code> replaced by <code>ExecuteRequest</code></li>
<li><code>ExecuteQueryAsync</code> replaced by <code>ExecuteRequestAsync</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Changes</h2><a id="user-content-changes-27" class="anchor" aria-label="Permalink: Changes" href="#changes-27"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Support for persisted queries (enabled by default) - <a href="https://www.apollographql.com/docs/react/api/link/persisted-queries/" rel="nofollow">https://www.apollographql.com/docs/react/api/link/persisted-queries/</a></li>
<li>Support for a query cache of recent queries. Enabled by default. Caches the result of compiling the query document string to an AST. Execution is then applying the document level variables, building the expressions then execution</li>
<li>Better support for nested objects in <code>QueryVariables</code></li>
<li>Performance enhancements when building internal types for arguments</li>
<li>Performance of compiling and building expressions has been improved - it is about 2 times faster. Note this is just building the expressions, not executing them which triggers your services/EF/etc</li>
<li>Reduction in memory allocation when compiling queries by around 30%</li>
<li>You can no add/define mutation methods as delegates/anonymous functions etc.</li>
<li>You can now use <code>[Range]</code> &amp; <code>[StringLength]</code> attributes on your arguments for more validation options</li>
<li>Introduced custom argument validators - a simple way to act on field arguments before execution. Great for custom/complex input validation on arguments. Use <code>field.AddValidator()</code> or the <code>ArgumentValidatorAttribute</code> attribute.</li>
<li>Using <code>AddAllFields(true)</code> on an <code>InputType</code> will add the sub-complex class types as <code>InputType</code>s as well</li>
<li>New option to auto add other classes found on mutation arguments as <code>InputType</code>s when adding a mutation</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Fixes</h2><a id="user-content-fixes-65" class="anchor" aria-label="Permalink: Fixes" href="#fixes-65"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix - Paging field extensions are now thread safe to support multiple different queries being run on the same field at the same time</li>
<li>Fix #101 - allow custom de/serialization of incoming requests and outgoing responses, via. services <code>IGraphQLRequestDeserializer</code> &amp; <code>IGraphQLResponseSerializer</code>.
<ul dir="auto">
<li><em>Note that the objects created in the resulting <code>QueryResult</code> have fields named like the fields in the schema which is controlled by the <code>fieldNamer</code> function provided to the <code>SchemaProvider</code> which defaults to GraphQL "standard" (fields camelCase, types PascalCase)</em></li>
</ul>
</li>
<li>Fix field name looks up that were not using the <code>fieldNamer</code> function in <code>SchemaProvider</code></li>
<li>Fix bug where compiler would loop through all available arguments even if it already found the matching type</li>
<li>Fix argument types of unsigned short/int/long</li>
<li>Fix #72 - Handling dictionaries introspection - note it will try to create a scalar type <code>KeyValuePair&lt;T1, T2&gt;</code> in the schema by default</li>
<li>Fix handling argument types of unsigned short/int/long</li>
<li>Fix issue parsing float/double argument values</li>
<li>Fix null exception with mutations returning a selection with a list field</li>
<li>Fix directives on mutation fields</li>
<li>Fix #110 - Field using the wrong sort input object when the fields are the same</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.2.1</h1><a id="user-content-121" class="anchor" aria-label="Permalink: 1.2.1" href="#121"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #99 issue using the MapGraphQL() extension method</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.2.0</h1><a id="user-content-120" class="anchor" aria-label="Permalink: 1.2.0" href="#120"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>New option to disable introspection. Use <code>introspectionEnabled</code> parameter when creating <code>SchemaProvider</code>. Defaults to <code>true</code>.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.1.2</h1><a id="user-content-112" class="anchor" aria-label="Permalink: 1.1.2" href="#112"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #96 - processing int/long/short as list arguments in mutations - thanks @pierrebelin</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.1.1</h1><a id="user-content-111" class="anchor" aria-label="Permalink: 1.1.1" href="#111"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #92 - error processing mutation arguments that are lists/arrays</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.1.0</h1><a id="user-content-110" class="anchor" aria-label="Permalink: 1.1.0" href="#110"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Authorization now supports using ASP.NET policies from the <code>EntityGraphQL.AspNet</code> package
<ul dir="auto">
<li><code>IAuthorizationService</code> is resolved to check authorization and needs to be registered</li>
<li><code>[Authorize]</code> attribute can be used instead of the <code>[GraphQLAuthorize]</code> attribute when using <code>EntityGraphQL.AspNet</code></li>
</ul>
</li>
<li>Fix - <code>RequiredAttribute</code> results in the field being not null in the generated GraphQL Schema</li>
<li>Fix - Schema introspection was incorrectly returning <code>__typename</code> for Enums</li>
<li><code>UseConnectionPagingAttribute</code> takes optional arguments for default page size and max page size</li>
<li><code>UseOffsetPagingAttribute</code> takes optional arguments for default page size and max page size</li>
<li><code>EntityGraphQL.AspNet</code> now uses System.Text.Json for de/serialization internally. It still supports JSON.NET objects in the variable object (as well as System.Text.Json types)</li>
<li>Fix #19 - you can mark fields (including mutations) as deprecated using the dotnet <code>[Obsolete]</code> attribute or the <code>IField.Deprecate(reason)</code> method in the schema building</li>
<li>Fix #88 - If an argument is marked as required and not provided in the query request an error is raised. Mark arguments optional via the API, or make it a nullable type or give it a default value</li>
<li>Query used in ConnectionPaging now resolves itself using <code>.ToList()</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Obsolete - will be removed 2.x</h2><a id="user-content-obsolete---will-be-removed-2x" class="anchor" aria-label="Permalink: Obsolete - will be removed 2.x" href="#obsolete---will-be-removed-2x"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>RequireAnyClaim()</code> &amp; <code>RequireAllClaims()</code>. Use <code>RequireAnyRole()</code> &amp; <code>RequireAllRoles()</code> as the <code>ClaimTypes.Role</code> was used previously and this change makes it explicit</li>
<li><code>schema.ExecuteQueryAsync/ExecuteQuery(QueryRequest, TContextType, IServiceProvider, ClaimsIdentity, ExecutionOptions)</code>. Use the <code>ExecuteRequest</code>/<code>ExecuteRequestAsync</code> methods that take the full <code>ClaimsPrincipal</code> as we now support authorization with policies</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.0.3</h1><a id="user-content-103" class="anchor" aria-label="Permalink: 1.0.3" href="#103"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #86. Mutations not correctly checking required authorization on the mutation field directly</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.0.2</h1><a id="user-content-102" class="anchor" aria-label="Permalink: 1.0.2" href="#102"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix - <code>RequiredAttribute</code> results in the field being not null in the generated GraphQL Schema</li>
<li>Fix issue with expressions failing in a high throughput, threaded use case (heavily hit API)</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.0.1</h1><a id="user-content-101" class="anchor" aria-label="Permalink: 1.0.1" href="#101"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue passing optional enum arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">1.0.0</h1><a id="user-content-100" class="anchor" aria-label="Permalink: 1.0.0" href="#100"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>New extension methods to ease adding your schema to the service collection. See docs - <code>services.AddGraphQLSchema&lt;DemoContext&gt;(options =&gt; {})</code></li>
<li>New package EntityGraphQL.AspNet with extensions to easily expose a graphql endpoint with <code>MapGraphQL&lt;T&gt;()</code>.</li>
</ul>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="app.UseEndpoints(endpoints =&gt;
{
    endpoints.MapGraphQL&lt;DemoContext&gt;();
});"><pre><span class="pl-s1">app</span><span class="pl-kos">.</span><span class="pl-en">UseEndpoints</span><span class="pl-kos">(</span>endpoints <span class="pl-c1">=&gt;</span>
<span class="pl-kos">{</span>
    <span class="pl-s1">endpoints</span><span class="pl-kos">.</span><span class="pl-smi">MapGraphQL</span><span class="pl-c1">&lt;</span><span class="pl-smi">DemoContext</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<ul dir="auto">
<li>Fix issue reconnecting from a service field to the context</li>
<li>Fix issue when execution is split across non service fields and then with service fields and the first result is null</li>
<li>Fix issue using Connection/Offset paging on collection fields that were not on the query root</li>
<li>Fix issue using Connection/Offset paging on collection fields that have service fields</li>
<li>Option to add default sort when using <code>UseSort()</code> field extension</li>
<li>Fix service fields in an inline fragment selection</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.70.0</h1><a id="user-content-0700" class="anchor" aria-label="Permalink: 0.70.0" href="#0700"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Introduction of fields extensions to encapsulate common field logic and apply it to many fields. See update <a href="https://entitygraphql.github.io" rel="nofollow">docs</a>. New built in field extensions
<ul dir="auto">
<li><code>UseConnectionPaging()</code> which when applied to a collection field modifies the field to implement the GraphQL Connection spec for paging data with metadata</li>
<li><code>UseOffsetPaging()</code> which when applied to a collection field modifies the field to implement an offset style paging structure</li>
<li><code>UseFilter()</code> which when applied to a collection adds a <code>filter</code> argument that takes an expression</li>
<li><code>UseSort()</code> which when applied to a collection adds a <code>sort</code> arguments that takes fields to sort the collection by</li>
</ul>
</li>
<li>Replaced Antlr based GraphQL query lexer/parser with HotChocolate.Language Parser. Parsing of query documents is <em>much</em> faster!</li>
<li>You can now directly use lists (<code>[12,32]</code>, etc) and objects (<code>{name: "Frank"}</code>) as arguments in the query document. Although it is still recommended to use the <code>Variables</code> in the query</li>
<li>Added benchmarks to help explore performance issues in expression building (What we do with expressions is fast, but found the Antlr Parser was slow)</li>
<li>Directives now supported on fragment spreads</li>
</ul>
<p dir="auto"><em>Breaking changes</em></p>
<ul dir="auto">
<li>EntityGraphQL now targets netstandard2.1</li>
<li>Some optional arguments in <code>ExecuteQuery</code> moved to an Options object</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.69.0</h1><a id="user-content-0690" class="anchor" aria-label="Permalink: 0.69.0" href="#0690"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>New docs <a href="https://entitygraphql.github.io/introduction" rel="nofollow">https://entitygraphql.github.io/introduction</a></li>
<li>Added <code>SchemaProvider.UpdateType&lt;T&gt;(Action&lt;SchemaType&lt;T&gt;&gt; updateFunc)</code> to better help "contain" schema types. Instead of</li>
</ul>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="schema.Type&lt;MyType&gt;().AddField(...);
schema.Type&lt;MyType&gt;().AddField(...);
schema.Type&lt;MyType&gt;().AddField(...);"><pre class="notranslate"><code>schema.Type&lt;MyType&gt;().AddField(...);
schema.Type&lt;MyType&gt;().AddField(...);
schema.Type&lt;MyType&gt;().AddField(...);
</code></pre></div>
<p dir="auto">we have</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="schema.UpdateType&lt;MyType&gt;(t =&gt; {
  t.AddField(...);
  t.AddField(...);
  t.AddField(...);
});"><pre class="notranslate"><code>schema.UpdateType&lt;MyType&gt;(t =&gt; {
  t.AddField(...);
  t.AddField(...);
  t.AddField(...);
});
</code></pre></div>
<p dir="auto">Similar for <code>SchemaProvider.AddType&lt;T&gt;(string name, string description, Action&lt;SchemaType&lt;T&gt;&gt; updateFunc)</code></p>
<ul dir="auto">
<li>You can pass a <code>ILogger&lt;SchemaProvider&lt;T&gt;&gt;</code> when creating a <code>SchemaProvider</code>. Exceptions etc. will be logged</li>
<li>Added <code>Take&lt;TSource&gt;(this IQueryable&lt;TSource&gt; source, int? count)</code> that works on <code>IQueryable&lt;T&gt;</code> to support EF translation</li>
</ul>
<p dir="auto"><em>Breaking changes</em></p>
<ul dir="auto">
<li>EntityGraphQL now targets netstandard2.0</li>
<li>Big refactor/clean - hopefully easier to follow the post Antlr (compiled graphql) output - see <code>GraphQL*Field</code> classes</li>
<li>Support for dotnet Entity Framework Core 3.1+ when using other services in the schema (<code>WithService()</code>)</li>
<li>Removed the <code>Where&lt;TSource&gt;(this IEnumerable&lt;TSource&gt; source, EntityQueryType&lt;TSource&gt; filter)</code> helper. Use the <code>WhereWhen</code> methods that support <code>EntityQueryType</code></li>
</ul>
<p dir="auto">To support EF 3.x as a base schema context we now build and execute expressions in 2 stages. See the updated readme section How EntityGraphQL handles WithService().</p>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.68.1</h1><a id="user-content-0681" class="anchor" aria-label="Permalink: 0.68.1" href="#0681"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Update Humanizer.Core dependency which resolves issue with newer dotnet core</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.68.0</h1><a id="user-content-0680" class="anchor" aria-label="Permalink: 0.68.0" href="#0680"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue where <code>FieldNamer</code> was not being consistently used. Thanks @AnderssonPeter</li>
<li>Make sure we include inner exceptions on errors. Thanks @AnderssonPeter</li>
<li>Added string and long parsing for DateTime and DateTimeOffset. Thanks @GravlLift</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.67.0</h1><a id="user-content-0670" class="anchor" aria-label="Permalink: 0.67.0" href="#0670"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>As per GraphQL spec commas are optional (previously EntityGraphQL expected them in field/mutation arguments)</li>
</ul>
<p dir="auto"><em>Breaking changes</em></p>
<ul dir="auto">
<li>errors property on query result should not be present on the response if there are no errors per the graphQL specification.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.66.1</h1><a id="user-content-0661" class="anchor" aria-label="Permalink: 0.66.1" href="#0661"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix bug with using <code>WithService()</code> when you require the schema context service again to create a link between services</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.66.0</h1><a id="user-content-0660" class="anchor" aria-label="Permalink: 0.66.0" href="#0660"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>When using services other than the schema context in fields (that return a single object not a Enumerable) the methods/services are no longer executed multiple times. (issue #36). Notes below</li>
<li>When a string matches a date time it will be converted to a <code>DateTime</code> object. Useful when using the <code>ArgumentHelper.EntityQuery</code> for advanced filtering. Regex matches <code>"yyyy-MM-dd HH:mm:ss.fffffffzzz"</code>, <code>"yyyy-MM-dd HH:mm:ss"</code>, <code>"yyyy-MM-dd"</code> with the separator between date and time being either <code> </code> or <code>T</code></li>
<li><code>EntityQueryCompiler</code> (used in <code>ArgumentHelper.EntityQuery</code>) supports Enums</li>
<li><code>fieldNamer</code> used in mutations too</li>
</ul>
<p dir="auto"><em>Breaking changes</em></p>
<ul dir="auto">
<li>Cleaning up the API. The optional <code>isNullable</code> argument is removed from the <code>AddField()</code> methods. Use <code>IsNullable(bool)</code> method on the <code>Field</code> class or the <code>[GraphQLNotNull]</code> attribute.</li>
<li>Cleaning up the API. <code>fieldNamer</code> argument removed from methods in <code>SchemaProvider</code> and <code>SchemaType</code>. Pass in a <code>fieldNamer</code> func to the constructor of <code>SchemaProvider</code> which will be used when it is auto creating fields. If you pass it in via <code>SchemaBuilder.FromObject</code> it will set it on the <code>SchemaProvider</code> created.</li>
<li><code>AddCustomScalarType()</code> removed. Previously marked as obsolete. Use <code>AddScalarType()</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Notes of services fix</h2><a id="user-content-notes-of-services-fix" class="anchor" aria-label="Permalink: Notes of services fix" href="#notes-of-services-fix"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">If you build a field like so</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="schema.AddField(&quot;myField&quot;, ctx =&gt; WithService((IMyService srv) =&gt; srv.DoSomething(ctx)));

// Register the service with DI somewhere
public class MyService: IMyService {
  public SomeObject DoSomething(Context ctx)
  {
    // do something
    return data;
  }
}"><pre><span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-en">AddField</span><span class="pl-kos">(</span><span class="pl-s">"myField"</span><span class="pl-kos">,</span> ctx <span class="pl-c1">=&gt;</span> <span class="pl-s1">WithService</span><span class="pl-kos">(</span><span class="pl-kos">(</span><span class="pl-smi">IMyService</span> <span class="pl-s1">srv</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span>

<span class="pl-c">// Register the service with DI somewhere</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">MyService</span><span class="pl-c1">:</span> <span class="pl-smi">IMyService</span> <span class="pl-kos">{</span>
  <span class="pl-k">public</span> <span class="pl-s1">SomeObject</span> <span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-smi">Context</span> <span class="pl-s1">ctx</span><span class="pl-kos">)</span>
  <span class="pl-kos">{</span>
    <span class="pl-c">// do something</span>
    <span class="pl-k">return</span> <span class="pl-s1">data</span><span class="pl-kos">;</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">With a query like</p>
<div class="highlight highlight-source-graphql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  myField { field1 field 2 }
}"><pre>{
  <span class="pl-v">myField</span> { <span class="pl-v">field1</span> <span class="pl-v">field</span> 2 }
}</pre></div>
<p dir="auto">We use to build an expression like so</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="srv.DoSomething(ctx) == null ? null : new {
  field1 = srv.DoSomething(ctx).field1,
  field2 = srv.DoSomething(ctx).field2
}"><pre><span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">)</span> <span class="pl-c1">==</span> <span class="pl-c1">null</span> <span class="pl-c1">?</span> <span class="pl-c1">null</span> <span class="pl-c1">:</span> <span class="pl-k">new</span> <span class="pl-kos">{</span>
  <span class="pl-s1">field1</span> <span class="pl-c1">=</span> <span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-s1">field1</span><span class="pl-kos">,</span>
  <span class="pl-s1">field2</span> <span class="pl-c1">=</span> <span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-s1">field2</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">We now wrap this in a method call that only calls <code>DoSomething(ctx)</code> a single time Which looks like this</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="(ctx, srv) =&gt; NullCheckWrapper(srv.DoSomething(ctx), parameterValues, selection); // simplifying here

// Again a simified example of what NullCheckWrapper does
public object NullCheckWrapper(Expression&lt;Func&lt;Context, IMyService&gt;&gt; baseValue, object[] values, LambdaExpression selection)
{
  // null check
  if (baseValue == null)
    return null;
  // build the select on the object
  var result = selection.Compile().DynamicInvoke(baseValue);
}"><pre><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">,</span> <span class="pl-s1">srv</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">NullCheckWrapper</span><span class="pl-kos">(</span><span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">parameterValues</span><span class="pl-kos">,</span> <span class="pl-s1">selection</span><span class="pl-kos">)</span><span class="pl-c1"></span><span class="pl-kos">;</span> <span class="pl-c">// simplifying here</span>

<span class="pl-c">// Again a simified example of what NullCheckWrapper does</span>
<span class="pl-k">public</span> <span class="pl-smi">object</span> <span class="pl-en">NullCheckWrapper</span><span class="pl-kos">(</span><span class="pl-smi">Expression</span><span class="pl-c1">&lt;</span><span class="pl-smi">Func</span><span class="pl-c1">&lt;</span><span class="pl-smi">Context</span><span class="pl-kos">,</span> <span class="pl-smi">IMyService</span><span class="pl-c1">&gt;</span><span class="pl-c1">&gt;</span> <span class="pl-s1">baseValue</span><span class="pl-kos">,</span> <span class="pl-smi">object</span><span class="pl-kos">[</span><span class="pl-kos">]</span> <span class="pl-s1">values</span><span class="pl-kos">,</span> <span class="pl-smi">LambdaExpression</span> <span class="pl-s1">selection</span><span class="pl-kos">)</span>
<span class="pl-kos">{</span>
  <span class="pl-c">// null check</span>
  <span class="pl-k">if</span> <span class="pl-kos">(</span><span class="pl-s1">baseValue</span> <span class="pl-c1">==</span> <span class="pl-c1">null</span><span class="pl-kos">)</span>
    <span class="pl-k">return</span> <span class="pl-c1">null</span><span class="pl-kos">;</span>
  <span class="pl-c">// build the select on the object</span>
  <span class="pl-k">var</span> <span class="pl-s1">result</span> <span class="pl-c1">=</span> <span class="pl-s1">selection</span><span class="pl-kos">.</span><span class="pl-en">Compile</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">DynamicInvoke</span><span class="pl-kos">(</span><span class="pl-s1">baseValue</span><span class="pl-kos">)</span><span class="pl-kos">;</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">This works with services used deeper in the graph too. Example</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="schema.Type&lt;Person&gt;().AddField(&quot;complexField&quot;, (person) =&gt; DoSomething(person.Id));"><pre><span class="pl-s1">schema</span><span class="pl-kos">.</span><span class="pl-smi">Type</span><span class="pl-c1">&lt;</span><span class="pl-smi">Person</span><span class="pl-c1">&gt;</span><span class="pl-kos">(</span><span class="pl-kos">)</span><span class="pl-kos">.</span><span class="pl-en">AddField</span><span class="pl-kos">(</span><span class="pl-s">"complexField"</span><span class="pl-kos">,</span> <span class="pl-kos">(</span><span class="pl-s1">person</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">person</span><span class="pl-kos">.</span><span class="pl-s1">Id</span><span class="pl-kos">)</span><span class="pl-kos">)</span><span class="pl-kos">;</span></pre></div>
<p dir="auto">GraphQL</p>
<div class="highlight highlight-source-graphql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  people {
    complexField {
      field1
      field1
    }
  }
}"><pre>{
  <span class="pl-v">people</span> {
    <span class="pl-v">complexField</span> {
      <span class="pl-v">field1</span>
      <span class="pl-v">field1</span>
    }
  }
}</pre></div>
<p dir="auto">The wrapped expression looks like this</p>
<div class="highlight highlight-source-cs notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="(ctx, srv) =&gt; ctx.People.Select(person =&gt; new {
  complexField = NullCheckWrapper(srv.DoSomething(person.Id), parameterValues, selection); // simplifying here
})"><pre><span class="pl-kos">(</span><span class="pl-s1">ctx</span><span class="pl-kos">,</span> <span class="pl-s1">srv</span><span class="pl-kos">)</span> <span class="pl-c1">=&gt;</span> <span class="pl-s1">ctx</span><span class="pl-kos">.</span><span class="pl-s1">People</span><span class="pl-kos">.</span><span class="pl-en">Select</span><span class="pl-kos">(</span>person <span class="pl-c1">=&gt;</span> <span class="pl-k">new</span> <span class="pl-kos">{</span>
  <span class="pl-s1">complexField</span> <span class="pl-c1">=</span> <span class="pl-s1">NullCheckWrapper</span><span class="pl-kos">(</span><span class="pl-s1">srv</span><span class="pl-kos">.</span><span class="pl-en">DoSomething</span><span class="pl-kos">(</span><span class="pl-s1">person</span><span class="pl-kos">.</span><span class="pl-s1">Id</span><span class="pl-kos">)</span><span class="pl-kos">,</span> <span class="pl-s1">parameterValues</span><span class="pl-kos">,</span> <span class="pl-s1">selection</span><span class="pl-kos">)</span><span class="pl-kos">;</span> <span class="pl-c">// simplifying here</span>
<span class="pl-kos">}</span><span class="pl-kos">)</span></pre></div>
<p dir="auto">This has been tested with EF Core and works well.</p>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.65.0</h1><a id="user-content-0650" class="anchor" aria-label="Permalink: 0.65.0" href="#0650"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>You can now secure whole types in the schema. Add the <code>[GraphQLAuthorize("claim-name")]</code> to the class or use <code>schema.AddType(...).RequiresAllClaims("some-claim")</code>, <code>schema.AddType(...).RequiresAnyClaim("some-claim")</code></li>
<li>Add <code>GetField(Expression&lt;Func&lt;TBaseType, object&gt;&gt;)</code> overload</li>
<li>operation name is optional for a <code>query</code> operation as per GraphQL spec if it is the only operation in the request</li>
<li>Breaking - removed the <code>authorizeClaims</code> argument from <code>AddField()</code>. Please use <code>field.RequiresAllClaims("some-claim")</code>, <code>field.RequiresAnyClaim("some-claim")</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.64.0</h1><a id="user-content-0640" class="anchor" aria-label="Permalink: 0.64.0" href="#0640"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Change - descriptions generated for a <code>.graphql</code> schema file now use the multiple line triple-quote <code>"""</code></li>
<li>Fix issue where an <code>WithService()</code> expression is wrapped in a <code>UnaryExpression</code> and we fail to get the lambda</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.63.0</h1><a id="user-content-0630" class="anchor" aria-label="Permalink: 0.63.0" href="#0630"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Expose a <code>SchemaProvider.ExecuteQueryAsync()</code></li>
<li>Fix #53 support mutations with no arguments</li>
<li>With the above fix the context and/or the mutation arguments parameters are optional in your mutation method</li>
<li>the parameters in the mutation methods are no longer required to follow a position</li>
<li><code>SchemaProvider.AddCustomScalarType()</code> is deprecated, use <code>AddScalarType</code></li>
<li>Directvies are now included in schema introspection</li>
<li>Fix #52 - sometimes incorrect types generated for schema introspection or the GraphQL schema file format</li>
<li>Refactor type information held in the schema. This mean return types etc are evaluated at schema creation time not execution. If you add a field that requires a type as an Argument or return type, that type must already be in the schema</li>
<li>You can now provide a field namer function to name the generated fields when using <code>SchemaBuilder.FromObject()</code>, <code>ISchemaType.AddAllFields()</code> or <code>SchemaProvider.PopulateFromContext()</code></li>
</ul>
<p dir="auto"><em>Breaking changes</em></p>
<ul dir="auto">
<li>The class that represents the mutation arguments must be marked with the <code>MutationArgumentsAttribute</code> either at the class level or the parameter</li>
<li><code>SchemaProvider</code> now adds a default <code>Date</code> scalar type in the schema that maps to/from the C# <code>DateTime</code> class. If you were previously adding that you'll get an error on type existing. Use <code>SchemaProvider.RemoveType&lt;DateTime&gt;()</code> to remove it and add it with a different name</li>
<li>Type mapping information (<code>AddTypeMapping()</code>) are evaluated at schema creation time. You may need to add mappings before creating the rest of your schema</li>
</ul>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">0.63.0-beta1 to 0.63.0-beta2</h2><a id="user-content-0630-beta1-to-0630-beta2" class="anchor" aria-label="Permalink: 0.63.0-beta1 to 0.63.0-beta2" href="#0630-beta1-to-0630-beta2"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Removed the empty <code>IMutationArguments</code> in favor for a <code>MutationArgumentsAttribute</code> on the parameter or the class</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.62.0</h1><a id="user-content-0620" class="anchor" aria-label="Permalink: 0.62.0" href="#0620"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Support async mutation methods</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.61.0</h1><a id="user-content-0610" class="anchor" aria-label="Permalink: 0.61.0" href="#0610"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add model validation for mutation arguments. See updated readme</li>
<li>Fix issue with services not correctly being included when the field is used in a fragment</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.60.0</h1><a id="user-content-0600" class="anchor" aria-label="Permalink: 0.60.0" href="#0600"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add support for directives. Supported by default are <code>@include(if: Boolean!)</code> and <code>@skip(if: Boolean!)</code>. You can add your own that make changes to the expression pre-execution</li>
<li>Added syntax support for subscription queries (they compile/no error but do not execute or work)</li>
<li>Removed support for older syntax of complex queries that is not GQL standard</li>
<li>Refactored <code>GraphQLVistor</code> and friends to make it easier to follow what is happening (I hope). See CONTRIBUTING.md for some notes</li>
<li>From my testing the compiling and expression building is 15-20% faster than before (still network and or the DB calls are the largest)</li>
<li>Allow <code>enum</code> values in the query schema (e.g. as an argument)</li>
<li>Ignore static properties &amp; fields on the object passed to <code>SchemaBuilder.FromObject</code> - they were not supported and threw errors anyway</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.50.1</h1><a id="user-content-0501" class="anchor" aria-label="Permalink: 0.50.1" href="#0501"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Name all <code>ParameterExpression</code>s as EF 3.1 expects a name (can throw an error)</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.50.0</h1><a id="user-content-0500" class="anchor" aria-label="Permalink: 0.50.0" href="#0500"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix claims check when required claims are empty</li>
<li>Fix error message state which claims are required for the given access error</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.50.0-beta1</h1><a id="user-content-0500-beta1" class="anchor" aria-label="Permalink: 0.50.0-beta1" href="#0500-beta1"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Sorry about the quick turn around</li>
<li>Breaking changes
<ul dir="auto">
<li>Using DI inspired design now instead of the <code>TArg</code></li>
<li>Use <code>WithService</code> helper to let EntityGraphQL know which services you require e.g. in an <code>AddField</code> use <code>(db, p) =&gt; WithService&lt;IUserProvider&gt;(users =&gt; users.Load(p.id))</code></li>
<li>For mutations just add the services as arguments (at the end) as you typically do in dotnet</li>
<li><code>schema.ExecuteQuery()</code> takes an <code>IServiceProvider</code> which it uses to look up required services like <code>IUserProvider</code> above</li>
</ul>
</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.40.0</h1><a id="user-content-0400" class="anchor" aria-label="Permalink: 0.40.0" href="#0400"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Breaking changes
<ul dir="auto">
<li>Trying to clean up the interface for creating a schema and allowing an easier way to get services in mutations and field selections</li>
<li>Rename <code>MappedSchemaProvider</code> to <code>SchemaProvider</code></li>
<li>Remove extension <code>object.QueryObject()</code> and require a more specific call to <code>SchmeaProvider.ExecuteQuery()</code></li>
<li><code>SchmeaProvider.ExecuteQuery()</code> takes a <code>TArg</code> type which is an argument that will be passed to all field selections and mutation methods. This replaces <code>mutationArgs</code> in <code>object.QueryObject()</code> and lets both mutations and field selections access other services non-statically (e.g. via <code>TArg</code> being an <code>IServiceProvider</code>). See updated readme and demo project</li>
<li><code>SchemaProvider</code> is now create using <code>SchemaBuilder.Create&lt;TContext, TArg&gt;()</code> or <code>SchemaBuilder.Create&lt;TContext&gt;()</code> giving you a short cut for not providing a <code>TArg</code></li>
<li><code>SchemaBuilder.FromObject&lt;TContext, TArg&gt;()</code> now takes second type argument for the <code>TArg</code> value. Also <code>SchemaBuilder.FromObject&lt;TContext&gt;()</code> shortcut</li>
</ul>
</li>
<li>Fix bug where EntityQuery arguments were being cached in the schema</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.32.1</h1><a id="user-content-0321" class="anchor" aria-label="Permalink: 0.32.1" href="#0321"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add <code>ContextId</code> to the ignored list in <code>SchemaBuilder</code> for EF 3.1</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.32.0</h1><a id="user-content-0320" class="anchor" aria-label="Permalink: 0.32.0" href="#0320"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Clean up <code>LinqExtensions</code>, removing the overloads that take <code>LambdaExpression</code>s. Use <code>.AsQueryable().Where(someExpressionVar)</code> instead. It works better with EF and other LinqProviders.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.31.0</h1><a id="user-content-0310" class="anchor" aria-label="Permalink: 0.31.0" href="#0310"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Breaking change - Multiple <code>[GraphQLAuthorize]</code> mean all polices are required and supplying multiple in a single <code>[GraphQLAuthorize]</code> mean any</li>
<li>Do not generate an empty mutation type if there are no mutations</li>
<li>Fix query introspection to output mapped types correctly</li>
<li>Support multiple queries in a request with the operation name of which one to run - e.g. how GraphiQL handles multiple queries</li>
<li>Update error messages</li>
<li>Clean up some APIs - <code>SchemaType.AddAllFields()</code>, <code>Field.RequiresAllClaims()</code>, <code>Field.RequiresAnyClaim()</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.30.0</h1><a id="user-content-0300" class="anchor" aria-label="Permalink: 0.30.0" href="#0300"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Initial support for Authorization and Security in the schema - see updated readme and provide feedback</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.29.0</h1><a id="user-content-0290" class="anchor" aria-label="Permalink: 0.29.0" href="#0290"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Support <code>fragment</code> statements in other positions in the query</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.28.2</h1><a id="user-content-0282" class="anchor" aria-label="Permalink: 0.28.2" href="#0282"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix error with <code>EntityQueryType&lt;&gt;</code> as a field argument not being defined as a <code>String</code> in introspection</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.28.1</h1><a id="user-content-0281" class="anchor" aria-label="Permalink: 0.28.1" href="#0281"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue introduced in 0.28 when using the <code>RequiredField&lt;&gt;</code> type</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.28.0</h1><a id="user-content-0280" class="anchor" aria-label="Permalink: 0.28.0" href="#0280"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Only convert a string matching a <code>Guid</code> when the arg type is a <code>Guid</code> or <code>Guid?</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.27.2</h1><a id="user-content-0272" class="anchor" aria-label="Permalink: 0.27.2" href="#0272"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue where a non-required EntityQueryType Filter throw an error if it wasn't supplied</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.27.1</h1><a id="user-content-0271" class="anchor" aria-label="Permalink: 0.27.1" href="#0271"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Better support mutations that return an object, not a list</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.27.0</h1><a id="user-content-0270" class="anchor" aria-label="Permalink: 0.27.0" href="#0270"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Introspection query <code>__type(name: "")</code> now correctly returns an object not an array</li>
<li><code>[Description("")]</code> attributes on <code>enum</code> fields are now read into the schema</li>
<li>Fix issue where introspection query would have duplicate types for enum types</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.26.0</h1><a id="user-content-0260" class="anchor" aria-label="Permalink: 0.26.0" href="#0260"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>ISchemaType.AddAllFields</code> requires a schema as it can add newly discovered types to that schema</li>
<li><code>ISchemaType.AddAllFields</code> by default adds new <code>enum</code> types to the schema if found as a field type</li>
<li><code>ISchemaType.AddAllFields</code> can (off by default) add new complex types to the schema if found as a field type</li>
<li><code>Schema.Type&lt;TType&gt;()</code> now searches by <code>TType</code> not <code>typeof(TType).Name</code>. Allowing you to add a type with a different name but still get the typed <code>SchemaType&lt;T&gt;</code> back</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.25.0</h1><a id="user-content-0250" class="anchor" aria-label="Permalink: 0.25.0" href="#0250"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add the ability to add enum types to the schema</li>
<li>The auto schema builder now adds enum types it finds to the schema by default</li>
<li>Enum values are referenced by the string value, if using JSON.NET you will want to use <code>[JsonConverter(typeof(StringEnumConverter))]</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.24.0</h1><a id="user-content-0240" class="anchor" aria-label="Permalink: 0.24.0" href="#0240"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add <code>GraphQLNotNullAttribute</code> to mark fields as not nullable in the graphql schema</li>
<li>By default when generating a <code>.schema</code> file <code>IEnumerable&lt;T&gt;</code> will generate the element type as not nullable. E.g. <code>[T!]</code>. Use <code>GraphQLElementTypeNullableAttribute</code> to mark it that the list can contain null items</li>
<li>Support mapping <code>decimal</code> to <code>number</code></li>
<li>Better support for defining nullable or non-nullable types</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.23.3</h1><a id="user-content-0233" class="anchor" aria-label="Permalink: 0.23.3" href="#0233"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Allow adding a mapping type to a type that already exists in the schema. E.g. you might add an input type <code>Point</code> and want to map the dotnet type <code>Point</code> to it.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.23.2</h1><a id="user-content-0232" class="anchor" aria-label="Permalink: 0.23.2" href="#0232"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>fix issue with required type in an array e.g. <code>[ID!]</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.23.1</h1><a id="user-content-0231" class="anchor" aria-label="Permalink: 0.23.1" href="#0231"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>fix issue with generated required types</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.23.0</h1><a id="user-content-0230" class="anchor" aria-label="Permalink: 0.23.0" href="#0230"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Output fields as required in .graphql schemas</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.22.0</h1><a id="user-content-0220" class="anchor" aria-label="Permalink: 0.22.0" href="#0220"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>You can now specify if a field is ignored for queries, mutations or both (if you're sharing DTOs/objects)</li>
<li>Don't output the meta information of the schema in the schema definition</li>
<li>Prevent duplicate scalar types in schema generation</li>
<li>Fix issue where <code>mutation</code> keyword could not have any white space before it</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.21.0</h1><a id="user-content-0210" class="anchor" aria-label="Permalink: 0.21.0" href="#0210"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Change, make ENUMs a <code>Int</code> type as dotnet serialises them like that</li>
<li>Fix input types missing for the SDL schema generated</li>
<li>Fix issue where mutation args has repeating <code>ofType</code> data in introspection</li>
<li>Fix issue where InputTypes would be duplicated in introspection query results</li>
<li>Fix issue where <code>ToList()</code> was being called deep in expressions causing issues with EF</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.20.0</h1><a id="user-content-0200" class="anchor" aria-label="Permalink: 0.20.0" href="#0200"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add the ability to add custom scalar types to the schema</li>
<li>Fix a bug where introspection queries were in correct if you have a List/Array in your mutation type</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.19.1</h1><a id="user-content-0191" class="anchor" aria-label="Permalink: 0.19.1" href="#0191"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix a bug where mutation arg objects retained values from previous mutation - i.e if the next call to that mutation didn't provide some optional arguments</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.19.0</h1><a id="user-content-0190" class="anchor" aria-label="Permalink: 0.19.0" href="#0190"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>QueryObject()</code> calls <code>ToList()</code> on any lists so if you are using something like EF all queries will be evaluated on <code>QueryObject()</code>, not just the ones that return a single object (as they call <code>FirstOrDefault()</code>). This is more consistent, the result contains all your data (regardless of underlying ORM or not) and not a miz of evaluated and non-evaluated.</li>
<li>Add <code>RemoveTypeAndAllFields()</code> on <code>MappedSchemaProvider</code> to more easily clean up a schema that was auto created by <code>SchemaBuilder.FromObject&lt;T&gt;()</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.18.4</h1><a id="user-content-0184" class="anchor" aria-label="Permalink: 0.18.4" href="#0184"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix case matching of arguments in mutations. EntityGraphQL defaults to turning dotnet <code>UpperCaseFieldsAndProperties</code> to <code>camelCaseFieldsAndProperties</code> as this was the intention with the change in 0.18.0</li>
<li>Enum values are as defined. E.g. if you have an enum <code>Meter</code> you can use <code>"Meter"</code> not <code>"meter"</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.18.3</h1><a id="user-content-0183" class="anchor" aria-label="Permalink: 0.18.3" href="#0183"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>map Int16 and UInt16 to Int</li>
<li>Fix issue where argument names were not case sensitive (the Breaking change introduced in 0.18)</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.18.2</h1><a id="user-content-0182" class="anchor" aria-label="Permalink: 0.18.2" href="#0182"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix <code>kind</code> in schema introspection query to not have <code>!</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.18.1</h1><a id="user-content-0181" class="anchor" aria-label="Permalink: 0.18.1" href="#0181"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Update dependencies (JSON.NET)</li>
<li>Fix some small casing issues</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.18.0</h1><a id="user-content-0180" class="anchor" aria-label="Permalink: 0.18.0" href="#0180"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Support for schema introspection. Top two fields (<code>__schema</code> and <code>__type(name: String!)</code>) are implemented. There are some things missing where we currently don't support the feature (directives). GraphiQL introspection query executes and you can navigate the example. Big thanks to @JTravis76 for starting the work.</li>
<li>Implement #18 default argument values in GQL operations <code>mutation MyMutation($arg: String = "hey defaults") { ... }</code></li>
<li>Breaking change - If you purely use <code>SchemaBuilder.FromObject()</code> it now creates all field names <code>lowerCaseCamel</code> and type names <code>UpperCamelCase</code> like the GraphQL defaults. Also since GraphQL is case sensitive I have enforced that. You <em>may</em> need to update some queries to match casing</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.17.0</h1><a id="user-content-0170" class="anchor" aria-label="Permalink: 0.17.0" href="#0170"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add the option to have other parameters passed into a mutation method. Very useful for IServiceProvider or other services your mutations require</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.16.2</h1><a id="user-content-0162" class="anchor" aria-label="Permalink: 0.16.2" href="#0162"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue where duplicate fields (say from a query and a fragment) would cause an error</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.16.1</h1><a id="user-content-0161" class="anchor" aria-label="Permalink: 0.16.1" href="#0161"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Bring inner exception details up</li>
<li>Fix issue where fields that require arguments fail (See Paging example in Demo)</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.16.0</h1><a id="user-content-0160" class="anchor" aria-label="Permalink: 0.16.0" href="#0160"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add support for full queries on a mutation result. See readme for more details (you return an Expression)</li>
<li>Initial support for GraphQL fragments. fix #2</li>
<li>Fix issues with using field arguments deeper in the graph schema</li>
<li>Add support for <code>operationName</code> in the <code>GraphQLRequest</code></li>
<li>Add support for graphql comments</li>
<li>Add GraphiQL web interface to the demo app</li>
<li>Add <code>GraphQLIgnore</code> attribute to ignore a field on a Type for the automatic schema builder</li>
<li>fix bug where it would sometimes try to give an <code>UInt64</code> to an argument that required an <code>Int32</code></li>
<li>(beta) Add <code>dotnet gql</code> command to generate a schema from your current DBContext. See readme for more info</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.8</h1><a id="user-content-0158" class="anchor" aria-label="Permalink: 0.15.8" href="#0158"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add <code>WhereWhen()</code> to the extension helpers</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.7</h1><a id="user-content-0157" class="anchor" aria-label="Permalink: 0.15.7" href="#0157"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix bug in handling converting a string into an enum</li>
<li>Fix issue looking up types internally when working with anonymous types</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.6</h1><a id="user-content-0156" class="anchor" aria-label="Permalink: 0.15.6" href="#0156"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue with incorrectly checking for generic types</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.5</h1><a id="user-content-0155" class="anchor" aria-label="Permalink: 0.15.5" href="#0155"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue with array types in the dynamically generated type for lambdas</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.4</h1><a id="user-content-0154" class="anchor" aria-label="Permalink: 0.15.4" href="#0154"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue where the generated GraphQL schema had the incorrect type for arrays (e.g. double[])</li>
<li>Fix issue with <code>SchemaBuilder.FromObject</code> building invalid types from arrays.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.3</h1><a id="user-content-0153" class="anchor" aria-label="Permalink: 0.15.3" href="#0153"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix an issue where it would generate an invalid field name if we couldn't singularize the name</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.2</h1><a id="user-content-0152" class="anchor" aria-label="Permalink: 0.15.2" href="#0152"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Move the query results into a <code>QueryResult</code> class so it is easier to work with</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15.1</h1><a id="user-content-0151" class="anchor" aria-label="Permalink: 0.15.1" href="#0151"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix #11 - failure to use <code>RequiredField</code> with types like <code>uint</code> - it would try to initialise it with an <code>int</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.15</h1><a id="user-content-015" class="anchor" aria-label="Permalink: 0.15" href="#015"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Remove old code that supported multiple fields with the same name and different arguments. GraphQL doesn't support that and it caused a bug where it would sometimes not find the field you want. You can implement optional arguments and build a complex field like <code>schemaProvider.AddField("myField", new {name = (string)null, id = (Guid?)null}, (db, param) =&gt; param.id.HasValue ? db.MyEntities.Where(l =&gt; l.Id == param.id).FirstOrDefault() : db.MyEntities.Where(l =&gt; l.Name == param.name).FirstOrDefault(), "Returns an Entity object by ID or a match on the name argument");</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.14.4</h1><a id="user-content-0144" class="anchor" aria-label="Permalink: 0.14.4" href="#0144"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Allow user to supply a type mapping for the generated GraphQL schema</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.14.3</h1><a id="user-content-0143" class="anchor" aria-label="Permalink: 0.14.3" href="#0143"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix an issue where we would some time identify a type as IEnumerable when it shouldn't have been</li>
<li>Allow <code>ReplaceField</code> on a sub type</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.14.2</h1><a id="user-content-0142" class="anchor" aria-label="Permalink: 0.14.2" href="#0142"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Convert enums correctly</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.14.1</h1><a id="user-content-0141" class="anchor" aria-label="Permalink: 0.14.1" href="#0141"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix SchemaGenerator to support arrays better</li>
<li>Support turning <code>QueryRequest</code> variables from JSON objects into their required objects</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.14.0</h1><a id="user-content-0140" class="anchor" aria-label="Permalink: 0.14.0" href="#0140"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Bring back <code>ReplaceField</code> as technically GraphQL doesn't support overloading, so if you're using tools like Apollo etc to generate code you need to only have unique fields</li>
<li>Added <code>GetGraphQLSchema</code> on the schema to return a <code>.graphql</code> schema file for input into tools like Apollo codegen</li>
<li>Add the option to add descriptions to Mutations</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.13.1</h1><a id="user-content-0131" class="anchor" aria-label="Permalink: 0.13.1" href="#0131"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue where operation name with no arguments failed</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.13.0</h1><a id="user-content-0130" class="anchor" aria-label="Permalink: 0.13.0" href="#0130"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Breaking change: Strings are now defined by double quotes <code>"</code> to fit in with GraphQL better</li>
<li>Added support to use a LINQ-style language as a argument in GraphQL. E.g the following GQL field, <code>{ users(filter: "active = true and age &gt; 20") { id name } }</code> can be defined with <code>schema.AddField("users", new {filter = EntityQuery&lt;User&gt;()}, (ctx, p) =&gt; ctx.Users.Where(p.filter), "Return filtered users")</code>. Letting you write that filter using any fields defined on the <code>User</code> object</li>
<li>Add <code>null</code>/<code>empty</code> constant for checking for null in EQL</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.12.1</h1><a id="user-content-0121" class="anchor" aria-label="Permalink: 0.12.1" href="#0121"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix bug converting Int values to double? values</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.12.0</h1><a id="user-content-0120" class="anchor" aria-label="Permalink: 0.12.0" href="#0120"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Support field "overloads" - fields with same name and different arguments.</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.11.0</h1><a id="user-content-0110" class="anchor" aria-label="Permalink: 0.11.0" href="#0110"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Renamed package EntityGraphQL to emphasizes that it implements GraphQL</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.10.1</h1><a id="user-content-0101" class="anchor" aria-label="Permalink: 0.10.1" href="#0101"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix issue with arrays and objects in variables parameter on the request</li>
<li>Better error messages when GraphQL arguments can't be mapped to an object</li>
<li>Validate required variables in operations are supplied in the variables dictionary</li>
<li>Fix potential issue with selecting sub object graphs</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.10.0</h1><a id="user-content-0100" class="anchor" aria-label="Permalink: 0.10.0" href="#0100"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Change the errors to appear in <code>errors</code> key along side <code>data</code> key as per GraphQL</li>
<li>Fix an issue when selecting fields from a mutation result</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.9.4</h1><a id="user-content-094" class="anchor" aria-label="Permalink: 0.9.4" href="#094"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Support selecting an object that may be null <code>{ person {name} }</code> <code>person</code> will be null if it does not exist</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.9.3</h1><a id="user-content-093" class="anchor" aria-label="Permalink: 0.9.3" href="#093"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Parameter types can be optional (no <code>!</code>)</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.9.2</h1><a id="user-content-092" class="anchor" aria-label="Permalink: 0.9.2" href="#092"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix type issues with mutation args</li>
<li>Change auto entity call with <code>id:</code> (e.g. <code>{ entity(id: 13)}</code>) to call the <code>First()</code> method last</li>
<li>Fix issue with selecting a one-to-one relation in a query</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.9.1</h1><a id="user-content-091" class="anchor" aria-label="Permalink: 0.9.1" href="#091"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Fix a issue where schema and method provider were not being passed down in <code>QueryObject</code></li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.9.0</h1><a id="user-content-090" class="anchor" aria-label="Permalink: 0.9.0" href="#090"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Add initial support for Mutations</li>
<li><code>,</code> between fields is optional like in GraphQL</li>
<li>Support <code>__typename</code> metadata</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.8.0</h1><a id="user-content-080" class="anchor" aria-label="Permalink: 0.8.0" href="#080"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li><code>Moved EntityQueryLanguage.DataApi</code> namespace to <code>EntityQueryLanguage.GraphQL</code> to better communicate that its intent is to support</li>
<li>Add support GraphQL arguments in fields. See updated readme</li>
<li>By default <code>SchemaBuilder.FromObject&lt;TType&gt;()</code> generates a non-plural field for any type with a public <code>Id</code> property, with the argument name of <code>id</code>. E.g. A field <code>people</code> that returns a <code>IEnumerable&lt;Person&gt;</code> will result in a <code>person(id)</code> field</li>
<li>Move results to field <code>data</code> in the resulting object to match GraphQL</li>
<li>Support the <code>query</code> keyword for graphql</li>
</ul>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">0.7.0</h1><a id="user-content-070" class="anchor" aria-label="Permalink: 0.7.0" href="#070"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<ul dir="auto">
<li>Added support for complex nested queries when using the <code>EFRelationshipHandler</code></li>
<li>Fix type caching issue causing exception on changing a sub query</li>
</ul>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

