diff options
author | crowlKats <13135287+crowlKats@users.noreply.github.com> | 2020-04-05 21:49:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-04-05 15:49:04 -0400 |
commit | 6720a0dc02dc5a93472520e6d23ca033d7ec9d88 (patch) | |
tree | a058723c552f0e435afead6647860a8d03701432 /cli/js | |
parent | 2911fcc78de4624c0086e6458eff3b33465c8b5b (diff) |
feat: Add File support in FormData (#4632)
Diffstat (limited to 'cli/js')
-rw-r--r-- | cli/js/tests/form_data_test.ts | 9 | ||||
-rw-r--r-- | cli/js/web/form_data.ts | 26 |
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, }); |