Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lukeed/route-manifest
A tiny (412B) runtime to retrieve the correct entry from a Route Manifest file.
https://github.com/lukeed/route-manifest
Last synced: 3 months ago
JSON representation
A tiny (412B) runtime to retrieve the correct entry from a Route Manifest file.
- Host: GitHub
- URL: https://github.com/lukeed/route-manifest
- Owner: lukeed
- License: mit
- Created: 2019-08-19T01:10:56.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2020-01-26T08:11:14.000Z (almost 5 years ago)
- Last Synced: 2024-07-18T06:44:01.986Z (4 months ago)
- Language: JavaScript
- Homepage:
- Size: 15.6 KB
- Stars: 46
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: readme.md
- License: license
Awesome Lists containing this project
README
# route-manifest [![codecov](https://badgen.now.sh/codecov/c/github/lukeed/route-manifest)](https://codecov.io/gh/lukeed/route-manifest)
> A tiny (412B) runtime to retrieve the correct entry from a Route Manifest file.
This is the runtime/client-side component for [`webpack-route-manifest`](https://github.com/lukeed/webpack-route-manifest).
It is **required** that your manifest's routes be [sorted by specificity](https://github.com/lukeed/route-sort#specificity), which _is_ the webpack plugin's default setting.> **Important:** This `route-manifest` _does not_ fetch files or apply headers on your behalf!
The module is available in three formats:
* **ES Module**: `dist/rmanifest.mjs`
* **CommonJS**: `dist/rmanifest.js`
* **UMD**: `dist/rmanifest.min.js`## Install
```
$ npm install --save route-manifest
```## Usage
```js
import { prefetch } from 'quicklink';
import rmanifest from 'route-manifest';// Manually fetch Manifest file contents
fetch('/manifest.json').then(r => r.json()).then(data => {
/*
Assume Manifest (`data`) is:
{
[pattern]: {
files: { href: string, type: string }
headers: [...skip...]
}
}
*/const files = new Set();
// We want to prefetch these pages' assets
['/blog', '/about', '/features'].forEach(str => {
let entry = rmanifest(data, str);
entry.files.forEach(x => files.add(x.href));
});// Note:
// The `quicklink` module will do the actual prefetching!
// We just have have to give it a file path, or an array
// of file paths in this case~!
return prefetch([...files]);
});
```## API
### rmanifest(contents, uri, withCommons)
Returns: `{ files: Array, headers: Array }`Returns an object containing `files` and `headers` keys, both of which will be arrays. The arrays' items are copied from your Manifest file directly, so you will (presumably) already know the shape of your data.
#### contents
Type: `Object`The Manifest file's contents.
Any format returned by [`webpack-route-manifest`](https://github.com/lukeed/webpack-route-manifest) is valid.> **Important:** The route pattern keys [must be sorted](https://github.com/lukeed/webpack-route-manifest#optionssort) for matching correctness.
#### uri
Type: `String`The URL for which you want to find files or headers.
> **Note:** _Only_ include the `pathname` segment of a URL, unless a pattern is explicitly looking for other segments.
#### withCommons
Type: `Boolean`
Default: `false`Whether or not the base/root-wildcard entry should be included.
When `true` and when a `"*"` pattern is defined, this will include the wildcard's entry _in addition to_ the route's own specific entry too, if any. The result is still a single object of `{ files, headers }` shape – the difference is just that the two entries have their keys' items concatenated into a single array.
When `false`, this module will _only_ return the entry _specific to_ the requested `uri` pathname.
## Related
* [webpack-route-manifest](https://github.com/lukeed/webpack-route-manifest) – generate a Route Manifest file for your webpack build
* [quicklink](https://github.com/GoogleChromeLabs/quicklink) – preloading utility that reacts to connection speed and browser support
* [route-sort](https://github.com/lukeed/route-sort) – the route pattern sorter required for safe sequential matching## License
MIT © [Luke Edwards](https://lukeed.com)