@technik-sde/foxy
Advanced tools
Comparing version 1.0.0 to 1.1.0
@@ -1,2 +0,2 @@ | ||
import Handler, { Request, Info } from "./handler/Handler"; | ||
import Handler, { Request, Info, Data } from "./handler/Handler"; | ||
export interface Options { | ||
@@ -15,2 +15,3 @@ handlers?: Array<Handler>; | ||
getURL(request: Request): Promise<string>; | ||
getJSON(request: Request): Promise<Data>; | ||
get(methodName: string, request: Request): Promise<any>; | ||
@@ -17,0 +18,0 @@ isSupported(request: Request): boolean; |
@@ -1,1 +0,1 @@ | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("foxy",[],t):"object"==typeof exports?exports.foxy=t():e.foxy=t()}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";n.r(t),n.d(t,"Foxy",(function(){return r})),n.d(t,"handler",(function(){return u})),n.d(t,"utils",(function(){return o}));class r{constructor(e={}){this.handlers=e.handlers||[]}addHandler(e,t=0){null==this.handlers[t]&&this.handlers.push(e),this.handlers.splice(t,0,e)}removeHandler(e){this.handlers=this.handlers.filter(t=>t!==e)}getImageURL(e){return this.get("getImageURL",e)}getImageInfo(e){return this.get("getImageInfo",e)}getVideoURL(e){return this.get("getVideoURL",e)}getVideoInfo(e){return this.get("getVideoInfo",e)}getURL(e){return this.get("getURL",e)}get(e,t){const n=this.findHandler(e,t);return null==n?Promise.reject(new Error(`There is no handler for method '${e}(${JSON.stringify(t)})'`)):n[e](t)}isSupported(e){return this.handlers.some(t=>t.use(e))}findHandler(e,t){return this.handlers.find(n=>"function"==typeof n[e]&&!0===n.use(t))}}var o={loadImageInfo:function(e,t={}){const n={src:e,image:new Image,type:"",width:0,height:0};return fetch(e,t).then(e=>e.blob()).then(e=>(n.type=e.type.replace(/^[^/]+\//,""),URL.createObjectURL(e))).then(e=>new Promise((t,r)=>{n.image.addEventListener("load",()=>t()),n.image.addEventListener("error",r),n.image.src=e})).then(()=>(n.width=n.image.naturalWidth,n.height=n.image.naturalHeight,n))},loadVideoInfo:function(e,t={}){const n={src:e,width:0,height:0,video:document.createElement("video"),duration:0,poster:""};return fetch(e,t).then(e=>e.blob()).then(e=>(n.type=e.type.replace(/^[^/]+\//,""),URL.createObjectURL(e))).then(e=>new Promise((t,r)=>{n.video.addEventListener("error",r),n.video.addEventListener("loadedmetadata",()=>{const{video:e}=n;n.width=e.videoWidth,n.height=e.videoHeight,n.duration=e.duration,n.poster=e.poster,t(n)});const o=document.createElement("source");o.setAttribute("src",e),n.video.appendChild(o)}))},isHandler:function(e){return"[object Object]"===Object.prototype.toString.call(e)&&"function"==typeof e.use}};const i=/^https:\/\/images\.unsplash\.com\/photo-\d{13}-[0-9a-f]{12}/;function s(e){const t=e.source.replace(/\?.*$/,""),n=new URLSearchParams(e.source.replace(/^.*\?/,""));return e.width&&n.set("w",e.width),e.height&&n.set("h",e.height),e.quality&&n.set("q",e.quality),e.fit&&n.set("fit",e.fit),e.auto&&n.set("auto",e.auto),`${t}?${n.toString()}`}const u={unsplash:{use:e=>i.test(e.source),getImageURL:e=>Promise.resolve(s(e)),getImageInfo:e=>o.loadImageInfo(s(e))},image:{use:e=>/^https?:\/\//.test(e.source),getImageURL:e=>Promise.resolve(e.source),getImageInfo:e=>o.loadImageInfo(e.source)},video:{use:e=>/^https?:\/\//.test(e.source),getVideoURL:e=>Promise.resolve(e.source),getVideoInfo:e=>o.loadVideoInfo(e.source)}}}])})); | ||
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("foxy",[],t):"object"==typeof exports?exports.foxy=t():e.foxy=t()}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=0)}([function(e,t,r){e.exports=r(1)},function(e,t,r){"use strict";r.r(t),r.d(t,"Foxy",(function(){return n})),r.d(t,"handler",(function(){return u})),r.d(t,"utils",(function(){return o}));class n{constructor(e={}){this.handlers=e.handlers||[]}addHandler(e,t=0){null==this.handlers[t]&&this.handlers.push(e),this.handlers.splice(t,0,e)}removeHandler(e){this.handlers=this.handlers.filter(t=>t!==e)}getImageURL(e){return this.get("getImageURL",e)}getImageInfo(e){return this.get("getImageInfo",e)}getVideoURL(e){return this.get("getVideoURL",e)}getVideoInfo(e){return this.get("getVideoInfo",e)}getURL(e){return this.get("getURL",e)}getJSON(e){return this.get("getJSON",e)}get(e,t){const r=this.findHandler(e,t);return null==r?Promise.reject(new Error(`There is no handler for method '${e}(${JSON.stringify(t)})'`)):r[e](t)}isSupported(e){return this.handlers.some(t=>t.use(e))}findHandler(e,t){return this.handlers.find(r=>"function"==typeof r[e]&&!0===r.use(t))}}var o={loadImageInfo:function(e,t={}){const r={src:e,image:new Image,type:"",width:0,height:0};return fetch(e,t).then(e=>e.blob()).then(e=>(r.type=e.type.replace(/^[^/]+\//,""),URL.createObjectURL(e))).then(e=>new Promise((t,n)=>{r.image.addEventListener("load",()=>t()),r.image.addEventListener("error",n),r.image.src=e})).then(()=>(r.width=r.image.naturalWidth,r.height=r.image.naturalHeight,r))},loadVideoInfo:function(e,t={}){const r={src:e,width:0,height:0,video:document.createElement("video"),duration:0,poster:""};return fetch(e,t).then(e=>e.blob()).then(e=>(r.type=e.type.replace(/^[^/]+\//,""),URL.createObjectURL(e))).then(e=>new Promise((t,n)=>{r.video.addEventListener("error",n),r.video.addEventListener("loadedmetadata",()=>{const{video:e}=r;r.width=e.videoWidth,r.height=e.videoHeight,r.duration=e.duration,r.poster=e.poster,t(r)});const o=document.createElement("source");o.setAttribute("src",e),r.video.appendChild(o)}))},isHandler:function(e){return"[object Object]"===Object.prototype.toString.call(e)&&"function"==typeof e.use}};const i=/^https:\/\/images\.unsplash\.com\/photo-\d{13}-[0-9a-f]{12}/;function s(e){const t=e.source.replace(/\?.*$/,""),r=new URLSearchParams(e.source.replace(/^.*\?/,""));return e.width&&r.set("w",e.width),e.height&&r.set("h",e.height),e.quality&&r.set("q",e.quality),e.fit&&r.set("fit",e.fit),e.auto&&r.set("auto",e.auto),`${t}?${r.toString()}`}const u={unsplash:{use:e=>i.test(e.source),getImageURL:e=>Promise.resolve(s(e)),getImageInfo:e=>o.loadImageInfo(s(e))},image:{use:e=>/^https?:\/\//.test(e.source),getImageURL:e=>Promise.resolve(e.source),getImageInfo:e=>o.loadImageInfo(e.source)},video:{use:e=>/^https?:\/\//.test(e.source),getVideoURL:e=>Promise.resolve(e.source),getVideoInfo:e=>o.loadVideoInfo(e.source)}};t.default=n}])})); |
@@ -8,4 +8,8 @@ import AnyObject from "../AnyObject"; | ||
} | ||
export interface Data { | ||
[p: string]: any; | ||
} | ||
export declare type URLRequest = (request: Request) => Promise<string>; | ||
export declare type InfoRequest = (request: Request) => Promise<Info>; | ||
export declare type DataRequest = (request: Request) => Promise<Data>; | ||
export default interface Handler extends AnyObject { | ||
@@ -24,2 +28,4 @@ /** returns true, if this handler should be used for the current input-request */ | ||
getURL?: URLRequest; | ||
/** returns json-response of the request url */ | ||
getJSON?: DataRequest; | ||
} |
@@ -10,1 +10,2 @@ import Foxy, { Options } from "./Foxy"; | ||
export { Foxy, Options, Handler, Request, URLRequest, InfoRequest, handler, utils }; | ||
export default Foxy; |
{ | ||
"name": "@technik-sde/foxy", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "", | ||
"main": "dist/foxy.js", | ||
"types": "dist/index.d.ts", | ||
"module": "distmodule/index.js", | ||
"scripts": { | ||
"build": "rm -rf dev; webpack", | ||
"dist": "rm -rf dist; NODE_ENV=production webpack -p", | ||
"dist": "rm -rf dist; yarn dist:es5; yarn dist:module", | ||
"dist:es5": "NODE_ENV=production webpack -p", | ||
"dist:module": "tsc --outDir distmodule", | ||
"lint": "eslint test/**/* src/**/*", | ||
@@ -11,0 +14,0 @@ "test": "TS_NODE_PROJECT=./test/tsconfig.json mocha -r ts-node/register --require ./test/setup.ts 'test/**/*.test.ts'", |
@@ -20,13 +20,13 @@ # simple frontend proxy | ||
handlers: [ | ||
{ | ||
use({ source }) { | ||
return myUrlFormat.test(source); | ||
}, | ||
getImageURL({ source }) { | ||
return Promise.resolve(buildMyUrlScheme(source)); | ||
}, | ||
getImageInfo({ source }) { | ||
return utils.loadImage(buildMyUrlScheme(source)) | ||
} | ||
{ | ||
use({ source }) { | ||
return myUrlFormat.test(source); | ||
}, | ||
getImageURL({ source }) { | ||
return Promise.resolve(buildMyUrlScheme(source)); | ||
}, | ||
getImageInfo({ source }) { | ||
return utils.loadImage(buildMyUrlScheme(source)) | ||
} | ||
} | ||
] | ||
@@ -47,15 +47,15 @@ }); | ||
handlers: [ | ||
{ | ||
use({ source }) { | ||
return myUrlFormat.test(source); | ||
}, | ||
getImageURL({ source }) { | ||
return Promise.resolve(buildMyUrlScheme(source)); | ||
} | ||
{ | ||
use({ source }) { | ||
return myUrlFormat.test(source); | ||
}, | ||
{ | ||
use: () => true, | ||
// overwrites default exception to always return false | ||
getImageURL({ source }) { return Promise.resolve(false); } | ||
getImageURL({ source }) { | ||
return Promise.resolve(buildMyUrlScheme(source)); | ||
} | ||
}, | ||
{ | ||
use: () => true, | ||
// overwrites default exception to always return false | ||
getImageURL({ source }) { return Promise.resolve(false); } | ||
} | ||
] | ||
@@ -68,5 +68,5 @@ }); | ||
Per default the following methods are supported via api: `getImageURL`, `getImageInfo`, `getVideoURL`, `getVideoInfo`. The | ||
generic method `get(methodName: string, requestData: AnyObject)` may be used to access any custom methods defined on | ||
handlers. e.g. | ||
Per default the following methods are supported via api: `getImageURL`, `getImageInfo`, `getVideoURL`, `getVideoInfo`, | ||
`getURL` and `getJSON`. The generic method `get(methodName: string, requestData: AnyObject)` may be used to access any | ||
custom methods defined on handlers. e.g. | ||
@@ -78,14 +78,14 @@ ```js | ||
handlers: [ | ||
{ | ||
use({ source }) { | ||
return myUrlFormat.test(source); | ||
}, | ||
getJSON({ source }) { | ||
return fetch(buildMyUrlScheme(source)).then(response => response.json()); | ||
} | ||
{ | ||
use({ source }) { | ||
return myUrlFormat.test(source); | ||
}, | ||
getArticles({ source }) { | ||
return fetch(buildMyUrlScheme(source)).then(response => response.json().data); | ||
} | ||
} | ||
] | ||
}); | ||
const json = await proxy.get("getJSON", { source: "my-json-url" }); | ||
const json = await proxy.get("getArticles", { source: "my-json-url" }); | ||
``` | ||
@@ -110,6 +110,2 @@ | ||
// handler.video | ||
``` |
@@ -1,2 +0,2 @@ | ||
import Handler, { Request, Info } from "./handler/Handler"; | ||
import Handler, { Request, Info, Data } from "./handler/Handler"; | ||
@@ -47,2 +47,6 @@ | ||
getJSON(request: Request): Promise<Data> { | ||
return this.get("getJSON", request); | ||
} | ||
get(methodName: string, request: Request): Promise<any> { | ||
@@ -49,0 +53,0 @@ const handler = this.findHandler(methodName, request); |
@@ -12,2 +12,6 @@ import AnyObject from "../AnyObject"; | ||
export interface Data { | ||
[p: string]: any; | ||
} | ||
export type URLRequest = (request: Request) => Promise<string>; | ||
@@ -17,2 +21,4 @@ | ||
export type DataRequest = (request: Request) => Promise<Data>; | ||
export default interface Handler extends AnyObject { | ||
@@ -31,2 +37,4 @@ /** returns true, if this handler should be used for the current input-request */ | ||
getURL?: URLRequest; | ||
/** returns json-response of the request url */ | ||
getJSON?: DataRequest; | ||
} |
@@ -25,1 +25,2 @@ import Foxy, { Options } from "./Foxy"; | ||
export default Foxy; |
Sorry, the diff of this file is not supported yet
38372
38
745
107
4