Coder Social home page Coder Social logo

urlz's Introduction

Urlz

Functional toolkit for URLs. Drop-in url and querystring replacement. Originally built for a static site generator where URL transformations are common, but use-cases are really unlimited.

Features

  • High-level URL manipulations
  • Curried composable API
  • Crossplatform: works in NodeJS and all modern browsers
  • Extensive test suite

Dependencies:

Peer dependencies:

Usage

$ npm install urlz
let U = require("urlz")

// The following snippets also use shortcuts for:
let R = require("ramdax")
let UU = require("url")

Glossary

  1. http://foo.com/bar/baz – absolute URL
  2. foo.com/bar/baz – invalid URL, may occur in human text (*)
  3. /bar/baz – root-relative URL (not absolute!)
  4. bar/baz – relative URL
  • – should be specially handled with libs like normalize-url. We don't provide normalization heuristics here (yet).

Motivation

1. Original format / parse provide limited, low-level, mutable API

There is also newer WHATWG URL API but it doesn't support relative URLs. Which basically makes it unusable for many scenarios. So while NodeJS renders url as deprecated it's still much better than WHATWG version (unsurprisingly).

2. urlz is trailing slash aware

Trailing slash is significant in some cases. It may affect backend routing AND it affects relative URLs:

urlz doesn't assume anything and keeps trailing slash untouched for all operations where it's possible.

3. urlz respects "relativeness" and "absoluteness" of urls

console.log(U.addLeftDir("bar", "/foo.txt"))  // "/bar/foo.txt" (+)
console.log(UU.join("bar", "/foo.txt"))       // "bar/foo.txt"  (-) naive

console.log(U.addRightDir("bar", "/foo.txt")) // "/bar/foo.txt" (+)
console.log(UU.join("/foo.txt", "bar"))       // "/foo.txt/bar" (-) naive

4. urlz is composition friendly

let R = require("ramdax")

let src = "content/team/about.md"
let dst = R.pipe(
  U.withLeftDir("public"),
  U.addRightDir(P.name(src)),
  U.withBase("index.html")
)(src)

console.log(dst) // "public/team/about/index.html"
                 // corresponding to "/team/about/" URL

5. urlz is like CRUD for path fragments

// GET
console.log(U.leftDir("/foo/bar/baz.txt"))  // "foo"
console.log(U.rightDir("/foo/bar/baz.txt")) // "bar"

// UPDATE
console.log(U.withLeftDir ("qux", "/foo/bar/baz.txt")) // "/qux/bar/baz.txt"
console.log(U.withRightDir("qux", "/foo/bar/baz.txt")) // "/foo/qux/baz.txt"

// DELETE
console.log(U.dropLeftDir ("/foo/bar/baz.txt")) // "/bar/baz.txt"
console.log(U.dropRightDir("/foo/bar/baz.txt")) // "/foo/baz.txt"

// ...

6. urlz provides extra utils

TODO: describe

API

TODO: describe

urlz's People

Contributors

ivan-kleshnin avatar ulgerd avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Forkers

ulgerd

urlz's Issues

Add the `equals` function

let equals = (url1, url2) => {
  let u1 = U.parse(url1)
  let u2 = U.parse(url2)
  let q1 = QS.parse(u1.query)
  let q2 = QS.parse(u2.query)
  return u1.hostname == u2.hostname
    && (u1.port || 80) == (u2.port || 80)
    && u1.pathname == u2.pathname
    && R.equals(q1, q2)
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.