summaryrefslogtreecommitdiff
path: root/std/mime
diff options
context:
space:
mode:
Diffstat (limited to 'std/mime')
-rw-r--r--std/mime/multipart.ts24
-rw-r--r--std/mime/multipart_test.ts11
-rw-r--r--std/mime/testdata/sample.txt27
3 files changed, 56 insertions, 6 deletions
diff --git a/std/mime/multipart.ts b/std/mime/multipart.ts
index 26860e3de..d88ff3d13 100644
--- a/std/mime/multipart.ts
+++ b/std/mime/multipart.ts
@@ -8,13 +8,35 @@ type Writer = Deno.Writer;
import { equal, findIndex, findLastIndex, hasPrefix } from "../bytes/mod.ts";
import { copyN } from "../io/ioutil.ts";
import { MultiReader } from "../io/readers.ts";
-import { FormFile } from "../multipart/formfile.ts";
import { extname } from "../path/mod.ts";
import { tempFile } from "../io/util.ts";
import { BufReader, BufWriter, UnexpectedEOFError } from "../io/bufio.ts";
import { encoder } from "../strings/mod.ts";
import { assertStrictEq } from "../testing/asserts.ts";
import { TextProtoReader } from "../textproto/mod.ts";
+import { hasOwnProperty } from "../util/has_own_property.ts";
+
+/** FormFile object */
+export interface FormFile {
+ /** filename */
+ filename: string;
+ /** content-type header value of file */
+ type: string;
+ /** byte size of file */
+ size: number;
+ /** in-memory content of file. Either content or tempfile is set */
+ content?: Uint8Array;
+ /** temporal file path.
+ * Set if file size is bigger than specified max-memory size at reading form
+ * */
+ tempfile?: string;
+}
+
+/** Type guard for FormFile */
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export function isFormFile(x: any): x is FormFile {
+ return hasOwnProperty(x, "filename") && hasOwnProperty(x, "type");
+}
function randomBoundary(): string {
let boundary = "--------------------------";
diff --git a/std/mime/multipart_test.ts b/std/mime/multipart_test.ts
index 4658ce976..869932fbf 100644
--- a/std/mime/multipart_test.ts
+++ b/std/mime/multipart_test.ts
@@ -10,12 +10,13 @@ import {
import { test, runIfMain } from "../testing/mod.ts";
import * as path from "../path/mod.ts";
import {
- matchAfterPrefix,
+ FormFile,
MultipartReader,
MultipartWriter,
+ isFormFile,
+ matchAfterPrefix,
scanUntilBoundary
} from "./multipart.ts";
-import { FormFile, isFormFile } from "../multipart/formfile.ts";
import { StringWriter } from "../io/writers.ts";
const e = new TextEncoder();
@@ -94,7 +95,7 @@ test(async function multipartMultipartWriter(): Promise<void> {
const mw = new MultipartWriter(buf);
await mw.writeField("foo", "foo");
await mw.writeField("bar", "bar");
- const f = await open(path.resolve("./multipart/fixtures/sample.txt"), "r");
+ const f = await open(path.resolve("./mime/testdata/sample.txt"), "r");
await mw.writeFile("file", "sample.txt", f);
await mw.close();
});
@@ -173,7 +174,7 @@ test(async function multipartMultipartWriter3(): Promise<void> {
test(async function multipartMultipartReader(): Promise<void> {
// FIXME: path resolution
- const o = await open(path.resolve("./multipart/fixtures/sample.txt"));
+ const o = await open(path.resolve("./mime/testdata/sample.txt"));
const mr = new MultipartReader(
o,
"--------------------------434049563556637648550474"
@@ -187,7 +188,7 @@ test(async function multipartMultipartReader(): Promise<void> {
});
test(async function multipartMultipartReader2(): Promise<void> {
- const o = await open(path.resolve("./multipart/fixtures/sample.txt"));
+ const o = await open(path.resolve("./mime/testdata/sample.txt"));
const mr = new MultipartReader(
o,
"--------------------------434049563556637648550474"
diff --git a/std/mime/testdata/sample.txt b/std/mime/testdata/sample.txt
new file mode 100644
index 000000000..97e9bf553
--- /dev/null
+++ b/std/mime/testdata/sample.txt
@@ -0,0 +1,27 @@
+----------------------------434049563556637648550474
+content-disposition: form-data; name="foo"
+content-type: application/octet-stream
+
+foo
+----------------------------434049563556637648550474
+content-disposition: form-data; name="bar"
+content-type: application/octet-stream
+
+bar
+----------------------------434049563556637648550474
+content-disposition: form-data; name="file"; filename="tsconfig.json"
+content-type: application/octet-stream
+
+{
+ "compilerOptions": {
+ "target": "es2018",
+ "baseUrl": ".",
+ "paths": {
+ "deno": ["./deno.d.ts"],
+ "https://*": ["../../.deno/deps/https/*"],
+ "http://*": ["../../.deno/deps/http/*"]
+ }
+ }
+}
+
+----------------------------434049563556637648550474--