svelte-guard-history-router
svelte guarded history router
Features
- Named params
- Guards to act when entering / leaving a route
- Automatic route ranking
- Routes and keys acting as stores
- Nested Routes
- Route values
- Object <=> parameter mapping
- Create links from objects
- Standart
<a href="/home">Home</a>
elements
usage
import { Guard } from 'svelte-guard-history-router';
let session = undefined;
class SessionGuard extends Guard {
async enter(transition) {
if(!session) {
return transition.redirect('/login');
}
}
}
<script>
import { Router, Route, Outlet } from "svelte-guard-history-router";
import About from "./About.svelte";
import Categories from "./Categories.svelte";
import Category from "./Category.svelte";
import Articles from "./Articles.svelte";
import Article from "./Article.svelte";
import { sessionGuard } from "./main.mjs";
</script>
<Router base="/base">
<nav>
<Route href="/" path="*" component={Home}>Router Example</Route>
<ul class="left">
<li>
<Route path="/about" component={About}>About</Route>
</li>
<li>
<Route path="/article" guards={sessionGuard} component={Articles}>
Articles
<Route path="/:artice" component={Article}/>
</Route>
</li>
<li>
<Route path="/category" guards={sessionGuard} component={Categories}>
Categories
<Route path="/:category" component={Category}/>
</Route>
</li>
</ul>
</nav>
<main>
<Outlet/>
</main>
</Router>
Sample code
Check out the code in the example folder,
or the live example.
To run the sample, clone the repository, install the dependencies, and start:
git clone https://github.com/arlac77/svelte-guard-history-router
cd svelte-guard-history-router
npm install
npm start
then navigate to localhost:5000
run tests
export BROWSER=safari|chrome|...
yarn test
or
npm test
API
Table of Contents
Key
Keys also act as svelte stores and can be subscribed.
export const article = derived(
[articles, router.keys.article],
([$articles, $id], set) => {
set($articles.find(a => a.id === $id));
return () => {};
}
);
Type: Object
Properties
BaseRouter
key subscriptions:
const aKey = router.keys.aKey;
$aKey
Parameters
routes
Array<Route> (optional, default []
)base
string url (optional, default ""
)
Properties
linkNodes
Set<Node> nodes having their active state updatedroutes
Array<Route>keys
Object collected keys of all routesparams
Object value mapping from keys (from current route)route
Route currenttransition
Transition ongoing transitionbase
string url
component
Current component.
Either from a redirected transition or from the current route
Returns SvelteComponent
value
Value if the current route
Returns any
replace
Replace current route
Parameters
Returns Object former state
push
Leave current route and enter route for given path
The work is done by a Transition
Parameters
Returns Transition running transition
finalizePush
Called from a transition to manifest the new destination.
If path is undefined the transition has been aborderd
Parameters
continue
Continue transition to its original destination.
Shortcut for this.transition.continue()
Does nothing if there is no transition.
subscribe
Router subscription
Changes in the current route will trigger a update
Parameters
updateActive
Update the active state of a node
Parameters
addRoute
Add a new route.
Parameters
routeFor
Find Route for a given object
Parameters
Returns Route able to support given object
nameValueStore
Create a named object wich can act as a store
Parameters
Properties
Returns Store
Transition
Transition between routes
Parameters
router
Routerpath
string destination
Properties
start
Start the transition
- leave old route
- find matching target route @see Router.replace()
- set params
- set current route
- enter new route
end
- **See: Router.finalizePush
**
Cleanup transition
Update Nodes active state
redirect
Halt current transition and go to another route.
To proceed with the original route by calling continue()
Parameters
path
string new route to enter temporary
continue
Continue a redirected route to its original destination
rollback
Bring back the router into the state before the transition has started
Parameters
SkeletonRoute
Route
Properties
_path
stringcomponent
SvelteComponent target to showlinkComponent
SvelteComponent content for ObjectLinkpriority
numberkeys
Array<string> as found in the pathregex
RegExvalue
any
path
Full path of the Route including all parents
Returns string path
enter
Enter the route from a former one.
Parameters
leave
Leave the route to a new one.
Parameters
propertiesFor
Extract properties from object.
Parameters
Returns (Object | undefined) properties extracted from given objects
propertyMapping
Map properties to objects attributes.
Keys are the property names and values are the keys in the resulting object.
Returns Object
objectFor
Deliver object for a given set of properties
Parameters
Returns Object for matching properties
Guard
Enforces conditions of routes
Like the presents of values in the context
enter
Called while entering a route (current outlet is not yet set)
Parameters
leave
Called before leaving a route
Parameters
redirectGuard
Redirects to a given url if condition is met
Parameters
sequenceGuard
Execute guards in a sequence
Parameters
parallelGuard
Execute guards in a parallel
Parameters
WaitingGuard
Extends Guard
Shows a component during transition
Parameters
component
SvelteComponent to show up during th transitionrampUpTime
number initial delay for the componnt to show up (optional, default 300
)
install
With npm do:
npm install svelte-guard-history-router
With yarn do:
yarn add svelte-guard-history-router
SPA integrating with a nginx backend
All unresolvable requests are redirected to /sericeBase/index.html
- /deploymantLocation is the location of the frontend in the servers file system
- /serviceBase is the url path as seen from the browser
location /serviceBase {
alias /deploymantLocation;
try_files $uri$args $uri$args/ /sericeBase/index.html;
}
license
BSD-2-Clause