mirror of
https://github.com/denoland/deno.git
synced 2025-03-03 17:34:47 -05:00
parent
c4e8ed3c44
commit
9d5f0f2d23
6 changed files with 29 additions and 63 deletions
|
@ -8,13 +8,35 @@ type Writer = Deno.Writer;
|
||||||
import { equal, findIndex, findLastIndex, hasPrefix } from "../bytes/mod.ts";
|
import { equal, findIndex, findLastIndex, hasPrefix } from "../bytes/mod.ts";
|
||||||
import { copyN } from "../io/ioutil.ts";
|
import { copyN } from "../io/ioutil.ts";
|
||||||
import { MultiReader } from "../io/readers.ts";
|
import { MultiReader } from "../io/readers.ts";
|
||||||
import { FormFile } from "../multipart/formfile.ts";
|
|
||||||
import { extname } from "../path/mod.ts";
|
import { extname } from "../path/mod.ts";
|
||||||
import { tempFile } from "../io/util.ts";
|
import { tempFile } from "../io/util.ts";
|
||||||
import { BufReader, BufWriter, UnexpectedEOFError } from "../io/bufio.ts";
|
import { BufReader, BufWriter, UnexpectedEOFError } from "../io/bufio.ts";
|
||||||
import { encoder } from "../strings/mod.ts";
|
import { encoder } from "../strings/mod.ts";
|
||||||
import { assertStrictEq } from "../testing/asserts.ts";
|
import { assertStrictEq } from "../testing/asserts.ts";
|
||||||
import { TextProtoReader } from "../textproto/mod.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 {
|
function randomBoundary(): string {
|
||||||
let boundary = "--------------------------";
|
let boundary = "--------------------------";
|
||||||
|
|
|
@ -10,12 +10,13 @@ import {
|
||||||
import { test, runIfMain } from "../testing/mod.ts";
|
import { test, runIfMain } from "../testing/mod.ts";
|
||||||
import * as path from "../path/mod.ts";
|
import * as path from "../path/mod.ts";
|
||||||
import {
|
import {
|
||||||
matchAfterPrefix,
|
FormFile,
|
||||||
MultipartReader,
|
MultipartReader,
|
||||||
MultipartWriter,
|
MultipartWriter,
|
||||||
|
isFormFile,
|
||||||
|
matchAfterPrefix,
|
||||||
scanUntilBoundary
|
scanUntilBoundary
|
||||||
} from "./multipart.ts";
|
} from "./multipart.ts";
|
||||||
import { FormFile, isFormFile } from "../multipart/formfile.ts";
|
|
||||||
import { StringWriter } from "../io/writers.ts";
|
import { StringWriter } from "../io/writers.ts";
|
||||||
|
|
||||||
const e = new TextEncoder();
|
const e = new TextEncoder();
|
||||||
|
@ -94,7 +95,7 @@ test(async function multipartMultipartWriter(): Promise<void> {
|
||||||
const mw = new MultipartWriter(buf);
|
const mw = new MultipartWriter(buf);
|
||||||
await mw.writeField("foo", "foo");
|
await mw.writeField("foo", "foo");
|
||||||
await mw.writeField("bar", "bar");
|
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.writeFile("file", "sample.txt", f);
|
||||||
await mw.close();
|
await mw.close();
|
||||||
});
|
});
|
||||||
|
@ -173,7 +174,7 @@ test(async function multipartMultipartWriter3(): Promise<void> {
|
||||||
|
|
||||||
test(async function multipartMultipartReader(): Promise<void> {
|
test(async function multipartMultipartReader(): Promise<void> {
|
||||||
// FIXME: path resolution
|
// 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(
|
const mr = new MultipartReader(
|
||||||
o,
|
o,
|
||||||
"--------------------------434049563556637648550474"
|
"--------------------------434049563556637648550474"
|
||||||
|
@ -187,7 +188,7 @@ test(async function multipartMultipartReader(): Promise<void> {
|
||||||
});
|
});
|
||||||
|
|
||||||
test(async function multipartMultipartReader2(): 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(
|
const mr = new MultipartReader(
|
||||||
o,
|
o,
|
||||||
"--------------------------434049563556637648550474"
|
"--------------------------434049563556637648550474"
|
||||||
|
|
|
@ -1,24 +0,0 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
||||||
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");
|
|
||||||
}
|
|
|
@ -1,32 +0,0 @@
|
||||||
// Copyright 2018-2020 the Deno authors. All rights reserved. MIT license.
|
|
||||||
import { test } from "../testing/mod.ts";
|
|
||||||
import { assertEquals } from "../testing/asserts.ts";
|
|
||||||
import { isFormFile } from "./formfile.ts";
|
|
||||||
|
|
||||||
test(function multipartIsFormFile(): void {
|
|
||||||
assertEquals(
|
|
||||||
isFormFile({
|
|
||||||
filename: "foo",
|
|
||||||
type: "application/json"
|
|
||||||
}),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
assertEquals(
|
|
||||||
isFormFile({
|
|
||||||
filename: "foo"
|
|
||||||
}),
|
|
||||||
false
|
|
||||||
);
|
|
||||||
});
|
|
||||||
|
|
||||||
test(function isFormFileShouldNotThrow(): void {
|
|
||||||
assertEquals(
|
|
||||||
isFormFile({
|
|
||||||
filename: "foo",
|
|
||||||
type: "application/json",
|
|
||||||
hasOwnProperty: "bar"
|
|
||||||
}),
|
|
||||||
true
|
|
||||||
);
|
|
||||||
assertEquals(isFormFile(Object.create(null)), false);
|
|
||||||
});
|
|
|
@ -1 +0,0 @@
|
||||||
export * from "./formfile.ts";
|
|
Loading…
Add table
Reference in a new issue