From 01f914acc01f5a880e6faefb3b457a4348e4e924 Mon Sep 17 00:00:00 2001 From: Toan Nguyen Date: Fri, 14 Sep 2018 00:24:58 +1000 Subject: [PATCH] Add support for Cloudflare Request Attributes Cloudflare workers now includes [Request Attributes](https://developers.cloudflare.com/workers/reference/request-attributes/). These attributes are accessible every request from the cf object. i.e: `request.cf`. This PR allows us to set and get the request attribute from `request.cf`. To set a cloudflare request attribute: ```js const request = new Request('https://example.com', {cf: {country: 'AUS'}}) ``` To access the request attribute: ```js request.cf ``` --- fetch.js | 1 + test/test.js | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/fetch.js b/fetch.js index 06e4d1dc..d5bcef2d 100644 --- a/fetch.js +++ b/fetch.js @@ -338,6 +338,7 @@ export function Request(input, options) { this.mode = options.mode || this.mode || null this.signal = options.signal || this.signal this.referrer = null + this.cf = options.cf || {} if ((this.method === 'GET' || this.method === 'HEAD') && body) { throw new TypeError('Body not allowed for GET or HEAD requests') diff --git a/test/test.js b/test/test.js index 02119844..dbc37ef6 100644 --- a/test/test.js +++ b/test/test.js @@ -410,6 +410,11 @@ exercise.forEach(function(exerciseMode) { }) }) + test('construct with Cloudflare Request Attribute', function() { + var request = new Request('https://fetch.spec.whatwg.org/', {cf: {country: 'AUS'}}) + assert.equal(request.cf, {country: 'AUS'}) + }) + featureDependent(test, !nativeChrome, 'construct with used Request body', function() { var request1 = new Request('https://fetch.spec.whatwg.org/', { method: 'post',