如何防止 Firely.Terminal 破坏 FHIR 包缓存?

How to keep Firely.Terminal from trashing the FHIR package cache?

Firely.Terminal 的一个出色方面是它能够以与使用缓存的 HAPI 工具完全兼容的方式与本地 FHIR 包缓存 (~/.fhir) 进行互操作。可悲的是,情况似乎不再如此。

今天我将 Firely.Terminal 更新到版本 2.4.2,新版本似乎遍历了 FHIR 包缓存,在没有被要求的情况下更改文件。

过去 现有 包中唯一 Firely.Terminal 改变的是缺少的 .index.json 的生成。对于新安装的软件包,与 HAPI 安装的软件包的唯一区别是 .index.json 中的一些附加字段(存在一些通常会被抑制的包含 null 的字段,以及添加的 fhirVersion 字段)。

new Firely.Terminal 被告知要将包添加到范围 (fhir install) 时,它会自动 'bakes' 它,这似乎涉及诸如快照所有 StructureDefinition 资源和扩展所有 ValueSet 资源之类的事情。即使是内容完好无损的资源,其时间戳也会被丢弃。同样的命运降临在被添加到范围的包的清单中列为依赖项的所有包。

有一个 'unbake' 命令(例如 fhir unbake --package kbv.ita.for@1.0.1),但这不是递归操作。更重要的是,当它说 'Bake successfully removed from KBV.ITA.FOR@1.0.1' (注意错误的大写)时,那是一个彻头彻尾的谎言 - 除了删除文件 .bake.json.[=18 之外,包目录的内容完全没有改变=]

因此,将包缓存恢复到正常工作状态的唯一方法是识别所有垃圾包,将它们全部删除,然后使用一些 HAPI 工具引用它们以便重新缓存它们。

如果 Firely.Terminal 破坏了它自己的缓存,我也不会介意。但是它破坏的是当前用户的全局HAPI包缓存,这简直不能接受。

有什么方法可以抑制Firely.Terminal的破坏性行为吗?理想情况下是全局(具有机器范围的影响),但秘密命令开关会在紧要关头完成。如果那不可能:有没有人知道哪个旧版本是最新的仍然有效,以及从哪里获得它?

注意:如果缓存的包是写保护的,那么 Firely.Terminal 不会接受提示 - 它会尝试破坏文件并喷出大量 'access denied' 消息。更重要的是,它甚至在发生错误时也不会停止;取而代之的是,它继续以其愉快的方式进行,并将人们可能忘记写保护的所有内容都丢弃了。

背景:FHIR包缓存的一个对我们工作很重要的特性是缓存中的文件与(规范)中的文件完全相同发布的包。特别是,我们需要在没有快照的情况下发布的配置文件不包含快照,在没有扩展的情况下发布的值集不包含扩展等等。一方面,这使得验证缓存文件与已发布包(或其固定版本)中包含的文件完全相同成为可能。另一方面,我们需要控制快照配置文件、扩展值集等的上下文,因为可能需要提供与包清单中声明的​​依赖项不同的依赖项。后者有时是必要的,因为 profile/package 版本管理在德国电子处方的背景下有点,呃,特殊并且可能与 FHIR 标准不同。为此,所有资源都必须动态地 snapshotted/expanded(取决于使用上下文),而不是静态地在磁盘上。事情正在朝着更符合标准的方向发展,但我们还没有完全做到这一点。

没有烘焙的最新版本(安装时)

从对 the latest versions of Firely Terminal 的一些快速测试来看,似乎 2.2.0 是最新的,但没有 bake 功能(安装时 auto-bake)。安装说明:

> dotnet tool uninstall --global Firely.Terminal
> dotnet tool install --global Firely.Terminal --version 2.2.0

烘焙

引入了 bake 功能来为包提供快照,因为并非所有下游工具(最值得注意的是 sushi)都能够自己生成这些。

目前 bake 默认情况下可能有点过于激进,还会为已有的包重新计算快照。原则上,这应该不是问题,因为快照只是用于计算所有分层差异的缓存。由于快照逻辑仍在发展,因此有时甚至需要重新计算。但在较新的版本中,我们将关注:

  • 将默认值更改为在已提供时不重新计算
  • 提供全局设置以将默认值更改为从不calculate/always(重新)计算快照

这应该可以防止 Firely Terminal 接触包缓存中不需要接触的任何文件。根据您的问题,鉴于您使用了 'thrashing' 和 'destroying'?

,我不确定在 'baking' 之后共享 FHIR 缓存的状态是否有任何损坏

未烘焙

unbake 命令用于从软件包文件夹中删除快照。我在测试中发现它没有这样做,我将把它作为一个问题来解决。