gitextract_fy0ivb69/ ├── .formatter.exs ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ └── config.yml │ ├── dependabot.yml │ └── workflows/ │ ├── assets.yml │ ├── ci.yml │ └── npm-publish.yml ├── .gitignore ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── RELEASE.md ├── SECURITY.md ├── assets/ │ ├── js/ │ │ └── phoenix/ │ │ ├── ajax.js │ │ ├── channel.js │ │ ├── constants.js │ │ ├── index.js │ │ ├── longpoll.js │ │ ├── presence.js │ │ ├── push.js │ │ ├── serializer.js │ │ ├── socket.js │ │ ├── timer.js │ │ └── utils.js │ └── test/ │ ├── channel_test.js │ ├── longpoll_test.js │ ├── presence_test.js │ ├── serializer.js │ ├── serializer_test.js │ ├── socket_http_test.js │ └── socket_test.js ├── babel.config.json ├── config/ │ └── config.exs ├── eslint.config.mjs ├── guides/ │ ├── asset_management.md │ ├── authn_authz/ │ │ ├── api_authentication.md │ │ ├── authn_authz.md │ │ ├── mix_phx_gen_auth.md │ │ └── scopes.md │ ├── cheatsheets/ │ │ └── router.cheatmd │ ├── components.md │ ├── controllers.md │ ├── data_modelling/ │ │ ├── contexts.md │ │ ├── cross_context_boundaries.md │ │ ├── faq.md │ │ ├── in_context_relationships.md │ │ ├── more_examples.md │ │ └── your_first_context.md │ ├── deployment/ │ │ ├── deployment.md │ │ ├── fly.md │ │ ├── gigalixir.md │ │ ├── heroku.md │ │ └── releases.md │ ├── directory_structure.md │ ├── ecto.md │ ├── howto/ │ │ ├── custom_error_pages.md │ │ ├── file_uploads.md │ │ ├── swapping_databases.md │ │ ├── using_ssl.md │ │ └── writing_a_channels_client.md │ ├── introduction/ │ │ ├── community.md │ │ ├── installation.md │ │ ├── overview.md │ │ ├── packages_glossary.md │ │ └── up_and_running.md │ ├── json_and_apis.md │ ├── live_view.md │ ├── plug.md │ ├── real_time/ │ │ ├── channels.md │ │ └── presence.md │ ├── request_lifecycle.md │ ├── routing.md │ ├── security.md │ ├── telemetry.md │ └── testing/ │ ├── testing.md │ ├── testing_channels.md │ ├── testing_contexts.md │ └── testing_controllers.md ├── installer/ │ ├── .gitignore │ ├── README.md │ ├── lib/ │ │ ├── mix/ │ │ │ └── tasks/ │ │ │ ├── local.phx.ex │ │ │ ├── phx.new.ecto.ex │ │ │ ├── phx.new.ex │ │ │ └── phx.new.web.ex │ │ └── phx_new/ │ │ ├── ecto.ex │ │ ├── generator.ex │ │ ├── mailer.ex │ │ ├── project.ex │ │ ├── single.ex │ │ ├── umbrella.ex │ │ └── web.ex │ ├── mix.exs │ ├── recreate_default_css.exs │ ├── templates/ │ │ ├── phx_assets/ │ │ │ ├── app.css.eex │ │ │ ├── app.js.eex │ │ │ ├── daisyui-theme.js.eex │ │ │ ├── daisyui.js.eex │ │ │ ├── heroicons.js.eex │ │ │ ├── logo.svg.eex │ │ │ ├── topbar.js.eex │ │ │ └── tsconfig.json.eex │ │ ├── phx_ecto/ │ │ │ ├── data_case.ex.eex │ │ │ ├── formatter.exs.eex │ │ │ ├── repo.ex.eex │ │ │ └── seeds.exs.eex │ │ ├── phx_gettext/ │ │ │ ├── en/ │ │ │ │ └── LC_MESSAGES/ │ │ │ │ └── errors.po.eex │ │ │ ├── errors.pot.eex │ │ │ └── gettext.ex.eex │ │ ├── phx_mailer/ │ │ │ └── lib/ │ │ │ └── app_name/ │ │ │ └── mailer.ex.eex │ │ ├── phx_single/ │ │ │ ├── README.md.eex │ │ │ ├── config/ │ │ │ │ ├── config.exs.eex │ │ │ │ ├── dev.exs.eex │ │ │ │ ├── prod.exs.eex │ │ │ │ ├── runtime.exs.eex │ │ │ │ └── test.exs.eex │ │ │ ├── formatter.exs.eex │ │ │ ├── gitignore.eex │ │ │ ├── lib/ │ │ │ │ ├── app_name/ │ │ │ │ │ └── application.ex.eex │ │ │ │ ├── app_name.ex.eex │ │ │ │ └── app_name_web.ex.eex │ │ │ ├── mix.exs.eex │ │ │ └── test/ │ │ │ └── test_helper.exs.eex │ │ ├── phx_static/ │ │ │ ├── app.css │ │ │ ├── app.js │ │ │ ├── default.css │ │ │ └── robots.txt │ │ ├── phx_test/ │ │ │ ├── controllers/ │ │ │ │ ├── error_html_test.exs.eex │ │ │ │ ├── error_json_test.exs.eex │ │ │ │ └── page_controller_test.exs.eex │ │ │ └── support/ │ │ │ └── conn_case.ex.eex │ │ ├── phx_umbrella/ │ │ │ ├── README.md.eex │ │ │ ├── apps/ │ │ │ │ ├── app_name/ │ │ │ │ │ ├── README.md.eex │ │ │ │ │ ├── config/ │ │ │ │ │ │ └── config.exs.eex │ │ │ │ │ ├── formatter.exs.eex │ │ │ │ │ ├── gitignore.eex │ │ │ │ │ ├── lib/ │ │ │ │ │ │ ├── app_name/ │ │ │ │ │ │ │ └── application.ex.eex │ │ │ │ │ │ └── app_name.ex.eex │ │ │ │ │ ├── mix.exs.eex │ │ │ │ │ └── test/ │ │ │ │ │ └── test_helper.exs.eex │ │ │ │ └── app_name_web/ │ │ │ │ ├── README.md.eex │ │ │ │ ├── config/ │ │ │ │ │ ├── config.exs.eex │ │ │ │ │ ├── dev.exs.eex │ │ │ │ │ ├── prod.exs.eex │ │ │ │ │ ├── runtime.exs.eex │ │ │ │ │ └── test.exs.eex │ │ │ │ ├── formatter.exs.eex │ │ │ │ ├── gitignore.eex │ │ │ │ ├── lib/ │ │ │ │ │ ├── app_name/ │ │ │ │ │ │ └── application.ex.eex │ │ │ │ │ └── app_name.ex.eex │ │ │ │ ├── mix.exs.eex │ │ │ │ └── test/ │ │ │ │ └── test_helper.exs.eex │ │ │ ├── config/ │ │ │ │ ├── config.exs.eex │ │ │ │ ├── dev.exs.eex │ │ │ │ ├── extra_config.exs.eex │ │ │ │ ├── prod.exs.eex │ │ │ │ ├── runtime.exs.eex │ │ │ │ └── test.exs.eex │ │ │ ├── formatter.exs.eex │ │ │ ├── gitignore.eex │ │ │ └── mix.exs.eex │ │ ├── phx_web/ │ │ │ ├── components/ │ │ │ │ ├── core_components.ex.eex │ │ │ │ ├── layouts/ │ │ │ │ │ └── root.html.heex.eex │ │ │ │ └── layouts.ex.eex │ │ │ ├── controllers/ │ │ │ │ ├── error_html.ex.eex │ │ │ │ ├── error_json.ex.eex │ │ │ │ ├── page_controller.ex.eex │ │ │ │ ├── page_html/ │ │ │ │ │ └── home.html.heex.eex │ │ │ │ └── page_html.ex.eex │ │ │ ├── endpoint.ex.eex │ │ │ ├── router.ex.eex │ │ │ └── telemetry.ex.eex │ │ └── usage-rules/ │ │ ├── assets.md │ │ ├── phoenix.md │ │ └── project.md │ └── test/ │ ├── mix_helper.exs │ ├── phx_new_ecto_test.exs │ ├── phx_new_test.exs │ ├── phx_new_umbrella_test.exs │ ├── phx_new_web_test.exs │ └── test_helper.exs ├── integration_test/ │ ├── README.md │ ├── config/ │ │ └── config.exs │ ├── docker-compose.yml │ ├── docker.sh │ ├── mix.exs │ ├── test/ │ │ ├── code_generation/ │ │ │ ├── app_with_defaults_test.exs │ │ │ ├── app_with_mssql_adapter_test.exs │ │ │ ├── app_with_mysql_adapter_test.exs │ │ │ ├── app_with_no_options_test.exs │ │ │ ├── app_with_scopes_test.exs │ │ │ ├── app_with_sqlite3_adapter_test.exs │ │ │ └── umbrella_app_with_defaults_test.exs │ │ ├── support/ │ │ │ └── code_generator_case.ex │ │ └── test_helper.exs │ └── test.sh ├── jest.config.js ├── lib/ │ ├── mix/ │ │ ├── phoenix/ │ │ │ ├── context.ex │ │ │ ├── schema.ex │ │ │ └── scope.ex │ │ ├── phoenix.ex │ │ └── tasks/ │ │ ├── compile.phoenix.ex │ │ ├── phx.digest.clean.ex │ │ ├── phx.digest.ex │ │ ├── phx.ex │ │ ├── phx.gen.auth/ │ │ │ ├── hashing_library.ex │ │ │ ├── injector.ex │ │ │ └── migration.ex │ │ ├── phx.gen.auth.ex │ │ ├── phx.gen.cert.ex │ │ ├── phx.gen.channel.ex │ │ ├── phx.gen.context.ex │ │ ├── phx.gen.embedded.ex │ │ ├── phx.gen.ex │ │ ├── phx.gen.html.ex │ │ ├── phx.gen.json.ex │ │ ├── phx.gen.live.ex │ │ ├── phx.gen.notifier.ex │ │ ├── phx.gen.presence.ex │ │ ├── phx.gen.release.ex │ │ ├── phx.gen.schema.ex │ │ ├── phx.gen.secret.ex │ │ ├── phx.gen.socket.ex │ │ ├── phx.routes.ex │ │ └── phx.server.ex │ ├── phoenix/ │ │ ├── channel/ │ │ │ └── server.ex │ │ ├── channel.ex │ │ ├── code_reloader/ │ │ │ ├── mix_listener.ex │ │ │ ├── proxy.ex │ │ │ └── server.ex │ │ ├── code_reloader.ex │ │ ├── config.ex │ │ ├── controller/ │ │ │ └── pipeline.ex │ │ ├── controller.ex │ │ ├── debug.ex │ │ ├── digester/ │ │ │ ├── compressor.ex │ │ │ └── gzip.ex │ │ ├── digester.ex │ │ ├── endpoint/ │ │ │ ├── cowboy2_adapter.ex │ │ │ ├── render_errors.ex │ │ │ ├── supervisor.ex │ │ │ ├── sync_code_reload_plug.ex │ │ │ └── watcher.ex │ │ ├── endpoint.ex │ │ ├── exceptions.ex │ │ ├── flash.ex │ │ ├── logger.ex │ │ ├── naming.ex │ │ ├── param.ex │ │ ├── presence.ex │ │ ├── router/ │ │ │ ├── console_formatter.ex │ │ │ ├── helpers.ex │ │ │ ├── resource.ex │ │ │ ├── route.ex │ │ │ └── scope.ex │ │ ├── router.ex │ │ ├── socket/ │ │ │ ├── message.ex │ │ │ ├── pool_supervisor.ex │ │ │ ├── serializer.ex │ │ │ ├── serializers/ │ │ │ │ ├── v1_json_serializer.ex │ │ │ │ └── v2_json_serializer.ex │ │ │ └── transport.ex │ │ ├── socket.ex │ │ ├── test/ │ │ │ ├── channel_test.ex │ │ │ └── conn_test.ex │ │ ├── token.ex │ │ ├── transports/ │ │ │ ├── long_poll.ex │ │ │ ├── long_poll_server.ex │ │ │ └── websocket.ex │ │ └── verified_routes.ex │ └── phoenix.ex ├── mix.exs ├── package.json ├── priv/ │ ├── static/ │ │ ├── phoenix.cjs.js │ │ ├── phoenix.js │ │ └── phoenix.mjs │ └── templates/ │ ├── phx.gen.auth/ │ │ ├── AGENTS.md.eex │ │ ├── auth.ex.eex │ │ ├── auth_test.exs.eex │ │ ├── confirmation_live.ex.eex │ │ ├── confirmation_live_test.exs.eex │ │ ├── conn_case.exs.eex │ │ ├── context_fixtures_functions.ex.eex │ │ ├── context_functions.ex.eex │ │ ├── login_live.ex.eex │ │ ├── login_live_test.exs.eex │ │ ├── migration.ex.eex │ │ ├── notifier.ex.eex │ │ ├── registration_controller.ex.eex │ │ ├── registration_controller_test.exs.eex │ │ ├── registration_html.ex.eex │ │ ├── registration_live.ex.eex │ │ ├── registration_live_test.exs.eex │ │ ├── registration_new.html.heex.eex │ │ ├── routes.ex.eex │ │ ├── schema.ex.eex │ │ ├── schema_token.ex.eex │ │ ├── scope.ex.eex │ │ ├── session_confirm.html.heex.eex │ │ ├── session_controller.ex.eex │ │ ├── session_controller_test.exs.eex │ │ ├── session_html.ex.eex │ │ ├── session_new.html.heex.eex │ │ ├── settings_controller.ex.eex │ │ ├── settings_controller_test.exs.eex │ │ ├── settings_edit.html.heex.eex │ │ ├── settings_html.ex.eex │ │ ├── settings_live.ex.eex │ │ ├── settings_live_test.exs.eex │ │ └── test_cases.exs.eex │ ├── phx.gen.channel/ │ │ ├── channel.ex.eex │ │ ├── channel_case.ex.eex │ │ └── channel_test.exs.eex │ ├── phx.gen.context/ │ │ ├── access_no_schema.ex.eex │ │ ├── access_no_schema_scope.ex.eex │ │ ├── context.ex.eex │ │ ├── context_test.exs.eex │ │ ├── fixtures.ex.eex │ │ ├── fixtures_module.ex.eex │ │ ├── schema_access.ex.eex │ │ ├── schema_access_scope.ex.eex │ │ ├── test_cases.exs.eex │ │ └── test_cases_scope.exs.eex │ ├── phx.gen.embedded/ │ │ └── embedded_schema.ex.eex │ ├── phx.gen.html/ │ │ ├── controller.ex.eex │ │ ├── controller_test.exs.eex │ │ ├── edit.html.heex.eex │ │ ├── html.ex.eex │ │ ├── index.html.heex.eex │ │ ├── new.html.heex.eex │ │ ├── resource_form.html.heex.eex │ │ └── show.html.heex.eex │ ├── phx.gen.json/ │ │ ├── changeset_json.ex.eex │ │ ├── controller.ex.eex │ │ ├── controller_test.exs.eex │ │ ├── fallback_controller.ex.eex │ │ └── json.ex.eex │ ├── phx.gen.live/ │ │ ├── form.ex.eex │ │ ├── index.ex.eex │ │ ├── live_test.exs.eex │ │ └── show.ex.eex │ ├── phx.gen.notifier/ │ │ ├── notifier.ex.eex │ │ └── notifier_test.exs.eex │ ├── phx.gen.presence/ │ │ └── presence.ex.eex │ ├── phx.gen.release/ │ │ ├── Dockerfile.eex │ │ ├── dockerignore.eex │ │ ├── rel/ │ │ │ ├── migrate.bat.eex │ │ │ ├── migrate.sh.eex │ │ │ ├── server.bat.eex │ │ │ └── server.sh.eex │ │ └── release.ex.eex │ ├── phx.gen.schema/ │ │ ├── migration.exs.eex │ │ └── schema.ex.eex │ └── phx.gen.socket/ │ ├── socket.ex.eex │ └── socket.js.eex ├── test/ │ ├── fixtures/ │ │ ├── digest/ │ │ │ ├── cleaner/ │ │ │ │ ├── cache_manifest.json │ │ │ │ └── latest_not_most_recent_cache_manifest.json │ │ │ ├── compile/ │ │ │ │ ├── cache_manifest.json │ │ │ │ └── cache_manifest_upgrade.json │ │ │ └── priv/ │ │ │ ├── output/ │ │ │ │ ├── foo-288ea8c7954498e65663c817382eeac4.css │ │ │ │ └── foo-d978852bea6530fcd197b5445ed008fd.css │ │ │ └── static/ │ │ │ ├── app.js │ │ │ ├── css/ │ │ │ │ └── app.css │ │ │ ├── foo.css │ │ │ ├── manifest.json │ │ │ └── precompressed.js.br │ │ ├── hello.txt │ │ ├── ssl/ │ │ │ ├── cert.pem │ │ │ └── key.pem │ │ ├── templates/ │ │ │ ├── custom.foo │ │ │ ├── layout/ │ │ │ │ ├── app.html.eex │ │ │ │ └── root.html.eex │ │ │ ├── no_trim.text.eex │ │ │ ├── path.html.eex │ │ │ ├── safe.html.eex │ │ │ ├── show.html.eex │ │ │ ├── trim.html.eex │ │ │ └── user/ │ │ │ ├── index.html.eex │ │ │ ├── profiles/ │ │ │ │ └── admin.html.eex │ │ │ ├── render_template.html.eex │ │ │ └── show.json.exs │ │ └── views.exs │ ├── mix/ │ │ ├── phoenix_test.exs │ │ └── tasks/ │ │ ├── phx.digest.clean_test.exs │ │ ├── phx.digest_test.exs │ │ ├── phx.gen.auth/ │ │ │ └── injector_test.exs │ │ ├── phx.gen.auth_test.exs │ │ ├── phx.gen.cert_test.exs │ │ ├── phx.gen.channel_test.exs │ │ ├── phx.gen.context_test.exs │ │ ├── phx.gen.embedded_test.exs │ │ ├── phx.gen.html_test.exs │ │ ├── phx.gen.json_test.exs │ │ ├── phx.gen.live_test.exs │ │ ├── phx.gen.notifier_test.exs │ │ ├── phx.gen.presence_test.exs │ │ ├── phx.gen.release_test.exs │ │ ├── phx.gen.schema_test.exs │ │ ├── phx.gen.secret_test.exs │ │ ├── phx.gen.socket_test.exs │ │ ├── phx.routes_test.exs │ │ └── phx_test.exs │ ├── phoenix/ │ │ ├── channel_test.exs │ │ ├── code_reloader_test.exs │ │ ├── config_test.exs │ │ ├── controller/ │ │ │ ├── controller_test.exs │ │ │ ├── flash_test.exs │ │ │ ├── pipeline_test.exs │ │ │ └── render_test.exs │ │ ├── debug_test.exs │ │ ├── digester/ │ │ │ └── gzip_test.exs │ │ ├── digester_test.exs │ │ ├── endpoint/ │ │ │ ├── endpoint_test.exs │ │ │ ├── render_errors_test.exs │ │ │ ├── supervisor_test.exs │ │ │ └── watcher_test.exs │ │ ├── integration/ │ │ │ ├── endpoint_test.exs │ │ │ ├── long_poll_channels_test.exs │ │ │ ├── long_poll_socket_test.exs │ │ │ ├── websocket_channels_test.exs │ │ │ └── websocket_socket_test.exs │ │ ├── logger_test.exs │ │ ├── naming_test.exs │ │ ├── param_test.exs │ │ ├── presence_test.exs │ │ ├── router/ │ │ │ ├── console_formatter_test.exs │ │ │ ├── forward_test.exs │ │ │ ├── helpers_test.exs │ │ │ ├── pipeline_test.exs │ │ │ ├── resource_test.exs │ │ │ ├── resources_test.exs │ │ │ ├── route_test.exs │ │ │ ├── routing_test.exs │ │ │ └── scope_test.exs │ │ ├── socket/ │ │ │ ├── message_test.exs │ │ │ ├── socket_test.exs │ │ │ ├── transport_test.exs │ │ │ ├── v1_json_serializer_test.exs │ │ │ └── v2_json_serializer_test.exs │ │ ├── test/ │ │ │ ├── channel_test.exs │ │ │ └── conn_test.exs │ │ ├── token_test.exs │ │ └── verified_routes_test.exs │ ├── support/ │ │ ├── endpoint_helper.exs │ │ ├── http_client.exs │ │ ├── router_helper.exs │ │ └── websocket_client.exs │ └── test_helper.exs └── usage-rules/ ├── ecto.md ├── elixir.md ├── html.md ├── liveview.md └── phoenix.md