1 line
5.3 KiB
Plaintext
1 line
5.3 KiB
Plaintext
{"version":3,"file":"index.mjs","sources":["../../src/lifecycles/index.ts"],"sourcesContent":["import { strict as assert } from 'assert';\n\nimport * as subscriberUtils from './subscribers';\n\nimport type { Action, Event, Params, Subscriber } from './types';\nimport type { Database } from '..';\n\nexport type * from './types';\n\nexport type State = Record<string, unknown>;\nexport type States = Map<Subscriber, State>;\n\nexport interface Properties {\n params: Params;\n result?: unknown;\n}\n\nexport interface LifecycleProvider {\n subscribe(subscriber: Subscriber): () => void;\n clear(): void;\n run(action: Action, uid: string, properties: Properties, states?: States): Promise<States>;\n createEvent(action: Action, uid: string, properties: Properties, state: State): Event;\n disable(): void;\n enable(): void;\n}\n\nexport const createLifecyclesProvider = (db: Database): LifecycleProvider => {\n let subscribers = [\n subscriberUtils.timestampsLifecyclesSubscriber,\n subscriberUtils.modelsLifecyclesSubscriber,\n ];\n\n let isLifecycleHooksDisabled = false;\n\n return {\n subscribe(subscriber) {\n assert(\n subscriberUtils.isValidSubscriber(subscriber),\n 'Invalid subscriber. Expected function or object'\n );\n\n subscribers.push(subscriber);\n\n return () => subscribers.splice(subscribers.indexOf(subscriber), 1);\n },\n\n clear() {\n subscribers = [];\n },\n\n disable() {\n isLifecycleHooksDisabled = true;\n },\n\n enable() {\n isLifecycleHooksDisabled = false;\n },\n\n createEvent(action, uid, properties, state): Event {\n const model = db.metadata.get(uid);\n\n return {\n action,\n model,\n state,\n ...properties,\n };\n },\n\n /**\n * @param {string} action\n * @param {string} uid\n * @param {{ params?: any, result?: any }} properties\n * @param {Map<any, any>} states\n */\n async run(action, uid, properties, states = new Map()) {\n if (isLifecycleHooksDisabled) return states;\n for (let i = 0; i < subscribers.length; i += 1) {\n const subscriber = subscribers[i];\n if (typeof subscriber === 'function') {\n const state = states.get(subscriber) || {};\n const event = this.createEvent(action, uid, properties, state);\n await subscriber(event);\n if (event.state) {\n states.set(subscriber, event.state || state);\n }\n continue;\n }\n\n const hasAction = action in subscriber;\n const hasModel = !subscriber.models || subscriber.models.includes(uid);\n\n if (hasAction && hasModel) {\n const state = states.get(subscriber) || {};\n const event = this.createEvent(action, uid, properties, state);\n\n await subscriber[action]?.(event);\n if (event.state) {\n states.set(subscriber, event.state);\n }\n }\n }\n\n return states;\n },\n };\n};\n"],"names":["createLifecyclesProvider","db","subscribers","subscriberUtils","isLifecycleHooksDisabled","subscribe","subscriber","assert","push","splice","indexOf","clear","disable","enable","createEvent","action","uid","properties","state","model","metadata","get","run","states","Map","i","length","event","set","hasAction","hasModel","models","includes"],"mappings":"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"} |