@daytonaio/sdk 0.128.0-alpha.1 → 0.128.0

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 (277) hide show
  1. package/package.json +8 -20
  2. package/{cjs → src}/CodeInterpreter.d.ts +0 -1
  3. package/src/CodeInterpreter.js.map +1 -0
  4. package/{esm → src}/ComputerUse.d.ts +0 -1
  5. package/src/ComputerUse.js.map +1 -0
  6. package/{cjs → src}/Daytona.d.ts +0 -1
  7. package/{cjs → src}/Daytona.js +0 -1
  8. package/src/Daytona.js.map +1 -0
  9. package/{esm → src}/FileSystem.d.ts +0 -1
  10. package/src/FileSystem.js.map +1 -0
  11. package/{esm → src}/Git.d.ts +0 -1
  12. package/src/Git.js.map +1 -0
  13. package/{cjs → src}/Image.d.ts +0 -21
  14. package/{cjs → src}/Image.js +91 -123
  15. package/src/Image.js.map +1 -0
  16. package/{cjs → src}/LspServer.d.ts +0 -1
  17. package/src/LspServer.js.map +1 -0
  18. package/{esm → src}/ObjectStorage.d.ts +0 -1
  19. package/src/ObjectStorage.js.map +1 -0
  20. package/{cjs → src}/Process.d.ts +0 -1
  21. package/src/Process.js.map +1 -0
  22. package/{cjs → src}/PtyHandle.d.ts +0 -1
  23. package/src/PtyHandle.js.map +1 -0
  24. package/{cjs → src}/Sandbox.d.ts +17 -2
  25. package/{cjs → src}/Sandbox.js +27 -1
  26. package/src/Sandbox.js.map +1 -0
  27. package/{cjs → src}/Snapshot.d.ts +0 -2
  28. package/{cjs → src}/Snapshot.js +1 -9
  29. package/src/Snapshot.js.map +1 -0
  30. package/{esm → src}/Volume.d.ts +0 -1
  31. package/src/Volume.js.map +1 -0
  32. package/{cjs → src}/code-toolbox/SandboxJsCodeToolbox.d.ts +0 -1
  33. package/src/code-toolbox/SandboxJsCodeToolbox.js.map +1 -0
  34. package/{cjs → src}/code-toolbox/SandboxPythonCodeToolbox.d.ts +0 -1
  35. package/src/code-toolbox/SandboxPythonCodeToolbox.js.map +1 -0
  36. package/{cjs → src}/code-toolbox/SandboxTsCodeToolbox.d.ts +0 -1
  37. package/src/code-toolbox/SandboxTsCodeToolbox.js.map +1 -0
  38. package/{esm → src}/errors/DaytonaError.d.ts +0 -1
  39. package/src/errors/DaytonaError.js.map +1 -0
  40. package/{cjs → src}/index.d.ts +0 -1
  41. package/src/index.js.map +1 -0
  42. package/{esm → src}/types/Charts.d.ts +0 -1
  43. package/src/types/Charts.js.map +1 -0
  44. package/{esm → src}/types/CodeInterpreter.d.ts +0 -1
  45. package/src/types/CodeInterpreter.js.map +1 -0
  46. package/{cjs → src}/types/ExecuteResponse.d.ts +0 -1
  47. package/src/types/ExecuteResponse.js.map +1 -0
  48. package/{cjs → src}/types/Pty.d.ts +0 -1
  49. package/src/types/Pty.js.map +1 -0
  50. package/{cjs → src}/utils/ArtifactParser.d.ts +0 -1
  51. package/src/utils/ArtifactParser.js.map +1 -0
  52. package/{esm → src}/utils/Binary.d.ts +0 -1
  53. package/src/utils/Binary.js.map +1 -0
  54. package/{cjs → src}/utils/FileTransfer.d.ts +0 -1
  55. package/src/utils/FileTransfer.js.map +1 -0
  56. package/{cjs → src}/utils/Import.d.ts +15 -2
  57. package/src/utils/Import.js +77 -0
  58. package/src/utils/Import.js.map +1 -0
  59. package/{esm → src}/utils/Multipart.d.ts +0 -1
  60. package/src/utils/Multipart.js.map +1 -0
  61. package/{cjs → src}/utils/Runtime.d.ts +0 -1
  62. package/src/utils/Runtime.js.map +1 -0
  63. package/{cjs → src}/utils/Stream.d.ts +0 -1
  64. package/src/utils/Stream.js.map +1 -0
  65. package/{esm → src}/utils/WebSocket.d.ts +0 -1
  66. package/src/utils/WebSocket.js.map +1 -0
  67. package/LICENSE +0 -190
  68. package/cjs/CodeInterpreter.d.ts.map +0 -1
  69. package/cjs/CodeInterpreter.js.map +0 -1
  70. package/cjs/ComputerUse.d.ts +0 -443
  71. package/cjs/ComputerUse.d.ts.map +0 -1
  72. package/cjs/ComputerUse.js.map +0 -1
  73. package/cjs/Daytona.d.ts.map +0 -1
  74. package/cjs/Daytona.js.map +0 -1
  75. package/cjs/FileSystem.d.ts +0 -328
  76. package/cjs/FileSystem.d.ts.map +0 -1
  77. package/cjs/FileSystem.js.map +0 -1
  78. package/cjs/Git.d.ts +0 -203
  79. package/cjs/Git.d.ts.map +0 -1
  80. package/cjs/Git.js.map +0 -1
  81. package/cjs/Image.d.ts.map +0 -1
  82. package/cjs/Image.js.map +0 -1
  83. package/cjs/LspServer.d.ts.map +0 -1
  84. package/cjs/LspServer.js.map +0 -1
  85. package/cjs/ObjectStorage.d.ts +0 -79
  86. package/cjs/ObjectStorage.d.ts.map +0 -1
  87. package/cjs/ObjectStorage.js.map +0 -1
  88. package/cjs/Process.d.ts.map +0 -1
  89. package/cjs/Process.js.map +0 -1
  90. package/cjs/PtyHandle.d.ts.map +0 -1
  91. package/cjs/PtyHandle.js.map +0 -1
  92. package/cjs/README.md +0 -147
  93. package/cjs/Sandbox.d.ts.map +0 -1
  94. package/cjs/Sandbox.js.map +0 -1
  95. package/cjs/Snapshot.d.ts.map +0 -1
  96. package/cjs/Snapshot.js.map +0 -1
  97. package/cjs/Volume.d.ts +0 -84
  98. package/cjs/Volume.d.ts.map +0 -1
  99. package/cjs/Volume.js.map +0 -1
  100. package/cjs/code-toolbox/SandboxJsCodeToolbox.d.ts.map +0 -1
  101. package/cjs/code-toolbox/SandboxJsCodeToolbox.js.map +0 -1
  102. package/cjs/code-toolbox/SandboxPythonCodeToolbox.d.ts.map +0 -1
  103. package/cjs/code-toolbox/SandboxPythonCodeToolbox.js.map +0 -1
  104. package/cjs/code-toolbox/SandboxTsCodeToolbox.d.ts.map +0 -1
  105. package/cjs/code-toolbox/SandboxTsCodeToolbox.js.map +0 -1
  106. package/cjs/errors/DaytonaError.d.ts +0 -32
  107. package/cjs/errors/DaytonaError.d.ts.map +0 -1
  108. package/cjs/errors/DaytonaError.js.map +0 -1
  109. package/cjs/index.d.ts.map +0 -1
  110. package/cjs/index.js.map +0 -1
  111. package/cjs/package.json +0 -3
  112. package/cjs/types/Charts.d.ts +0 -152
  113. package/cjs/types/Charts.d.ts.map +0 -1
  114. package/cjs/types/Charts.js.map +0 -1
  115. package/cjs/types/CodeInterpreter.d.ts +0 -77
  116. package/cjs/types/CodeInterpreter.d.ts.map +0 -1
  117. package/cjs/types/CodeInterpreter.js.map +0 -1
  118. package/cjs/types/ExecuteResponse.d.ts.map +0 -1
  119. package/cjs/types/ExecuteResponse.js.map +0 -1
  120. package/cjs/types/Pty.d.ts.map +0 -1
  121. package/cjs/types/Pty.js.map +0 -1
  122. package/cjs/utils/ArtifactParser.d.ts.map +0 -1
  123. package/cjs/utils/ArtifactParser.js.map +0 -1
  124. package/cjs/utils/Binary.d.ts +0 -39
  125. package/cjs/utils/Binary.d.ts.map +0 -1
  126. package/cjs/utils/Binary.js.map +0 -1
  127. package/cjs/utils/FileTransfer.d.ts.map +0 -1
  128. package/cjs/utils/FileTransfer.js.map +0 -1
  129. package/cjs/utils/Import.d.ts.map +0 -1
  130. package/cjs/utils/Import.js +0 -81
  131. package/cjs/utils/Import.js.map +0 -1
  132. package/cjs/utils/Multipart.d.ts +0 -27
  133. package/cjs/utils/Multipart.d.ts.map +0 -1
  134. package/cjs/utils/Multipart.js.map +0 -1
  135. package/cjs/utils/Runtime.d.ts.map +0 -1
  136. package/cjs/utils/Runtime.js.map +0 -1
  137. package/cjs/utils/Stream.d.ts.map +0 -1
  138. package/cjs/utils/Stream.js.map +0 -1
  139. package/cjs/utils/WebSocket.d.ts +0 -10
  140. package/cjs/utils/WebSocket.d.ts.map +0 -1
  141. package/cjs/utils/WebSocket.js.map +0 -1
  142. package/esm/CodeInterpreter.d.ts +0 -96
  143. package/esm/CodeInterpreter.d.ts.map +0 -1
  144. package/esm/CodeInterpreter.js +0 -295
  145. package/esm/CodeInterpreter.js.map +0 -1
  146. package/esm/ComputerUse.d.ts.map +0 -1
  147. package/esm/ComputerUse.js +0 -509
  148. package/esm/ComputerUse.js.map +0 -1
  149. package/esm/Daytona.d.ts +0 -354
  150. package/esm/Daytona.d.ts.map +0 -1
  151. package/esm/Daytona.js +0 -410
  152. package/esm/Daytona.js.map +0 -1
  153. package/esm/FileSystem.d.ts.map +0 -1
  154. package/esm/FileSystem.js +0 -331
  155. package/esm/FileSystem.js.map +0 -1
  156. package/esm/Git.d.ts.map +0 -1
  157. package/esm/Git.js +0 -260
  158. package/esm/Git.js.map +0 -1
  159. package/esm/Image.d.ts +0 -285
  160. package/esm/Image.d.ts.map +0 -1
  161. package/esm/Image.js +0 -569
  162. package/esm/Image.js.map +0 -1
  163. package/esm/LspServer.d.ts +0 -172
  164. package/esm/LspServer.d.ts.map +0 -1
  165. package/esm/LspServer.js +0 -204
  166. package/esm/LspServer.js.map +0 -1
  167. package/esm/ObjectStorage.d.ts.map +0 -1
  168. package/esm/ObjectStorage.js +0 -187
  169. package/esm/ObjectStorage.js.map +0 -1
  170. package/esm/Process.d.ts +0 -442
  171. package/esm/Process.d.ts.map +0 -1
  172. package/esm/Process.js +0 -644
  173. package/esm/Process.js.map +0 -1
  174. package/esm/PtyHandle.d.ts +0 -155
  175. package/esm/PtyHandle.d.ts.map +0 -1
  176. package/esm/PtyHandle.js +0 -374
  177. package/esm/PtyHandle.js.map +0 -1
  178. package/esm/README.md +0 -147
  179. package/esm/Sandbox.d.ts +0 -359
  180. package/esm/Sandbox.d.ts.map +0 -1
  181. package/esm/Sandbox.js +0 -532
  182. package/esm/Sandbox.js.map +0 -1
  183. package/esm/Snapshot.d.ts +0 -138
  184. package/esm/Snapshot.d.ts.map +0 -1
  185. package/esm/Snapshot.js +0 -207
  186. package/esm/Snapshot.js.map +0 -1
  187. package/esm/Volume.d.ts.map +0 -1
  188. package/esm/Volume.js +0 -95
  189. package/esm/Volume.js.map +0 -1
  190. package/esm/code-toolbox/SandboxJsCodeToolbox.d.ts +0 -6
  191. package/esm/code-toolbox/SandboxJsCodeToolbox.d.ts.map +0 -1
  192. package/esm/code-toolbox/SandboxJsCodeToolbox.js +0 -13
  193. package/esm/code-toolbox/SandboxJsCodeToolbox.js.map +0 -1
  194. package/esm/code-toolbox/SandboxPythonCodeToolbox.d.ts +0 -12
  195. package/esm/code-toolbox/SandboxPythonCodeToolbox.d.ts.map +0 -1
  196. package/esm/code-toolbox/SandboxPythonCodeToolbox.js +0 -355
  197. package/esm/code-toolbox/SandboxPythonCodeToolbox.js.map +0 -1
  198. package/esm/code-toolbox/SandboxTsCodeToolbox.d.ts +0 -6
  199. package/esm/code-toolbox/SandboxTsCodeToolbox.d.ts.map +0 -1
  200. package/esm/code-toolbox/SandboxTsCodeToolbox.js +0 -14
  201. package/esm/code-toolbox/SandboxTsCodeToolbox.js.map +0 -1
  202. package/esm/errors/DaytonaError.d.ts.map +0 -1
  203. package/esm/errors/DaytonaError.js +0 -44
  204. package/esm/errors/DaytonaError.js.map +0 -1
  205. package/esm/index.d.ts +0 -22
  206. package/esm/index.d.ts.map +0 -1
  207. package/esm/index.js +0 -22
  208. package/esm/index.js.map +0 -1
  209. package/esm/package.json +0 -3
  210. package/esm/types/Charts.d.ts.map +0 -1
  211. package/esm/types/Charts.js +0 -42
  212. package/esm/types/Charts.js.map +0 -1
  213. package/esm/types/CodeInterpreter.d.ts.map +0 -1
  214. package/esm/types/CodeInterpreter.js +0 -6
  215. package/esm/types/CodeInterpreter.js.map +0 -1
  216. package/esm/types/ExecuteResponse.d.ts +0 -26
  217. package/esm/types/ExecuteResponse.d.ts.map +0 -1
  218. package/esm/types/ExecuteResponse.js +0 -6
  219. package/esm/types/ExecuteResponse.js.map +0 -1
  220. package/esm/types/Pty.d.ts +0 -48
  221. package/esm/types/Pty.d.ts.map +0 -1
  222. package/esm/types/Pty.js +0 -6
  223. package/esm/types/Pty.js.map +0 -1
  224. package/esm/utils/ArtifactParser.d.ts +0 -14
  225. package/esm/utils/ArtifactParser.d.ts.map +0 -1
  226. package/esm/utils/ArtifactParser.js +0 -51
  227. package/esm/utils/ArtifactParser.js.map +0 -1
  228. package/esm/utils/Binary.d.ts.map +0 -1
  229. package/esm/utils/Binary.js +0 -157
  230. package/esm/utils/Binary.js.map +0 -1
  231. package/esm/utils/FileTransfer.d.ts +0 -15
  232. package/esm/utils/FileTransfer.d.ts.map +0 -1
  233. package/esm/utils/FileTransfer.js +0 -209
  234. package/esm/utils/FileTransfer.js.map +0 -1
  235. package/esm/utils/Import.d.ts +0 -211
  236. package/esm/utils/Import.d.ts.map +0 -1
  237. package/esm/utils/Import.js +0 -45
  238. package/esm/utils/Import.js.map +0 -1
  239. package/esm/utils/Multipart.d.ts.map +0 -1
  240. package/esm/utils/Multipart.js +0 -107
  241. package/esm/utils/Multipart.js.map +0 -1
  242. package/esm/utils/Runtime.d.ts +0 -37
  243. package/esm/utils/Runtime.d.ts.map +0 -1
  244. package/esm/utils/Runtime.js +0 -57
  245. package/esm/utils/Runtime.js.map +0 -1
  246. package/esm/utils/Stream.d.ts +0 -20
  247. package/esm/utils/Stream.d.ts.map +0 -1
  248. package/esm/utils/Stream.js +0 -360
  249. package/esm/utils/Stream.js.map +0 -1
  250. package/esm/utils/WebSocket.d.ts.map +0 -1
  251. package/esm/utils/WebSocket.js +0 -22
  252. package/esm/utils/WebSocket.js.map +0 -1
  253. /package/{cjs → src}/CodeInterpreter.js +0 -0
  254. /package/{cjs → src}/ComputerUse.js +0 -0
  255. /package/{cjs → src}/FileSystem.js +0 -0
  256. /package/{cjs → src}/Git.js +0 -0
  257. /package/{cjs → src}/LspServer.js +0 -0
  258. /package/{cjs → src}/ObjectStorage.js +0 -0
  259. /package/{cjs → src}/Process.js +0 -0
  260. /package/{cjs → src}/PtyHandle.js +0 -0
  261. /package/{cjs → src}/Volume.js +0 -0
  262. /package/{cjs → src}/code-toolbox/SandboxJsCodeToolbox.js +0 -0
  263. /package/{cjs → src}/code-toolbox/SandboxPythonCodeToolbox.js +0 -0
  264. /package/{cjs → src}/code-toolbox/SandboxTsCodeToolbox.js +0 -0
  265. /package/{cjs → src}/errors/DaytonaError.js +0 -0
  266. /package/{cjs → src}/index.js +0 -0
  267. /package/{cjs → src}/types/Charts.js +0 -0
  268. /package/{cjs → src}/types/CodeInterpreter.js +0 -0
  269. /package/{cjs → src}/types/ExecuteResponse.js +0 -0
  270. /package/{cjs → src}/types/Pty.js +0 -0
  271. /package/{cjs → src}/utils/ArtifactParser.js +0 -0
  272. /package/{cjs → src}/utils/Binary.js +0 -0
  273. /package/{cjs → src}/utils/FileTransfer.js +0 -0
  274. /package/{cjs → src}/utils/Multipart.js +0 -0
  275. /package/{cjs → src}/utils/Runtime.js +0 -0
  276. /package/{cjs → src}/utils/Stream.js +0 -0
  277. /package/{cjs → src}/utils/WebSocket.js +0 -0
