swork-link
v1.0.2
Published
Dynamic middleware linker for the swork framework.
Downloads
8
Maintainers
Readme
swork-link
swork-link is a swork middleware designed to allow the dynamic injection of new middleware into an existing middleware pipeline. It is built with TypeScript and async methods.
License
MIT
Installation
npm install swork-link
yarn add swork-link
Example
// sw.ts
import { Swork } from "swork";
import { link } from "swork-link";
export const app = new Swork();
// Global logic
app.use(/* 1st middleware */)
.use(link())
.use(/* 4th middleware */)
.listen();
// area-sw.ts
import { Swork } from "swork";
import "swork-link";
import "./sw";
const app = new Swork();
// Specific area logic
app.use(/* 2nd middleware */)
.use(/* 3rd middleware */)
.targetLink();
In the above example, the area service worker is injected into the global service worker pipeline resulting in the expected middleware execution order. This allows a global service worker module or bundle to be built independently and reused by any referencing service worker.
Methods
link
Create a link location within a middleware pipeline. link
can be passed a key to manage multiple link locations. If no key is passed, the key defaults to default
.
If there is no corresponding link
const app = new Swork();
app.use(link());
// or
app.use(link("foo"));
targetLink
Target a link defined in another swork pipeline. Similarly to link
, targetLink
can be passed a key to manage multiple link locations.
const app = new Swork();
app.targetLink();
// or
app.targetLink("foo");
Notes
link
and targetLink
can be used in a single bundle (see first example) or across multiple bundles. In the case of multiple bundles, importScripts
becomes necessary.
// area-sw.ts
import { Swork } from "swork";
import "swork-link";
self.importScripts("sw.js");
const app = new Swork();
// Specific area logic
app.use(/* 2nd middleware */)
.use(/* 3rd middleware */)
.targetLink();
Contact
If you are using swork or any of its related middlewares, please let me know on gitter. I am always looking for feedback or additional middleware ideas.