├── .github ├── CODEOWNERS ├── dependabot.yml ├── runs-on.yml └── workflows │ ├── api-docs.yml │ ├── benchmark.yml │ └── test.yml ├── .gitignore ├── .sourcekit-lsp └── config.json ├── .spi.yml ├── .swift-format ├── Benchmarks ├── .gitignore ├── .sourcekit-lsp ├── .swift-format ├── .vscode │ └── launch.json ├── Package.swift ├── Parser │ └── Parser.swift ├── Thresholds │ ├── Parser.CollatingParserAllocations_256MiB.p90.json │ ├── Parser.CollatingParserAllocations_Empty.p90.json │ ├── Parser.CollatingParserCPUTime_256MiB.p90.json │ ├── Parser.StreamingParserAllocations_256MiB.p90.json │ ├── Parser.StreamingParserAllocations_Empty.p90.json │ ├── Parser.StreamingParserCPUTime_256MiB.p90.json │ ├── Writer.BufferedWriter_16KB_1024Parts_Allocations.json │ ├── Writer.BufferedWriter_Allocations10MiB.json │ ├── Writer.MemoryWriter_100x1024Parts_CPUTime.p90.json │ ├── Writer.MemoryWriter_1024Parts_Allocations.p90.json │ ├── Writer.MemoryWriter_Empty_Allocations.p90.json │ ├── Writer.StreamingWriter_10MiB_Allocations.p90.json │ └── Writer.StreamingWriter_Empty_Allocations.p90.json ├── Utilities │ ├── AsyncSyncSequence.swift │ └── NoOpAsyncSequence.swift └── Writer │ └── Writer.swift ├── LICENSE ├── Package.swift ├── README.md ├── Sources └── MultipartKit │ ├── BasicCodingKey.swift │ ├── Docs.docc │ ├── images │ │ └── vapor-multipartkit-logo.svg │ ├── index.md │ └── theme-settings.json │ ├── FormDataDecoder │ ├── FormDataDecoder+Decoder.swift │ ├── FormDataDecoder+KeyedContainer.swift │ ├── FormDataDecoder+SingleValueContainer.swift │ ├── FormDataDecoder+UnkeyedContainer.swift │ └── FormDataDecoder.swift │ ├── FormDataEncoder │ ├── FormDataEncoder+Encoder.swift │ ├── FormDataEncoder+KeyedContainer.swift │ ├── FormDataEncoder+SingleValueContainer.swift │ ├── FormDataEncoder+UnkeyedContainer.swift │ ├── FormDataEncoder.swift │ └── Storage.swift │ ├── MultipartFormData.swift │ ├── MultipartPart.swift │ ├── MultipartPartConvertible.swift │ ├── MultipartSection.swift │ ├── Parser │ ├── MultipartParser+parse.swift │ ├── MultipartParser.swift │ ├── MultipartParserAsyncSequence.swift │ ├── MultipartParserError.swift │ ├── StreamingMultipartParserAsyncSequence+Isolation.swift │ └── StreamingMultipartParserAsyncSequence.swift │ ├── Utilities.swift │ └── Writer │ ├── BufferedMultipartWriter.swift │ ├── MemoryMultipartWriter.swift │ ├── MultipartWriter.swift │ ├── MultipartWriterAsyncSequence+Isolation.swift │ └── MultipartWriterAsyncSequence.swift └── Tests └── MultipartKitTests ├── ContentDispositionTests.swift ├── FormDataDecodingTests.swift ├── FormDataEncodingTests.swift ├── ParserTests.swift ├── Utilities ├── File.swift └── MultipartSection+Equatable.swift └── WriterTests.swift /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @0xTim @gwynne @ptoffy 2 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.github/dependabot.yml -------------------------------------------------------------------------------- /.github/runs-on.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.github/runs-on.yml -------------------------------------------------------------------------------- /.github/workflows/api-docs.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.github/workflows/api-docs.yml -------------------------------------------------------------------------------- /.github/workflows/benchmark.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.github/workflows/benchmark.yml -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.github/workflows/test.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.gitignore -------------------------------------------------------------------------------- /.sourcekit-lsp/config.json: -------------------------------------------------------------------------------- 1 | ../.sourcekit-lsp/config.json -------------------------------------------------------------------------------- /.spi.yml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.spi.yml -------------------------------------------------------------------------------- /.swift-format: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/.swift-format -------------------------------------------------------------------------------- /Benchmarks/.gitignore: -------------------------------------------------------------------------------- 1 | ../.gitignore -------------------------------------------------------------------------------- /Benchmarks/.sourcekit-lsp: -------------------------------------------------------------------------------- 1 | ../.sourcekit-lsp -------------------------------------------------------------------------------- /Benchmarks/.swift-format: -------------------------------------------------------------------------------- 1 | ../.swift-format -------------------------------------------------------------------------------- /Benchmarks/.vscode/launch.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/.vscode/launch.json -------------------------------------------------------------------------------- /Benchmarks/Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Package.swift -------------------------------------------------------------------------------- /Benchmarks/Parser/Parser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Parser/Parser.swift -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Parser.CollatingParserAllocations_256MiB.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 82000 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Parser.CollatingParserAllocations_Empty.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 8 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Parser.CollatingParserCPUTime_256MiB.p90.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Thresholds/Parser.CollatingParserCPUTime_256MiB.p90.json -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Parser.StreamingParserAllocations_256MiB.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 82000 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Parser.StreamingParserAllocations_Empty.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 6 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Parser.StreamingParserCPUTime_256MiB.p90.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Thresholds/Parser.StreamingParserCPUTime_256MiB.p90.json -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.BufferedWriter_16KB_1024Parts_Allocations.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 7 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.BufferedWriter_Allocations10MiB.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 3 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.MemoryWriter_100x1024Parts_CPUTime.p90.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Thresholds/Writer.MemoryWriter_100x1024Parts_CPUTime.p90.json -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.MemoryWriter_1024Parts_Allocations.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 11 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.MemoryWriter_Empty_Allocations.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 0 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.StreamingWriter_10MiB_Allocations.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 166 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Thresholds/Writer.StreamingWriter_Empty_Allocations.p90.json: -------------------------------------------------------------------------------- 1 | { 2 | "mallocCountTotal": 2 3 | } 4 | -------------------------------------------------------------------------------- /Benchmarks/Utilities/AsyncSyncSequence.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Utilities/AsyncSyncSequence.swift -------------------------------------------------------------------------------- /Benchmarks/Utilities/NoOpAsyncSequence.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Utilities/NoOpAsyncSequence.swift -------------------------------------------------------------------------------- /Benchmarks/Writer/Writer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Benchmarks/Writer/Writer.swift -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/LICENSE -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Package.swift -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/README.md -------------------------------------------------------------------------------- /Sources/MultipartKit/BasicCodingKey.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/BasicCodingKey.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Docs.docc/images/vapor-multipartkit-logo.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Docs.docc/images/vapor-multipartkit-logo.svg -------------------------------------------------------------------------------- /Sources/MultipartKit/Docs.docc/index.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Docs.docc/index.md -------------------------------------------------------------------------------- /Sources/MultipartKit/Docs.docc/theme-settings.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Docs.docc/theme-settings.json -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataDecoder/FormDataDecoder+Decoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataDecoder/FormDataDecoder+Decoder.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataDecoder/FormDataDecoder+KeyedContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataDecoder/FormDataDecoder+KeyedContainer.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataDecoder/FormDataDecoder+SingleValueContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataDecoder/FormDataDecoder+SingleValueContainer.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataDecoder/FormDataDecoder+UnkeyedContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataDecoder/FormDataDecoder+UnkeyedContainer.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataDecoder/FormDataDecoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataDecoder/FormDataDecoder.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataEncoder/FormDataEncoder+Encoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataEncoder/FormDataEncoder+Encoder.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataEncoder/FormDataEncoder+KeyedContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataEncoder/FormDataEncoder+KeyedContainer.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataEncoder/FormDataEncoder+SingleValueContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataEncoder/FormDataEncoder+SingleValueContainer.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataEncoder/FormDataEncoder+UnkeyedContainer.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataEncoder/FormDataEncoder+UnkeyedContainer.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataEncoder/FormDataEncoder.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataEncoder/FormDataEncoder.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/FormDataEncoder/Storage.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/FormDataEncoder/Storage.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/MultipartFormData.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/MultipartFormData.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/MultipartPart.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/MultipartPart.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/MultipartPartConvertible.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/MultipartPartConvertible.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/MultipartSection.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/MultipartSection.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Parser/MultipartParser+parse.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Parser/MultipartParser+parse.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Parser/MultipartParser.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Parser/MultipartParser.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Parser/MultipartParserAsyncSequence.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Parser/MultipartParserAsyncSequence.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Parser/MultipartParserError.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Parser/MultipartParserError.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Parser/StreamingMultipartParserAsyncSequence+Isolation.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Parser/StreamingMultipartParserAsyncSequence+Isolation.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Parser/StreamingMultipartParserAsyncSequence.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Parser/StreamingMultipartParserAsyncSequence.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Utilities.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Utilities.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Writer/BufferedMultipartWriter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Writer/BufferedMultipartWriter.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Writer/MemoryMultipartWriter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Writer/MemoryMultipartWriter.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Writer/MultipartWriter.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Writer/MultipartWriter.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Writer/MultipartWriterAsyncSequence+Isolation.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Writer/MultipartWriterAsyncSequence+Isolation.swift -------------------------------------------------------------------------------- /Sources/MultipartKit/Writer/MultipartWriterAsyncSequence.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Sources/MultipartKit/Writer/MultipartWriterAsyncSequence.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/ContentDispositionTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/ContentDispositionTests.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/FormDataDecodingTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/FormDataDecodingTests.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/FormDataEncodingTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/FormDataEncodingTests.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/ParserTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/ParserTests.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/Utilities/File.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/Utilities/File.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/Utilities/MultipartSection+Equatable.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/Utilities/MultipartSection+Equatable.swift -------------------------------------------------------------------------------- /Tests/MultipartKitTests/WriterTests.swift: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vapor/multipart-kit/HEAD/Tests/MultipartKitTests/WriterTests.swift --------------------------------------------------------------------------------