1
0
mirror of https://github.com/ragestudio/relic.git synced 2025-06-27 03:14:18 +00:00
2025-02-21 18:26:36 +01:00

71 lines
1.7 KiB
JavaScript
Executable File

import { constants } from 'node:os'
import { SIGRTMAX } from './realtime.js'
import { getSignals } from './signals.js'
// Retrieve `signalsByName`, an object mapping signal name to signal properties.
// We make sure the object is sorted by `number`.
const getSignalsByName = () => {
const signals = getSignals()
return Object.fromEntries(signals.map(getSignalByName))
}
const getSignalByName = ({
name,
number,
description,
supported,
action,
forced,
standard,
}) => [name, { name, number, description, supported, action, forced, standard }]
export const signalsByName = getSignalsByName()
// Retrieve `signalsByNumber`, an object mapping signal number to signal
// properties.
// We make sure the object is sorted by `number`.
const getSignalsByNumber = () => {
const signals = getSignals()
const length = SIGRTMAX + 1
const signalsA = Array.from({ length }, (value, number) =>
getSignalByNumber(number, signals),
)
return Object.assign({}, ...signalsA)
}
const getSignalByNumber = (number, signals) => {
const signal = findSignalByNumber(number, signals)
if (signal === undefined) {
return {}
}
const { name, description, supported, action, forced, standard } = signal
return {
[number]: {
name,
number,
description,
supported,
action,
forced,
standard,
},
}
}
// Several signals might end up sharing the same number because of OS-specific
// numbers, in which case those prevail.
const findSignalByNumber = (number, signals) => {
const signal = signals.find(({ name }) => constants.signals[name] === number)
if (signal !== undefined) {
return signal
}
return signals.find((signalA) => signalA.number === number)
}
export const signalsByNumber = getSignalsByNumber()