compose-paths

Define paths + routes without the repetition.

Usage no npm install needed!

<script type="module">
  import composePaths from 'https://cdn.skypack.dev/compose-paths';
</script>

README

compose-paths 🛣

MIT license npm bundle size Version

$ pnpm i compose-paths

compose-paths looks at the indentation-level of its input as the cue to concatenate lines together. Either tabs or spaces should be fine, so long as you're consistent.

Usage

PathAlias

const { composePaths } = require('compose-paths')

const paths = composePaths(`

  ${__dirname}
    /src
      /html
        /templates      = TEMPLATES
        /pages          = PAGES

    /public             = PUBLIC
      /images           = IMAGES

`)

paths.TEMPLATES
// "/dir/name/src/html/templates"

paths.PUBLIC
// "/dir/name/public"

paths.aliases
// ["TEMPLATES", "PAGES", "PUBLIC", "IMAGES"]

PathRoute (via aliases)

const { composePaths, zip } = require('compose-paths')

const routes = composePaths(`
    /                   = HOME
    /about              = ABOUT
    /contact            = CONTACT
`)

const paths = composePaths(`
  ${__dirname}
    /src
      /html/pages
        /index.html     = HOME
        /about.html     = ABOUT
        /contact.html   = CONTACT
`)

const staticRoutes = zip(routes, paths)

// Then, for example:
staticRoutes.forEach(([route, path]) => {
  app.get(route, sendFile(path))
})

PathRoute (directly)

const { composePaths } = require('compose-paths')

const pathFromRoute = composePaths(`

  ${__dirname}
    /src/html/pages
      /index.html        = /
      /about.html        = /about
      /contact.html      = /contact

`)

pathFromRoute['/']
// "/dir/name/src/html/pages/index.html"

pathFromRoute['/contact']
// "/dir/name/src/html/pages/contact.html"

pathFromRoute.aliases.forEach(route => {
  console.log(pathFromRoute[route])
})

That's it!

Credits

compose-paths was written by Conan Theobald.

Did you find this useful? If so, I like coffee ☕️ :)

License

MIT licensed: See LICENSE