Files
orca/config/scripts/windows-process-tree-creation-time.cjs
T

44 lines
1.6 KiB
JavaScript

'use strict'
/**
* Prove the compiled addon supports table and synchronous process creation-time reads.
*
* This package ships a prebuilt `.node` at the same
* `build/Release/` path node-gyp writes to, so neither a load nor a path check
* can tell a stale prebuilt from a source build. pnpm patches the source tree
* and leaves that prebuilt in place, which is how `ProcessDataFlag.CreationTime`
* came to exist in `lib/index.js` on a binary that ignores flag 4 -- the gate
* read true and every row came back without `creationTimeMs`.
*
* `supportedProcessDataFlags` is exported by the patched `addon.cc`, so its
* presence is the binary's own answer, checked by both Node and Electron probes.
*/
/** `ProcessDataFlags::CREATIONTIME` in src/process.h. */
const CREATION_TIME_FLAG = 4
function assertWindowsProcessTreeCreationTime({ module, platform = process.platform }) {
if (platform !== 'win32') {
return
}
const supported = module?.supportedProcessDataFlags
if (
typeof supported === 'number' &&
(supported & CREATION_TIME_FLAG) !== 0 &&
typeof module?.getProcessCreationTime === 'function'
) {
return
}
throw new Error(
[
'@vscode/windows-process-tree does not report CreationTime support with a synchronous identity getter',
`(supportedProcessDataFlags=${String(supported)}).`,
'This is an unpatched or older binary, so process identities or synchronous',
'profile-owner recovery are unavailable.',
'Rebuild it from source so config/patches/@vscode__windows-process-tree@0.8.0.patch applies.'
].join(' ')
)
}
module.exports = { assertWindowsProcessTreeCreationTime, CREATION_TIME_FLAG }