From 515690c7a71d0bb5810fb68284117aa99aa628a1 Mon Sep 17 00:00:00 2001 From: Matthew Phillips Date: Wed, 28 Sep 2022 10:54:31 -0400 Subject: [PATCH] Remove spoken-word expires --- packages/astro/package.json | 1 - packages/astro/src/core/cookies/cookies.ts | 38 +-------- .../astro-cookies/src/pages/set-value.astro | 2 +- packages/astro/test/units/cookies/get.test.js | 80 +++++++++++++++++++ packages/astro/test/units/cookies/set.test.js | 34 -------- pnpm-lock.yaml | 2 - 6 files changed, 83 insertions(+), 74 deletions(-) diff --git a/packages/astro/package.json b/packages/astro/package.json index 91ba7272f29ba..204ab0000c866 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -129,7 +129,6 @@ "kleur": "^4.1.4", "magic-string": "^0.25.9", "mime": "^3.0.0", - "ms": "^2.1.3", "ora": "^6.1.0", "path-browserify": "^1.0.1", "path-to-regexp": "^6.2.1", diff --git a/packages/astro/src/core/cookies/cookies.ts b/packages/astro/src/core/cookies/cookies.ts index 94e5d713dd3c2..7f530ce858bb0 100644 --- a/packages/astro/src/core/cookies/cookies.ts +++ b/packages/astro/src/core/cookies/cookies.ts @@ -1,10 +1,9 @@ import type { CookieSerializeOptions } from 'cookie'; import { parse, serialize } from 'cookie'; -import ms from 'ms'; interface AstroCookieSetOptions { domain?: string; - expires?: number | Date | string; + expires?: Date; httpOnly?: boolean; maxAge?: number; path?: string; @@ -42,9 +41,6 @@ class AstroCookie implements AstroCookieInterface { return JSON.parse(this.value); } number() { - if(this.value === undefined) { - throw new Error(`Cannot convert undefined to a number.`); - } return Number(this.value); } boolean() { @@ -149,39 +145,9 @@ class AstroCookies implements AstroCookiesInterface { } } - let expires: Date | undefined = undefined; - if(options?.expires) { - let rawExpires = options.expires; - switch(typeof rawExpires) { - case 'string': { - let numberOfMs = ms(rawExpires); - if(numberOfMs === undefined) { - if(rawExpires.includes('month')) { - throw new Error(`Cannot convert months because there is no fixed duration. Use days instead.`); - } else { - throw new Error(`Unable to convert expires expression [${rawExpires}]`); - } - } - let now = Date.now(); - expires = new Date(now + numberOfMs); - break; - } - case 'number': { - expires = new Date(rawExpires); - break; - } - default: { - expires = rawExpires; - break; - } - } - } - const serializeOptions: CookieSerializeOptions = {}; if(options) { - Object.assign(serializeOptions, options, { - expires - }); + Object.assign(serializeOptions, options); } this.#ensureOutgoingMap().set(key, [ diff --git a/packages/astro/test/fixtures/astro-cookies/src/pages/set-value.astro b/packages/astro/test/fixtures/astro-cookies/src/pages/set-value.astro index 57600d42a27d7..cd286da9edf22 100644 --- a/packages/astro/test/fixtures/astro-cookies/src/pages/set-value.astro +++ b/packages/astro/test/fixtures/astro-cookies/src/pages/set-value.astro @@ -1,7 +1,7 @@ --- if(Astro.request.method === 'POST') { Astro.cookies.set('admin', 'true', { - expires: '30 days' + expires: new Date() }); } --- diff --git a/packages/astro/test/units/cookies/get.test.js b/packages/astro/test/units/cookies/get.test.js index c5f50a42cfa72..837c2075e26da 100644 --- a/packages/astro/test/units/cookies/get.test.js +++ b/packages/astro/test/units/cookies/get.test.js @@ -51,6 +51,86 @@ describe('astro/src/core/cookies', () => { expect(value).to.be.an('number'); expect(value).to.equal(22); }); + + it('Coerces non-number into NaN', () => { + const req = new Request('http://example.com/', { + headers: { + 'cookie': 'foo=bar' + } + }); + let cookies = new AstroCookies(req); + + const value = cookies.get('foo').number(); + expect(value).to.be.an('number'); + expect(Number.isNaN(value)).to.equal(true); + }); + }); + + describe('.boolean()', () => { + it('Coerces true into `true`', () => { + const req = new Request('http://example.com/', { + headers: { + 'cookie': 'foo=true' + } + }); + let cookies = new AstroCookies(req); + + const value = cookies.get('foo').boolean(); + expect(value).to.be.an('boolean'); + expect(value).to.equal(true); + }); + + it('Coerces false into `false`', () => { + const req = new Request('http://example.com/', { + headers: { + 'cookie': 'foo=false' + } + }); + let cookies = new AstroCookies(req); + + const value = cookies.get('foo').boolean(); + expect(value).to.be.an('boolean'); + expect(value).to.equal(false); + }); + + it('Coerces 1 into `true`', () => { + const req = new Request('http://example.com/', { + headers: { + 'cookie': 'foo=1' + } + }); + let cookies = new AstroCookies(req); + + const value = cookies.get('foo').boolean(); + expect(value).to.be.an('boolean'); + expect(value).to.equal(true); + }); + + it('Coerces 0 into `false`', () => { + const req = new Request('http://example.com/', { + headers: { + 'cookie': 'foo=0' + } + }); + let cookies = new AstroCookies(req); + + const value = cookies.get('foo').boolean(); + expect(value).to.be.an('boolean'); + expect(value).to.equal(false); + }); + + it('Coerces truthy strings into `true`', () => { + const req = new Request('http://example.com/', { + headers: { + 'cookie': 'foo=bar' + } + }); + let cookies = new AstroCookies(req); + + const value = cookies.get('foo').boolean(); + expect(value).to.be.an('boolean'); + expect(value).to.equal(true); + }); }); }); }); diff --git a/packages/astro/test/units/cookies/set.test.js b/packages/astro/test/units/cookies/set.test.js index 0e6dbebe761d0..acf436766f0db 100644 --- a/packages/astro/test/units/cookies/set.test.js +++ b/packages/astro/test/units/cookies/set.test.js @@ -45,40 +45,6 @@ describe('astro/src/core/cookies', () => { expect(headers[0]).to.equal('one=2'); }); - it('can pass a string distance from now as expires', () => { - let req = new Request('http://example.com/'); - let cookies = new AstroCookies(req); - cookies.set('one', 2, { - expires: '1 week' - }); - let headers = Array.from(cookies.headers()); - expect(headers).to.have.a.lengthOf(1); - expect(headers[0]).to.match(/one=2/); - expect(headers[0]).to.match(/Expires/); - }); - - it('can pass a date as a number to expires', () => { - let req = new Request('http://example.com/'); - let expiration = new Date('Fri, 01 Jan 2044 00:00:00 GMT'); - let cookies = new AstroCookies(req); - cookies.set('one', 2, { - expires: expiration.valueOf() - }); - let headers = Array.from(cookies.headers()); - expect(headers).to.have.a.lengthOf(1); - expect(headers[0]).to.equal('one=2; Expires=Fri, 01 Jan 2044 00:00:00 GMT'); - }); - - it('throws if passing a string to expires that ms does not convert', () => { - let req = new Request('http://example.com/'); - let cookies = new AstroCookies(req); - expect(() => { - cookies.set('one', 2, { - expires: 'unknown date' - }); - }).to.throw(`Unable to convert expires expression [unknown date]`); - }); - it('Can get the value after setting', () => { let req = new Request('http://example.com/'); let cookies = new AstroCookies(req); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fa3122b3b619f..7b9bc0b680e57 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -405,7 +405,6 @@ importers: magic-string: ^0.25.9 mime: ^3.0.0 mocha: ^9.2.2 - ms: ^2.1.3 ora: ^6.1.0 path-browserify: ^1.0.1 path-to-regexp: ^6.2.1 @@ -468,7 +467,6 @@ importers: kleur: 4.1.5 magic-string: 0.25.9 mime: 3.0.0 - ms: 2.1.3 ora: 6.1.2 path-browserify: 1.0.1 path-to-regexp: 6.2.1