2.0.4 • Published 2 years ago

redirects-yaml v2.0.4

Weekly downloads
171
License
Apache-2.0
Repository
-
Last release
2 years ago

This is a handler for a specific type of redirects config specified in _redirects.yaml. The file format looks like:

redirects:
- from: /page
  to: /other_page
- from: /foo/bar/...
  to: /target/folder/...
- from: /to_remote
  to: https://another-domain.com

This package doesn't depend on a YAML parser, but expects to be passed an array of objects which contain {from, to}. This is the default method exported from this package:

import buildRedirects from 'redirects-yaml';

const parsedYaml = ...; // use YAML.parse
const handler = buildRedirects(parsedYaml.redirects);

const matchingOut = handler('/page');      // "/other_page"
const invalidOut = handler('/not_handled') // null

You can also use require().

Try/Else Support

This package also supports some extended config. You can try possible redirect handlers with an optional default fallback:

redirects:
- from: /page/...
  try:
  - /foo/...
  else: /bar/...

In this case, you'll match URLs under "/page". This will then check to see whether the same URL under "/foo" exists.

  • If it does, a URL under "/foo" will be returned.

  • If it does not match, then we'll always redirect to the page under "/bar".

  • ⚠️ External URLs will never pass try: checks and won't be passed to your checker.

You have to specify a checker function for try: to work:

const checker = (pathname, original) => {
  // You can check any way you like, but checking whether the file exists makes the most sense.
  // pathname can be blank (exact match), or it will start with "/" and have a longer path.
  // You MUST ALWAYS use `path.join` to combine it with a real root.
  const check = path.join('/your/root', pathname);
  return fs.existsSync(check); // cannot be async

  // If you're on Windows, be sure to control for URL-style slashes "/" with your filesystem
  // which will have "\" slashes.
};
const handler = buildRedirects(parsedYaml.redirects, checker);

Note that the else: default fallback is optional. If none of your try: candidates pass your checker, this will continue stepping through other redirect options.

Dependencies

This has no dependencies. 🍩

2.0.4

2 years ago

2.0.3

3 years ago

2.0.2

3 years ago

2.0.1

3 years ago

2.0.0

3 years ago

1.0.0

3 years ago