Current section
14 Versions
Jump to
Current section
14 Versions
Compare versions
119
files changed
+32576
additions
-56
deletions
| @@ -1,4 +1,82 @@ | |
| 1 | - # Used by "mix format" |
| 2 | - [ |
| 3 | - inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"] |
| 1 | + locals_without_parens = [ |
| 2 | + # Combo.Endpoint |
| 3 | + plug: 1, |
| 4 | + plug: 2, |
| 5 | + socket: 2, |
| 6 | + socket: 3, |
| 7 | + |
| 8 | + # Combo.Router |
| 9 | + connect: 3, |
| 10 | + connect: 4, |
| 11 | + delete: 3, |
| 12 | + delete: 4, |
| 13 | + forward: 2, |
| 14 | + forward: 3, |
| 15 | + forward: 4, |
| 16 | + get: 3, |
| 17 | + get: 4, |
| 18 | + head: 3, |
| 19 | + head: 4, |
| 20 | + match: 4, |
| 21 | + match: 5, |
| 22 | + options: 3, |
| 23 | + options: 4, |
| 24 | + patch: 3, |
| 25 | + patch: 4, |
| 26 | + pipeline: 2, |
| 27 | + pipe_through: 1, |
| 28 | + post: 3, |
| 29 | + post: 4, |
| 30 | + put: 3, |
| 31 | + put: 4, |
| 32 | + resources: 2, |
| 33 | + resources: 3, |
| 34 | + resources: 4, |
| 35 | + trace: 4, |
| 36 | + |
| 37 | + # Combo.Controller |
| 38 | + action_fallback: 1, |
| 39 | + |
| 40 | + # Combo.Template |
| 41 | + embed_templates: 1, |
| 42 | + embed_templates: 2, |
| 43 | + |
| 44 | + # Combo.HTML |
| 45 | + attr: 2, |
| 46 | + attr: 3, |
| 47 | + slot: 1, |
| 48 | + slot: 2, |
| 49 | + slot: 3, |
| 50 | + |
| 51 | + # Combo.Socket |
| 52 | + channel: 2, |
| 53 | + channel: 3, |
| 54 | + |
| 55 | + # Combo.Channel |
| 56 | + intercept: 1, |
| 57 | + |
| 58 | + # Combo.ConnTest |
| 59 | + assert_error_sent: 2, |
| 60 | + |
| 61 | + # Combo.ChannelTest |
| 62 | + assert_broadcast: 2, |
| 63 | + assert_broadcast: 3, |
| 64 | + assert_push: 2, |
| 65 | + assert_push: 3, |
| 66 | + assert_reply: 2, |
| 67 | + assert_reply: 3, |
| 68 | + assert_reply: 4, |
| 69 | + refute_broadcast: 2, |
| 70 | + refute_broadcast: 3, |
| 71 | + refute_push: 2, |
| 72 | + refute_push: 3, |
| 73 | + refute_reply: 2, |
| 74 | + refute_reply: 3, |
| 75 | + refute_reply: 4 |
| 76 | + ] |
| 77 | + |
| 78 | + [ |
| 79 | + locals_without_parens: locals_without_parens, |
| 80 | + export: [locals_without_parens: locals_without_parens], |
| 81 | + plugins: [Combo.HTML.Formatter] |
| 4 82 | ] |
| @@ -0,0 +1 @@ | |
| 1 | + # Changelog |
| @@ -0,0 +1,22 @@ | |
| 1 | + The MIT License |
| 2 | + |
| 3 | + Copyright (c) 2014-2025 Chris McCord |
| 4 | + Copyright (c) 2025-now Zeke Dou |
| 5 | + |
| 6 | + Permission is hereby granted, free of charge, to any person obtaining a copy |
| 7 | + of this software and associated documentation files (the "Software"), to deal |
| 8 | + in the Software without restriction, including without limitation the rights |
| 9 | + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| 10 | + copies of the Software, and to permit persons to whom the Software is |
| 11 | + furnished to do so, subject to the following conditions: |
| 12 | + |
| 13 | + The above copyright notice and this permission notice shall be included in all |
| 14 | + copies or substantial portions of the Software. |
| 15 | + |
| 16 | + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 17 | + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 18 | + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| 19 | + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| 20 | + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| 21 | + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| 22 | + SOFTWARE. |
| @@ -1,20 +1,65 @@ | |
| 1 1 | # Combo |
| 2 2 | |
| 3 | - An opinionated code generator for Phoenix. |
| 3 | + Combines the good parts of modern web development. |
| 4 4 | |
| 5 | - ## Installation |
| 5 | + [](https://github.com/combo-team/combo/actions/workflows/ci.yml) [](https://hex.pm/packages/combo) |
| 6 6 | |
| 7 | - If [available in Hex](https://hex.pm/docs/publish), the package can be installed |
| 8 | - by adding `combo` to your list of dependencies in `mix.exs`: |
| 7 | + ## About |
| 9 8 | |
| 10 | - ```elixir |
| 11 | - def deps do |
| 12 | - [ |
| 13 | - {:combo, "~> 0.1.0"} |
| 14 | - ] |
| 15 | - end |
| 9 | + Combo started as a fork of Phoenix. Its goals includes: |
| 10 | + |
| 11 | + - being a typical MVC framework. |
| 12 | + - integrating with the modern frontend tooling. |
| 13 | + - ... |
| 14 | + |
| 15 | + To archive the goals, it: |
| 16 | + |
| 17 | + - merges closely related dependencies, such as `phoenix_template`, `phoenix_html`, `phoenix_live_reload` etc. |
| 18 | + - merges the HEEx engine-related code from `phoenix_live_view` and completely removes the dependency on `phoenix_live_view`. |
| 19 | + - provides packages for integrating with the modern frontend tooling. |
| 20 | + - ... |
| 21 | + |
| 22 | + Although Combo is forked from Phoenix and will continue to track upstream changes in the future, full compatibility between the two is not guaranteed. |
| 23 | + |
| 24 | + ## Getting started |
| 25 | + |
| 26 | + Read the [documentation](https://hexdocs.pm/combo). |
| 27 | + |
| 28 | + ## Contributing |
| 29 | + |
| 30 | + We appreciate any contribution to Combo. Check our [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) and [CONTRIBUTING.md](CONTRIBUTING.md) guides for more information. We usually keep a list of features and bugs in the [issue tracker][4]. |
| 31 | + |
| 32 | + ### Building from source |
| 33 | + |
| 34 | + To build Combo only: |
| 35 | + |
| 36 | + ```console |
| 37 | + $ mix deps.get |
| 38 | + $ mix compile |
| 16 39 | ``` |
| 17 40 | |
| 18 | - Documentation can be generated with [ExDoc](https://github.com/elixir-lang/ex_doc) |
| 19 | - and published on [HexDocs](https://hexdocs.pm). Once published, the docs can |
| 20 | - be found at <https://hexdocs.pm/combo>. |
| 41 | + To build Combo.js only: |
| 42 | + |
| 43 | + ```console |
| 44 | + $ mix assets.deps.get |
| 45 | + $ mix assets.build |
| 46 | + ``` |
| 47 | + |
| 48 | + To build Combo and Combo.js together: |
| 49 | + |
| 50 | + ```bash |
| 51 | + $ mix setup |
| 52 | + $ mix compile |
| 53 | + $ mix assets.build |
| 54 | + ``` |
| 55 | + |
| 56 | + To build the documentation: |
| 57 | + |
| 58 | + ```console |
| 59 | + $ mix setup |
| 60 | + $ mix docs |
| 61 | + ``` |
| 62 | + |
| 63 | + ## License |
| 64 | + |
| 65 | + [MIT](LICENSE.txt) |
| @@ -1,12 +1,150 @@ | |
| 1 | - {<<"links">>,[{<<"GitHub">>,<<"https://github.com/cozy-elixir/combo">>}]}. |
| 1 | + {<<"links">>,[{<<"GitHub">>,<<"https://github.com/combo-team/combo">>}]}. |
| 2 2 | {<<"name">>,<<"combo">>}. |
| 3 | - {<<"version">>,<<"0.1.0">>}. |
| 4 | - {<<"description">>,<<"An opinionated code generator for Phoenix.">>}. |
| 5 | - {<<"elixir">>,<<"~> 1.14">>}. |
| 3 | + {<<"version">>,<<"0.2.0">>}. |
| 4 | + {<<"description">>,<<"Combines the good parts of modern web development.">>}. |
| 5 | + {<<"elixir">>,<<"~> 1.18">>}. |
| 6 6 | {<<"app">>,<<"combo">>}. |
| 7 | - {<<"licenses">>,[<<"Apache-2.0">>]}. |
| 8 | - {<<"requirements">>,[]}. |
| 7 | + {<<"licenses">>,[<<"MIT">>]}. |
| 9 8 | {<<"files">>, |
| 10 | - [<<"lib">>,<<"lib/combo.ex">>,<<".formatter.exs">>,<<"mix.exs">>, |
| 11 | - <<"README.md">>]}. |
| 9 | + [<<"lib">>,<<"lib/mix">>,<<"lib/mix/tasks">>, |
| 10 | + <<"lib/mix/tasks/combo_digest_clean.ex">>, |
| 11 | + <<"lib/mix/tasks/combo_gen_secret.ex">>,<<"lib/mix/tasks/combo_serve.ex">>, |
| 12 | + <<"lib/mix/tasks/combo_routes.ex">>,<<"lib/mix/tasks/combo.ex">>, |
| 13 | + <<"lib/mix/tasks/combo_digest.ex">>,<<"lib/combo.ex">>,<<"lib/combo">>, |
| 14 | + <<"lib/combo/filtered_params.ex">>,<<"lib/combo/naming.ex">>, |
| 15 | + <<"lib/combo/html.ex">>,<<"lib/combo/channel.ex">>, |
| 16 | + <<"lib/combo/verified_routes.ex">>,<<"lib/combo/safe_html.ex">>, |
| 17 | + <<"lib/combo/code_reloader">>,<<"lib/combo/code_reloader/proxy.ex">>, |
| 18 | + <<"lib/combo/code_reloader/mix_listener.ex">>, |
| 19 | + <<"lib/combo/code_reloader/server.ex">>,<<"lib/combo/param.ex">>, |
| 20 | + <<"lib/combo/live_reloader.ex">>,<<"lib/combo/test">>, |
| 21 | + <<"lib/combo/test/html_test.ex">>,<<"lib/combo/test/html_test">>, |
| 22 | + <<"lib/combo/test/html_test/dom.ex">>,<<"lib/combo/test/channel_test.ex">>, |
| 23 | + <<"lib/combo/test/conn_test.ex">>,<<"lib/combo/presence.ex">>, |
| 24 | + <<"lib/combo/logger.ex">>,<<"lib/combo/transports">>, |
| 25 | + <<"lib/combo/transports/long_poll.ex">>, |
| 26 | + <<"lib/combo/transports/long_poll_server.ex">>, |
| 27 | + <<"lib/combo/transports/websocket.ex">>,<<"lib/combo/template">>, |
| 28 | + <<"lib/combo/template/exs_engine.ex">>,<<"lib/combo/template/ceex_engine">>, |
| 29 | + <<"lib/combo/template/ceex_engine/slot.ex">>, |
| 30 | + <<"lib/combo/template/ceex_engine/syntax_error.ex">>, |
| 31 | + <<"lib/combo/template/ceex_engine/formatter.ex">>, |
| 32 | + <<"lib/combo/template/ceex_engine/compiler.ex">>, |
| 33 | + <<"lib/combo/template/ceex_engine/declarative_assigns.ex">>, |
| 34 | + <<"lib/combo/template/ceex_engine/formatter">>, |
| 35 | + <<"lib/combo/template/ceex_engine/formatter/html_algebra.ex">>, |
| 36 | + <<"lib/combo/template/ceex_engine/assigns.ex">>, |
| 37 | + <<"lib/combo/template/ceex_engine/sigil.ex">>, |
| 38 | + <<"lib/combo/template/ceex_engine/tokenizer.ex">>, |
| 39 | + <<"lib/combo/template/ceex_engine/compiler">>, |
| 40 | + <<"lib/combo/template/ceex_engine/compiler/assigns.ex">>, |
| 41 | + <<"lib/combo/template/ceex_engine/compiler/attr.ex">>, |
| 42 | + <<"lib/combo/template/ceex_engine/compiler/io_builder.ex">>, |
| 43 | + <<"lib/combo/template/ceex_engine/compiler/debug_annotation.ex">>, |
| 44 | + <<"lib/combo/template/ceex_engine/compiler/engine.ex">>, |
| 45 | + <<"lib/combo/template/html_encoder.ex">>, |
| 46 | + <<"lib/combo/template/ceex_engine.ex">>, |
| 47 | + <<"lib/combo/template/format_encoder.ex">>, |
| 48 | + <<"lib/combo/template/eex_engine.ex">>,<<"lib/combo/template/engine.ex">>, |
| 49 | + <<"lib/combo/env.ex">>,<<"lib/combo/config.ex">>,<<"lib/combo/safe_html">>, |
| 50 | + <<"lib/combo/safe_html/escape.ex">>,<<"lib/combo/safe_html/safe.ex">>, |
| 51 | + <<"lib/combo/token.ex">>,<<"lib/combo/html">>, |
| 52 | + <<"lib/combo/html/form_field.ex">>,<<"lib/combo/html/formatter.ex">>, |
| 53 | + <<"lib/combo/html/components.ex">>,<<"lib/combo/html/form_data.ex">>, |
| 54 | + <<"lib/combo/html/form.ex">>,<<"lib/combo/controller.ex">>, |
| 55 | + <<"lib/combo/controller">>,<<"lib/combo/controller/pipeline.ex">>, |
| 56 | + <<"lib/combo/code_reloader.ex">>,<<"lib/combo/router.ex">>, |
| 57 | + <<"lib/combo/channel">>,<<"lib/combo/channel/server.ex">>, |
| 58 | + <<"lib/combo/conn.ex">>,<<"lib/combo/socket.ex">>,<<"lib/combo/digester">>, |
| 59 | + <<"lib/combo/digester/gzip.ex">>,<<"lib/combo/digester/compressor.ex">>, |
| 60 | + <<"lib/combo/endpoint">>,<<"lib/combo/endpoint/adapter.ex">>, |
| 61 | + <<"lib/combo/endpoint/supervisor.ex">>, |
| 62 | + <<"lib/combo/endpoint/cowboy2_adapter.ex">>, |
| 63 | + <<"lib/combo/endpoint/bandit_adapter.ex">>, |
| 64 | + <<"lib/combo/endpoint/watcher.ex">>, |
| 65 | + <<"lib/combo/endpoint/render_errors.ex">>, |
| 66 | + <<"lib/combo/endpoint/sync_code_reload_plug.ex">>, |
| 67 | + <<"lib/combo/endpoint.ex">>,<<"lib/combo/digester.ex">>, |
| 68 | + <<"lib/combo/helpers">>,<<"lib/combo/helpers/keyword_helper.ex">>, |
| 69 | + <<"lib/combo/debug.ex">>,<<"lib/combo/exceptions.ex">>, |
| 70 | + <<"lib/combo/socket">>,<<"lib/combo/socket/message.ex">>, |
| 71 | + <<"lib/combo/socket/transport.ex">>,<<"lib/combo/socket/serializers">>, |
| 72 | + <<"lib/combo/socket/serializers/v1_json_serializer.ex">>, |
| 73 | + <<"lib/combo/socket/serializers/v2_json_serializer.ex">>, |
| 74 | + <<"lib/combo/socket/pool_supervisor.ex">>, |
| 75 | + <<"lib/combo/socket/serializer.ex">>,<<"lib/combo/live_reloader">>, |
| 76 | + <<"lib/combo/live_reloader/channel.ex">>, |
| 77 | + <<"lib/combo/live_reloader/server.ex">>, |
| 78 | + <<"lib/combo/live_reloader/socket.ex">>,<<"lib/combo/flash.ex">>, |
| 79 | + <<"lib/combo/template.ex">>,<<"lib/combo/router">>, |
| 80 | + <<"lib/combo/router/route.ex">>,<<"lib/combo/router/console_formatter.ex">>, |
| 81 | + <<"lib/combo/router/resource.ex">>,<<"lib/combo/router/scope.ex">>, |
| 82 | + <<"mix.exs">>,<<"priv">>,<<"priv/logo">>,<<"priv/logo/combo.svg">>, |
| 83 | + <<"priv/static">>,<<"priv/static/html.js">>,<<"priv/static/html.js.map">>, |
| 84 | + <<"priv/static/socket.min.js.map">>,<<"priv/static/html.esm.js.map">>, |
| 85 | + <<"priv/static/socket.min.js">>,<<"priv/static/html.min.js">>, |
| 86 | + <<"priv/static/socket.js.map">>,<<"priv/static/socket.cjs.js.map">>, |
| 87 | + <<"priv/static/socket.js">>,<<"priv/static/live_reloader.min.js.map">>, |
| 88 | + <<"priv/static/html.min.js.map">>,<<"priv/static/socket.esm.js">>, |
| 89 | + <<"priv/static/socket.esm.js.map">>,<<"priv/static/live_reloader.min.js">>, |
| 90 | + <<"priv/static/html.cjs.js">>,<<"priv/static/html.esm.js">>, |
| 91 | + <<"priv/static/socket.cjs.js">>,<<"priv/static/html.cjs.js.map">>, |
| 92 | + <<"package.json">>,<<".formatter.exs">>,<<"README.md">>,<<"CHANGELOG.md">>, |
| 93 | + <<"LICENSE.txt">>]}. |
| 94 | + {<<"requirements">>, |
| 95 | + [[{<<"name">>,<<"plug">>}, |
| 96 | + {<<"app">>,<<"plug">>}, |
| 97 | + {<<"optional">>,false}, |
| 98 | + {<<"requirement">>,<<"~> 1.14">>}, |
| 99 | + {<<"repository">>,<<"hexpm">>}], |
| 100 | + [{<<"name">>,<<"plug_crypto">>}, |
| 101 | + {<<"app">>,<<"plug_crypto">>}, |
| 102 | + {<<"optional">>,false}, |
| 103 | + {<<"requirement">>,<<"~> 1.2 or ~> 2.0">>}, |
| 104 | + {<<"repository">>,<<"hexpm">>}], |
| 105 | + [{<<"name">>,<<"telemetry">>}, |
| 106 | + {<<"app">>,<<"telemetry">>}, |
| 107 | + {<<"optional">>,false}, |
| 108 | + {<<"requirement">>,<<"~> 0.4 or ~> 1.0">>}, |
| 109 | + {<<"repository">>,<<"hexpm">>}], |
| 110 | + [{<<"name">>,<<"phoenix_pubsub">>}, |
| 111 | + {<<"app">>,<<"phoenix_pubsub">>}, |
| 112 | + {<<"optional">>,false}, |
| 113 | + {<<"requirement">>,<<"~> 2.1">>}, |
| 114 | + {<<"repository">>,<<"hexpm">>}], |
| 115 | + [{<<"name">>,<<"websock_adapter">>}, |
| 116 | + {<<"app">>,<<"websock_adapter">>}, |
| 117 | + {<<"optional">>,false}, |
| 118 | + {<<"requirement">>,<<"~> 0.5.3">>}, |
| 119 | + {<<"repository">>,<<"hexpm">>}], |
| 120 | + [{<<"name">>,<<"file_system">>}, |
| 121 | + {<<"app">>,<<"file_system">>}, |
| 122 | + {<<"optional">>,false}, |
| 123 | + {<<"requirement">>,<<"~> 1.0">>}, |
| 124 | + {<<"repository">>,<<"hexpm">>}], |
| 125 | + [{<<"name">>,<<"lazy_html">>}, |
| 126 | + {<<"app">>,<<"lazy_html">>}, |
| 127 | + {<<"optional">>,false}, |
| 128 | + {<<"requirement">>,<<"~> 0.1.0">>}, |
| 129 | + {<<"repository">>,<<"hexpm">>}], |
| 130 | + [{<<"name">>,<<"plug_cowboy">>}, |
| 131 | + {<<"app">>,<<"plug_cowboy">>}, |
| 132 | + {<<"optional">>,true}, |
| 133 | + {<<"requirement">>,<<"~> 2.7">>}, |
| 134 | + {<<"repository">>,<<"hexpm">>}], |
| 135 | + [{<<"name">>,<<"bandit">>}, |
| 136 | + {<<"app">>,<<"bandit">>}, |
| 137 | + {<<"optional">>,true}, |
| 138 | + {<<"requirement">>,<<"~> 1.0">>}, |
| 139 | + {<<"repository">>,<<"hexpm">>}], |
| 140 | + [{<<"name">>,<<"jason">>}, |
| 141 | + {<<"app">>,<<"jason">>}, |
| 142 | + {<<"optional">>,true}, |
| 143 | + {<<"requirement">>,<<"~> 1.0">>}, |
| 144 | + {<<"repository">>,<<"hexpm">>}], |
| 145 | + [{<<"name">>,<<"decimal">>}, |
| 146 | + {<<"app">>,<<"decimal">>}, |
| 147 | + {<<"optional">>,true}, |
| 148 | + {<<"requirement">>,<<"~> 2.0">>}, |
| 149 | + {<<"repository">>,<<"hexpm">>}]]}. |
| 12 150 | {<<"build_tools">>,[<<"mix">>]}. |
Loading more files…