From a227332b80f67c65ab37963d894fdac5e274b763 Mon Sep 17 00:00:00 2001 From: ci Date: Tue, 8 Nov 2022 06:47:32 +0000 Subject: [PATCH] release(workspace): v9.12.4 release fix: fixed fetch issues - fixed issue with fetchURL() where no relative URL could be returned as attempting to create a new URL with a relative path and no base would throw an error - fixed issue where any paths on the base url were not being retained when creating the final url - added fixExtraQueryParameters() - added additional tests --- CHANGELOG.md | 9 ++ apps/demo-api/CHANGELOG.md | 4 + apps/demo-e2e/CHANGELOG.md | 4 + apps/demo/CHANGELOG.md | 4 + components/demo-components/CHANGELOG.md | 4 + components/demo-components/package.json | 2 +- components/demo-firebase/CHANGELOG.md | 4 + components/demo-firebase/package.json | 2 +- package.json | 2 +- packages/browser/CHANGELOG.md | 4 + packages/browser/package.json | 2 +- packages/date/CHANGELOG.md | 4 + packages/date/package.json | 2 +- packages/dbx-analytics/CHANGELOG.md | 4 + packages/dbx-analytics/package.json | 2 +- packages/dbx-core/CHANGELOG.md | 4 + packages/dbx-core/package.json | 2 +- packages/dbx-firebase/CHANGELOG.md | 4 + packages/dbx-firebase/package.json | 2 +- packages/dbx-form/CHANGELOG.md | 4 + packages/dbx-form/mapbox/CHANGELOG.md | 4 + packages/dbx-form/mapbox/package.json | 2 +- packages/dbx-form/package.json | 2 +- packages/dbx-web/CHANGELOG.md | 4 + packages/dbx-web/mapbox/CHANGELOG.md | 4 + packages/dbx-web/mapbox/package.json | 2 +- packages/dbx-web/package.json | 2 +- packages/firebase-server/CHANGELOG.md | 4 + packages/firebase-server/mailgun/CHANGELOG.md | 4 + packages/firebase-server/mailgun/package.json | 2 +- packages/firebase-server/package.json | 2 +- packages/firebase-server/test/CHANGELOG.md | 4 + packages/firebase-server/test/package.json | 2 +- packages/firebase/CHANGELOG.md | 4 + packages/firebase/package.json | 2 +- packages/firebase/test/CHANGELOG.md | 4 + packages/firebase/test/package.json | 2 +- packages/model/CHANGELOG.md | 4 + packages/model/package.json | 2 +- packages/nestjs/CHANGELOG.md | 4 + packages/nestjs/mailgun/CHANGELOG.md | 4 + packages/nestjs/mailgun/package.json | 2 +- packages/nestjs/package.json | 2 +- packages/nestjs/stripe/CHANGELOG.md | 4 + packages/nestjs/stripe/package.json | 2 +- packages/rxjs/CHANGELOG.md | 4 + packages/rxjs/package.json | 2 +- packages/util/CHANGELOG.md | 9 ++ packages/util/fetch/CHANGELOG.md | 9 ++ packages/util/fetch/package.json | 2 +- packages/util/fetch/src/lib/fetch.spec.ts | 82 ++++++++++++++----- packages/util/fetch/src/lib/fetch.ts | 9 +- packages/util/fetch/src/lib/json.spec.ts | 19 ++++- packages/util/fetch/src/lib/url.spec.ts | 30 +++---- packages/util/fetch/src/lib/url.ts | 12 +-- packages/util/jest.config.ts | 1 + packages/util/package.json | 2 +- packages/util/src/lib/path/path.spec.ts | 36 +++++++- packages/util/src/lib/path/path.ts | 4 + packages/util/src/lib/string/replace.ts | 32 ++++++-- packages/util/src/lib/string/url.spec.ts | 23 +++++- packages/util/src/lib/string/url.ts | 33 +++++++- packages/util/test/CHANGELOG.md | 4 + packages/util/test/package.json | 2 +- 64 files changed, 372 insertions(+), 86 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cab6aa85..99648d030 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,15 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + +### Bug Fixes + +* fixed fetch issues ([8859b49](https://github.com/dereekb/dbx-components/commit/8859b4967030e9cecc336195f4d12551b9cc8d93)) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/apps/demo-api/CHANGELOG.md b/apps/demo-api/CHANGELOG.md index 7e2245ca1..e6f3ea57f 100644 --- a/apps/demo-api/CHANGELOG.md +++ b/apps/demo-api/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/apps/demo-e2e/CHANGELOG.md b/apps/demo-e2e/CHANGELOG.md index 861102ec3..be1125f73 100644 --- a/apps/demo-e2e/CHANGELOG.md +++ b/apps/demo-e2e/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/apps/demo/CHANGELOG.md b/apps/demo/CHANGELOG.md index aeb7218a1..7d542068d 100644 --- a/apps/demo/CHANGELOG.md +++ b/apps/demo/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/components/demo-components/CHANGELOG.md b/components/demo-components/CHANGELOG.md index 38d46aaf5..25845897d 100644 --- a/components/demo-components/CHANGELOG.md +++ b/components/demo-components/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/components/demo-components/package.json b/components/demo-components/package.json index f9fc34c69..67ad6e02f 100644 --- a/components/demo-components/package.json +++ b/components/demo-components/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/demo-components", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0" diff --git a/components/demo-firebase/CHANGELOG.md b/components/demo-firebase/CHANGELOG.md index 4899efbd1..7d29dcf7e 100644 --- a/components/demo-firebase/CHANGELOG.md +++ b/components/demo-firebase/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/components/demo-firebase/package.json b/components/demo-firebase/package.json index 1479aeee8..7f22654a3 100644 --- a/components/demo-firebase/package.json +++ b/components/demo-firebase/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/demo-firebase", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/package.json b/package.json index 222280646..83195e066 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-components", - "version": "9.12.3", + "version": "9.12.4", "license": "MIT", "scripts": { "postinstall": "ngcc --properties es2020 browser module main && echo >> .env.local", diff --git a/packages/browser/CHANGELOG.md b/packages/browser/CHANGELOG.md index df16a339c..3f4e958b6 100644 --- a/packages/browser/CHANGELOG.md +++ b/packages/browser/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/browser/package.json b/packages/browser/package.json index 582ce57f0..89ec03e21 100644 --- a/packages/browser/package.json +++ b/packages/browser/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/browser", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/date/CHANGELOG.md b/packages/date/CHANGELOG.md index 56e40c1ab..6e5cdb6c6 100644 --- a/packages/date/CHANGELOG.md +++ b/packages/date/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/date/package.json b/packages/date/package.json index f5059ce9b..72f7c2610 100644 --- a/packages/date/package.json +++ b/packages/date/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/date", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/dbx-analytics/CHANGELOG.md b/packages/dbx-analytics/CHANGELOG.md index 112777b14..64ecc8128 100644 --- a/packages/dbx-analytics/CHANGELOG.md +++ b/packages/dbx-analytics/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-analytics/package.json b/packages/dbx-analytics/package.json index a2b649c97..fa75f3f99 100644 --- a/packages/dbx-analytics/package.json +++ b/packages/dbx-analytics/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-analytics", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0" diff --git a/packages/dbx-core/CHANGELOG.md b/packages/dbx-core/CHANGELOG.md index 2f6bf7705..22a1c1451 100644 --- a/packages/dbx-core/CHANGELOG.md +++ b/packages/dbx-core/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-core/package.json b/packages/dbx-core/package.json index aa40fd208..8cc34ef61 100644 --- a/packages/dbx-core/package.json +++ b/packages/dbx-core/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-core", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0", diff --git a/packages/dbx-firebase/CHANGELOG.md b/packages/dbx-firebase/CHANGELOG.md index 20d6d9299..5a94fe283 100644 --- a/packages/dbx-firebase/CHANGELOG.md +++ b/packages/dbx-firebase/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-firebase/package.json b/packages/dbx-firebase/package.json index 618673331..9e8ab692a 100644 --- a/packages/dbx-firebase/package.json +++ b/packages/dbx-firebase/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-firebase", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0" diff --git a/packages/dbx-form/CHANGELOG.md b/packages/dbx-form/CHANGELOG.md index 882d670e6..1bfe92f65 100644 --- a/packages/dbx-form/CHANGELOG.md +++ b/packages/dbx-form/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-form/mapbox/CHANGELOG.md b/packages/dbx-form/mapbox/CHANGELOG.md index e52d64c61..a4ef08f55 100644 --- a/packages/dbx-form/mapbox/CHANGELOG.md +++ b/packages/dbx-form/mapbox/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-form/mapbox/package.json b/packages/dbx-form/mapbox/package.json index c172694f3..2253bf3aa 100644 --- a/packages/dbx-form/mapbox/package.json +++ b/packages/dbx-form/mapbox/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-form/mapbox", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.1.0", "@angular/core": "^14.1.0" diff --git a/packages/dbx-form/package.json b/packages/dbx-form/package.json index 646f3e576..daf529ea9 100644 --- a/packages/dbx-form/package.json +++ b/packages/dbx-form/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-form", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0", diff --git a/packages/dbx-web/CHANGELOG.md b/packages/dbx-web/CHANGELOG.md index 4d42ea9fb..c156e6337 100644 --- a/packages/dbx-web/CHANGELOG.md +++ b/packages/dbx-web/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-web/mapbox/CHANGELOG.md b/packages/dbx-web/mapbox/CHANGELOG.md index eeef46bc5..6b34e399b 100644 --- a/packages/dbx-web/mapbox/CHANGELOG.md +++ b/packages/dbx-web/mapbox/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/dbx-web/mapbox/package.json b/packages/dbx-web/mapbox/package.json index 43bcc7992..c90ca6340 100644 --- a/packages/dbx-web/mapbox/package.json +++ b/packages/dbx-web/mapbox/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-web/mapbox", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.1.0", "@angular/core": "^14.1.0" diff --git a/packages/dbx-web/package.json b/packages/dbx-web/package.json index 4d941341e..61e586490 100644 --- a/packages/dbx-web/package.json +++ b/packages/dbx-web/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/dbx-web", - "version": "9.12.3", + "version": "9.12.4", "peerDependencies": { "@angular/common": "^14.0.0", "@angular/core": "^14.0.0", diff --git a/packages/firebase-server/CHANGELOG.md b/packages/firebase-server/CHANGELOG.md index 41ce90a64..e4e99d7bf 100644 --- a/packages/firebase-server/CHANGELOG.md +++ b/packages/firebase-server/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/firebase-server/mailgun/CHANGELOG.md b/packages/firebase-server/mailgun/CHANGELOG.md index 600cace8d..091d08547 100644 --- a/packages/firebase-server/mailgun/CHANGELOG.md +++ b/packages/firebase-server/mailgun/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/firebase-server/mailgun/package.json b/packages/firebase-server/mailgun/package.json index bcedcf282..cb1539898 100644 --- a/packages/firebase-server/mailgun/package.json +++ b/packages/firebase-server/mailgun/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/firebase-server/mailgun", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/firebase-server/package.json b/packages/firebase-server/package.json index ab0630619..8cda9867a 100644 --- a/packages/firebase-server/package.json +++ b/packages/firebase-server/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/firebase-server", - "version": "9.12.3", + "version": "9.12.4", "devDependencies": { "firebase-functions-test": "2.0.2" }, diff --git a/packages/firebase-server/test/CHANGELOG.md b/packages/firebase-server/test/CHANGELOG.md index a20fd9ea9..bfa7720ba 100644 --- a/packages/firebase-server/test/CHANGELOG.md +++ b/packages/firebase-server/test/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/firebase-server/test/package.json b/packages/firebase-server/test/package.json index 740174d77..5927cea45 100644 --- a/packages/firebase-server/test/package.json +++ b/packages/firebase-server/test/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/firebase-server/test", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/firebase/CHANGELOG.md b/packages/firebase/CHANGELOG.md index 5a456bfb8..22aa7e0b5 100644 --- a/packages/firebase/CHANGELOG.md +++ b/packages/firebase/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/firebase/package.json b/packages/firebase/package.json index 1ddcb8cfe..333e3542e 100644 --- a/packages/firebase/package.json +++ b/packages/firebase/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/firebase", - "version": "9.12.3", + "version": "9.12.4", "devDependencies": { "@firebase/rules-unit-testing": "^2.0.0" }, diff --git a/packages/firebase/test/CHANGELOG.md b/packages/firebase/test/CHANGELOG.md index ccd119822..4b5778ff5 100644 --- a/packages/firebase/test/CHANGELOG.md +++ b/packages/firebase/test/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/firebase/test/package.json b/packages/firebase/test/package.json index aeb812546..f0394f172 100644 --- a/packages/firebase/test/package.json +++ b/packages/firebase/test/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/firebase/test", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/model/CHANGELOG.md b/packages/model/CHANGELOG.md index e82b18926..b96447a3c 100644 --- a/packages/model/CHANGELOG.md +++ b/packages/model/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/model/package.json b/packages/model/package.json index 48459ffa0..a1cd008dc 100644 --- a/packages/model/package.json +++ b/packages/model/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/model", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/nestjs/CHANGELOG.md b/packages/nestjs/CHANGELOG.md index 079b74516..90b637bfa 100644 --- a/packages/nestjs/CHANGELOG.md +++ b/packages/nestjs/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/nestjs/mailgun/CHANGELOG.md b/packages/nestjs/mailgun/CHANGELOG.md index 07e0a7ff9..35f4ae1ed 100644 --- a/packages/nestjs/mailgun/CHANGELOG.md +++ b/packages/nestjs/mailgun/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/nestjs/mailgun/package.json b/packages/nestjs/mailgun/package.json index 7a35e455b..0b8e09281 100644 --- a/packages/nestjs/mailgun/package.json +++ b/packages/nestjs/mailgun/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/nestjs/mailgun", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/nestjs/package.json b/packages/nestjs/package.json index a01efab15..bf05b1e8d 100644 --- a/packages/nestjs/package.json +++ b/packages/nestjs/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/nestjs", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs", "exports": { ".": { diff --git a/packages/nestjs/stripe/CHANGELOG.md b/packages/nestjs/stripe/CHANGELOG.md index 0ff2f7f93..a0f686534 100644 --- a/packages/nestjs/stripe/CHANGELOG.md +++ b/packages/nestjs/stripe/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/nestjs/stripe/package.json b/packages/nestjs/stripe/package.json index 4e4abd6ee..86f8021de 100644 --- a/packages/nestjs/stripe/package.json +++ b/packages/nestjs/stripe/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/nestjs/stripe", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/rxjs/CHANGELOG.md b/packages/rxjs/CHANGELOG.md index 826b7da7c..03e6aa352 100644 --- a/packages/rxjs/CHANGELOG.md +++ b/packages/rxjs/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/rxjs/package.json b/packages/rxjs/package.json index e5c7ebda2..f2c98282d 100644 --- a/packages/rxjs/package.json +++ b/packages/rxjs/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/rxjs", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" } diff --git a/packages/util/CHANGELOG.md b/packages/util/CHANGELOG.md index 324c13e52..76f97486b 100644 --- a/packages/util/CHANGELOG.md +++ b/packages/util/CHANGELOG.md @@ -2,6 +2,15 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + +### Bug Fixes + +* fixed fetch issues ([8859b49](https://github.com/dereekb/dbx-components/commit/8859b4967030e9cecc336195f4d12551b9cc8d93)) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/util/fetch/CHANGELOG.md b/packages/util/fetch/CHANGELOG.md index 7b305cad9..665fca583 100644 --- a/packages/util/fetch/CHANGELOG.md +++ b/packages/util/fetch/CHANGELOG.md @@ -2,6 +2,15 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + +### Bug Fixes + +* fixed fetch issues ([8859b49](https://github.com/dereekb/dbx-components/commit/8859b4967030e9cecc336195f4d12551b9cc8d93)) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/util/fetch/package.json b/packages/util/fetch/package.json index 1454354a5..841f540d3 100644 --- a/packages/util/fetch/package.json +++ b/packages/util/fetch/package.json @@ -1,4 +1,4 @@ { "name": "@dereekb/util/fetch", - "version": "9.12.3" + "version": "9.12.4" } diff --git a/packages/util/fetch/src/lib/fetch.spec.ts b/packages/util/fetch/src/lib/fetch.spec.ts index 43b66aa17..2ff809909 100644 --- a/packages/util/fetch/src/lib/fetch.spec.ts +++ b/packages/util/fetch/src/lib/fetch.spec.ts @@ -32,34 +32,72 @@ describe('fetchRequestFactory()', () => { }); describe('valid', () => { - const baseUrl = 'https://components.dereekb.com/'; + describe('base url as domain and path', () => { + describe('with slash at end', () => { + const baseUrl = 'https://components.dereekb.com/api/'; - const factory = testFetch.fetchRequestFactory({ - baseUrl - }); + const factory = testFetch.fetchRequestFactory({ + baseUrl + }); - it('should retain the path of an input request.', () => { - const expectedUrl = 'https://google.com/'; - const request = testFetch.makeRequest(expectedUrl); - const result = factory(request); - expect(result.url).toBe(expectedUrl); - }); + describe('url input as string', () => { + it('should append the base url with the path to the request.', () => { + const result = factory('test'); + expect(result.url).toBe(`${baseUrl}test`); + }); + }); + }); - it('should retain the path of an input URL.', () => { - const expectedUrl = 'https://google.com/'; - const request = new URL(expectedUrl); - const result = factory(request); - expect(result.url).toBe(expectedUrl); - }); + describe('without slash at end', () => { + const baseUrl = 'https://components.dereekb.com/api'; + + const factory = testFetch.fetchRequestFactory({ + baseUrl + }); - it('should append the base url to the request.', () => { - const result = factory('test'); - expect(result.url).toBe('https://components.dereekb.com/test'); + describe('url input as string', () => { + it('should append the base url with the path to the request.', () => { + const result = factory('test'); + expect(result.url).toBe(`${baseUrl}/test`); + }); + }); + }); }); - it('should append the base url to the request if it has a front slash.', () => { - const result = factory('/test'); - expect(result.url).toBe('https://components.dereekb.com/test'); + describe('base url as domain', () => { + const baseUrl = 'https://components.dereekb.com/'; + + const factory = testFetch.fetchRequestFactory({ + baseUrl + }); + + describe('url input as string', () => { + it('should retain the path of an input request if it begins with http(s).', () => { + const expectedUrl = 'https://google.com/'; + const request = testFetch.makeRequest(expectedUrl); + const result = factory(request); + expect(result.url).toBe(expectedUrl); + }); + + it('should append the base url to the request.', () => { + const result = factory('test'); + expect(result.url).toBe('https://components.dereekb.com/test'); + }); + + it('should append the base url to the request if it has a front slash.', () => { + const result = factory('/test'); + expect(result.url).toBe('https://components.dereekb.com/test'); + }); + }); + + describe('url input as URL', () => { + it('should use the URL as is, and ignore the baseUrl.', () => { + const expectedUrl = 'https://google.com/'; + const request = new URL(expectedUrl); + const result = factory(request); + expect(result.url).toBe(expectedUrl); + }); + }); }); }); }); diff --git a/packages/util/fetch/src/lib/fetch.ts b/packages/util/fetch/src/lib/fetch.ts index 57f6ba16b..e9dc6133e 100644 --- a/packages/util/fetch/src/lib/fetch.ts +++ b/packages/util/fetch/src/lib/fetch.ts @@ -1,4 +1,4 @@ -import { Factory, MapFunction, Maybe, removeTrailingFileTypeSeparators, WebsitePath, WebsiteUrl } from '@dereekb/util'; +import { Factory, fixMultiSlashesInSlashPath, MapFunction, Maybe, removeTrailingFileTypeSeparators, removeTrailingSlashes, WebsitePath, WebsiteUrl } from '@dereekb/util'; import { fetchOk, requireOkResponse } from './error'; import { ConfiguredFetchWithTimeout, RequestInitWithTimeout, RequestWithTimeout } from './fetch.type'; import { fetchTimeout } from './timeout'; @@ -132,12 +132,15 @@ export type AbortControllerFactory = Factory; export function fetchRequestFactory(config: FetchRequestFactoryInput): FetchRequestFactory { const { makeRequest = (input, init) => new Request(input, init), baseUrl: inputBaseUrl, baseRequest: inputBaseRequest, timeout, requestInitFactory, useBaseUrlForConfiguredFetchRequests = false } = config; - const baseUrl = inputBaseUrl ? new URL(removeTrailingFileTypeSeparators(inputBaseUrl)) : undefined; + const baseUrl = inputBaseUrl ? new URL(removeTrailingSlashes(inputBaseUrl)) : undefined; const baseRequest = timeout ? { ...inputBaseRequest, timeout } : inputBaseRequest; const buildUrl = baseUrl ? (url: string | WebsitePath | URL) => { - return new URL(url, baseUrl); + // retain the origin and any pathname from the base url + const urlPath = baseUrl.origin + fixMultiSlashesInSlashPath('/' + baseUrl.pathname + '/' + url); + const result = new URL(urlPath, baseUrl); + return result; } : undefined; diff --git a/packages/util/fetch/src/lib/json.spec.ts b/packages/util/fetch/src/lib/json.spec.ts index c241619eb..7ce31a168 100644 --- a/packages/util/fetch/src/lib/json.spec.ts +++ b/packages/util/fetch/src/lib/json.spec.ts @@ -1,4 +1,4 @@ -import { ServerError } from '@dereekb/util'; +import { ServerError, WebsiteDomain, WebsitePath } from '@dereekb/util'; import { itShouldFail, expectFail, failDueToSuccess, failSuccessfully } from '@dereekb/util/test'; import { fetchService, fetchRequestFactory, FetchRequestFactory, FetchService } from './fetch'; import fetch, { Request, RequestInfo, RequestInit } from 'node-fetch'; @@ -12,11 +12,28 @@ jest.setTimeout(30000); describe('fetchJson()', () => { // Expected result: {"statusCode":403,"message":"Forbidden"} + const forbiddenUrlBaseUrl: WebsiteDomain = 'https://components.dereekb.com/api'; + const forbiddernUrlRelativeUrl: WebsitePath = '/webhook'; + const forbiddenUrl = 'https://components.dereekb.com/api/webhook'; const fetch = testFetch.makeFetch(); const fetchJson = fetchJsonFunction(fetch); + describe('fetch with base url', () => { + const fetch = testFetch.makeFetch({ + baseUrl: forbiddenUrlBaseUrl + }); + + const fetchJson = fetchJsonFunction(fetch); + + it('should send a GET request by default.', async () => { + // NOTE: Fetch will not throw an error on non-ok results, allowing us to test against the webhook url. + const response = await fetchJson<{ statusCode: number; message: 'Forbidden' }>(forbiddernUrlRelativeUrl); + expect(response.message).toBe('Forbidden'); + }); + }); + describe('GET', () => { const method = 'GET'; diff --git a/packages/util/fetch/src/lib/url.spec.ts b/packages/util/fetch/src/lib/url.spec.ts index 1520ec8e7..473f232a3 100644 --- a/packages/util/fetch/src/lib/url.spec.ts +++ b/packages/util/fetch/src/lib/url.spec.ts @@ -42,26 +42,26 @@ describe('fetchURL()', () => { describe('with string url', () => { it('should return the url', () => { const result = fetchURL(urlString); - expect(result.href).toBe(urlString); + expect(result).toBe(urlString); }); }); describe('with URL', () => { it('should return the url', () => { const result = fetchURL(url); - expect(result.href).toBe(url.href); + expect(result).toBe(url.href); }); }); describe('with FetchURLConfiguration input', () => { it('should return the url', () => { const result = fetchURL({ url }); - expect(result.href).toBe(url.href); + expect(result).toBe(url.href); }); it('should return the url with query params attached', () => { const result = fetchURL({ url, queryParams }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as an object', () => { @@ -71,7 +71,7 @@ describe('fetchURL()', () => { }; const expectedParams = objectToMap(queryParamsObject); const result = fetchURL({ url, queryParams: queryParamsObject }); - expect(result.href).toBe(url.href + `?${new URLSearchParams(Array.from(expectedParams.entries())).toString()}`); + expect(result).toBe(url.href + `?${new URLSearchParams(Array.from(expectedParams.entries())).toString()}`); }); it('should return the url with query params of different types attached as an object', () => { @@ -82,7 +82,7 @@ describe('fetchURL()', () => { }; const expectedParams = objectToMap(queryParamsObject); const result = fetchURL({ url, queryParams: queryParamsObject }); - expect(result.href).toBe(url.href + `?${new URLSearchParams(Array.from(expectedParams.entries()).map((x) => [String(x[0]), String(x[1])])).toString()}`); + expect(result).toBe(url.href + `?${new URLSearchParams(Array.from(expectedParams.entries()).map((x) => [String(x[0]), String(x[1])])).toString()}`); }); it('should return the url with query params of different types attached as an object with an array as a set of values for a key', () => { @@ -92,7 +92,7 @@ describe('fetchURL()', () => { }; const result = fetchURL({ url, queryParams: queryParamsObject }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params of different types attached as an object and ignore null values', () => { @@ -104,23 +104,23 @@ describe('fetchURL()', () => { }; const result = fetchURL({ url, queryParams: queryParamsObject }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as a tuple', () => { const result = fetchURL({ url, queryParams: queryParamsTuples }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as a tuple with an array of values', () => { const result = fetchURL({ url, queryParams: queryParamsTuples }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as a Map', () => { const expectedParams = new Map(queryParamsTuples); const result = fetchURL({ url, queryParams: expectedParams }); - expect(result.href).toBe(url.href + `?${new URLSearchParams(Array.from(expectedParams.entries())).toString()}`); + expect(result).toBe(url.href + `?${new URLSearchParams(Array.from(expectedParams.entries())).toString()}`); }); it('should return the url with query params attached as a tuples array', () => { @@ -131,7 +131,7 @@ describe('fetchURL()', () => { ]; const result = fetchURL({ url, queryParams: queryParamsTuplesWithArray }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as a tuples array undefined keys and values', () => { @@ -143,17 +143,17 @@ describe('fetchURL()', () => { ]; const result = fetchURL({ url, queryParams: queryParamsTuplesWithArray }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as a string with a "?" attached', () => { const result = fetchURL({ url, queryParams: `?${queryParams.toString()}` }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); it('should return the url with query params attached as a string without a "?" attached', () => { const result = fetchURL({ url, queryParams: `${queryParams.toString()}` }); - expect(result.href).toBe(url.href + `?${queryParams.toString()}`); + expect(result).toBe(url.href + `?${queryParams.toString()}`); }); }); }); diff --git a/packages/util/fetch/src/lib/url.ts b/packages/util/fetch/src/lib/url.ts index 3707c3bde..ffec8b528 100644 --- a/packages/util/fetch/src/lib/url.ts +++ b/packages/util/fetch/src/lib/url.ts @@ -1,4 +1,4 @@ -import { ArrayOrValue, forEachInIterable, forEachKeyValue, isIterable, mapIterable, Maybe, useIterableOrValue } from '@dereekb/util'; +import { ArrayOrValue, fixExtraQueryParameters, forEachInIterable, forEachKeyValue, isIterable, mapIterable, Maybe, useIterableOrValue } from '@dereekb/util'; export type SimpleFetchURLInput = URL | string; @@ -15,19 +15,19 @@ export interface FetchURLConfiguration { export type FetchURLInput = SimpleFetchURLInput | FetchURLConfiguration; -export function fetchURL(input: FetchURLInput): URL { - let url: URL; +export function fetchURL(input: FetchURLInput): string { + let url: string; if (typeof input === 'string') { - url = new URL(input); - } else if (isURL(input)) { url = input; + } else if (isURL(input)) { + url = input.href; } else { const baseUrl = fetchURL(input.url); if (input.queryParams) { const searchParams = queryParamsToSearchParams(input.queryParams); - url = new URL(`?${searchParams.toString()}`, baseUrl); + url = fixExtraQueryParameters(baseUrl + `?${searchParams.toString()}`); } else { url = baseUrl; } diff --git a/packages/util/jest.config.ts b/packages/util/jest.config.ts index cecb7f344..7f6649260 100644 --- a/packages/util/jest.config.ts +++ b/packages/util/jest.config.ts @@ -12,5 +12,6 @@ module.exports = { '^.+\\.[tj]sx?$': 'ts-jest' }, moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + modulePathIgnorePatterns: ['test', 'fetch'], coverageDirectory: '../../coverage/packages/util' }; diff --git a/packages/util/package.json b/packages/util/package.json index 197780991..c2d736ab2 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -1,6 +1,6 @@ { "name": "@dereekb/util", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs", "exports": { ".": { diff --git a/packages/util/src/lib/path/path.spec.ts b/packages/util/src/lib/path/path.spec.ts index e99245e3b..69b138c3b 100644 --- a/packages/util/src/lib/path/path.spec.ts +++ b/packages/util/src/lib/path/path.spec.ts @@ -1,4 +1,4 @@ -import { replaceInvalidFilePathTypeSeparatorsInSlashPath, slashPathFactory, slashPathName, slashPathValidationFactory, SlashPathFolder, slashPathType, SlashPathTypedFile, SlashPathFile, SLASH_PATH_SEPARATOR, isolateSlashPathFunction } from './path'; +import { replaceInvalidFilePathTypeSeparatorsInSlashPath, slashPathFactory, slashPathName, slashPathValidationFactory, SlashPathFolder, slashPathType, SlashPathTypedFile, SlashPathFile, SLASH_PATH_SEPARATOR, isolateSlashPathFunction, removeTrailingFileTypeSeparators, removeTrailingSlashes } from './path'; describe('slashPathName', () => { it('should return the file name', () => { @@ -40,6 +40,40 @@ describe('slashPathType', () => { }); }); +describe('removeTrailingSlashes()', () => { + it('should remove all trailing slashes', () => { + const folderName = 'wMNzlhSlp6Gb93V8u4Rs'; + const folderPath: SlashPathFolder = `${folderName}/`; + const result = removeTrailingSlashes(folderPath); + expect(result).toBe(folderName); + }); + + it('should remove all trailing slashes from a url', () => { + const url = 'https://components.dereekb.com'; + const urlPath = `${url}/`; + const result = removeTrailingSlashes(urlPath); + expect(result).toBe(url); + }); +}); + +describe('removeTrailingFileTypeSeparators()', () => { + it('should remove the trailing file type separator (".")', () => { + const filename = 'filename'; + const typedFilePath: SlashPathTypedFile = `${filename}.`; + + const result = removeTrailingFileTypeSeparators(typedFilePath); + expect(result).toBe(filename); + }); + + it('should not remove the trailing file type.', () => { + const filename = 'filename'; + const typedFilePath: SlashPathTypedFile = `${filename}.pdf`; + + const result = removeTrailingFileTypeSeparators(typedFilePath); + expect(result).toBe(typedFilePath); + }); +}); + describe('replaceInvalidFilePathTypeSeparatorsInSlashPath()', () => { it('should replace all extra file path type separators', () => { const value = '/path/to/file.who.thought.about.it.test.png'; diff --git a/packages/util/src/lib/path/path.ts b/packages/util/src/lib/path/path.ts index 2f829a8a4..3a5d17afd 100644 --- a/packages/util/src/lib/path/path.ts +++ b/packages/util/src/lib/path/path.ts @@ -186,6 +186,10 @@ export function replaceMultipleFilePathsInSlashPath(input: SlashPath): SlashPath return input.replace(ALL_DOUBLE_SLASHES_REGEX, SLASH_PATH_SEPARATOR); } +export function removeTrailingSlashes(input: SlashPath): SlashPath { + return input.replace(TRAILING_SLASHES_REGEX, ''); +} + export function removeTrailingFileTypeSeparators(input: SlashPath): SlashPath { return input.replace(TRAILING_FILE_TYPE_SEPARATORS_REGEX, ''); } diff --git a/packages/util/src/lib/string/replace.ts b/packages/util/src/lib/string/replace.ts index cea6d90a0..aa3bb9e8e 100644 --- a/packages/util/src/lib/string/replace.ts +++ b/packages/util/src/lib/string/replace.ts @@ -47,15 +47,7 @@ export function escapeStringForRegex(input: string): string { /** * index of all occurences in the input to replace/merge together. */ - const occurrences: number[] = []; - - for (let i = 0; i < input.length; i += 1) { - const char = input[i]; - - if (REGEX_SPECIAL_CHARACTERS_SET.has(char)) { - occurrences.push(i); - } - } + const occurrences = findAllCharacterOccurences(REGEX_SPECIAL_CHARACTERS_SET, input); let result: string; @@ -99,3 +91,25 @@ export function escapeStringForRegex(input: string): string { return result; } + +export type FindAllCharacterOccurencesFunction = (input: string) => number[]; + +export function findAllCharacterOccurencesFunction(characterSet: Set): FindAllCharacterOccurencesFunction { + return (input: string) => { + const occurrences: number[] = []; + + for (let i = 0; i < input.length; i += 1) { + const char = input[i]; + + if (characterSet.has(char)) { + occurrences.push(i); + } + } + + return occurrences; + }; +} + +export function findAllCharacterOccurences(set: Set, input: string): number[] { + return findAllCharacterOccurencesFunction(set)(input); +} diff --git a/packages/util/src/lib/string/url.spec.ts b/packages/util/src/lib/string/url.spec.ts index 59f701a7f..e4e8acc64 100644 --- a/packages/util/src/lib/string/url.spec.ts +++ b/packages/util/src/lib/string/url.spec.ts @@ -1,4 +1,4 @@ -import { isolateWebsitePathFunction, hasWebsiteDomain, removeHttpFromUrl, websiteDomainAndPathPairFromWebsiteUrl, websitePathAndQueryPair, websitePathFromWebsiteDomainAndPath, websitePathFromWebsiteUrl } from './url'; +import { isolateWebsitePathFunction, hasWebsiteDomain, removeHttpFromUrl, websiteDomainAndPathPairFromWebsiteUrl, websitePathAndQueryPair, websitePathFromWebsiteDomainAndPath, websitePathFromWebsiteUrl, fixExtraQueryParameters } from './url'; const domain = 'dereekb.com'; @@ -102,6 +102,27 @@ describe('websitePathAndQueryPair()', () => { expect(result.path).toBe(path); expect(result.query).toBe(query); }); + + it('should return the website path from the input url (no query)', () => { + const path = '/test/hello/world'; + + const result = websitePathAndQueryPair(`${path}`); + expect(result.path).toBe(path); + expect(result.query).not.toBeDefined(); + }); +}); + +describe('fixExtraQueryParameters()', () => { + it('should replace any extra query parameters', () => { + const path = '/test/hello/world'; + const query = 'hello=world'; + + const input = path + '?' + query + '&' + query + '?' + query + '?' + query; + const expected = path + '?' + query + '&' + query + '&' + query + '&' + query; + + const result = fixExtraQueryParameters(input); + expect(result).toBe(expected); + }); }); describe('websitePathFromWebsiteUrl()', () => { diff --git a/packages/util/src/lib/string/url.ts b/packages/util/src/lib/string/url.ts index 1eb9004e3..94cde1610 100644 --- a/packages/util/src/lib/string/url.ts +++ b/packages/util/src/lib/string/url.ts @@ -2,10 +2,10 @@ import { IndexRangeInput } from './../value/indexed'; import { isolateSlashPathFunction, SLASH_PATH_SEPARATOR, toAbsoluteSlashPathStartType } from '../path/path'; import { chainMapSameFunctions, MapFunction } from '../value/map'; import { Maybe } from '../value/maybe.type'; -import { escapeStringForRegex } from './replace'; +import { escapeStringForRegex, findAllCharacterOccurences, findAllCharacterOccurencesFunction } from './replace'; import { splitJoinRemainder } from './string'; import { TransformStringFunction } from './transform'; -import { replaceLastCharacterIfIsFunction } from './char'; +import { replaceCharacterAtIndexWith, replaceLastCharacterIfIsFunction } from './char'; /** * A website domain. @@ -163,7 +163,8 @@ export interface WebsitePathAndQueryPair { } export function websitePathAndQueryPair(inputPath: string | WebsitePath): WebsitePathAndQueryPair { - const [path, query] = inputPath.split('?', 2); + const [path, rawQuery] = inputPath.split('?', 2); + const query = rawQuery ? fixExtraQueryParameters(rawQuery, true) : undefined; return { path: path as WebsitePath, @@ -171,6 +172,32 @@ export function websitePathAndQueryPair(inputPath: string | WebsitePath): Websit }; } +/** + * Replaces any extra query parameter "?" characters with an "&" character. + * + * Can also choose to replace all instead, incase the input string should be considered the query without. + * + * @param input + */ +export function fixExtraQueryParameters(input: string, replaceAll = false): string { + const questionMarkIndexes = findAllCharacterOccurences(new Set('?'), input); + let indexesToReplace: number[] | undefined; + let fixed = input; + + if (replaceAll && questionMarkIndexes.length) { + indexesToReplace = questionMarkIndexes; + } else if (questionMarkIndexes.length > 1) { + indexesToReplace = questionMarkIndexes.reverse(); + indexesToReplace.pop(); // remove the "first" so it does not get replaced. + } + + if (indexesToReplace?.length) { + indexesToReplace.forEach((index) => (fixed = replaceCharacterAtIndexWith(fixed, index, '&'))); + } + + return fixed; +} + /** * Reads the website path from the input. * diff --git a/packages/util/test/CHANGELOG.md b/packages/util/test/CHANGELOG.md index 20feea59a..a243a22c9 100644 --- a/packages/util/test/CHANGELOG.md +++ b/packages/util/test/CHANGELOG.md @@ -2,6 +2,10 @@ This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver). +## [9.12.4](https://github.com/dereekb/dbx-components/compare/v9.12.3-dev...v9.12.4) (2022-11-08) + + + ## [9.12.3](https://github.com/dereekb/dbx-components/compare/v9.12.2-dev...v9.12.3) (2022-11-07) diff --git a/packages/util/test/package.json b/packages/util/test/package.json index f4309f04a..c6711a775 100644 --- a/packages/util/test/package.json +++ b/packages/util/test/package.json @@ -1,5 +1,5 @@ { "name": "@dereekb/util/test", - "version": "9.12.3", + "version": "9.12.4", "type": "commonjs" }