summaryrefslogtreecommitdiff
path: root/cli/js
diff options
context:
space:
mode:
authorcrowlKats <13135287+crowlKats@users.noreply.github.com>2020-04-05 21:49:04 +0200
committerGitHub <noreply@github.com>2020-04-05 15:49:04 -0400
commit6720a0dc02dc5a93472520e6d23ca033d7ec9d88 (patch)
treea058723c552f0e435afead6647860a8d03701432 /cli/js
parent2911fcc78de4624c0086e6458eff3b33465c8b5b (diff)
feat: Add File support in FormData (#4632)
Diffstat (limited to 'cli/js')
-rw-r--r--cli/js/tests/form_data_test.ts9
-rw-r--r--cli/js/web/form_data.ts26
2 files changed, 30 insertions, 5 deletions
diff --git a/cli/js/tests/form_data_test.ts b/cli/js/tests/form_data_test.ts
index f51a51190..b002caa2e 100644
--- a/cli/js/tests/form_data_test.ts
+++ b/cli/js/tests/form_data_test.ts
@@ -73,6 +73,15 @@ unitTest(function formDataParamsSetSuccess(): void {
assertEquals(formData.get("e"), "null");
});
+unitTest(function fromDataUseDomFile(): void {
+ const formData = new FormData();
+ const file = new File(["foo"], "bar", {
+ type: "text/plain",
+ });
+ formData.append("file", file);
+ assertEquals(formData.get("file"), file);
+});
+
unitTest(function formDataSetEmptyBlobSuccess(): void {
const formData = new FormData();
formData.set("a", new Blob([]), "blank.txt");
diff --git a/cli/js/web/form_data.ts b/cli/js/web/form_data.ts
index db5d24ad4..4517c2a33 100644
--- a/cli/js/web/form_data.ts
+++ b/cli/js/web/form_data.ts
@@ -11,11 +11,18 @@ class FormDataBase {
[dataSymbol]: Array<[string, domTypes.FormDataEntryValue]> = [];
append(name: string, value: string): void;
+ append(name: string, value: domFile.DomFileImpl): void;
append(name: string, value: blob.DenoBlob, filename?: string): void;
- append(name: string, value: string | blob.DenoBlob, filename?: string): void {
+ append(
+ name: string,
+ value: string | blob.DenoBlob | domFile.DomFileImpl,
+ filename?: string
+ ): void {
requiredArguments("FormData.append", arguments.length, 2);
name = String(name);
- if (value instanceof blob.DenoBlob) {
+ if (value instanceof domFile.DomFileImpl) {
+ this[dataSymbol].push([name, value]);
+ } else if (value instanceof blob.DenoBlob) {
const dfile = new domFile.DomFileImpl([value], filename || name, {
type: value.type,
});
@@ -70,8 +77,13 @@ class FormDataBase {
}
set(name: string, value: string): void;
+ set(name: string, value: domFile.DomFileImpl): void;
set(name: string, value: blob.DenoBlob, filename?: string): void;
- set(name: string, value: string | blob.DenoBlob, filename?: string): void {
+ set(
+ name: string,
+ value: string | blob.DenoBlob | domFile.DomFileImpl,
+ filename?: string
+ ): void {
requiredArguments("FormData.set", arguments.length, 2);
name = String(name);
@@ -82,7 +94,9 @@ class FormDataBase {
while (i < this[dataSymbol].length) {
if (this[dataSymbol][i][0] === name) {
if (!found) {
- if (value instanceof blob.DenoBlob) {
+ if (value instanceof domFile.DomFileImpl) {
+ this[dataSymbol][i][1] = value;
+ } else if (value instanceof blob.DenoBlob) {
const dfile = new domFile.DomFileImpl([value], filename || name, {
type: value.type,
});
@@ -101,7 +115,9 @@ class FormDataBase {
// Otherwise, append entry to the context object’s entry list.
if (!found) {
- if (value instanceof blob.DenoBlob) {
+ if (value instanceof domFile.DomFileImpl) {
+ this[dataSymbol].push([name, value]);
+ } else if (value instanceof blob.DenoBlob) {
const dfile = new domFile.DomFileImpl([value], filename || name, {
type: value.type,
});