2.1.0 • Published 3 years ago

@urltools/utils v2.1.0

Weekly downloads
-
License
ISC
Repository
github
Last release
3 years ago

@urltools

packages for processing urls

below is a brief usage of the packages. check individual READMEs for more details

modify-url

import modifyUrl from '@urltools/modify-url'

// serializable config is used to modify the url
const config = {
  protocol: 'https',
  host: 'google.com',
  searchParams: {
    type: 'pick',
    value: ['q']
  }
}

const oldUrl = 'http://bing.com/search?q=galaxy&tracking=somethingyoudontwant'

// create processUrl once based on serializable config
const processUrl = modifyUrl(config)

// processUrl can be used in pipe (functional style) or as a url transformation function
const newUrl = processUrl(oldUrl)

expect(newUrl).toBe('https://google.com/search?q=galaxy')

// this package can used to modify any part of the url easily

detect-modify-url

import detectModifyUrl from '@urltools/detect-modify-url'

const config = [
  {
    // name of the site
    name: 'google search',

    // regex to match the url
    test: '^(?:https|http)://(?:www.)?google.com/search?',

    // if matched, modify the url with these filters
    filters: [{ searchParams: { type: 'pick', value: ['q'] } }]
  },
  {
    // another site
    name: 'yahoo search',
    test: '^(?:https|http)://(?:www.)?yahoo.com/search?',
    filters: [{ searchParams: { type: 'pick', value: ['foo'] } }]
  }
]

// create processUrl once based on serializable config
const processUrl = detectModifyUrl(config)

// processUrl can process google urls according to google filters
const res1 = processUrl('http://google.com/search?q=galaxy&foo=bar&pryingtrackid=baz')
expect(res1.url).toBe('http://google.com/search?q=galaxy')
expect(res1.match).toBe(config[0])

// and also yahoo urls according to yahoo filters
const res2 = processUrl('http://yahoo.com/search?q=galaxy&foo=bar&pryingtrackid=baz')
expect(res2.url).toBe('http://yahoo.com/search?foo=bar')
expect(res2.match).toBe(config[1])

// pass any url to processUrl
// if it matches a rule, the modified url (and the match) gets returned
// if it doesn't match any rule, the original url gets returned
// e.g. bing.com doesn't match any regex in the above config
const res3 = processUrl('http://bing.com/search?q=galaxy&foo=bar&pryingtrackid=baz')
expect(res3.url).toBe('http://bing.com/search?q=galaxy&foo=bar&pryingtrackid=baz')
expect(res3.match).toBe(undefined)

// this package can be used to modify urls in bulk easily