Line data Source code
1 : // @ts-check 2 : 3 : import URI from "urijs"; 4 : 5 1 : let id = 0; 6 : /** 7 : * @return {string} 8 : */ 9 : export function genId() { 10 0 : return 'a-' + (++id); 11 : } 12 : 13 : /** 14 : * @param {string} url 15 : */ 16 : export function httpToWs(url) { 17 26 : return url.replace(/^http(s)?\:\/\//, "ws$1://"); 18 : } 19 : 20 : /** 21 : * @param {string[]} args 22 : * @returns {URI} 23 : */ 24 : export function makeUri(...args) { 25 40 : return new URI(args.join("/")).normalize(); 26 : } 27 : 28 : /** 29 : * @param {Vue.VueConstructor<any>} Vue 30 : */ 31 : export function install(Vue) { 32 : // @ts-ignore 33 1 : Vue.prototype.$makeUri = makeUri; 34 : } 35 : 36 : /** 37 : * 38 : * @param {Vue} object 39 : * @param {Function} before 40 : * @param {Function} after 41 : * @param {(name: string) => boolean} [filter] 42 : */ 43 : export function methodWrapper(object, before, after, filter = undefined) { 44 0 : Object.entries(object.$options.methods ?? {}).forEach(([ name, func ]) => { 45 0 : if (filter && !filter(name)) { 46 0 : return; 47 : } 48 : 49 : // debug("wrapping %s", name); 50 : /* @ts-ignore */ 51 0 : object[name] = async function(...args) { 52 0 : await before?.(name); 53 0 : try { 54 0 : const ret = await func.apply(this, args); 55 0 : await after?.(name); 56 0 : return ret; 57 : } 58 : catch (err) { 59 0 : await after?.(name); 60 0 : throw err; 61 : } 62 : }; 63 : }); 64 : } 65 : 66 : export default { install };