package/esm/Image.js DELETED
@@ -1,569 +0,0 @@
1
- /*
2
- * Copyright 2025 Daytona Platforms Inc.
3
- * SPDX-License-Identifier: Apache-2.0
4
- */
5
- import * as pathe from 'pathe';
6
- import { quote, parse as parseShellQuote } from 'shell-quote';
7
- import { DaytonaError } from './errors/DaytonaError.js';
8
- import { dynamicImport } from './utils/Import.js';
9
- const SUPPORTED_PYTHON_SERIES = ['3.9', '3.10', '3.11', '3.12', '3.13'];
10
- const LATEST_PYTHON_MICRO_VERSIONS = ['3.9.22', '3.10.17', '3.11.12', '3.12.10', '3.13.3'];
11
- /**
12
- * Represents an image definition for a Daytona sandbox.
13
- * Do not construct this class directly. Instead use one of its static factory methods,
14
- * such as `Image.base()`, `Image.debianSlim()` or `Image.fromDockerfile()`.
15
- *
16
- * @class
17
- * @property {string} dockerfile - The Dockerfile content.
18
- * @property {Context[]} contextList - The list of context files to be added to the image.
19
- */
20
- export class Image {
21
- _dockerfile = '';
22
- _contextList = [];
23
- _promiseChain = Promise.resolve();
24
- // eslint-disable-next-line @typescript-eslint/no-empty-function
25
- constructor() { }
26
- get dockerfile() {
27
- return this._dockerfile;
28
- }
29
- get contextList() {
30
- return this._contextList;
31
- }
32
- /**
33
- * Makes the Image class thenable, allowing it to be used with `await`.
34
- * When awaited, all queued async operations are executed and the Image instance resolves to itself.
35
- *
36
- * @param {function} onfulfilled - Called when the Image is resolved.
37
- * @param {function} onrejected - Called when the Image is rejected.
38
- * @returns {Promise} A promise that resolves to the transformation result.
39
- *
40
- * @example
41
- * const image = await Image.debianSlim('3.12').pipInstall('numpy')
42
- */
43
- then(onfulfilled, onrejected) {
44
- return this._promiseChain.then(() => this).then(onfulfilled, onrejected);
45
- }
46
- /**
47
- * Queues an async operation to be executed when the Image is awaited.
48
- *
49
- * @param {function} operation - The async operation to queue.
50
- * @returns {Image} The Image instance for chaining.
51
- */
52
- queueAsyncOperation(operation) {
53
- this._promiseChain = this._promiseChain.then(operation);
54
- return this;
55
- }
56
- /**
57
- * Adds commands to install packages using pip.
58
- *
59
- * @param {string | string[]} packages - The packages to install.
60
- * @param {Object} options - The options for the pip install command.
61
- * @param {string[]} options.findLinks - The find-links to use for the pip install command.
62
- * @returns {Image} The Image instance.
63
- *
64
- * @example
65
- * const image = Image.debianSlim('3.12').pipInstall('numpy', { findLinks: ['https://pypi.org/simple'] })
66
- */
67
- pipInstall(packages, options) {
68
- const pkgs = this.flattenStringArgs('pipInstall', 'packages', packages);
69
- if (!pkgs.length)
70
- return this;
71
- const extraArgs = this.formatPipInstallArgs(options);
72
- this._dockerfile += `RUN python -m pip install ${quote(pkgs.sort())}${extraArgs}\n`;
73
- return this;
74
- }
75
- /**
76
- * Installs dependencies from a requirements.txt file.
77
- *
78
- * @param {string} requirementsTxt - The path to the requirements.txt file.
79
- * @param {PipInstallOptions} options - The options for the pip install command.
80
- * @returns {Image} The Image instance.
81
- *
82
- * @example
83
- * const image = Image.debianSlim('3.12')
84
- * image.pipInstallFromRequirements('requirements.txt', { findLinks: ['https://pypi.org/simple'] })
85
- */
86
- pipInstallFromRequirements(requirementsTxt, options) {
87
- return this.queueAsyncOperation(async () => {
88
- const importErrorPrefix = '"pipInstallFromRequirements" is not supported: ';
89
- const expandTilde = await dynamicImport('expand-tilde', importErrorPrefix);
90
- const fs = await dynamicImport('fs', importErrorPrefix);
91
- const expandedPath = expandTilde(requirementsTxt);
92
- if (!fs.existsSync(expandedPath)) {
93
- throw new Error(`Requirements file ${requirementsTxt} does not exist`);
94
- }
95
- const extraArgs = this.formatPipInstallArgs(options);
96
- this._contextList.push({ sourcePath: expandedPath, archivePath: expandedPath });
97
- this._dockerfile += `COPY ${expandedPath} /.requirements.txt\n`;
98
- this._dockerfile += `RUN python -m pip install -r /.requirements.txt${extraArgs}\n`;
99
- });
100
- }
101
- /**
102
- * Installs dependencies from a pyproject.toml file.
103
- *
104
- * @param {string} pyprojectToml - The path to the pyproject.toml file.
105
- * @param {PyprojectOptions} options - The options for the pip install command.
106
- * @returns {Image} The Image instance.
107
- *
108
- * @example
109
- * const image = Image.debianSlim('3.12')
110
- * image.pipInstallFromPyproject('pyproject.toml', { optionalDependencies: ['dev'] })
111
- */
112
- pipInstallFromPyproject(pyprojectToml, options) {
113
- return this.queueAsyncOperation(async () => {
114
- const importErrorPrefix = '"pipInstallFromPyproject" is not supported: ';
115
- const expandTilde = await dynamicImport('expand-tilde', importErrorPrefix);
116
- const toml = await dynamicImport('@iarna/toml', importErrorPrefix);
117
- const fs = await dynamicImport('fs', importErrorPrefix);
118
- const tomlData = toml.parse(fs.readFileSync(expandTilde(pyprojectToml), 'utf-8'));
119
- const dependencies = [];
120
- if (!tomlData || !tomlData.project || !Array.isArray(tomlData.project.dependencies)) {
121
- const msg = 'No [project.dependencies] section in pyproject.toml file. ' +
122
- 'See https://packaging.python.org/en/latest/guides/writing-pyproject-toml ' +
123
- 'for further file format guidelines.';
124
- throw new DaytonaError(msg);
125
- }
126
- dependencies.push(...tomlData.project.dependencies);
127
- if (options?.optionalDependencies && tomlData.project['optional-dependencies']) {
128
- const optionalGroups = tomlData.project['optional-dependencies'];
129
- for (const group of options.optionalDependencies) {
130
- const deps = optionalGroups[group];
131
- if (Array.isArray(deps)) {
132
- dependencies.push(...deps);
133
- }
134
- }
135
- }
136
- this.pipInstall(dependencies, options);
137
- });
138
- }
139
- /**
140
- * Adds a local file to the image.
141
- *
142
- * @param {string} localPath - The path to the local file.
143
- * @param {string} remotePath - The path of the file in the image.
144
- * @returns {Image} The Image instance.
145
- *
146
- * @example
147
- * const image = Image
148
- * .debianSlim('3.12')
149
- * .addLocalFile('requirements.txt', '/home/daytona/requirements.txt')
150
- */
151
- addLocalFile(localPath, remotePath) {
152
- return this.queueAsyncOperation(async () => {
153
- const importErrorPrefix = '"addLocalFile" is not supported: ';
154
- const expandTilde = await dynamicImport('expand-tilde', importErrorPrefix);
155
- if (remotePath.endsWith('/')) {
156
- remotePath = remotePath + pathe.basename(localPath);
157
- }
158
- const expandedPath = expandTilde(localPath);
159
- this._contextList.push({ sourcePath: expandedPath, archivePath: expandedPath });
160
- this._dockerfile += `COPY ${expandedPath} ${remotePath}\n`;
161
- });
162
- }
163
- /**
164
- * Adds a local directory to the image.
165
- *
166
- * @param {string} localPath - The path to the local directory.
167
- * @param {string} remotePath - The path of the directory in the image.
168
- * @returns {Image} The Image instance.
169
- *
170
- * @example
171
- * const image = Image
172
- * .debianSlim('3.12')
173
- * .addLocalDir('src', '/home/daytona/src')
174
- */
175
- addLocalDir(localPath, remotePath) {
176
- return this.queueAsyncOperation(async () => {
177
- const importErrorPrefix = '"addLocalDir" is not supported: ';
178
- const expandTilde = await dynamicImport('expand-tilde', importErrorPrefix);
179
- const expandedPath = expandTilde(localPath);
180
- this._contextList.push({ sourcePath: expandedPath, archivePath: expandedPath });
181
- this._dockerfile += `COPY ${expandedPath} ${remotePath}\n`;
182
- });
183
- }
184
- /**
185
- * Runs commands in the image.
186
- *
187
- * @param {string | string[]} commands - The commands to run.
188
- * @returns {Image} The Image instance.
189
- *
190
- * @example
191
- * const image = Image
192
- * .debianSlim('3.12')
193
- * .runCommands(
194
- * 'echo "Hello, world!"',
195
- * ['bash', '-c', 'echo Hello, world, again!']
196
- * )
197
- */
198
- runCommands(...commands) {
199
- for (const command of commands) {
200
- if (Array.isArray(command)) {
201
- this._dockerfile += `RUN ${command.map((c) => `"${c.replace(/"/g, '\\\\\\"').replace(/'/g, "\\'")}"`).join(' ')}\n`;
202
- }
203
- else {
204
- this._dockerfile += `RUN ${command}\n`;
205
- }
206
- }
207
- return this;
208
- }
209
- /**
210
- * Sets environment variables in the image.
211
- *
212
- * @param {Record<string, string>} envVars - The environment variables to set.
213
- * @returns {Image} The Image instance.
214
- *
215
- * @example
216
- * const image = Image
217
- * .debianSlim('3.12')
218
- * .env({ FOO: 'bar' })
219
- */
220
- env(envVars) {
221
- const nonStringKeys = Object.entries(envVars)
222
- .filter(([, value]) => typeof value !== 'string')
223
- .map(([key]) => key);
224
- if (nonStringKeys.length) {
225
- throw new Error(`Image ENV variables must be strings. Invalid keys: ${nonStringKeys}`);
226
- }
227
- for (const [key, val] of Object.entries(envVars)) {
228
- this._dockerfile += `ENV ${key}=${quote([val])}\n`;
229
- }
230
- return this;
231
- }
232
- /**
233
- * Sets the working directory in the image.
234
- *
235
- * @param {string} dirPath - The path to the working directory.
236
- * @returns {Image} The Image instance.
237
- *
238
- * @example
239
- * const image = Image
240
- * .debianSlim('3.12')
241
- * .workdir('/home/daytona')
242
- */
243
- workdir(dirPath) {
244
- this._dockerfile += `WORKDIR ${quote([dirPath])}\n`;
245
- return this;
246
- }
247
- /**
248
- * Sets the entrypoint for the image.
249
- *
250
- * @param {string[]} entrypointCommands - The commands to set as the entrypoint.
251
- * @returns {Image} The Image instance.
252
- *
253
- * @example
254
- * const image = Image
255
- * .debianSlim('3.12')
256
- * .entrypoint(['/bin/bash'])
257
- */
258
- entrypoint(entrypointCommands) {
259
- if (!Array.isArray(entrypointCommands) || !entrypointCommands.every((x) => typeof x === 'string')) {
260
- throw new Error('entrypoint_commands must be a list of strings');
261
- }
262
- const argsStr = entrypointCommands.map((arg) => `"${arg}"`).join(', ');
263
- this._dockerfile += `ENTRYPOINT [${argsStr}]\n`;
264
- return this;
265
- }
266
- /**
267
- * Sets the default command for the image.
268
- *
269
- * @param {string[]} cmd - The command to set as the default command.
270
- * @returns {Image} The Image instance.
271
- *
272
- * @example
273
- * const image = Image
274
- * .debianSlim('3.12')
275
- * .cmd(['/bin/bash'])
276
- */
277
- cmd(cmd) {
278
- if (!Array.isArray(cmd) || !cmd.every((x) => typeof x === 'string')) {
279
- throw new Error('Image CMD must be a list of strings');
280
- }
281
- const cmdStr = cmd.map((arg) => `"${arg}"`).join(', ');
282
- this._dockerfile += `CMD [${cmdStr}]\n`;
283
- return this;
284
- }
285
- /**
286
- * Extends an image with arbitrary Dockerfile-like commands.
287
- *
288
- * @param {string | string[]} dockerfileCommands - The commands to add to the Dockerfile.
289
- * @param {string} contextDir - The path to the context directory.
290
- * @returns {Image} The Image instance.
291
- *
292
- * @example
293
- * const image = Image
294
- * .debianSlim('3.12')
295
- * .dockerfileCommands(['RUN echo "Hello, world!"'])
296
- */
297
- dockerfileCommands(dockerfileCommands, contextDir) {
298
- return this.queueAsyncOperation(async () => {
299
- if (contextDir) {
300
- const importErrorPrefix = '"dockerfileCommands" is not supported: ';
301
- const expandTilde = await dynamicImport('expand-tilde', importErrorPrefix);
302
- const fs = await dynamicImport('fs', importErrorPrefix);
303
- const expandedPath = expandTilde(contextDir);
304
- if (!fs.existsSync(expandedPath) || !fs.statSync(expandedPath).isDirectory()) {
305
- throw new Error(`Context directory ${contextDir} does not exist`);
306
- }
307
- }
308
- for (const [contextPath, originalPath] of await Image.extractCopySources(dockerfileCommands.join('\n'), contextDir || '')) {
309
- let archiveBasePath = contextPath;
310
- if (contextDir && !originalPath.startsWith(contextDir)) {
311
- archiveBasePath = contextPath.substring(contextDir.length);
312
- // Remove leading separators
313
- // eslint-disable-next-line no-useless-escape
314
- archiveBasePath = archiveBasePath.replace(/^[\/\\]+/, '');
315
- }
316
- this._contextList.push({ sourcePath: contextPath, archivePath: archiveBasePath });
317
- }
318
- this._dockerfile += dockerfileCommands.join('\n') + '\n';
319
- });
320
- }
321
- /**
322
- * Creates an Image from an existing Dockerfile.
323
- *
324
- * @param {string} path - The path to the Dockerfile.
325
- * @returns {Image} The Image instance.
326
- *
327
- * @example
328
- * const image = Image.fromDockerfile('Dockerfile')
329
- */
330
- static fromDockerfile(path) {
331
- const img = new Image();
332
- return img.queueAsyncOperation(async () => {
333
- const importErrorPrefix = '"fromDockerfile" is not supported: ';
334
- const expandTilde = await dynamicImport('expand-tilde', importErrorPrefix);
335
- const fs = await dynamicImport('fs', importErrorPrefix);
336
- const expandedPath = pathe.resolve(expandTilde(path));
337
- if (!fs.existsSync(expandedPath)) {
338
- throw new Error(`Dockerfile ${path} does not exist`);
339
- }
340
- const dockerfileContent = fs.readFileSync(expandedPath, 'utf-8');
341
- img._dockerfile = dockerfileContent;
342
- // Remove dockerfile filename from path to get the path prefix
343
- const pathPrefix = pathe.dirname(expandedPath) + pathe.sep;
344
- for (const [contextPath, originalPath] of await Image.extractCopySources(dockerfileContent, pathPrefix)) {
345
- let archiveBasePath = contextPath;
346
- if (!originalPath.startsWith(pathPrefix)) {
347
- // Remove the path prefix from the context path to get the archive path
348
- archiveBasePath = contextPath.substring(pathPrefix.length);
349
- // Remove leading separators
350
- // eslint-disable-next-line no-useless-escape
351
- archiveBasePath = archiveBasePath.replace(/^[\/\\]+/, '');
352
- }
353
- img._contextList.push({ sourcePath: contextPath, archivePath: archiveBasePath });
354
- }
355
- });
356
- }
357
- /**
358
- * Creates an Image from an existing base image.
359
- *
360
- * @param {string} image - The base image to use.
361
- * @returns {Image} The Image instance.
362
- *
363
- * @example
364
- * const image = Image.base('python:3.12-slim-bookworm')
365
- */
366
- static base(image) {
367
- const img = new Image();
368
- img._dockerfile = `FROM ${image}\n`;
369
- return img;
370
- }
371
- /**
372
- * Creates a Debian slim image based on the official Python Docker image.
373
- *
374
- * @param {string} pythonVersion - The Python version to use.
375
- * @returns {Image} The Image instance.
376
- *
377
- * @example
378
- * const image = Image.debianSlim('3.12')
379
- */
380
- static debianSlim(pythonVersion) {
381
- const version = Image.processPythonVersion(pythonVersion);
382
- const img = new Image();
383
- const commands = [
384
- `FROM python:${version}-slim-bookworm`,
385
- 'RUN apt-get update',
386
- 'RUN apt-get install -y gcc gfortran build-essential',
387
- 'RUN pip install --upgrade pip',
388
- // Set debian front-end to non-interactive to avoid users getting stuck with input prompts.
389
- "RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections",
390
- ];
391
- img._dockerfile = commands.join('\n') + '\n';
392
- return img;
393
- }
394
- /**
395
- * Formats pip install arguments in a single string.
396
- *
397
- * @param {PipInstallOptions} options - The options for the pip install command.
398
- * @returns {string} The formatted pip install arguments.
399
- */
400
- formatPipInstallArgs(options) {
401
- if (!options)
402
- return '';
403
- let extraArgs = '';
404
- if (options.findLinks) {
405
- for (const findLink of options.findLinks) {
406
- extraArgs += ` --find-links ${quote([findLink])}`;
407
- }
408
- }
409
- if (options.indexUrl) {
410
- extraArgs += ` --index-url ${quote([options.indexUrl])}`;
411
- }
412
- if (options.extraIndexUrls) {
413
- for (const extraIndexUrl of options.extraIndexUrls) {
414
- extraArgs += ` --extra-index-url ${quote([extraIndexUrl])}`;
415
- }
416
- }
417
- if (options.pre) {
418
- extraArgs += ' --pre';
419
- }
420
- if (options.extraOptions) {
421
- extraArgs += ` ${options.extraOptions.trim()}`;
422
- }
423
- return extraArgs;
424
- }
425
- /**
426
- * Flattens a string argument.
427
- *
428
- * @param {string} functionName - The name of the function.
429
- * @param {string} argName - The name of the argument.
430
- * @param {any} args - The argument to flatten.
431
- * @returns {string[]} The flattened argument.
432
- */
433
- flattenStringArgs(functionName, argName, args) {
434
- const result = [];
435
- const flatten = (arg) => {
436
- if (typeof arg === 'string') {
437
- result.push(arg);
438
- }
439
- else if (Array.isArray(arg)) {
440
- for (const item of arg) {
441
- flatten(item);
442
- }
443
- }
444
- else {
445
- throw new Error(`${functionName}: ${argName} must only contain strings`);
446
- }
447
- };
448
- flatten(args);
449
- return result;
450
- }
451
- /**
452
- * Processes the Python version.
453
- *
454
- * @param {string} pythonVersion - The Python version to use.
455
- * @returns {string} The processed Python version.
456
- */
457
- static processPythonVersion(pythonVersion) {
458
- if (!pythonVersion) {
459
- // Default to latest
460
- pythonVersion = SUPPORTED_PYTHON_SERIES[SUPPORTED_PYTHON_SERIES.length - 1];
461
- }
462
- if (!SUPPORTED_PYTHON_SERIES.includes(pythonVersion)) {
463
- throw new Error(`Unsupported Python version: ${pythonVersion}. ` +
464
- `Daytona supports the following series: ${SUPPORTED_PYTHON_SERIES.join(', ')}`);
465
- }
466
- // Map series to latest micro version
467
- const seriesMap = Object.fromEntries(LATEST_PYTHON_MICRO_VERSIONS.map((v) => {
468
- const [major, minor, micro] = v.split('.');
469
- return [`${major}.${minor}`, micro];
470
- }));
471
- const micro = seriesMap[pythonVersion];
472
- return `${pythonVersion}.${micro}`;
473
- }
474
- /**
475
- * Extracts source files from COPY commands in a Dockerfile.
476
- *
477
- * @param {string} dockerfileContent - The content of the Dockerfile.
478
- * @param {string} pathPrefix - The path prefix to use for the sources.
479
- * @returns {Array<[string, string]>} The list of the actual file path and its corresponding COPY-command source path.
480
- */
481
- static async extractCopySources(dockerfileContent, pathPrefix = '') {
482
- const sources = [];
483
- const lines = dockerfileContent.split('\n');
484
- for (const line of lines) {
485
- // Skip empty lines and comments
486
- if (!line.trim() || line.trim().startsWith('#')) {
487
- continue;
488
- }
489
- // Check if the line contains a COPY command
490
- if (/^\s*COPY\s+(?!.*--from=)/i.test(line)) {
491
- const importErrorPrefix = '"extractCopySources" is not supported: ';
492
- const fg = await dynamicImport('fast-glob', importErrorPrefix);
493
- const commandParts = this.parseCopyCommand(line);
494
- if (commandParts) {
495
- // Get source paths from the parsed command parts
496
- for (const source of commandParts.sources) {
497
- // Handle absolute and relative paths differently
498
- const fullPathPattern = pathe.isAbsolute(source) ? source : pathe.join(pathPrefix, source);
499
- const matchingFiles = fg.sync([fullPathPattern], { dot: true });
500
- if (matchingFiles.length > 0) {
501
- for (const matchingFile of matchingFiles) {
502
- sources.push([matchingFile, source]);
503
- }
504
- }
505
- else {
506
- sources.push([fullPathPattern, source]);
507
- }
508
- }
509
- }
510
- }
511
- }
512
- return sources;
513
- }
514
- /**
515
- * Parses a COPY command to extract sources and destination.
516
- *
517
- * @param {string} line - The line to parse.
518
- * @returns {Object} The parsed sources and destination.
519
- */
520
- static parseCopyCommand(line) {
521
- // Remove initial "COPY" and strip whitespace
522
- const parts = line.trim().substring(4).trim();
523
- // Handle JSON array format: COPY ["src1", "src2", "dest"]
524
- if (parts.startsWith('[')) {
525
- try {
526
- // Parse the JSON-like array format
527
- const elements = parseShellQuote(parts.replace('[', '').replace(']', '')).filter((x) => typeof x === 'string');
528
- if (elements.length < 2) {
529
- return null;
530
- }
531
- return {
532
- sources: elements.slice(0, -1),
533
- dest: elements[elements.length - 1],
534
- };
535
- }
536
- catch {
537
- return null;
538
- }
539
- }
540
- // Handle regular format with possible flags
541
- const splitParts = parseShellQuote(parts).filter((x) => typeof x === 'string');
542
- // Extract flags like --chown, --chmod, --from
543
- let sourcesStartIdx = 0;
544
- for (let i = 0; i < splitParts.length; i++) {
545
- const part = splitParts[i];
546
- if (part.startsWith('--')) {
547
- // Skip the flag and its value if it has one
548
- if (!part.includes('=') && i + 1 < splitParts.length && !splitParts[i + 1].startsWith('--')) {
549
- sourcesStartIdx = i + 2;
550
- }
551
- else {
552
- sourcesStartIdx = i + 1;
553
- }
554
- }
555
- else {
556
- break;
557
- }
558
- }
559
- // After skipping flags, we need at least one source and one destination
560
- if (splitParts.length - sourcesStartIdx < 2) {
561
- return null;
562
- }
563
- return {
564
- sources: splitParts.slice(sourcesStartIdx, -1),
565
- dest: splitParts[splitParts.length - 1],
566
- };
567
- }
568
- }
569
- //# sourceMappingURL=Image.js.map
package/esm/Image.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Image.js","sourceRoot":"","sources":["../../../../../libs/sdk-typescript/src/Image.ts"],"names":[],"mappings":"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"}