Merge pull request #11925 from joewinke/fix/plugin-thirdparty-sourcedir

fix(shell): keep __sourceDir on third-party plugin manifests
This commit is contained in:
Spencer Bull authored and GitHub committed 2026-10-02 21:08:57 -05:00
commit 0537ae121b
2 files changed
+15 -1

No files matched your search

+2 -1
View File
@@ -319,7 +319,8 @@ ShellRoot {
if (!manifest) return null
if (manifest.__isFirstParty) return manifest
var copy = JSON.parse(JSON.stringify(manifest))
delete copy.__sourceDir
// Keep __sourceDir: third-party plugins find their bundled scripts through it.
// Only the host trust markers are withheld.
delete copy.__isFirstParty
delete copy.__hostCapabilities
return copy
+13
View File
@@ -210,5 +210,18 @@ check(
'_syncServices still drops disabled or removed services'
)
const publicManifestMatch = shellSource.match(/function publicPluginManifest\(manifest\) \{[\s\S]*?\n \}/)
check(!!publicManifestMatch, 'publicPluginManifest is defined')
if (publicManifestMatch) {
const host = {}
require('vm').runInNewContext(`${publicManifestMatch[0]}\nthis.publicPluginManifest = publicPluginManifest`, host)
const raw = { id: 'acme.demo', __sourceDir: '/plugins/acme.demo', __isFirstParty: false, __hostCapabilities: ['authentication'] }
const copy = host.publicPluginManifest(raw)
check(copy.__sourceDir === '/plugins/acme.demo', 'third-party manifests keep their own source directory')
check(!('__isFirstParty' in copy) && !('__hostCapabilities' in copy), 'third-party manifests drop host trust markers')
copy.__sourceDir = '/elsewhere'
check(raw.__sourceDir === '/plugins/acme.demo', 'a plugin editing its manifest copy cannot move the registry entry')
}
assert(errors.length === 0, 'plugin manifests match shell registry contract', errors.join('\n'))
JS