const getActiveCommunitiesInTimeframe = async (timeframe: Timeframe): Promise<ACData> => { const [ activeCommunitiesByMemberCount, activeCommunitiesByActiveThreads ] = await Promise.all([ getCommunitiesWithMinimumMembers(2), getCommunitiesWithActiveThreadsInTimeframe(timeframe) ]) const intersectingIds = intersection(activeCommunitiesByActiveThreads, activeCommunitiesByMemberCount) return { count: intersectingIds.length, communities: await getCommunitiesById(intersectingIds), }; }
const subset = (left, right) => intersection(right, left).length === right.length
function setupShortcutListeners(instance, newListeners) { let oldListeners = Reflect.get(instance, SHORTCUT_SYMBOL); let oldShortcuts = Array.from(oldListeners.keys()); let newShortcuts = Array.from(newListeners.keys()); let removedShortcuts = difference(oldShortcuts, newShortcuts); let addedShortcuts = difference(newShortcuts, oldShortcuts); let replacedShortcuts = intersection(newShortcuts, oldShortcuts).filter(prop => oldListeners.get(prop).original !== newListeners.get(prop).original); for (let prop of [ ... removedShortcuts, ... replacedShortcuts ]) instance.removeEventListener(`keypress`, oldListeners.get(prop).wrapper, { capture: true }); for (let prop of [ ... replacedShortcuts, ... addedShortcuts ]) instance.addEventListener(`keypress`, newListeners.get(prop).wrapper, { capture: true }); Reflect.set(instance, SHORTCUT_SYMBOL, newListeners); }
s.def('::two-symbols', s.withGen( s.and(isString, s => 2 <= count(intersection(isCharSymbol, [...s]))), genTwoSymbols));
export default function(...roles) { /** * 中间件 检车是否拥有匹配的角色 * * @param {import("koa").Context} ctx koa context * @param {import("koa").Next} next koa next */ return async (ctx, next) => { const { jwt } = ctx.state; jwt.roles = jwt.roles || []; // 如果 拥有 ADMIN 角色,自动解析成所有角色 if (jwt.roles.includes("ADMIN")) jwt.roles = Object.values(Role); const found = intersection(roles, jwt.roles); if (found.length === 0) { throw new createError.Forbidden(`Require roles ${roles.join(",")}`); } await next(); }; }
s.def('::two-uppers', s.and(isString, s => 2 <= count(intersection(isCharUpper, [...s]))));
combinedChecks.filter(check => intersection(argv.categories, check.category || []).length) : combinedChecks;
function setupEventListeners(instance, newListeners) { let oldListeners = Reflect.get(instance, EVENT_SYMBOL); let oldEvents = Array.from(oldListeners.keys()); let newEvents = Array.from(newListeners.keys()); let removedEvents = difference(oldEvents, newEvents); let addedEvents = difference(newEvents, oldEvents); let replacedEvents = intersection(newEvents, oldEvents).filter(prop => oldListeners.get(prop).original !== newListeners.get(prop).original); for (let prop of [ ... removedEvents, ... replacedEvents ]) instance.removeEventListener(toEventName(prop), oldListeners.get(prop).wrapper, { capture: doesUseCapture(prop) }); for (let prop of [ ... replacedEvents, ... addedEvents ]) instance.addEventListener(toEventName(prop), newListeners.get(prop).wrapper, { capture: doesUseCapture(prop) }); Reflect.set(instance, EVENT_SYMBOL, newListeners); }
const intersects = (left, right) => intersection(left, right).length !== 0
const intersects = (left, right) => intersection(left, right).length !== 0
s.def('::two-lowers', s.and(isString, s => 2 <= count(intersection(isCharLower, [...s]))));
const subset = (left, right) => intersection(right, left).length === right.length
s.def('::two-digits', s.and(isString, s => 2 <= count(intersection(isCharDigit, [...s]))));
s.def('::two-symbols', s.and(isString, s => 2 <= count(intersection(isCharSymbol, [...s]))));
export default function(...roles) { /** * 中间件 检车是否拥有匹配的角色 * * @param {import("koa").Context} ctx koa context * @param {import("koa").Next} next koa next */ return async (ctx, next) => { const { jwt } = ctx.state; jwt.roles = jwt.roles || []; // 如果 拥有 ADMIN 角色,自动解析成所有角色 if (jwt.roles.includes("ADMIN")) jwt.roles = Object.values(Role); const found = intersection(roles, jwt.roles); if (found.length === 0) { throw new createError.Forbidden(`Require roles ${roles.join(",")}`); } await next(); }; }