[web] bump js-yaml in reference-parser (#33953)

* [web] bump `js-yaml` in `reference-parser`

`.yarn/patches/referer-parser-npm-0.0.3.patch` bumps the `js-yaml` dependency,
but yarn patches don't take that into account the patched package.json for dependency resolution.

* Add RequestHelper test

GitOrigin-RevId: 8246f8ab54956897cc361d7c02b65e5363ad43ec
This commit is contained in:
Miguel Serrano
2026-05-29 08:06:27 +00:00
committed by Copybot
parent 05895dc0dc
commit 63852c5934
3 changed files with 89 additions and 39 deletions
+1
View File
@@ -35,6 +35,7 @@
"@xmldom/xmldom": "0.8.13",
"argparse/underscore": "1.13.8",
"east/underscore": "1.13.8",
"referer-parser/js-yaml": "^4.1.0",
"sandboxed-module": "patch:sandboxed-module@npm%3A2.0.4#~/.yarn/patches/sandboxed-module-npm-2.0.4-f8b45aacc9.patch",
"request/tough-cookie": "5.1.2",
"request/form-data": "2.5.5",
@@ -0,0 +1,88 @@
import { assert } from 'vitest'
import RequestHelper from '../../../../app/src/Features/Analytics/RequestHelper.mjs'
describe('RequestHelper', function () {
describe('parseUtm', function () {
it('returns null when query has no UTM keys', function () {
assert.isNull(RequestHelper.parseUtm({ foo: 'bar' }))
})
it('returns null for empty query', function () {
assert.isNull(RequestHelper.parseUtm({}))
})
it('extracts a single UTM key', function () {
assert.deepEqual(
RequestHelper.parseUtm({ utm_source: 'google', other: 'ignored' }),
{ utm_source: 'google' }
)
})
it('extracts all UTM keys', function () {
const query = {
utm_campaign: 'camp',
utm_source: 'src',
utm_term: 'term',
utm_content: 'cont',
utm_medium: 'med',
utm_count: '1',
utm_id: 'id1',
}
assert.deepEqual(RequestHelper.parseUtm(query), query)
})
it('ignores falsy UTM values', function () {
assert.isNull(RequestHelper.parseUtm({ utm_source: '' }))
})
})
describe('parseReferrer', function () {
const pageUrl = 'https://www.overleaf.com/project'
describe('with no referrer', function () {
it('returns direct medium', function () {
assert.deepEqual(RequestHelper.parseReferrer(null, pageUrl), {
medium: 'direct',
})
})
it('returns direct medium for undefined', function () {
assert.deepEqual(RequestHelper.parseReferrer(undefined, pageUrl), {
medium: 'direct',
})
})
})
describe('with a search engine referrer', function () {
it('returns search medium and source', function () {
const result = RequestHelper.parseReferrer(
'https://www.google.com/search?q=overleaf',
pageUrl
)
assert.equal(result.medium, 'search')
assert.equal(result.source, 'Google')
})
})
describe('with an internal referrer (same site)', function () {
it('returns internal medium', function () {
const result = RequestHelper.parseReferrer(
'https://www.overleaf.com/login',
pageUrl
)
assert.equal(result.medium, 'internal')
})
})
describe('with an unknown external referrer', function () {
it('returns link medium with hostname as source', function () {
const result = RequestHelper.parseReferrer(
'https://some.example.com/article',
pageUrl
)
assert.equal(result.medium, 'link')
assert.equal(result.source, 'some.example.com')
})
})
})
})
-39
View File
@@ -12980,16 +12980,6 @@ __metadata:
languageName: node
linkType: hard
"argparse@npm:~ 0.1.11":
version: 0.1.16
resolution: "argparse@npm:0.1.16"
dependencies:
underscore: "npm:~1.7.0"
underscore.string: "npm:~2.4.0"
checksum: 10c0/fbd081b942546b481cfec863778baa09af2224eaea6b2af086fd1e39b9ca3159585ee50bf066c6feff17fe991baea16f45054d226430ec83f5d5aad6d8f2d781
languageName: node
linkType: hard
"args-js@npm:0.10.12":
version: 0.10.12
resolution: "args-js@npm:0.10.12"
@@ -18077,16 +18067,6 @@ __metadata:
languageName: node
linkType: hard
"esprima@npm:~ 1.0.2":
version: 1.0.4
resolution: "esprima@npm:1.0.4"
bin:
esparse: ./bin/esparse.js
esvalidate: ./bin/esvalidate.js
checksum: 10c0/c07e43a78f4711aee4c9514d2672b66cf22a35b93eb7844bc99e511b506cac44d753d75a319c88b556d331adacad9065fcb958dad02faefd27833a7718f75bcd
languageName: node
linkType: hard
"esquery@npm:^1.4.2, esquery@npm:^1.6.0":
version: 1.7.0
resolution: "esquery@npm:1.7.0"
@@ -22065,18 +22045,6 @@ __metadata:
languageName: node
linkType: hard
"js-yaml@npm:~2.1.0":
version: 2.1.3
resolution: "js-yaml@npm:2.1.3"
dependencies:
argparse: "npm:~ 0.1.11"
esprima: "npm:~ 1.0.2"
bin:
js-yaml: bin/js-yaml.js
checksum: 10c0/178709184752f47f703de3bc3ca779c6b4443f73acf1c5e5a7cfb37f04f24f7c1bd9b520cb30081cd2d73f054061a765c7bd35a4ce3718ae01608a7333dae036
languageName: node
linkType: hard
"jsbn@npm:~0.1.0":
version: 0.1.1
resolution: "jsbn@npm:0.1.1"
@@ -33233,13 +33201,6 @@ __metadata:
languageName: node
linkType: hard
"underscore.string@npm:~2.4.0":
version: 2.4.0
resolution: "underscore.string@npm:2.4.0"
checksum: 10c0/30a9d096eee6680c27c3bdcc5a81af8f1c8357b5bfdc1dc45e719e842b0db322c2705c61ebf5166d2b41f2cfcc6dbf44e026651d8042bab638a99de15c8ec078
languageName: node
linkType: hard
"underscore@npm:1.13.8, underscore@npm:>=1.8.3":
version: 1.13.8
resolution: "underscore@npm:1.13.8"