any-of plugin ready for new plugin loading system (ref. #15)

merge-requests/9/merge
Michał 'rysiek' Woźniak 2021-09-15 21:28:11 +00:00
rodzic 46b3334b25
commit d02cbb7a9d
2 zmienionych plików z 62 dodań i 57 usunięć

Wyświetl plik

@ -54,32 +54,39 @@ describe("plugin: any-of", () => {
beforeEach(() => {
Object.assign(global, makeServiceWorkerEnv());
jest.resetModules();
self.LibResilientPlugins = new Array()
self.LibResilientConfig = {
plugins: {
'any-of': {
plugins: {
'fetch': {},
'cache': {}
}
}
global.LibResilientPluginConstructors = new Map()
LR = {
log: (component, ...items)=>{
console.debug(component + ' :: ', ...items)
}
}
require("../../plugins/fetch.js");
init = {
name: 'any-of',
plugins: [
LibResilientPluginConstructors.get('fetch')(LR),
{
name: 'reject-all',
description: 'Rejects all',
version: '0.0.1',
fetch: url=>Promise.reject('Reject All!')
}
]
}
self.log = function(component, ...items) {
console.debug(component + ' :: ', ...items)
}
})
test("it should register in LibResilientPlugins", () => {
test("it should register in LibResilientPluginConstructors", () => {
require("../../plugins/any-of.js");
expect(self.LibResilientPlugins[0].name).toEqual('any-of');
expect(LibResilientPluginConstructors.get('any-of')(LR, init).name).toEqual('any-of');
});
test("it should return data from fetch()", async () => {
require("../../plugins/any-of.js");
require("../../plugins/fetch.js");
const response = await self.LibResilientPlugins[0].fetch('https://resilient.is/test.json');
const response = await LibResilientPluginConstructors.get('any-of')(LR, init).fetch('https://resilient.is/test.json');
expect(fetch).toHaveBeenCalled();
expect(await response.json()).toEqual({test: "success"})
@ -103,11 +110,10 @@ describe("plugin: any-of", () => {
});
require("../../plugins/any-of.js");
require("../../plugins/fetch.js");
expect.assertions(2);
try {
await self.LibResilientPlugins[0].fetch('https://resilient.is/test.json')
await LibResilientPluginConstructors.get('any-of')(LR, init).fetch('https://resilient.is/test.json')
} catch (e) {
if (e instanceof Array) {
expect(e[0].toString()).toMatch('Error')

Wyświetl plik

@ -7,49 +7,48 @@
*/
// no polluting of the global namespace please
(function () {
(function(LRPC){
// this never changes
const pluginName = "any-of"
LRPC.set(pluginName, (LR, init={})=>{
/*
* plugin config settings
*/
// sane defaults
let defaultConfig = {
// name of this plugin
// should not be changed
name: "any-of",
// list of plugins to run simultaneously
plugins: {
"alt-fetch": {},
"gun-ipfs": {}
/*
* plugin config settings
*/
// sane defaults
let defaultConfig = {
// list of plugins to run simultaneously
plugins: [{
name: "alt-fetch"
},{
name: "gun-ipfs"
}]
}
// merge the defaults with settings from LibResilientConfig
let config = {...defaultConfig, ...init}
/**
* getting content using regular HTTP(S) fetch()
*/
let fetchContent = (url) => {
LR.log(pluginName, `using: [${config.plugins.map(p=>p.name).join(', ')}]!`)
return Promise.any(
config.plugins.map(p=>p.fetch(url))
)
}
// and add ourselves to it
// with some additional metadata
return {
name: pluginName,
description: `Running simultaneously: [${config.plugins.map(p=>p.name).join(', ')}]`,
version: 'COMMIT_UNKNOWN',
fetch: fetchContent,
uses: config.plugins
}
}
// merge the defaults with settings from LibResilientConfig
let config = {...defaultConfig, ...self.LibResilientConfig.plugins[defaultConfig.name]}
/**
* getting content using regular HTTP(S) fetch()
*/
let fetchContent = (url) => {
self.log(config.name, `using: [${Object.keys(config.plugins).join(', ')}]!`)
return Promise.any(
self
.LibResilientPlugins
.filter(p=>Object.keys(config.plugins).includes(p.name))
.map(p=>p.fetch(url))
)
}
// and add ourselves to it
// with some additional metadata
self.LibResilientPlugins.push({
name: config.name,
description: `Running simultaneously: [${Object.keys(config.plugins).join(', ')}]`,
version: 'COMMIT_UNKNOWN',
fetch: fetchContent,
uses: config.plugins
})
// done with not polluting the global namespace
})()
})(LibResilientPluginConstructors)