nushell/crates
Bruce Weirdan 2ced9e4d19
Add multipart/form-data uploads (#13532)
Fixes nushell/nushell#11046

# Description
This adds support for `multipart/form-data` (RFC 7578) uploads to
nushell.

Binary data is uploaded as files (`application/octet-stream`),
everything else is uploaded as plain text.

```console
$ http post https://echo.free.beeceptor.com --content-type multipart/form-data {cargo: (open -r Cargo.toml | into binary ), description: "It's some TOML"} | upsert ip "<redacted>"
╭───────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ method            │ POST                                                                                                                                                                    │
│ protocol          │ https                                                                                                                                                                   │
│ host              │ echo.free.beeceptor.com                                                                                                                                                 │
│ path              │ /                                                                                                                                                                       │
│ ip                │ <redacted>                                                                                                                                                              │
│                   │ ╭─────────────────┬────────────────────────────────────────────────────────────────────╮                                                                                │
│ headers           │ │ Host            │ echo.free.beeceptor.com                                            │                                                                                │
│                   │ │ User-Agent      │ nushell                                                            │                                                                                │
│                   │ │ Content-Length  │ 9453                                                               │                                                                                │
│                   │ │ Accept          │ */*                                                                │                                                                                │
│                   │ │ Accept-Encoding │ gzip                                                               │                                                                                │
│                   │ │ Content-Type    │ multipart/form-data; boundary=a15f6a14-5768-4a6a-b3a4-686a112d9e27 │                                                                                │
│                   │ ╰─────────────────┴────────────────────────────────────────────────────────────────────╯                                                                                │
│ parsedQueryParams │ {record 0 fields}                                                                                                                                                       │
│                   │ ╭─────────────────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ parsedBody        │ │                 │ ╭─────────────┬────────────────╮                                                                                                                  │ │
│                   │ │ textFields      │ │ description │ It's some TOML │                                                                                                                  │ │
│                   │ │                 │ ╰─────────────┴────────────────╯                                                                                                                  │ │
│                   │ │                 │ ╭───┬───────┬──────────┬──────────────────────────┬───────────────────────────┬───────────────────────────────────────────┬────────────────╮      │ │
│                   │ │ files           │ │ # │ name  │ fileName │       Content-Type       │ Content-Transfer-Encoding │            Content-Disposition            │ Content-Length │      │ │
│                   │ │                 │ ├───┼───────┼──────────┼──────────────────────────┼───────────────────────────┼───────────────────────────────────────────┼────────────────┤      │ │
│                   │ │                 │ │ 0 │ cargo │ cargo    │ application/octet-stream │ binary                    │ form-data; name="cargo"; filename="cargo" │ 9101           │      │ │
│                   │ │                 │ ╰───┴───────┴──────────┴──────────────────────────┴───────────────────────────┴───────────────────────────────────────────┴────────────────╯      │ │
│                   │ ╰─────────────────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰───────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
```
# User-Facing Changes
`http post --content-type multipart/form-data` now accepts a record
which is uploaded as `multipart/form-data`.
Binary data is uploaded as files (`application/octet-stream`),
everything else is uploaded as plain text.

Previously `http post --content-type multipart/form-data` rejected
records, so there's no BC break.

# Tests + Formatting

Added.

# After Submitting
- [ ] update docs to showcase new functionality
2024-08-06 15:28:38 -05:00
..
nu_plugin_custom_values Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu_plugin_example fix: relay Signals reset to plugins (#13510) 2024-08-06 03:35:40 -07:00
nu_plugin_formats Adding plist support (#13545) 2024-08-05 14:07:15 -07:00
nu_plugin_gstat Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu_plugin_inc Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu_plugin_nu_example Make pipeline metadata available to plugins (#13495) 2024-08-02 11:01:20 -07:00
nu_plugin_polars Add "--as-columns" flag to polars into-df (#13449) 2024-07-30 08:50:50 -05:00
nu_plugin_python Make pipeline metadata available to plugins (#13495) 2024-08-02 11:01:20 -07:00
nu_plugin_query Include empty table data cells in query web tables (#13538) 2024-08-05 06:20:14 -05:00
nu_plugin_stress_internals Make pipeline metadata available to plugins (#13495) 2024-08-02 11:01:20 -07:00
nu-cli Add completions.sort option (#13311) 2024-08-05 20:30:10 -04:00
nu-cmd-base Path migration part 3: $nu paths (#13368) 2024-08-01 10:16:31 +02:00
nu-cmd-extra Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-cmd-lang setting content type metadata on all core to * commands (#13506) 2024-08-01 11:10:52 +02:00
nu-cmd-plugin Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-color-config Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-command Add multipart/form-data uploads (#13532) 2024-08-06 15:28:38 -05:00
nu-derive-value Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-engine Rework help generation internals (#13531) 2024-08-05 22:44:24 +02:00
nu-explore Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-glob Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-json Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-lsp Add completions.sort option (#13311) 2024-08-05 20:30:10 -04:00
nu-parser Contentious clippy fixes (#13498) 2024-08-01 11:02:55 +02:00
nu-path Path migration part 3: $nu paths (#13368) 2024-08-01 10:16:31 +02:00
nu-plugin fix: relay Signals reset to plugins (#13510) 2024-08-06 03:35:40 -07:00
nu-plugin-core Make pipeline metadata available to plugins (#13495) 2024-08-02 11:01:20 -07:00
nu-plugin-engine fix: relay Signals reset to plugins (#13510) 2024-08-06 03:35:40 -07:00
nu-plugin-protocol fix: relay Signals reset to plugins (#13510) 2024-08-06 03:35:40 -07:00
nu-plugin-test-support Bump similar from 2.5.0 to 2.6.0 (#13492) 2024-07-31 08:10:33 +00:00
nu-pretty-hex Clippy fixes from stable and nightly (#13455) 2024-07-31 20:37:40 +02:00
nu-protocol fix: relay Signals reset to plugins (#13510) 2024-08-06 03:35:40 -07:00
nu-std fix: Make log respect use_ansi_coloring setting. (#13442) 2024-07-30 08:34:11 -05:00
nu-system Clippy fixes from stable and nightly (#13455) 2024-07-31 20:37:40 +02:00
nu-table Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-term-grid Bump version to 0.96.2 (#13485) 2024-07-29 17:20:55 -07:00
nu-test-support Attempt to guess the content type of a file when opening with --raw (#13521) 2024-08-06 11:36:24 +02:00
nu-utils Add completions.sort option (#13311) 2024-08-05 20:30:10 -04:00
nuon Clippy fixes from stable and nightly (#13455) 2024-07-31 20:37:40 +02:00
README.md Remove old nushell/merge engine-q 2022-02-07 14:54:06 -05:00

Nushell core libraries and plugins

These sub-crates form both the foundation for Nu and a set of plugins which extend Nu with additional functionality.

Foundational libraries are split into two kinds of crates:

  • Core crates - those crates that work together to build the Nushell language engine
  • Support crates - a set of crates that support the engine with additional features like JSON support, ANSI support, and more.

Plugins are likewise also split into two types:

  • Core plugins - plugins that provide part of the default experience of Nu, including access to the system properties, processes, and web-connectivity features.
  • Extra plugins - these plugins run a wide range of different capabilities like working with different file types, charting, viewing binary data, and more.