mirror of
https://github.com/stablyai/orca.git
synced 2026-10-18 08:03:22 +00:00
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import type { PluginCapabilityKind } from '../../shared/plugins/plugin-capabilities'
|
|
import type { ValidDiscoveredPlugin } from './plugin-discovery'
|
|
import type { PluginWorkerSpawnSpec } from './plugin-worker-startup'
|
|
|
|
export function buildPluginWorkerSpawnSpec(
|
|
plugin: ValidDiscoveredPlugin,
|
|
grantedCapabilities: readonly PluginCapabilityKind[]
|
|
): PluginWorkerSpawnSpec {
|
|
if (!plugin.manifest.main) {
|
|
throw new Error(`plugin ${plugin.pluginKey} has no worker entry`)
|
|
}
|
|
return {
|
|
pluginKey: plugin.pluginKey,
|
|
rootDir: plugin.rootDir,
|
|
mainEntry: plugin.manifest.main,
|
|
// Dev plugins keep one root across manifest edits; include the parsed
|
|
// manifest so hot reload cannot reuse a worker with stale contributions.
|
|
manifestRevision: JSON.stringify(plugin.manifest),
|
|
grantedCapabilities
|
|
}
|
|
}
|
|
|
|
export function pluginWorkerSpawnSpecsEqual(
|
|
left: PluginWorkerSpawnSpec,
|
|
right: PluginWorkerSpawnSpec
|
|
): boolean {
|
|
if (
|
|
left.pluginKey !== right.pluginKey ||
|
|
left.rootDir !== right.rootDir ||
|
|
left.mainEntry !== right.mainEntry ||
|
|
left.manifestRevision !== right.manifestRevision
|
|
) {
|
|
return false
|
|
}
|
|
const leftCapabilities = [...left.grantedCapabilities].sort()
|
|
const rightCapabilities = [...right.grantedCapabilities].sort()
|
|
return (
|
|
leftCapabilities.length === rightCapabilities.length &&
|
|
leftCapabilities.every((capability, index) => capability === rightCapabilities[index])
|
|
)
|
|
}
|