Files
marketing-app/server/node_modules/minipass-flush/index.js
fahed 35d84b6bff Marketing Hub: RBAC, i18n (AR/EN), tasks overhaul, team/user merge, tutorial
Features:
- Full RBAC with 3 roles (superadmin/manager/contributor)
- Ownership tracking on posts, tasks, campaigns, projects
- Task system: assign to anyone, filter combobox, visibility scoping
- Team members merged into users table (single source of truth)
- Post thumbnails on kanban cards from attachments
- Publication link validation before publishing
- Interactive onboarding tutorial with Settings restart
- Full Arabic/English i18n with RTL layout support
- Language toggle in sidebar, IBM Plex Sans Arabic font
- Brand-based visibility filtering for non-superadmins
- Manager can only create contributors
- Profile completion flow for new users
- Cookie-based sessions (express-session + SQLite)
2026-02-08 20:46:58 +03:00

40 lines
1011 B
JavaScript

const Minipass = require('minipass')
const _flush = Symbol('_flush')
const _flushed = Symbol('_flushed')
const _flushing = Symbol('_flushing')
class Flush extends Minipass {
constructor (opt = {}) {
if (typeof opt === 'function')
opt = { flush: opt }
super(opt)
// or extend this class and provide a 'flush' method in your subclass
if (typeof opt.flush !== 'function' && typeof this.flush !== 'function')
throw new TypeError('must provide flush function in options')
this[_flush] = opt.flush || this.flush
}
emit (ev, ...data) {
if ((ev !== 'end' && ev !== 'finish') || this[_flushed])
return super.emit(ev, ...data)
if (this[_flushing])
return
this[_flushing] = true
const afterFlush = er => {
this[_flushed] = true
er ? super.emit('error', er) : super.emit('end')
}
const ret = this[_flush](afterFlush)
if (ret && ret.then)
ret.then(() => afterFlush(), er => afterFlush(er))
}
}
module.exports = Flush