https://github.com/samthor/redirects-yaml
Helps you define redirects in a YAML file
https://github.com/samthor/redirects-yaml
Last synced: about 2 months ago
JSON representation
Helps you define redirects in a YAML file
- Host: GitHub
- URL: https://github.com/samthor/redirects-yaml
- Owner: samthor
- License: apache-2.0
- Created: 2020-12-03T08:40:59.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2022-06-30T23:14:58.000Z (almost 4 years ago)
- Last Synced: 2025-01-18T15:52:53.412Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 55.7 KB
- Stars: 1
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
This is a handler for a specific type of redirects config specified in `_redirects.yaml`.
The file format looks like:
```yaml
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:
```js
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:
```html
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:
```js
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. 🍩