0.0.25 • Published 5 years ago

hlx-url-rewriter v0.0.25

Weekly downloads
1
License
MIT
Repository
github
Last release
5 years ago

Build Status Coverage Status Dependency Status Development Dependency Status Known Vulnerabilities XO code style

hlx-url-rewriter

A transform stream to rewrite URLs in HLS playlists

Features

  • Being used with other hlx objects, it provides a functionality to filter every playlists and rewrite the urls in them.
  • You can specify a custom function to parse/modify playlists or the default function will be used.
  • The default function rewrites urls in accordance with the rules described below (See "default function")

Install

NPM

Usage

const {createReadStream} = require('hlx-file-reader');
const {createUrlRewriter} = require('hlx-url-rewriter'); // url-rewriter
const {createTerminator} = require('hlx-terminator')

const src = createReadStream('https://foo.bar/sample.m3u8');
const rewrite = createUrlRewriter(data => {
  // Convert playlist's urls from absolute to relative
  if (data.type === 'playlist') {
    const url = new URL(data.uri);
    data.uri = url.pathname;
  }
});
const dest = createTerminator();

// Rewrite all urls
src.pipe(rewrite).pipe(dest)
.on('data', data => {
  console.log(data.uri); // should be a relative url
});

API

The features are built on top of the Node's transform streams.

createUrlRewriter([rules, options])

Creates a new TransformStream object.

params

NameTypeRequiredDefaultDescription
rewriteFuncfunctionNoAn internally defined default functionA function that takes an hls-parser object and modifies url strings included in the object.
optionsfunctionNosee belowAn object preserving options

default function

Pseudo code:

function defaultFunc(playlist, playlistUrl) {
  for each url contained in the playlist {
    if (url is not an absolute url) {
      resolve url with playlistUrl to make it absolute
        ex1: "http://example.com/path/to/file" + "../../path2/to/file" = "http://example.com/path2/to/file"
        ex2: "file:///path/to/file" + "../../path2/to/file" = "file:///path2/to/file"
        ex3: "http://example.com/path/to/file" + "/path2/to/file" = "http://example.com/path2/to/file"
        ex4: "file:///path/to/file" + "/path2/to/file" = "file://{options.rootPath}/path/to/file"
      }
    }

    if (url is not an absolute url || playlistUrl == '') {
      return url
    }
    if (url and playlistUrl share the same protocol AND hostname) {
      return a relative path from playlistUrl.pathname to url.pathname
    }
    if (playlistUrl is a file url) {
      return a relative path from playlistUrl.pathname to "{options.rootPath}/{url.hostname}/{url.pathname}"
    }
    return a relative path from playlistUrl.pathname to "/{url.hostname}/{url.pathname}"
  }
}

options

NameTypeDefaultDescription
rootPathstring"/"This value will be used by the default function to convert a file url into a relative path.

return value

An instance of TransformStream.

0.0.25

5 years ago

0.0.24

5 years ago

0.0.23

5 years ago

0.0.22

5 years ago

0.0.21

5 years ago

0.0.20

5 years ago

0.0.19

5 years ago

0.0.18

5 years ago

0.0.17

5 years ago

0.0.16

5 years ago

0.0.15

5 years ago

0.0.14

5 years ago

0.0.13

5 years ago

0.0.12

5 years ago

0.0.11

5 years ago

0.0.10

5 years ago

0.0.9

5 years ago

0.0.8

5 years ago

0.0.7

5 years ago

0.0.6

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.2

5 years ago

0.0.1

5 years ago