@lakutata/containerd 0.0.0-stage → 3.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +409 -2
  3. package/THIRD_PARTY_NOTICES.md +310 -0
  4. package/dist/cjs/client/BuildKit.d.ts +176 -0
  5. package/dist/cjs/client/BuildKit.js +536 -0
  6. package/dist/cjs/client/BuildKitMessages.d.ts +35 -0
  7. package/dist/cjs/client/BuildKitMessages.js +123 -0
  8. package/dist/cjs/client/ContainerStore.d.ts +558 -0
  9. package/dist/cjs/client/ContainerStore.js +1384 -0
  10. package/dist/cjs/client/ContainerdClient.d.ts +244 -0
  11. package/dist/cjs/client/ContainerdClient.js +455 -0
  12. package/dist/cjs/client/DockerIgnore.d.ts +44 -0
  13. package/dist/cjs/client/DockerIgnore.js +186 -0
  14. package/dist/cjs/client/Fifo.d.ts +31 -0
  15. package/dist/cjs/client/Fifo.js +66 -0
  16. package/dist/cjs/client/ImageStore.d.ts +258 -0
  17. package/dist/cjs/client/ImageStore.js +636 -0
  18. package/dist/cjs/client/Messages.d.ts +103 -0
  19. package/dist/cjs/client/Messages.js +397 -0
  20. package/dist/cjs/client/Networks.d.ts +221 -0
  21. package/dist/cjs/client/Networks.js +630 -0
  22. package/dist/cjs/client/Platforms.d.ts +53 -0
  23. package/dist/cjs/client/Platforms.js +169 -0
  24. package/dist/cjs/client/Reference.d.ts +33 -0
  25. package/dist/cjs/client/Reference.js +70 -0
  26. package/dist/cjs/client/Registry.d.ts +145 -0
  27. package/dist/cjs/client/Registry.js +272 -0
  28. package/dist/cjs/client/Rootfs.d.ts +83 -0
  29. package/dist/cjs/client/Rootfs.js +245 -0
  30. package/dist/cjs/client/Seccomp.d.ts +36 -0
  31. package/dist/cjs/client/Seccomp.js +156 -0
  32. package/dist/cjs/client/Spec.d.ts +151 -0
  33. package/dist/cjs/client/Spec.js +227 -0
  34. package/dist/cjs/client/Volumes.d.ts +42 -0
  35. package/dist/cjs/client/Volumes.js +80 -0
  36. package/dist/cjs/containerd/Containerd.d.ts +442 -0
  37. package/dist/cjs/containerd/Containerd.js +929 -0
  38. package/dist/cjs/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
  39. package/dist/cjs/containerd/exceptions/ContainerdConnectionException.js +16 -0
  40. package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
  41. package/dist/cjs/containerd/exceptions/ContainerdContainerNameConflictException.js +15 -0
  42. package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
  43. package/dist/cjs/containerd/exceptions/ContainerdContainerNotFoundException.js +16 -0
  44. package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
  45. package/dist/cjs/containerd/exceptions/ContainerdContainerStateException.js +17 -0
  46. package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
  47. package/dist/cjs/containerd/exceptions/ContainerdImageBuildException.js +16 -0
  48. package/dist/cjs/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
  49. package/dist/cjs/containerd/exceptions/ContainerdImageExportException.js +16 -0
  50. package/dist/cjs/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
  51. package/dist/cjs/containerd/exceptions/ContainerdImageImportException.js +16 -0
  52. package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
  53. package/dist/cjs/containerd/exceptions/ContainerdImageNotFoundException.js +16 -0
  54. package/dist/cjs/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
  55. package/dist/cjs/containerd/exceptions/ContainerdImagePullException.js +16 -0
  56. package/dist/cjs/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
  57. package/dist/cjs/containerd/exceptions/ContainerdImagePushException.js +15 -0
  58. package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
  59. package/dist/cjs/containerd/exceptions/ContainerdNetworkConflictException.js +16 -0
  60. package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
  61. package/dist/cjs/containerd/exceptions/ContainerdNetworkNotFoundException.js +16 -0
  62. package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
  63. package/dist/cjs/containerd/exceptions/ContainerdPathNotFoundException.js +15 -0
  64. package/dist/cjs/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
  65. package/dist/cjs/containerd/exceptions/ContainerdPlatformException.js +16 -0
  66. package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
  67. package/dist/cjs/containerd/exceptions/ContainerdVolumeInUseException.js +15 -0
  68. package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
  69. package/dist/cjs/containerd/exceptions/ContainerdVolumeNotFoundException.js +15 -0
  70. package/dist/cjs/containerd/lib/ContainerdContainer.d.ts +292 -0
  71. package/dist/cjs/containerd/lib/ContainerdContainer.js +536 -0
  72. package/dist/cjs/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
  73. package/dist/cjs/containerd/lib/ContainerdContainerTTY.js +178 -0
  74. package/dist/cjs/containerd/lib/ContainerdErrors.d.ts +6 -0
  75. package/dist/cjs/containerd/lib/ContainerdErrors.js +37 -0
  76. package/dist/cjs/containerd/lib/ContainerdImage.d.ts +149 -0
  77. package/dist/cjs/containerd/lib/ContainerdImage.js +222 -0
  78. package/dist/cjs/containerd/options/ContainerdPruneOptions.d.ts +44 -0
  79. package/dist/cjs/containerd/options/ContainerdPruneOptions.js +51 -0
  80. package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
  81. package/dist/cjs/containerd/options/ContainerdRegistryAuthOptions.js +45 -0
  82. package/dist/cjs/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
  83. package/dist/cjs/containerd/options/container/ContainerCommitOptions.js +66 -0
  84. package/dist/cjs/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
  85. package/dist/cjs/containerd/options/container/ContainerCreateOptions.js +239 -0
  86. package/dist/cjs/containerd/options/container/ContainerExecOptions.d.ts +53 -0
  87. package/dist/cjs/containerd/options/container/ContainerExecOptions.js +63 -0
  88. package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
  89. package/dist/cjs/containerd/options/container/ContainerExportDirectoryOptions.js +45 -0
  90. package/dist/cjs/containerd/options/container/ContainerKillOptions.d.ts +30 -0
  91. package/dist/cjs/containerd/options/container/ContainerKillOptions.js +41 -0
  92. package/dist/cjs/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
  93. package/dist/cjs/containerd/options/container/ContainerLogsOptions.js +44 -0
  94. package/dist/cjs/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
  95. package/dist/cjs/containerd/options/container/ContainerRemoveOptions.js +34 -0
  96. package/dist/cjs/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
  97. package/dist/cjs/containerd/options/container/ContainerResourceOptions.js +67 -0
  98. package/dist/cjs/containerd/options/container/ContainerStopOptions.d.ts +30 -0
  99. package/dist/cjs/containerd/options/container/ContainerStopOptions.js +41 -0
  100. package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
  101. package/dist/cjs/containerd/options/container/ContainerTTYConsoleSizeOptions.js +40 -0
  102. package/dist/cjs/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
  103. package/dist/cjs/containerd/options/container/ContainerTTYOptions.js +63 -0
  104. package/dist/cjs/containerd/options/image/ImageBuildOptions.d.ts +88 -0
  105. package/dist/cjs/containerd/options/image/ImageBuildOptions.js +95 -0
  106. package/dist/cjs/containerd/options/image/ImageExportOptions.d.ts +25 -0
  107. package/dist/cjs/containerd/options/image/ImageExportOptions.js +39 -0
  108. package/dist/cjs/containerd/options/image/ImageImportOptions.d.ts +38 -0
  109. package/dist/cjs/containerd/options/image/ImageImportOptions.js +47 -0
  110. package/dist/cjs/containerd/options/image/ImagePullOptions.d.ts +53 -0
  111. package/dist/cjs/containerd/options/image/ImagePullOptions.js +66 -0
  112. package/dist/cjs/containerd/options/image/ImagePushOptions.d.ts +44 -0
  113. package/dist/cjs/containerd/options/image/ImagePushOptions.js +58 -0
  114. package/dist/cjs/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
  115. package/dist/cjs/containerd/options/network/NetworkCreateOptions.js +83 -0
  116. package/dist/cjs/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
  117. package/dist/cjs/containerd/options/volume/VolumeCreateOptions.js +40 -0
  118. package/dist/cjs/containerd/types/ContainerdBind.d.ts +28 -0
  119. package/dist/cjs/containerd/types/ContainerdBind.js +2 -0
  120. package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
  121. package/dist/cjs/containerd/types/ContainerdBuildOutputCallback.js +2 -0
  122. package/dist/cjs/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
  123. package/dist/cjs/containerd/types/ContainerdContainerNetwork.js +2 -0
  124. package/dist/cjs/containerd/types/ContainerdContainerPort.d.ts +22 -0
  125. package/dist/cjs/containerd/types/ContainerdContainerPort.js +2 -0
  126. package/dist/cjs/containerd/types/ContainerdContainerState.d.ts +42 -0
  127. package/dist/cjs/containerd/types/ContainerdContainerState.js +2 -0
  128. package/dist/cjs/containerd/types/ContainerdContainerStats.d.ts +107 -0
  129. package/dist/cjs/containerd/types/ContainerdContainerStats.js +2 -0
  130. package/dist/cjs/containerd/types/ContainerdDevice.d.ts +25 -0
  131. package/dist/cjs/containerd/types/ContainerdDevice.js +2 -0
  132. package/dist/cjs/containerd/types/ContainerdExecResult.d.ts +18 -0
  133. package/dist/cjs/containerd/types/ContainerdExecResult.js +2 -0
  134. package/dist/cjs/containerd/types/ContainerdImageConfig.d.ts +46 -0
  135. package/dist/cjs/containerd/types/ContainerdImageConfig.js +2 -0
  136. package/dist/cjs/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
  137. package/dist/cjs/containerd/types/ContainerdNetworkInfo.js +2 -0
  138. package/dist/cjs/containerd/types/ContainerdProgressCallback.d.ts +29 -0
  139. package/dist/cjs/containerd/types/ContainerdProgressCallback.js +2 -0
  140. package/dist/cjs/containerd/types/ContainerdPruneResult.d.ts +21 -0
  141. package/dist/cjs/containerd/types/ContainerdPruneResult.js +2 -0
  142. package/dist/cjs/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
  143. package/dist/cjs/containerd/types/ContainerdRestartPolicy.js +2 -0
  144. package/dist/cjs/containerd/types/ContainerdTmpfs.d.ts +20 -0
  145. package/dist/cjs/containerd/types/ContainerdTmpfs.js +2 -0
  146. package/dist/cjs/containerd/types/ContainerdVolume.d.ts +19 -0
  147. package/dist/cjs/containerd/types/ContainerdVolume.js +2 -0
  148. package/dist/cjs/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
  149. package/dist/cjs/containerd/types/ContainerdVolumeInfo.js +2 -0
  150. package/dist/cjs/exports/Containerd.d.ts +69 -0
  151. package/dist/cjs/exports/Containerd.js +87 -0
  152. package/dist/cjs/package.json +1 -0
  153. package/dist/esm/client/BuildKit.js +488 -0
  154. package/dist/esm/client/BuildKitMessages.js +120 -0
  155. package/dist/esm/client/ContainerStore.js +1339 -0
  156. package/dist/esm/client/ContainerdClient.js +416 -0
  157. package/dist/esm/client/DockerIgnore.js +179 -0
  158. package/dist/esm/client/Fifo.js +59 -0
  159. package/dist/esm/client/ImageStore.js +628 -0
  160. package/dist/esm/client/Messages.js +393 -0
  161. package/dist/esm/client/Networks.js +621 -0
  162. package/dist/esm/client/Platforms.js +156 -0
  163. package/dist/esm/client/Reference.js +66 -0
  164. package/dist/esm/client/Registry.js +263 -0
  165. package/dist/esm/client/Rootfs.js +234 -0
  166. package/dist/esm/client/Seccomp.js +152 -0
  167. package/dist/esm/client/Spec.js +220 -0
  168. package/dist/esm/client/Volumes.js +73 -0
  169. package/dist/esm/containerd/Containerd.js +923 -0
  170. package/dist/esm/containerd/exceptions/ContainerdConnectionException.js +12 -0
  171. package/dist/esm/containerd/exceptions/ContainerdContainerNameConflictException.js +11 -0
  172. package/dist/esm/containerd/exceptions/ContainerdContainerNotFoundException.js +12 -0
  173. package/dist/esm/containerd/exceptions/ContainerdContainerStateException.js +13 -0
  174. package/dist/esm/containerd/exceptions/ContainerdImageBuildException.js +12 -0
  175. package/dist/esm/containerd/exceptions/ContainerdImageExportException.js +12 -0
  176. package/dist/esm/containerd/exceptions/ContainerdImageImportException.js +12 -0
  177. package/dist/esm/containerd/exceptions/ContainerdImageNotFoundException.js +12 -0
  178. package/dist/esm/containerd/exceptions/ContainerdImagePullException.js +12 -0
  179. package/dist/esm/containerd/exceptions/ContainerdImagePushException.js +11 -0
  180. package/dist/esm/containerd/exceptions/ContainerdNetworkConflictException.js +12 -0
  181. package/dist/esm/containerd/exceptions/ContainerdNetworkNotFoundException.js +12 -0
  182. package/dist/esm/containerd/exceptions/ContainerdPathNotFoundException.js +11 -0
  183. package/dist/esm/containerd/exceptions/ContainerdPlatformException.js +12 -0
  184. package/dist/esm/containerd/exceptions/ContainerdVolumeInUseException.js +11 -0
  185. package/dist/esm/containerd/exceptions/ContainerdVolumeNotFoundException.js +11 -0
  186. package/dist/esm/containerd/lib/ContainerdContainer.js +533 -0
  187. package/dist/esm/containerd/lib/ContainerdContainerTTY.js +175 -0
  188. package/dist/esm/containerd/lib/ContainerdErrors.js +34 -0
  189. package/dist/esm/containerd/lib/ContainerdImage.js +219 -0
  190. package/dist/esm/containerd/options/ContainerdPruneOptions.js +47 -0
  191. package/dist/esm/containerd/options/ContainerdRegistryAuthOptions.js +41 -0
  192. package/dist/esm/containerd/options/container/ContainerCommitOptions.js +62 -0
  193. package/dist/esm/containerd/options/container/ContainerCreateOptions.js +235 -0
  194. package/dist/esm/containerd/options/container/ContainerExecOptions.js +59 -0
  195. package/dist/esm/containerd/options/container/ContainerExportDirectoryOptions.js +41 -0
  196. package/dist/esm/containerd/options/container/ContainerKillOptions.js +37 -0
  197. package/dist/esm/containerd/options/container/ContainerLogsOptions.js +40 -0
  198. package/dist/esm/containerd/options/container/ContainerRemoveOptions.js +30 -0
  199. package/dist/esm/containerd/options/container/ContainerResourceOptions.js +63 -0
  200. package/dist/esm/containerd/options/container/ContainerStopOptions.js +37 -0
  201. package/dist/esm/containerd/options/container/ContainerTTYConsoleSizeOptions.js +36 -0
  202. package/dist/esm/containerd/options/container/ContainerTTYOptions.js +59 -0
  203. package/dist/esm/containerd/options/image/ImageBuildOptions.js +91 -0
  204. package/dist/esm/containerd/options/image/ImageExportOptions.js +35 -0
  205. package/dist/esm/containerd/options/image/ImageImportOptions.js +43 -0
  206. package/dist/esm/containerd/options/image/ImagePullOptions.js +62 -0
  207. package/dist/esm/containerd/options/image/ImagePushOptions.js +54 -0
  208. package/dist/esm/containerd/options/network/NetworkCreateOptions.js +79 -0
  209. package/dist/esm/containerd/options/volume/VolumeCreateOptions.js +36 -0
  210. package/dist/esm/containerd/types/ContainerdBind.js +1 -0
  211. package/dist/esm/containerd/types/ContainerdBuildOutputCallback.js +1 -0
  212. package/dist/esm/containerd/types/ContainerdContainerNetwork.js +1 -0
  213. package/dist/esm/containerd/types/ContainerdContainerPort.js +1 -0
  214. package/dist/esm/containerd/types/ContainerdContainerState.js +1 -0
  215. package/dist/esm/containerd/types/ContainerdContainerStats.js +1 -0
  216. package/dist/esm/containerd/types/ContainerdDevice.js +1 -0
  217. package/dist/esm/containerd/types/ContainerdExecResult.js +1 -0
  218. package/dist/esm/containerd/types/ContainerdImageConfig.js +1 -0
  219. package/dist/esm/containerd/types/ContainerdNetworkInfo.js +1 -0
  220. package/dist/esm/containerd/types/ContainerdProgressCallback.js +1 -0
  221. package/dist/esm/containerd/types/ContainerdPruneResult.js +1 -0
  222. package/dist/esm/containerd/types/ContainerdRestartPolicy.js +1 -0
  223. package/dist/esm/containerd/types/ContainerdTmpfs.js +1 -0
  224. package/dist/esm/containerd/types/ContainerdVolume.js +1 -0
  225. package/dist/esm/containerd/types/ContainerdVolumeInfo.js +1 -0
  226. package/dist/esm/exports/Containerd.js +68 -0
  227. package/dist/types/client/BuildKit.d.ts +176 -0
  228. package/dist/types/client/BuildKitMessages.d.ts +35 -0
  229. package/dist/types/client/ContainerStore.d.ts +558 -0
  230. package/dist/types/client/ContainerdClient.d.ts +244 -0
  231. package/dist/types/client/DockerIgnore.d.ts +44 -0
  232. package/dist/types/client/Fifo.d.ts +31 -0
  233. package/dist/types/client/ImageStore.d.ts +258 -0
  234. package/dist/types/client/Messages.d.ts +103 -0
  235. package/dist/types/client/Networks.d.ts +221 -0
  236. package/dist/types/client/Platforms.d.ts +53 -0
  237. package/dist/types/client/Reference.d.ts +33 -0
  238. package/dist/types/client/Registry.d.ts +145 -0
  239. package/dist/types/client/Rootfs.d.ts +83 -0
  240. package/dist/types/client/Seccomp.d.ts +36 -0
  241. package/dist/types/client/Spec.d.ts +151 -0
  242. package/dist/types/client/Volumes.d.ts +42 -0
  243. package/dist/types/containerd/Containerd.d.ts +442 -0
  244. package/dist/types/containerd/exceptions/ContainerdConnectionException.d.ts +9 -0
  245. package/dist/types/containerd/exceptions/ContainerdContainerNameConflictException.d.ts +8 -0
  246. package/dist/types/containerd/exceptions/ContainerdContainerNotFoundException.d.ts +9 -0
  247. package/dist/types/containerd/exceptions/ContainerdContainerStateException.d.ts +10 -0
  248. package/dist/types/containerd/exceptions/ContainerdImageBuildException.d.ts +9 -0
  249. package/dist/types/containerd/exceptions/ContainerdImageExportException.d.ts +9 -0
  250. package/dist/types/containerd/exceptions/ContainerdImageImportException.d.ts +9 -0
  251. package/dist/types/containerd/exceptions/ContainerdImageNotFoundException.d.ts +9 -0
  252. package/dist/types/containerd/exceptions/ContainerdImagePullException.d.ts +9 -0
  253. package/dist/types/containerd/exceptions/ContainerdImagePushException.d.ts +8 -0
  254. package/dist/types/containerd/exceptions/ContainerdNetworkConflictException.d.ts +9 -0
  255. package/dist/types/containerd/exceptions/ContainerdNetworkNotFoundException.d.ts +9 -0
  256. package/dist/types/containerd/exceptions/ContainerdPathNotFoundException.d.ts +8 -0
  257. package/dist/types/containerd/exceptions/ContainerdPlatformException.d.ts +9 -0
  258. package/dist/types/containerd/exceptions/ContainerdVolumeInUseException.d.ts +8 -0
  259. package/dist/types/containerd/exceptions/ContainerdVolumeNotFoundException.d.ts +8 -0
  260. package/dist/types/containerd/lib/ContainerdContainer.d.ts +292 -0
  261. package/dist/types/containerd/lib/ContainerdContainerTTY.d.ts +116 -0
  262. package/dist/types/containerd/lib/ContainerdErrors.d.ts +6 -0
  263. package/dist/types/containerd/lib/ContainerdImage.d.ts +149 -0
  264. package/dist/types/containerd/options/ContainerdPruneOptions.d.ts +44 -0
  265. package/dist/types/containerd/options/ContainerdRegistryAuthOptions.d.ts +32 -0
  266. package/dist/types/containerd/options/container/ContainerCommitOptions.d.ts +57 -0
  267. package/dist/types/containerd/options/container/ContainerCreateOptions.d.ts +273 -0
  268. package/dist/types/containerd/options/container/ContainerExecOptions.d.ts +53 -0
  269. package/dist/types/containerd/options/container/ContainerExportDirectoryOptions.d.ts +32 -0
  270. package/dist/types/containerd/options/container/ContainerKillOptions.d.ts +30 -0
  271. package/dist/types/containerd/options/container/ContainerLogsOptions.d.ts +34 -0
  272. package/dist/types/containerd/options/container/ContainerRemoveOptions.d.ts +22 -0
  273. package/dist/types/containerd/options/container/ContainerResourceOptions.d.ts +63 -0
  274. package/dist/types/containerd/options/container/ContainerStopOptions.d.ts +30 -0
  275. package/dist/types/containerd/options/container/ContainerTTYConsoleSizeOptions.d.ts +26 -0
  276. package/dist/types/containerd/options/container/ContainerTTYOptions.d.ts +50 -0
  277. package/dist/types/containerd/options/image/ImageBuildOptions.d.ts +88 -0
  278. package/dist/types/containerd/options/image/ImageExportOptions.d.ts +25 -0
  279. package/dist/types/containerd/options/image/ImageImportOptions.d.ts +38 -0
  280. package/dist/types/containerd/options/image/ImagePullOptions.d.ts +53 -0
  281. package/dist/types/containerd/options/image/ImagePushOptions.d.ts +44 -0
  282. package/dist/types/containerd/options/network/NetworkCreateOptions.d.ts +82 -0
  283. package/dist/types/containerd/options/volume/VolumeCreateOptions.d.ts +26 -0
  284. package/dist/types/containerd/types/ContainerdBind.d.ts +28 -0
  285. package/dist/types/containerd/types/ContainerdBuildOutputCallback.d.ts +6 -0
  286. package/dist/types/containerd/types/ContainerdContainerNetwork.d.ts +40 -0
  287. package/dist/types/containerd/types/ContainerdContainerPort.d.ts +22 -0
  288. package/dist/types/containerd/types/ContainerdContainerState.d.ts +42 -0
  289. package/dist/types/containerd/types/ContainerdContainerStats.d.ts +107 -0
  290. package/dist/types/containerd/types/ContainerdDevice.d.ts +25 -0
  291. package/dist/types/containerd/types/ContainerdExecResult.d.ts +18 -0
  292. package/dist/types/containerd/types/ContainerdImageConfig.d.ts +46 -0
  293. package/dist/types/containerd/types/ContainerdNetworkInfo.d.ts +49 -0
  294. package/dist/types/containerd/types/ContainerdProgressCallback.d.ts +29 -0
  295. package/dist/types/containerd/types/ContainerdPruneResult.d.ts +21 -0
  296. package/dist/types/containerd/types/ContainerdRestartPolicy.d.ts +13 -0
  297. package/dist/types/containerd/types/ContainerdTmpfs.d.ts +20 -0
  298. package/dist/types/containerd/types/ContainerdVolume.d.ts +19 -0
  299. package/dist/types/containerd/types/ContainerdVolumeInfo.d.ts +26 -0
  300. package/dist/types/exports/Containerd.d.ts +69 -0
  301. package/package.json +51 -4
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("../containerd/Containerd.js"), exports);
18
+ /**
19
+ * Lib
20
+ */
21
+ __exportStar(require("../containerd/lib/ContainerdContainer.js"), exports);
22
+ __exportStar(require("../containerd/lib/ContainerdContainerTTY.js"), exports);
23
+ __exportStar(require("../containerd/lib/ContainerdImage.js"), exports);
24
+ /**
25
+ * Types
26
+ */
27
+ __exportStar(require("../containerd/types/ContainerdBind.js"), exports);
28
+ __exportStar(require("../containerd/types/ContainerdBuildOutputCallback.js"), exports);
29
+ __exportStar(require("../containerd/types/ContainerdContainerNetwork.js"), exports);
30
+ __exportStar(require("../containerd/types/ContainerdContainerPort.js"), exports);
31
+ __exportStar(require("../containerd/types/ContainerdContainerState.js"), exports);
32
+ __exportStar(require("../containerd/types/ContainerdContainerStats.js"), exports);
33
+ __exportStar(require("../containerd/types/ContainerdDevice.js"), exports);
34
+ __exportStar(require("../containerd/types/ContainerdExecResult.js"), exports);
35
+ __exportStar(require("../containerd/types/ContainerdImageConfig.js"), exports);
36
+ __exportStar(require("../containerd/types/ContainerdNetworkInfo.js"), exports);
37
+ __exportStar(require("../containerd/types/ContainerdPruneResult.js"), exports);
38
+ __exportStar(require("../containerd/types/ContainerdVolume.js"), exports);
39
+ __exportStar(require("../containerd/types/ContainerdVolumeInfo.js"), exports);
40
+ __exportStar(require("../containerd/types/ContainerdProgressCallback.js"), exports);
41
+ __exportStar(require("../containerd/types/ContainerdRestartPolicy.js"), exports);
42
+ __exportStar(require("../containerd/types/ContainerdTmpfs.js"), exports);
43
+ /**
44
+ * Options
45
+ */
46
+ __exportStar(require("../containerd/options/ContainerdPruneOptions.js"), exports);
47
+ __exportStar(require("../containerd/options/ContainerdRegistryAuthOptions.js"), exports);
48
+ __exportStar(require("../containerd/options/container/ContainerCommitOptions.js"), exports);
49
+ __exportStar(require("../containerd/options/container/ContainerCreateOptions.js"), exports);
50
+ __exportStar(require("../containerd/options/container/ContainerExecOptions.js"), exports);
51
+ __exportStar(require("../containerd/options/container/ContainerKillOptions.js"), exports);
52
+ __exportStar(require("../containerd/options/container/ContainerLogsOptions.js"), exports);
53
+ __exportStar(require("../containerd/options/container/ContainerRemoveOptions.js"), exports);
54
+ __exportStar(require("../containerd/options/container/ContainerExportDirectoryOptions.js"), exports);
55
+ __exportStar(require("../containerd/options/container/ContainerResourceOptions.js"), exports);
56
+ __exportStar(require("../containerd/options/container/ContainerTTYConsoleSizeOptions.js"), exports);
57
+ __exportStar(require("../containerd/options/container/ContainerTTYOptions.js"), exports);
58
+ __exportStar(require("../containerd/options/container/ContainerStopOptions.js"), exports);
59
+ __exportStar(require("../containerd/options/image/ImageBuildOptions.js"), exports);
60
+ __exportStar(require("../containerd/options/image/ImageExportOptions.js"), exports);
61
+ __exportStar(require("../containerd/options/image/ImageImportOptions.js"), exports);
62
+ __exportStar(require("../containerd/options/image/ImagePullOptions.js"), exports);
63
+ __exportStar(require("../containerd/options/image/ImagePushOptions.js"), exports);
64
+ __exportStar(require("../containerd/options/network/NetworkCreateOptions.js"), exports);
65
+ __exportStar(require("../containerd/options/volume/VolumeCreateOptions.js"), exports);
66
+ /**
67
+ * Exceptions
68
+ */
69
+ __exportStar(require("../containerd/exceptions/ContainerdConnectionException.js"), exports);
70
+ __exportStar(require("../containerd/exceptions/ContainerdContainerNameConflictException.js"), exports);
71
+ __exportStar(require("../containerd/exceptions/ContainerdContainerNotFoundException.js"), exports);
72
+ __exportStar(require("../containerd/exceptions/ContainerdContainerStateException.js"), exports);
73
+ __exportStar(require("../containerd/exceptions/ContainerdImageBuildException.js"), exports);
74
+ __exportStar(require("../containerd/exceptions/ContainerdImageExportException.js"), exports);
75
+ __exportStar(require("../containerd/exceptions/ContainerdImageImportException.js"), exports);
76
+ __exportStar(require("../containerd/exceptions/ContainerdImageNotFoundException.js"), exports);
77
+ __exportStar(require("../containerd/exceptions/ContainerdImagePullException.js"), exports);
78
+ __exportStar(require("../containerd/exceptions/ContainerdImagePushException.js"), exports);
79
+ __exportStar(require("../containerd/exceptions/ContainerdNetworkConflictException.js"), exports);
80
+ __exportStar(require("../containerd/exceptions/ContainerdNetworkNotFoundException.js"), exports);
81
+ __exportStar(require("../containerd/exceptions/ContainerdPathNotFoundException.js"), exports);
82
+ __exportStar(require("../containerd/exceptions/ContainerdPlatformException.js"), exports);
83
+ __exportStar(require("../containerd/exceptions/ContainerdVolumeInUseException.js"), exports);
84
+ __exportStar(require("../containerd/exceptions/ContainerdVolumeNotFoundException.js"), exports);
85
+
86
+ //The default of the entry: the entry itself (scripts/package-build/cjs-package.mjs)
87
+ if (!Object.prototype.hasOwnProperty.call(exports, 'default')) Object.defineProperty(exports, 'default', {value: exports})
@@ -0,0 +1 @@
1
+ {"type":"commonjs"}
@@ -0,0 +1,488 @@
1
+ import { randomBytes } from 'node:crypto';
2
+ import { createWriteStream } from 'node:fs';
3
+ import { lstat, open, readdir, readlink } from 'node:fs/promises';
4
+ import path from 'node:path';
5
+ import { Duplex } from 'node:stream';
6
+ import { finished } from 'node:stream/promises';
7
+ import { GRPCError, GRPCServer, GRPCStatus } from '@lakutata/grpc';
8
+ import * as B from './BuildKitMessages.js';
9
+ import { DockerIgnore } from './DockerIgnore.js';
10
+ import { formatPlatform, normalizePlatform } from './Platforms.js';
11
+ import { fetchRegistryToken } from './Registry.js';
12
+ import { timestampDate } from './ContainerdClient.js';
13
+ /**
14
+ * The service of BuildKit
15
+ */
16
+ const CONTROL = '/moby.buildkit.v1.Control';
17
+ /**
18
+ * The size of the chunks of the files sent
19
+ */
20
+ const CHUNK_SIZE = 32 * 1024;
21
+ /**
22
+ * The mode of a file as Go writes it (os.FileMode), the one of the stats of fsutil
23
+ * @param stats
24
+ */
25
+ export function goFileMode(stats) {
26
+ let mode = Number(stats.mode & 511n);
27
+ if (stats.isDirectory())
28
+ mode |= 0x80000000;
29
+ else if (stats.isSymbolicLink())
30
+ mode |= 0x08000000;
31
+ else if (stats.isFIFO())
32
+ mode |= 0x02000000;
33
+ else if (stats.isSocket())
34
+ mode |= 0x01000000;
35
+ else if (stats.isCharacterDevice())
36
+ mode |= 0x04000000 | 0x00200000;
37
+ else if (stats.isBlockDevice())
38
+ mode |= 0x04000000;
39
+ if (stats.mode & 2048n)
40
+ mode |= 0x00800000;
41
+ if (stats.mode & 1024n)
42
+ mode |= 0x00400000;
43
+ if (stats.mode & 512n)
44
+ mode |= 0x00100000;
45
+ return mode >>> 0;
46
+ }
47
+ /**
48
+ * The expression of a pattern of the paths of fsutil (filepath.Match, ** for any directories)
49
+ * @param pattern
50
+ */
51
+ export function patternExpression(pattern) {
52
+ const normalized = path.posix.normalize(pattern.replace(/\\/g, '/')).replace(/^\/+/, '').replace(/\/+$/, '');
53
+ let expression = '';
54
+ for (let index = 0; index < normalized.length; index++) {
55
+ const character = normalized[index];
56
+ if (character === '*') {
57
+ if (normalized[index + 1] === '*') {
58
+ //**/ any directories, ** anything
59
+ if (normalized[index + 2] === '/') {
60
+ expression += '(?:.*/)?';
61
+ index += 2;
62
+ }
63
+ else {
64
+ expression += '.*';
65
+ index++;
66
+ }
67
+ }
68
+ else {
69
+ expression += '[^/]*';
70
+ }
71
+ }
72
+ else if (character === '?') {
73
+ expression += '[^/]';
74
+ }
75
+ else if (character === '[') {
76
+ const end = normalized.indexOf(']', index + 1);
77
+ if (end < 0) {
78
+ expression += '\\[';
79
+ }
80
+ else {
81
+ expression += `[${normalized.slice(index + 1, end).replace(/^!/, '^').replace(/\\/g, '\\\\')}]`;
82
+ index = end;
83
+ }
84
+ }
85
+ else {
86
+ expression += character.replace(/[.+^${}()|\\]/g, '\\$&');
87
+ }
88
+ }
89
+ return new RegExp(`^${expression}$`);
90
+ }
91
+ /**
92
+ * The entries of a directory sent to BuildKit, in the order fsutil walks them (lexical, the directories before their
93
+ * content); the parents of the paths included are included
94
+ * @param root
95
+ * @param filter
96
+ */
97
+ export async function walkDirectory(root, filter = {}) {
98
+ const include = [...filter.include ?? []];
99
+ //The targets of the symbolic links followed (the Dockerfile linked)
100
+ for (const follow of filter.followPaths ?? []) {
101
+ try {
102
+ const absolute = path.join(root, follow);
103
+ if ((await lstat(absolute)).isSymbolicLink()) {
104
+ const target = await readlink(absolute);
105
+ const relative = path.posix.normalize(path.posix.join(path.posix.dirname(follow), target)).replace(/^\/+/, '');
106
+ if (!relative.startsWith('..'))
107
+ include.push(relative);
108
+ }
109
+ }
110
+ catch {
111
+ //Not there
112
+ }
113
+ }
114
+ const includes = include.map(patternExpression);
115
+ const literals = include.map((pattern) => path.posix.normalize(pattern).replace(/^\/+/, '').split(/[*?[]/)[0]);
116
+ const ignore = new DockerIgnore((filter.exclude ?? []).join('\n'));
117
+ const included = (relative, directory) => {
118
+ if (!includes.length)
119
+ return 'yes';
120
+ const parts = relative.split('/');
121
+ for (let length = 1; length <= parts.length; length++) {
122
+ const prefix = parts.slice(0, length).join('/');
123
+ if (includes.some((expression) => expression.test(prefix)))
124
+ return 'yes';
125
+ }
126
+ //A parent of a path included
127
+ if (directory && literals.some((literal) => literal.startsWith(`${relative}/`) || (literal === '' && includes.length > 0)))
128
+ return 'parent';
129
+ return 'no';
130
+ };
131
+ const entries = [];
132
+ const walk = async (relativeDirectory) => {
133
+ const names = (await readdir(path.join(root, relativeDirectory))).sort((a, b) => a < b ? -1 : a > b ? 1 : 0);
134
+ for (const name of names) {
135
+ const relative = relativeDirectory ? `${relativeDirectory}/${name}` : name;
136
+ const absolute = path.join(root, relative);
137
+ const stats = await lstat(absolute, { bigint: true });
138
+ const directory = stats.isDirectory();
139
+ if (ignore.ignores(relative))
140
+ continue;
141
+ const inclusion = included(relative, directory);
142
+ if (inclusion === 'no')
143
+ continue;
144
+ //The sockets are not sent
145
+ if (stats.isSocket())
146
+ continue;
147
+ const stat = {
148
+ path: relative,
149
+ mode: goFileMode(stats),
150
+ uid: Number(stats.uid),
151
+ gid: Number(stats.gid),
152
+ modTime: stats.mtimeNs
153
+ };
154
+ if (!directory)
155
+ stat.size = Number(stats.size);
156
+ if (stats.isSymbolicLink())
157
+ stat.linkname = await readlink(absolute);
158
+ if (stats.isCharacterDevice() || stats.isBlockDevice()) {
159
+ stat.devmajor = Number(((stats.rdev >> 8n) & 0xfffn) | ((stats.rdev >> 32n) & ~0xfffn));
160
+ stat.devminor = Number((stats.rdev & 0xffn) | ((stats.rdev >> 12n) & ~0xffn));
161
+ }
162
+ entries.push({ path: relative, absolute: absolute, stat: stat, file: stats.isFile() });
163
+ if (directory) {
164
+ const before = entries.length;
165
+ await walk(relative);
166
+ //A parent without any path included under it
167
+ if (inclusion === 'parent' && entries.length === before)
168
+ entries.pop();
169
+ }
170
+ }
171
+ };
172
+ await walk('');
173
+ return entries;
174
+ }
175
+ /**
176
+ * Send a directory as fsutil sends it (FileSync.DiffCopy): its stats, then the files the receiver requests, until it
177
+ * finishes
178
+ * @param call
179
+ * @param root
180
+ */
181
+ export async function sendDirectory(call, root) {
182
+ const entries = await walkDirectory(root, {
183
+ include: call.metadata('include-patterns'),
184
+ exclude: call.metadata('exclude-patterns'),
185
+ followPaths: call.metadata('followpaths')
186
+ });
187
+ let pending = Promise.resolve();
188
+ const sendFile = async (id) => {
189
+ const entry = entries[id];
190
+ if (!entry)
191
+ throw new GRPCError(GRPCStatus.INVALID_ARGUMENT, `The file ${id} is not sent`, call.path);
192
+ if (entry.file) {
193
+ const handle = await open(entry.absolute, 'r');
194
+ try {
195
+ const buffer = Buffer.alloc(CHUNK_SIZE);
196
+ for (;;) {
197
+ const { bytesRead } = await handle.read(buffer, 0, CHUNK_SIZE, null);
198
+ if (!bytesRead)
199
+ break;
200
+ await call.send(B.Packet, { type: B.PacketType.DATA, id: id, data: Buffer.from(buffer.subarray(0, bytesRead)) });
201
+ }
202
+ }
203
+ finally {
204
+ await handle.close();
205
+ }
206
+ }
207
+ await call.send(B.Packet, { type: B.PacketType.DATA, id: id });
208
+ };
209
+ const receiving = (async () => {
210
+ for await (const packet of call.requests(B.Packet)) {
211
+ switch (packet.type ?? B.PacketType.STAT) {
212
+ case B.PacketType.REQ: {
213
+ const id = packet.id ?? 0;
214
+ pending = pending.then(() => sendFile(id));
215
+ break;
216
+ }
217
+ case B.PacketType.FIN:
218
+ await pending;
219
+ await call.send(B.Packet, { type: B.PacketType.FIN });
220
+ return;
221
+ case B.PacketType.ERR:
222
+ throw new GRPCError(GRPCStatus.ABORTED, `The receiver of ${root} failed: ${Buffer.from(packet.data ?? []).toString()}`, call.path);
223
+ }
224
+ }
225
+ })();
226
+ receiving.catch(() => undefined);
227
+ for (const entry of entries)
228
+ await call.send(B.Packet, { type: B.PacketType.STAT, stat: entry.stat });
229
+ await call.send(B.Packet, { type: B.PacketType.STAT });
230
+ await receiving;
231
+ await pending;
232
+ }
233
+ /**
234
+ * A session of BuildKit: a connection of HTTP/2 in the stream of Control.Session, where the daemon calls its methods
235
+ * (the files of the directories of the build, the results exported, the credentials of the registries, its health)
236
+ */
237
+ export class BuildKitSession {
238
+ #server;
239
+ #stream;
240
+ constructor(options) {
241
+ this.options = options;
242
+ this.id = randomBytes(16).toString('hex');
243
+ this.#server = new GRPCServer();
244
+ this.#server.method('/grpc.health.v1.Health/Check', async (call) => {
245
+ await call.request(B.HealthCheckRequest);
246
+ await call.send(B.HealthCheckResponse, { status: 1 });
247
+ });
248
+ this.#server.method('/moby.filesync.v1.FileSync/DiffCopy', async (call) => {
249
+ const name = call.metadata('dir-name')[0] ?? '';
250
+ const directory = this.options.directories[name];
251
+ if (!directory)
252
+ throw new GRPCError(GRPCStatus.NOT_FOUND, `The session has no directory ${name}`, call.path);
253
+ await sendDirectory(call, directory);
254
+ });
255
+ if (this.options.output) {
256
+ this.#server.method('/moby.filesync.v1.FileSend/DiffCopy', async (call) => {
257
+ const output = this.options.output();
258
+ try {
259
+ for await (const message of call.requests(B.BytesMessage)) {
260
+ if (!message.data?.length)
261
+ continue;
262
+ if (!output.write(Buffer.from(message.data)))
263
+ await new Promise((resolve) => void output.once('drain', resolve));
264
+ }
265
+ output.end();
266
+ await finished(output);
267
+ }
268
+ catch (error) {
269
+ output.destroy(error);
270
+ throw error;
271
+ }
272
+ });
273
+ }
274
+ this.#server.method('/moby.filesync.v1.Auth/Credentials', async (call) => {
275
+ const host = (await call.request(B.CredentialsRequest)).host ?? '';
276
+ const credentials = this.credentials(host);
277
+ await call.send(B.CredentialsResponse, credentials?.identityToken ? { secret: credentials.identityToken } : { username: credentials?.username ?? '', secret: credentials?.password ?? '' });
278
+ });
279
+ this.#server.method('/moby.filesync.v1.Auth/FetchToken', async (call) => {
280
+ const request = await call.request(B.FetchTokenRequest);
281
+ const token = await fetchRegistryToken({ realm: request.realm, service: request.service, scopes: request.scopes ?? [] }, this.credentials(request.host ?? ''));
282
+ if (!token)
283
+ throw new GRPCError(GRPCStatus.UNAUTHENTICATED, `The registry ${request.host} gives no token`, call.path);
284
+ await call.send(B.FetchTokenResponse, { token: token.token, expiresIn: token.expiresIn ?? 0, issuedAt: token.issuedAt ?? 0 });
285
+ });
286
+ for (const method of ['GetTokenAuthority', 'VerifyTokenAuthority']) {
287
+ this.#server.method(`/moby.filesync.v1.Auth/${method}`, async (call) => {
288
+ throw new GRPCError(GRPCStatus.UNIMPLEMENTED, `${method} is not implemented`, call.path);
289
+ });
290
+ }
291
+ }
292
+ /**
293
+ * The credentials of a host of a registry (Docker Hub by its names)
294
+ * @param host
295
+ * @protected
296
+ */
297
+ credentials(host) {
298
+ const registry = ['registry-1.docker.io', 'index.docker.io', 'registry.hub.docker.com'].includes(host) ? 'docker.io' : host;
299
+ return this.options.credentials?.(registry) ?? (registry === host ? undefined : this.options.credentials?.(host));
300
+ }
301
+ /**
302
+ * Open the session: the stream of Control.Session, the methods of the session exposed by its headers
303
+ * @param connection
304
+ * @param signal
305
+ */
306
+ start(connection, signal) {
307
+ const options = {
308
+ metadata: {
309
+ 'x-docker-expose-session-uuid': this.id,
310
+ 'x-docker-expose-session-name': this.options.name,
311
+ 'x-docker-expose-session-sharedkey': this.options.sharedKey,
312
+ 'x-docker-expose-session-grpc-method': this.#server.methods
313
+ },
314
+ signal: signal
315
+ };
316
+ const stream = connection.bidi(`${CONTROL}/Session`, B.BytesMessage, B.BytesMessage, options);
317
+ this.#stream = stream;
318
+ const socket = new Duplex({
319
+ write: (chunk, _encoding, callback) => {
320
+ stream.send({ data: chunk }).then(() => callback(), (error) => callback(error));
321
+ },
322
+ final: (callback) => {
323
+ stream.end();
324
+ callback();
325
+ },
326
+ read: () => undefined
327
+ });
328
+ (async () => {
329
+ for await (const message of stream.responses)
330
+ if (message.data?.length)
331
+ socket.push(Buffer.from(message.data));
332
+ socket.push(null);
333
+ })().catch(() => {
334
+ socket.push(null);
335
+ });
336
+ this.#server.serve(socket);
337
+ }
338
+ /**
339
+ * Close the session
340
+ */
341
+ close() {
342
+ this.#stream?.end();
343
+ this.#stream?.cancel();
344
+ }
345
+ }
346
+ /**
347
+ * The lines of the progress of a build, as "docker build --progress=plain" shows them: the steps are numbered in their
348
+ * order ("#3 [2/2] RUN npm ci"), with their output, and whether they are cached, done ("#3 DONE 1.2s") or failed
349
+ */
350
+ export class BuildKitProgress {
351
+ #steps = new Map();
352
+ #pending = new Map();
353
+ step(digest) {
354
+ let step = this.#steps.get(digest);
355
+ if (!step)
356
+ this.#steps.set(digest, step = { number: this.#steps.size + 1, started: false, ended: false });
357
+ return step;
358
+ }
359
+ /**
360
+ * The lines of a status of the build
361
+ * @param status
362
+ */
363
+ lines(status) {
364
+ const lines = [];
365
+ for (const vertex of status.vertexes ?? []) {
366
+ const step = this.step(vertex.digest);
367
+ const started = timestampDate(vertex.started);
368
+ const completed = timestampDate(vertex.completed);
369
+ if (!step.started && (started || vertex.cached)) {
370
+ step.started = true;
371
+ lines.push(`#${step.number} ${vertex.name}`);
372
+ }
373
+ if (step.ended)
374
+ continue;
375
+ if (vertex.cached) {
376
+ step.ended = true;
377
+ lines.push(`#${step.number} CACHED`);
378
+ }
379
+ else if (vertex.error) {
380
+ step.ended = true;
381
+ lines.push(...this.flush(vertex.digest), `#${step.number} ERROR: ${vertex.error}`);
382
+ }
383
+ else if (completed) {
384
+ step.ended = true;
385
+ const seconds = started ? ` ${((completed.getTime() - started.getTime()) / 1000).toFixed(1)}s` : '';
386
+ lines.push(...this.flush(vertex.digest), `#${step.number} DONE${seconds}`);
387
+ }
388
+ }
389
+ for (const log of status.logs ?? []) {
390
+ const output = (this.#pending.get(log.vertex) ?? '') + Buffer.from(log.msg ?? []).toString();
391
+ const parts = output.split(/\r?\n/);
392
+ this.#pending.set(log.vertex, parts.pop());
393
+ const number = this.step(log.vertex).number;
394
+ parts.forEach((part) => lines.push(`#${number} ${part}`));
395
+ }
396
+ for (const warning of status.warnings ?? [])
397
+ lines.push(`#${this.step(warning.vertex).number} WARN: ${Buffer.from(warning.short ?? []).toString()}`);
398
+ return lines;
399
+ }
400
+ flush(digest) {
401
+ const pending = this.#pending.get(digest);
402
+ this.#pending.delete(digest);
403
+ return pending ? [`#${this.step(digest).number} ${pending}`] : [];
404
+ }
405
+ }
406
+ /**
407
+ * Build an image with BuildKit (its Dockerfile frontend): its context and its Dockerfile sent by the session, the image
408
+ * exported to the client as an archive (the oci exporter); the daemon is local or remote, of any worker
409
+ * @param connection
410
+ * @param options
411
+ */
412
+ export async function buildKitBuild(connection, options) {
413
+ const context = path.resolve(options.context);
414
+ const dockerfile = path.resolve(context, options.dockerfile ?? 'Dockerfile');
415
+ const session = new BuildKitSession({
416
+ name: options.name,
417
+ sharedKey: context,
418
+ directories: { context: context, dockerfile: path.dirname(dockerfile) },
419
+ credentials: options.credentials,
420
+ output: () => createWriteStream(options.output)
421
+ });
422
+ const abort = new AbortController();
423
+ const signal = options.signal ? AbortSignal.any([options.signal, abort.signal]) : abort.signal;
424
+ session.start(connection, signal);
425
+ const ref = randomBytes(16).toString('hex');
426
+ const progress = new BuildKitProgress();
427
+ const status = (async () => {
428
+ if (!options.progress)
429
+ return;
430
+ for await (const response of connection.serverStream(`${CONTROL}/Status`, B.StatusRequest, { ref: ref }, B.StatusResponse, { signal: signal })) {
431
+ for (const line of progress.lines(response))
432
+ options.progress(line);
433
+ }
434
+ })().catch(() => undefined);
435
+ const frontendAttrs = { filename: path.basename(dockerfile) };
436
+ if (options.target)
437
+ frontendAttrs.target = options.target;
438
+ for (const [key, value] of Object.entries(options.buildArgs ?? {}))
439
+ frontendAttrs[`build-arg:${key}`] = value;
440
+ for (const [key, value] of Object.entries(options.labels ?? {}))
441
+ frontendAttrs[`label:${key}`] = value;
442
+ if (options.platforms?.length)
443
+ frontendAttrs.platform = options.platforms.map((platform) => formatPlatform(normalizePlatform(platform))).join(',');
444
+ if (options.noCache)
445
+ frontendAttrs['no-cache'] = '';
446
+ if (options.pull)
447
+ frontendAttrs['image-resolve-mode'] = 'pull';
448
+ try {
449
+ const response = await connection.unary(`${CONTROL}/Solve`, B.SolveRequest, {
450
+ ref: ref,
451
+ session: session.id,
452
+ frontend: 'dockerfile.v0',
453
+ frontendAttrs: frontendAttrs,
454
+ exporter: 'oci',
455
+ exporterAttrs: { name: options.name }
456
+ }, B.SolveResponse, { signal: signal });
457
+ await status;
458
+ return response.exporterResponse ?? {};
459
+ }
460
+ finally {
461
+ abort.abort();
462
+ session.close();
463
+ }
464
+ }
465
+ /**
466
+ * The version of BuildKit
467
+ * @param connection
468
+ */
469
+ export async function buildKitVersion(connection) {
470
+ const response = await connection.unary(`${CONTROL}/Info`, {}, {}, B.InfoResponse);
471
+ return { package: response.buildkitVersion?.package ?? '', version: response.buildkitVersion?.version ?? '', revision: response.buildkitVersion?.revision ?? '' };
472
+ }
473
+ /**
474
+ * The platforms the workers of BuildKit build
475
+ * @param connection
476
+ */
477
+ export async function buildKitPlatforms(connection) {
478
+ const response = await connection.unary(`${CONTROL}/ListWorkers`, B.ListWorkersRequest, {}, B.ListWorkersResponse);
479
+ const platforms = [];
480
+ for (const record of response.record ?? []) {
481
+ for (const platform of record.platforms ?? []) {
482
+ const normalized = normalizePlatform({ os: platform.os, architecture: platform.architecture, variant: platform.variant || undefined });
483
+ if (!platforms.some((known) => formatPlatform(known) === formatPlatform(normalized)))
484
+ platforms.push(normalized);
485
+ }
486
+ }
487
+ return platforms;
488
+ }