core/converters/closure.converter.ts
core/converters/closure.converter.ts is a file in Project Scripts. 39 lines of code and 5 definitions.
import type { Atom, CallEntry, ExportEntry, FileFlags, GraphDelta, GraphEntries } from "#types/closure.types";
import { EMIT_EVENT, EVENT_FUNCTIONS, SUBSCRIBE_EVENT } from "#configuration/constants/closure.constants";
import { isConsumerCall, isRegisterCall } from "#core/predicates/closure.predicate";
export const foldDeltas = function foldDeltas(deltas: readonly GraphDelta[]): GraphEntries {
return {
consumers: deltas.flatMap((delta) => delta.consumers ?? []),
emits: deltas.flatMap((delta) => delta.emits ?? []),
eventActivity: deltas.flatMap((delta) => delta.eventActivity ?? []),
exports: deltas.flatMap((delta) => delta.exports ?? []),
externalConsumers: deltas.flatMap((delta) => delta.externalConsumers ?? []),
iconsExports: deltas.flatMap((delta) => delta.iconsExports ?? []),
idsExports: deltas.flatMap((delta) => delta.idsExports ?? []),
imports: deltas.flatMap((delta) => delta.imports ?? []),
interfaces: deltas.flatMap((delta) => delta.interfaces ?? []),
registers: deltas.flatMap((delta) => delta.registers ?? []),
sideEffectImports: deltas.flatMap((delta) => delta.sideEffectImports ?? []),
stringsExports: deltas.flatMap((delta) => delta.stringsExports ?? []),
subscribes: deltas.flatMap((delta) => delta.subscribes ?? []),
};
};
export const callDelta = function callDelta(entry: CallEntry, idArg: Atom | null): GraphDelta {
const { file, fn } = entry;
return {
consumers: isConsumerCall(fn) ? [entry] : [],
emits: fn === EMIT_EVENT ? [{ eventArg: idArg, file }] : [],
eventActivity: EVENT_FUNCTIONS.has(fn) ? [entry] : [],
registers: isRegisterCall(fn) ? [entry] : [],
subscribes: fn === SUBSCRIBE_EVENT ? [{ eventArg: idArg, file }] : [],
};
};
export const exportDelta = function exportDelta(names: readonly string[], file: string, flags: FileFlags): GraphDelta {
const entries: ExportEntry[] = names.map((name) => ({ file, name }));
return {
exports: entries,
iconsExports: flags.isIcons ? entries : [],
idsExports: flags.isIds ? entries : [],
stringsExports: flags.isStrings ? entries : [],
};
};