From 0efab5a48b7b5ee0cf2063cdf5d2486678e75d48 Mon Sep 17 00:00:00 2001 From: cyco130 Date: Wed, 2 Nov 2022 12:46:17 +0300 Subject: [PATCH 1/2] fix(js-runtime): make Headers class case insensitive (#226) --- .changeset/ninety-teachers-jog.md | 5 ++++ packages/cli/npm/run.js | 0 .../js-runtime/src/__tests__/fetch.test.ts | 26 ++++++++++--------- packages/js-runtime/src/runtime/fetch.ts | 6 +++++ 4 files changed, 25 insertions(+), 12 deletions(-) create mode 100644 .changeset/ninety-teachers-jog.md mode change 100644 => 100755 packages/cli/npm/run.js diff --git a/.changeset/ninety-teachers-jog.md b/.changeset/ninety-teachers-jog.md new file mode 100644 index 000000000..b15972624 --- /dev/null +++ b/.changeset/ninety-teachers-jog.md @@ -0,0 +1,5 @@ +--- +'@lagon/js-runtime': patch +--- + +Make Headers class case insensitive diff --git a/packages/cli/npm/run.js b/packages/cli/npm/run.js old mode 100644 new mode 100755 diff --git a/packages/js-runtime/src/__tests__/fetch.test.ts b/packages/js-runtime/src/__tests__/fetch.test.ts index da51845ff..68473e912 100644 --- a/packages/js-runtime/src/__tests__/fetch.test.ts +++ b/packages/js-runtime/src/__tests__/fetch.test.ts @@ -47,8 +47,8 @@ describe('Headers', () => { it('should instanciate with init as object', () => { const headers = new Headers({ 'Content-Type': 'image/jpeg', 'X-My-Custom-Header': 'Zeke are cool' }); expect(Array.from(headers.entries())).toEqual([ - ['Content-Type', 'image/jpeg'], - ['X-My-Custom-Header', 'Zeke are cool'], + ['content-type', 'image/jpeg'], + ['x-my-custom-header', 'Zeke are cool'], ]); }); @@ -65,24 +65,24 @@ describe('Headers', () => { it('should append', () => { const headers = new Headers(); headers.append('a', 'b'); - headers.append('c', 'd'); + headers.append('C', 'd'); expect(headers.get('a')).toEqual('b'); expect(headers.get('c')).toEqual('d'); }); it('should delete', () => { const headers = new Headers({ - a: 'b', + A: 'b', c: 'd', }); headers.delete('a'); - expect(headers.get('a')).toBeUndefined(); + expect(headers.get('A')).toBeUndefined(); }); it('should return entries', () => { const headers = new Headers({ a: 'b', - c: 'd', + C: 'd', }); expect(Array.from(headers.entries())).toEqual([ ['a', 'b'], @@ -103,7 +103,7 @@ describe('Headers', () => { it('should has', () => { const headers = new Headers({ a: 'b', - c: 'd', + C: 'd', }); expect(headers.has('a')).toBeTruthy(); expect(headers.has('c')).toBeTruthy(); @@ -113,7 +113,7 @@ describe('Headers', () => { it('should return keys', () => { const headers = new Headers({ a: 'b', - c: 'd', + C: 'd', }); expect(Array.from(headers.keys())).toEqual(['a', 'c']); }); @@ -122,7 +122,7 @@ describe('Headers', () => { it('should set without init', () => { const headers = new Headers(); headers.set('a', 'b'); - headers.set('c', 'd'); + headers.set('C', 'd'); expect(headers.get('a')).toEqual('b'); expect(headers.get('c')).toEqual('d'); }); @@ -130,12 +130,14 @@ describe('Headers', () => { it('should set with init', () => { const headers = new Headers({ a: 'b', - c: 'd', + C: 'd', }); headers.set('a', 'e'); - headers.set('c', 'f'); + headers.set('B', 'f'); + headers.set('c', 'g'); expect(headers.get('a')).toEqual('e'); - expect(headers.get('c')).toEqual('f'); + expect(headers.get('b')).toEqual('f'); + expect(headers.get('C')).toEqual('g'); }); }); diff --git a/packages/js-runtime/src/runtime/fetch.ts b/packages/js-runtime/src/runtime/fetch.ts index 45c8f4729..b17af5d6e 100644 --- a/packages/js-runtime/src/runtime/fetch.ts +++ b/packages/js-runtime/src/runtime/fetch.ts @@ -19,6 +19,7 @@ export class Headers { } private addValue(name: string, value: string) { + name = name.toLowerCase(); const values = this.headers.get(name); if (values) { @@ -29,10 +30,12 @@ export class Headers { } append(name: string, value: string) { + name = name.toLowerCase(); this.addValue(name, value); } delete(name: string) { + name = name.toLowerCase(); this.headers.delete(name); } @@ -45,10 +48,12 @@ export class Headers { } get(name: string): string | undefined { + name = name.toLowerCase(); return this.headers.get(name)?.[0]; } has(name: string): boolean { + name = name.toLowerCase(); return this.headers.has(name); } @@ -57,6 +62,7 @@ export class Headers { } set(name: string, value: string) { + name = name.toLowerCase(); this.headers.set(name, [value]); } From c1550545337d09c7dc8ee96b6a54d37ebcd0eeb9 Mon Sep 17 00:00:00 2001 From: QuiiBz Date: Wed, 2 Nov 2022 18:27:15 +0100 Subject: [PATCH 2/2] fix: runtime test --- packages/runtime/tests/runtime.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/runtime/tests/runtime.rs b/packages/runtime/tests/runtime.rs index 1ce57cee7..342341eed 100644 --- a/packages/runtime/tests/runtime.rs +++ b/packages/runtime/tests/runtime.rs @@ -190,8 +190,8 @@ async fn return_headers() { )); let mut headers = HashMap::new(); - headers.insert("Content-Type".into(), "text/html".into()); - headers.insert("X-Test".into(), "test".into()); + headers.insert("content-type".into(), "text/html".into()); + headers.insert("x-test".into(), "test".into()); let (tx, rx) = flume::unbounded(); isolate.run(Request::default(), tx).await; @@ -222,8 +222,8 @@ async fn return_headers_from_headers_api() { )); let mut headers = HashMap::new(); - headers.insert("Content-Type".into(), "text/html".into()); - headers.insert("X-Test".into(), "test".into()); + headers.insert("content-type".into(), "text/html".into()); + headers.insert("x-test".into(), "test".into()); let (tx, rx) = flume::unbounded(); isolate.run(Request::default(), tx).await;