From e01226bbb43100994d044bc72ea785d4b799baaf Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Wed, 28 Aug 2019 14:57:37 -0400 Subject: [PATCH] Remove @stardazed/streams This is a regression on several some features in the fetch API. To bring these back @stardazed/streams simply needs to be ported to TS and included in the //js directory. Towards #2608 --- js/body.ts | 78 +--------------------------------------------- js/request.ts | 9 ------ js/request_test.ts | 34 +------------------- package.json | 1 - third_party | 2 +- 5 files changed, 3 insertions(+), 121 deletions(-) diff --git a/js/body.ts b/js/body.ts index fdf7fef062dd3b..b1f1af8a57b74c 100644 --- a/js/body.ts +++ b/js/body.ts @@ -1,27 +1,17 @@ -import * as streams from "@stardazed/streams"; import * as formData from "./form_data"; import * as blob from "./blob"; import * as encoding from "./text_encoding"; import * as headers from "./headers"; - import * as domTypes from "./dom_types"; const { Headers } = headers; // only namespace imports work for now, plucking out what we need -const { ReadableStream } = streams; const { FormData } = formData; const { TextEncoder, TextDecoder } = encoding; const Blob = blob.DenoBlob; const DenoBlob = blob.DenoBlob; -type ReadableStreamReader = domTypes.ReadableStreamReader; - -interface ReadableStreamController { - enqueue(chunk: string | ArrayBuffer): void; - close(): void; -} - export type BodySource = | domTypes.Blob | domTypes.BufferSource @@ -47,8 +37,6 @@ function validateBodyType(owner: Body, bodySource: BodySource): boolean { return true; } else if (typeof bodySource === "string") { return true; - } else if (bodySource instanceof ReadableStream) { - return true; } else if (bodySource instanceof FormData) { return true; } else if (!bodySource) { @@ -59,58 +47,6 @@ function validateBodyType(owner: Body, bodySource: BodySource): boolean { ); } -function concatenate(...arrays: Uint8Array[]): ArrayBuffer { - let totalLength = 0; - for (const arr of arrays) { - totalLength += arr.length; - } - const result = new Uint8Array(totalLength); - let offset = 0; - for (const arr of arrays) { - result.set(arr, offset); - offset += arr.length; - } - return result.buffer as ArrayBuffer; -} - -function bufferFromStream(stream: ReadableStreamReader): Promise { - return new Promise( - (resolve, reject): void => { - const parts: Uint8Array[] = []; - const encoder = new TextEncoder(); - // recurse - (function pump(): void { - stream - .read() - .then( - ({ done, value }): void => { - if (done) { - return resolve(concatenate(...parts)); - } - - if (typeof value === "string") { - parts.push(encoder.encode(value)); - } else if (value instanceof ArrayBuffer) { - parts.push(new Uint8Array(value)); - } else if (!value) { - // noop for undefined - } else { - reject("unhandled type on stream read"); - } - - return pump(); - } - ) - .catch( - (err): void => { - reject(err); - } - ); - })(); - } - ); -} - function getHeaderValueParams(value: string): Map { const params = new Map(); // Forced to do so for some Map constructor param mismatch @@ -145,17 +81,8 @@ export class Body implements domTypes.Body { if (this._stream) { return this._stream; } - if (this._bodySource instanceof ReadableStream) { - // @ts-ignore - this._stream = this._bodySource; - } if (typeof this._bodySource === "string") { - this._stream = new ReadableStream({ - start(controller: ReadableStreamController): void { - controller.enqueue(this._bodySource); - controller.close(); - } - }); + throw Error("not implemented"); } return this._stream; } @@ -332,9 +259,6 @@ export class Body implements domTypes.Body { } else if (typeof this._bodySource === "string") { const enc = new TextEncoder(); return enc.encode(this._bodySource).buffer as ArrayBuffer; - } else if (this._bodySource instanceof ReadableStream) { - // @ts-ignore - return bufferFromStream(this._bodySource.getReader()); } else if (this._bodySource instanceof FormData) { const enc = new TextEncoder(); return enc.encode(this._bodySource.toString()).buffer as ArrayBuffer; diff --git a/js/request.ts b/js/request.ts index 97bb8944b7f683..5ed1e9d634cfc3 100644 --- a/js/request.ts +++ b/js/request.ts @@ -1,13 +1,9 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. import * as headers from "./headers"; import * as body from "./body"; - -import * as streams from "@stardazed/streams"; - import * as domTypes from "./dom_types"; const { Headers } = headers; -const { ReadableStream } = streams; function byteUpperCase(s: string): string { return String(s).replace(/[a-z]/g, function byteUpperCaseReplace(c): string { @@ -144,11 +140,6 @@ export class Request extends body.Body implements domTypes.Request { let body2 = this._bodySource; - if (this._bodySource instanceof ReadableStream) { - const tees = (this._bodySource as domTypes.ReadableStream).tee(); - this._stream = this._bodySource = tees[0]; - body2 = tees[1]; - } const cloned = new Request(this.url, { body: body2, method: this.method, diff --git a/js/request_test.ts b/js/request_test.ts index 7421544fe690ec..e9e1f5164c6a21 100644 --- a/js/request_test.ts +++ b/js/request_test.ts @@ -1,5 +1,5 @@ // Copyright 2018-2019 the Deno authors. All rights reserved. MIT license. -import { test, assertEquals, assert } from "./test_util.ts"; +import { test, assertEquals } from "./test_util.ts"; test(function fromInit(): void { const req = new Request("https://example.com", { @@ -15,35 +15,3 @@ test(function fromInit(): void { assertEquals(req.url, "https://example.com"); assertEquals(req.headers.get("test-header"), "value"); }); - -test(function fromRequest(): void { - const r = new Request("https://example.com"); - // @ts-ignore - r._bodySource = "ahoyhoy"; - r.headers.set("test-header", "value"); - - const req = new Request(r); - - // @ts-ignore - assertEquals(req._bodySource, r._bodySource); - assertEquals(req.url, r.url); - assertEquals(req.headers.get("test-header"), r.headers.get("test-header")); -}); - -test(async function cloneRequestBodyStream(): Promise { - // hack to get a stream - const stream = new Request("", { body: "a test body" }).body; - const r1 = new Request("https://example.com", { - body: stream - }); - - const r2 = r1.clone(); - - const b1 = await r1.text(); - const b2 = await r2.text(); - - assertEquals(b1, b2); - - // @ts-ignore - assert(r1._bodySource !== r2._bodySource); -}); diff --git a/package.json b/package.json index e5ae72a43ca2bb..23e4c8f4e28ef7 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,6 @@ { "name": "deno", "devDependencies": { - "@stardazed/streams": "3.0.0", "@types/prettier": "1.16.1", "@typescript-eslint/eslint-plugin": "1.6.0", "@typescript-eslint/parser": "1.6.0", diff --git a/third_party b/third_party index f034aeb0b9a5ba..47a8f150bcbe3b 160000 --- a/third_party +++ b/third_party @@ -1 +1 @@ -Subproject commit f034aeb0b9a5ba6503cad1186df7e2eae402b352 +Subproject commit 47a8f150bcbe3b78f174ae79dcc07a12adb0d5b5