@milaboratories/pl-drivers 1.12.7 → 1.12.9

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 (271) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +7 -13
  2. package/dist/clients/constructors.cjs +6 -7
  3. package/dist/clients/constructors.cjs.map +1 -1
  4. package/dist/clients/constructors.d.ts.map +1 -0
  5. package/dist/clients/constructors.js +1 -2
  6. package/dist/clients/constructors.js.map +1 -1
  7. package/dist/clients/crc32c.cjs +1 -2
  8. package/dist/clients/crc32c.cjs.map +1 -1
  9. package/dist/clients/crc32c.js +1 -1
  10. package/dist/clients/download.cjs +6 -6
  11. package/dist/clients/download.cjs.map +1 -1
  12. package/dist/clients/download.d.ts.map +1 -0
  13. package/dist/clients/download.js +2 -2
  14. package/dist/clients/download.js.map +1 -1
  15. package/dist/clients/logs.cjs +5 -4
  16. package/dist/clients/logs.cjs.map +1 -1
  17. package/dist/clients/logs.d.ts.map +1 -0
  18. package/dist/clients/logs.js +3 -2
  19. package/dist/clients/logs.js.map +1 -1
  20. package/dist/clients/ls_api.cjs +4 -4
  21. package/dist/clients/ls_api.cjs.map +1 -1
  22. package/dist/clients/ls_api.d.ts.map +1 -0
  23. package/dist/clients/ls_api.js +2 -2
  24. package/dist/clients/ls_api.js.map +1 -1
  25. package/dist/clients/progress.cjs +7 -5
  26. package/dist/clients/progress.cjs.map +1 -1
  27. package/dist/clients/progress.d.ts.map +1 -0
  28. package/dist/clients/progress.js +5 -3
  29. package/dist/clients/progress.js.map +1 -1
  30. package/dist/clients/upload.cjs +22 -9
  31. package/dist/clients/upload.cjs.map +1 -1
  32. package/dist/clients/upload.d.ts.map +1 -0
  33. package/dist/clients/upload.js +18 -5
  34. package/dist/clients/upload.js.map +1 -1
  35. package/dist/drivers/download_blob/blob_key.cjs +3 -4
  36. package/dist/drivers/download_blob/blob_key.cjs.map +1 -1
  37. package/dist/drivers/download_blob/blob_key.js +2 -3
  38. package/dist/drivers/download_blob/blob_key.js.map +1 -1
  39. package/dist/drivers/download_blob/download_blob.cjs +13 -14
  40. package/dist/drivers/download_blob/download_blob.cjs.map +1 -1
  41. package/dist/drivers/download_blob/download_blob.d.ts.map +1 -0
  42. package/dist/drivers/download_blob/download_blob.js +1 -2
  43. package/dist/drivers/download_blob/download_blob.js.map +1 -1
  44. package/dist/drivers/download_blob/download_blob_task.cjs +4 -5
  45. package/dist/drivers/download_blob/download_blob_task.cjs.map +1 -1
  46. package/dist/drivers/download_blob/download_blob_task.js +1 -2
  47. package/dist/drivers/download_blob/download_blob_task.js.map +1 -1
  48. package/dist/drivers/download_blob/sparse_cache/cache.cjs +4 -5
  49. package/dist/drivers/download_blob/sparse_cache/cache.cjs.map +1 -1
  50. package/dist/drivers/download_blob/sparse_cache/cache.js +1 -2
  51. package/dist/drivers/download_blob/sparse_cache/cache.js.map +1 -1
  52. package/dist/drivers/download_blob/sparse_cache/file.cjs +2 -3
  53. package/dist/drivers/download_blob/sparse_cache/file.cjs.map +1 -1
  54. package/dist/drivers/download_blob/sparse_cache/file.js +1 -2
  55. package/dist/drivers/download_blob/sparse_cache/file.js.map +1 -1
  56. package/dist/drivers/download_blob/sparse_cache/ranges.cjs +3 -4
  57. package/dist/drivers/download_blob/sparse_cache/ranges.cjs.map +1 -1
  58. package/dist/drivers/download_blob/sparse_cache/ranges.js +1 -2
  59. package/dist/drivers/download_blob/sparse_cache/ranges.js.map +1 -1
  60. package/dist/drivers/download_blob_url/driver.cjs +8 -9
  61. package/dist/drivers/download_blob_url/driver.cjs.map +1 -1
  62. package/dist/drivers/download_blob_url/driver.d.ts.map +1 -0
  63. package/dist/drivers/download_blob_url/driver.js +1 -2
  64. package/dist/drivers/download_blob_url/driver.js.map +1 -1
  65. package/dist/drivers/download_blob_url/driver_id.cjs +1 -2
  66. package/dist/drivers/download_blob_url/driver_id.cjs.map +1 -1
  67. package/dist/drivers/download_blob_url/driver_id.js +1 -1
  68. package/dist/drivers/download_blob_url/snapshot.cjs +2 -3
  69. package/dist/drivers/download_blob_url/snapshot.cjs.map +1 -1
  70. package/dist/drivers/download_blob_url/snapshot.d.ts +2 -2
  71. package/dist/drivers/download_blob_url/snapshot.d.ts.map +1 -0
  72. package/dist/drivers/download_blob_url/snapshot.js +1 -2
  73. package/dist/drivers/download_blob_url/snapshot.js.map +1 -1
  74. package/dist/drivers/download_blob_url/task.cjs +5 -6
  75. package/dist/drivers/download_blob_url/task.cjs.map +1 -1
  76. package/dist/drivers/download_blob_url/task.d.ts.map +1 -0
  77. package/dist/drivers/download_blob_url/task.js +1 -2
  78. package/dist/drivers/download_blob_url/task.js.map +1 -1
  79. package/dist/drivers/download_url/driver.cjs +7 -8
  80. package/dist/drivers/download_url/driver.cjs.map +1 -1
  81. package/dist/drivers/download_url/driver.d.ts.map +1 -0
  82. package/dist/drivers/download_url/driver.js +1 -2
  83. package/dist/drivers/download_url/driver.js.map +1 -1
  84. package/dist/drivers/download_url/task.cjs +4 -5
  85. package/dist/drivers/download_url/task.cjs.map +1 -1
  86. package/dist/drivers/download_url/task.d.ts.map +1 -0
  87. package/dist/drivers/download_url/task.js +1 -2
  88. package/dist/drivers/download_url/task.js.map +1 -1
  89. package/dist/drivers/helpers/download_local_handle.cjs +1 -2
  90. package/dist/drivers/helpers/download_local_handle.cjs.map +1 -1
  91. package/dist/drivers/helpers/download_local_handle.js +1 -1
  92. package/dist/drivers/helpers/download_remote_handle.cjs +3 -4
  93. package/dist/drivers/helpers/download_remote_handle.cjs.map +1 -1
  94. package/dist/drivers/helpers/download_remote_handle.js +1 -2
  95. package/dist/drivers/helpers/download_remote_handle.js.map +1 -1
  96. package/dist/drivers/helpers/files_cache.cjs +2 -3
  97. package/dist/drivers/helpers/files_cache.cjs.map +1 -1
  98. package/dist/drivers/helpers/files_cache.js +1 -2
  99. package/dist/drivers/helpers/files_cache.js.map +1 -1
  100. package/dist/drivers/helpers/helpers.cjs +1 -2
  101. package/dist/drivers/helpers/helpers.cjs.map +1 -1
  102. package/dist/drivers/helpers/helpers.d.ts.map +1 -0
  103. package/dist/drivers/helpers/helpers.js +1 -1
  104. package/dist/drivers/helpers/helpers.js.map +1 -1
  105. package/dist/drivers/helpers/logs_handle.cjs +2 -3
  106. package/dist/drivers/helpers/logs_handle.cjs.map +1 -1
  107. package/dist/drivers/helpers/logs_handle.js +1 -2
  108. package/dist/drivers/helpers/logs_handle.js.map +1 -1
  109. package/dist/drivers/helpers/ls_remote_import_handle.cjs +4 -6
  110. package/dist/drivers/helpers/ls_remote_import_handle.cjs.map +1 -1
  111. package/dist/drivers/helpers/ls_remote_import_handle.js +3 -5
  112. package/dist/drivers/helpers/ls_remote_import_handle.js.map +1 -1
  113. package/dist/drivers/helpers/ls_storage_entry.cjs +2 -3
  114. package/dist/drivers/helpers/ls_storage_entry.cjs.map +1 -1
  115. package/dist/drivers/helpers/ls_storage_entry.js +1 -2
  116. package/dist/drivers/helpers/ls_storage_entry.js.map +1 -1
  117. package/dist/drivers/helpers/polling_ops.d.ts.map +1 -0
  118. package/dist/drivers/helpers/read_file.cjs +2 -3
  119. package/dist/drivers/helpers/read_file.cjs.map +1 -1
  120. package/dist/drivers/helpers/read_file.js +1 -2
  121. package/dist/drivers/helpers/read_file.js.map +1 -1
  122. package/dist/drivers/logs.cjs +3 -4
  123. package/dist/drivers/logs.cjs.map +1 -1
  124. package/dist/drivers/logs.d.ts.map +1 -0
  125. package/dist/drivers/logs.js +1 -2
  126. package/dist/drivers/logs.js.map +1 -1
  127. package/dist/drivers/logs_stream.cjs +4 -5
  128. package/dist/drivers/logs_stream.cjs.map +1 -1
  129. package/dist/drivers/logs_stream.d.ts.map +1 -0
  130. package/dist/drivers/logs_stream.js +1 -2
  131. package/dist/drivers/logs_stream.js.map +1 -1
  132. package/dist/drivers/ls.cjs +7 -8
  133. package/dist/drivers/ls.cjs.map +1 -1
  134. package/dist/drivers/ls.d.ts.map +1 -0
  135. package/dist/drivers/ls.js +1 -2
  136. package/dist/drivers/ls.js.map +1 -1
  137. package/dist/drivers/types.cjs +2 -3
  138. package/dist/drivers/types.cjs.map +1 -1
  139. package/dist/drivers/types.d.ts +4 -4
  140. package/dist/drivers/types.d.ts.map +1 -0
  141. package/dist/drivers/types.js +1 -2
  142. package/dist/drivers/types.js.map +1 -1
  143. package/dist/drivers/upload.cjs +5 -6
  144. package/dist/drivers/upload.cjs.map +1 -1
  145. package/dist/drivers/upload.d.ts.map +1 -0
  146. package/dist/drivers/upload.js +1 -2
  147. package/dist/drivers/upload.js.map +1 -1
  148. package/dist/drivers/upload_task.cjs +4 -5
  149. package/dist/drivers/upload_task.cjs.map +1 -1
  150. package/dist/drivers/upload_task.d.ts.map +1 -0
  151. package/dist/drivers/upload_task.js +1 -2
  152. package/dist/drivers/upload_task.js.map +1 -1
  153. package/dist/drivers/urls/url.cjs +2 -3
  154. package/dist/drivers/urls/url.cjs.map +1 -1
  155. package/dist/drivers/urls/url.js +1 -2
  156. package/dist/drivers/urls/url.js.map +1 -1
  157. package/dist/drivers/virtual_storages.cjs +2 -3
  158. package/dist/drivers/virtual_storages.cjs.map +1 -1
  159. package/dist/drivers/virtual_storages.d.ts.map +1 -0
  160. package/dist/drivers/virtual_storages.js +1 -2
  161. package/dist/drivers/virtual_storages.js.map +1 -1
  162. package/dist/helpers/download.cjs +3 -4
  163. package/dist/helpers/download.cjs.map +1 -1
  164. package/dist/helpers/download.d.ts.map +1 -0
  165. package/dist/helpers/download.js +1 -2
  166. package/dist/helpers/download.js.map +1 -1
  167. package/dist/helpers/download_errors.cjs +1 -2
  168. package/dist/helpers/download_errors.cjs.map +1 -1
  169. package/dist/helpers/download_errors.d.ts.map +1 -0
  170. package/dist/helpers/download_errors.js +1 -1
  171. package/dist/helpers/validate.cjs +2 -3
  172. package/dist/helpers/validate.cjs.map +1 -1
  173. package/dist/helpers/validate.d.ts.map +1 -0
  174. package/dist/helpers/validate.js +1 -2
  175. package/dist/helpers/validate.js.map +1 -1
  176. package/dist/index.cjs +22 -23
  177. package/dist/index.js +1 -2
  178. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.cjs +32 -27
  179. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.cjs.map +1 -1
  180. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.cjs +4 -5
  181. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.cjs.map +1 -1
  182. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.d.ts +6 -6
  183. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.d.ts.map +1 -0
  184. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.js +2 -3
  185. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.js.map +1 -1
  186. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.d.ts +11 -5
  187. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.d.ts.map +1 -0
  188. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.js +32 -31
  189. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.js.map +1 -1
  190. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.cjs +31 -24
  191. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.cjs.map +1 -1
  192. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.cjs +7 -8
  193. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.cjs.map +1 -1
  194. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.js +5 -6
  195. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.js.map +1 -1
  196. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts +16 -16
  197. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.d.ts.map +1 -0
  198. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.js +30 -27
  199. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.js.map +1 -1
  200. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.cjs +42 -28
  201. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.cjs.map +1 -1
  202. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.cjs +4 -5
  203. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.cjs.map +1 -1
  204. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.d.ts +6 -6
  205. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.d.ts.map +1 -0
  206. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.js +2 -3
  207. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.js.map +1 -1
  208. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.d.ts +8 -0
  209. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.d.ts.map +1 -0
  210. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.js +40 -26
  211. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.js.map +1 -1
  212. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.cjs +32 -196
  213. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.cjs.map +1 -1
  214. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.cjs +23 -45
  215. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.cjs.map +1 -1
  216. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.d.ts +40 -70
  217. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.d.ts.map +1 -0
  218. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.js +21 -43
  219. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.js.map +1 -1
  220. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.d.ts +52 -137
  221. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.d.ts.map +1 -0
  222. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.js +31 -195
  223. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.js.map +1 -1
  224. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.cjs +228 -46
  225. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.cjs.map +1 -1
  226. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.cjs +24 -11
  227. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.cjs.map +1 -1
  228. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.js +22 -9
  229. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.js.map +1 -1
  230. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.d.ts.map +1 -0
  231. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.js +227 -45
  232. package/dist/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.js.map +1 -1
  233. package/dist/proto-grpc/google/protobuf/duration.cjs +2 -3
  234. package/dist/proto-grpc/google/protobuf/duration.cjs.map +1 -1
  235. package/dist/proto-grpc/google/protobuf/duration.d.ts.map +1 -0
  236. package/dist/proto-grpc/google/protobuf/duration.js +1 -2
  237. package/dist/proto-grpc/google/protobuf/duration.js.map +1 -1
  238. package/dist/proto-grpc/google/protobuf/timestamp.cjs +2 -3
  239. package/dist/proto-grpc/google/protobuf/timestamp.cjs.map +1 -1
  240. package/dist/proto-grpc/google/protobuf/timestamp.d.ts.map +1 -0
  241. package/dist/proto-grpc/google/protobuf/timestamp.js +1 -2
  242. package/dist/proto-grpc/google/protobuf/timestamp.js.map +1 -1
  243. package/dist/proto-rest/downloadapi.d.ts +8 -3
  244. package/dist/proto-rest/downloadapi.d.ts.map +1 -0
  245. package/dist/proto-rest/index.d.ts.map +1 -0
  246. package/dist/proto-rest/progressapi.d.ts +4 -2
  247. package/dist/proto-rest/progressapi.d.ts.map +1 -0
  248. package/dist/proto-rest/streamingapi.d.ts +64 -203
  249. package/dist/proto-rest/streamingapi.d.ts.map +1 -0
  250. package/package.json +10 -10
  251. package/src/clients/download.ts +1 -0
  252. package/src/clients/logs.ts +2 -0
  253. package/src/clients/ls_api.ts +1 -0
  254. package/src/clients/progress.ts +1 -1
  255. package/src/clients/upload.ts +14 -1
  256. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.client.ts +2 -2
  257. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/downloadapi/protocol.ts +24 -11
  258. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.client.ts +8 -8
  259. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/lsapi/protocol.ts +31 -18
  260. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.client.ts +2 -2
  261. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/progressapi/protocol.ts +23 -1
  262. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.client.ts +39 -78
  263. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol.ts +72 -263
  264. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.client.ts +41 -14
  265. package/src/proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/uploadapi/protocol.ts +286 -44
  266. package/src/proto-grpc/google/protobuf/descriptor.ts +2 -5
  267. package/src/proto-rest/downloadapi.ts +8 -3
  268. package/src/proto-rest/lsapi.ts +23 -18
  269. package/src/proto-rest/progressapi.ts +4 -0
  270. package/src/proto-rest/streamingapi.ts +65 -211
  271. package/src/proto-rest/uploadapi.ts +141 -39
@@ -1,6 +1,5 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
1
+ require("../../_virtual/_rolldown/runtime.cjs");
2
2
  let _milaboratories_pl_client = require("@milaboratories/pl-client");
3
-
4
3
  //#region src/drivers/helpers/logs_handle.ts
5
4
  function newLogHandle(live, rInfo) {
6
5
  if (live) return `log+live://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}`;
@@ -33,9 +32,9 @@ function getResourceInfoFromLogHandle(handle) {
33
32
  }
34
33
  };
35
34
  }
36
-
37
35
  //#endregion
38
36
  exports.getResourceInfoFromLogHandle = getResourceInfoFromLogHandle;
39
37
  exports.isLiveLogHandle = isLiveLogHandle;
40
38
  exports.newLogHandle = newLogHandle;
39
+
41
40
  //# sourceMappingURL=logs_handle.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs_handle.cjs","names":[],"sources":["../../../src/drivers/helpers/logs_handle.ts"],"sourcesContent":["/** Handle of logs. This handle should be passed\n * to the driver for retrieving logs. */\n\nimport type { ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\n\nexport function newLogHandle(live: boolean, rInfo: ResourceInfo): sdk.AnyLogHandle {\n if (live) {\n return `log+live://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.LiveLogHandle;\n }\n\n return `log+ready://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.ReadyLogHandle;\n}\n\n/** Handle of the live logs of a program.\n * The resource that represents a log can be deleted,\n * in this case the handle should be refreshed. */\n\nexport const liveHandleRegex =\n /^log\\+live:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isLiveLogHandle(handle: string): handle is sdk.LiveLogHandle {\n return liveHandleRegex.test(handle);\n}\n\n/** Handle of the ready logs of a program. */\n\nexport const readyHandleRegex =\n /^log\\+ready:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isReadyLogHandle(handle: string): handle is sdk.ReadyLogHandle {\n return readyHandleRegex.test(handle);\n}\n\nexport function getResourceInfoFromLogHandle(handle: sdk.AnyLogHandle): ResourceInfo {\n let parsed: RegExpMatchArray | null;\n\n if (isLiveLogHandle(handle)) {\n parsed = handle.match(liveHandleRegex);\n } else if (isReadyLogHandle(handle)) {\n parsed = handle.match(readyHandleRegex);\n } else throw new Error(`Log handle is malformed: ${handle}`);\n if (parsed == null) throw new Error(`Log handle wasn't parsed: ${handle}`);\n\n const { resourceType, resourceVersion, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: { name: resourceType, version: resourceVersion },\n };\n}\n"],"mappings":";;;;AAOA,SAAgB,aAAa,MAAe,OAAuC;AACjF,KAAI,KACF,QAAO,kBAAkB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;AAGpF,QAAO,mBAAmB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;;;;;AAOrF,MAAa,kBACX;AAEF,SAAgB,gBAAgB,QAA6C;AAC3E,QAAO,gBAAgB,KAAK,OAAO;;;AAKrC,MAAa,mBACX;AAEF,SAAgB,iBAAiB,QAA8C;AAC7E,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,6BAA6B,QAAwC;CACnF,IAAI;AAEJ,KAAI,gBAAgB,OAAO,CACzB,UAAS,OAAO,MAAM,gBAAgB;UAC7B,iBAAiB,OAAO,CACjC,UAAS,OAAO,MAAM,iBAAiB;KAClC,OAAM,IAAI,MAAM,4BAA4B,SAAS;AAC5D,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,6BAA6B,SAAS;CAE1E,MAAM,EAAE,cAAc,iBAAiB,eAAe,OAAO;AAE7D,QAAO;EACL,sDAAuB,OAAO,WAAW,CAAC;EAC1C,MAAM;GAAE,MAAM;GAAc,SAAS;GAAiB;EACvD"}
1
+ {"version":3,"file":"logs_handle.cjs","names":[],"sources":["../../../src/drivers/helpers/logs_handle.ts"],"sourcesContent":["/** Handle of logs. This handle should be passed\n * to the driver for retrieving logs. */\n\nimport type { ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\n\nexport function newLogHandle(live: boolean, rInfo: ResourceInfo): sdk.AnyLogHandle {\n if (live) {\n return `log+live://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.LiveLogHandle;\n }\n\n return `log+ready://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.ReadyLogHandle;\n}\n\n/** Handle of the live logs of a program.\n * The resource that represents a log can be deleted,\n * in this case the handle should be refreshed. */\n\nexport const liveHandleRegex =\n /^log\\+live:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isLiveLogHandle(handle: string): handle is sdk.LiveLogHandle {\n return liveHandleRegex.test(handle);\n}\n\n/** Handle of the ready logs of a program. */\n\nexport const readyHandleRegex =\n /^log\\+ready:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isReadyLogHandle(handle: string): handle is sdk.ReadyLogHandle {\n return readyHandleRegex.test(handle);\n}\n\nexport function getResourceInfoFromLogHandle(handle: sdk.AnyLogHandle): ResourceInfo {\n let parsed: RegExpMatchArray | null;\n\n if (isLiveLogHandle(handle)) {\n parsed = handle.match(liveHandleRegex);\n } else if (isReadyLogHandle(handle)) {\n parsed = handle.match(readyHandleRegex);\n } else throw new Error(`Log handle is malformed: ${handle}`);\n if (parsed == null) throw new Error(`Log handle wasn't parsed: ${handle}`);\n\n const { resourceType, resourceVersion, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: { name: resourceType, version: resourceVersion },\n };\n}\n"],"mappings":";;;AAOA,SAAgB,aAAa,MAAe,OAAuC;AACjF,KAAI,KACF,QAAO,kBAAkB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;AAGpF,QAAO,mBAAmB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;;;;;AAOrF,MAAa,kBACX;AAEF,SAAgB,gBAAgB,QAA6C;AAC3E,QAAO,gBAAgB,KAAK,OAAO;;;AAKrC,MAAa,mBACX;AAEF,SAAgB,iBAAiB,QAA8C;AAC7E,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,6BAA6B,QAAwC;CACnF,IAAI;AAEJ,KAAI,gBAAgB,OAAO,CACzB,UAAS,OAAO,MAAM,gBAAgB;UAC7B,iBAAiB,OAAO,CACjC,UAAS,OAAO,MAAM,iBAAiB;KAClC,OAAM,IAAI,MAAM,4BAA4B,SAAS;AAC5D,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,6BAA6B,SAAS;CAE1E,MAAM,EAAE,cAAc,iBAAiB,eAAe,OAAO;AAE7D,QAAO;EACL,KAAA,GAAA,0BAAA,oBAAuB,OAAO,WAAW,CAAC;EAC1C,MAAM;GAAE,MAAM;GAAc,SAAS;GAAiB;EACvD"}
@@ -1,5 +1,4 @@
1
1
  import { bigintToResourceId } from "@milaboratories/pl-client";
2
-
3
2
  //#region src/drivers/helpers/logs_handle.ts
4
3
  function newLogHandle(live, rInfo) {
5
4
  if (live) return `log+live://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}`;
@@ -32,7 +31,7 @@ function getResourceInfoFromLogHandle(handle) {
32
31
  }
33
32
  };
34
33
  }
35
-
36
34
  //#endregion
37
35
  export { getResourceInfoFromLogHandle, isLiveLogHandle, newLogHandle };
36
+
38
37
  //# sourceMappingURL=logs_handle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs_handle.js","names":[],"sources":["../../../src/drivers/helpers/logs_handle.ts"],"sourcesContent":["/** Handle of logs. This handle should be passed\n * to the driver for retrieving logs. */\n\nimport type { ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\n\nexport function newLogHandle(live: boolean, rInfo: ResourceInfo): sdk.AnyLogHandle {\n if (live) {\n return `log+live://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.LiveLogHandle;\n }\n\n return `log+ready://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.ReadyLogHandle;\n}\n\n/** Handle of the live logs of a program.\n * The resource that represents a log can be deleted,\n * in this case the handle should be refreshed. */\n\nexport const liveHandleRegex =\n /^log\\+live:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isLiveLogHandle(handle: string): handle is sdk.LiveLogHandle {\n return liveHandleRegex.test(handle);\n}\n\n/** Handle of the ready logs of a program. */\n\nexport const readyHandleRegex =\n /^log\\+ready:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isReadyLogHandle(handle: string): handle is sdk.ReadyLogHandle {\n return readyHandleRegex.test(handle);\n}\n\nexport function getResourceInfoFromLogHandle(handle: sdk.AnyLogHandle): ResourceInfo {\n let parsed: RegExpMatchArray | null;\n\n if (isLiveLogHandle(handle)) {\n parsed = handle.match(liveHandleRegex);\n } else if (isReadyLogHandle(handle)) {\n parsed = handle.match(readyHandleRegex);\n } else throw new Error(`Log handle is malformed: ${handle}`);\n if (parsed == null) throw new Error(`Log handle wasn't parsed: ${handle}`);\n\n const { resourceType, resourceVersion, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: { name: resourceType, version: resourceVersion },\n };\n}\n"],"mappings":";;;AAOA,SAAgB,aAAa,MAAe,OAAuC;AACjF,KAAI,KACF,QAAO,kBAAkB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;AAGpF,QAAO,mBAAmB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;;;;;AAOrF,MAAa,kBACX;AAEF,SAAgB,gBAAgB,QAA6C;AAC3E,QAAO,gBAAgB,KAAK,OAAO;;;AAKrC,MAAa,mBACX;AAEF,SAAgB,iBAAiB,QAA8C;AAC7E,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,6BAA6B,QAAwC;CACnF,IAAI;AAEJ,KAAI,gBAAgB,OAAO,CACzB,UAAS,OAAO,MAAM,gBAAgB;UAC7B,iBAAiB,OAAO,CACjC,UAAS,OAAO,MAAM,iBAAiB;KAClC,OAAM,IAAI,MAAM,4BAA4B,SAAS;AAC5D,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,6BAA6B,SAAS;CAE1E,MAAM,EAAE,cAAc,iBAAiB,eAAe,OAAO;AAE7D,QAAO;EACL,IAAI,mBAAmB,OAAO,WAAW,CAAC;EAC1C,MAAM;GAAE,MAAM;GAAc,SAAS;GAAiB;EACvD"}
1
+ {"version":3,"file":"logs_handle.js","names":[],"sources":["../../../src/drivers/helpers/logs_handle.ts"],"sourcesContent":["/** Handle of logs. This handle should be passed\n * to the driver for retrieving logs. */\n\nimport type { ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\n\nexport function newLogHandle(live: boolean, rInfo: ResourceInfo): sdk.AnyLogHandle {\n if (live) {\n return `log+live://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.LiveLogHandle;\n }\n\n return `log+ready://log/${rInfo.type.name}/${rInfo.type.version}/${BigInt(rInfo.id)}` as sdk.ReadyLogHandle;\n}\n\n/** Handle of the live logs of a program.\n * The resource that represents a log can be deleted,\n * in this case the handle should be refreshed. */\n\nexport const liveHandleRegex =\n /^log\\+live:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isLiveLogHandle(handle: string): handle is sdk.LiveLogHandle {\n return liveHandleRegex.test(handle);\n}\n\n/** Handle of the ready logs of a program. */\n\nexport const readyHandleRegex =\n /^log\\+ready:\\/\\/log\\/(?<resourceType>.*)\\/(?<resourceVersion>.*)\\/(?<resourceId>.*)$/;\n\nexport function isReadyLogHandle(handle: string): handle is sdk.ReadyLogHandle {\n return readyHandleRegex.test(handle);\n}\n\nexport function getResourceInfoFromLogHandle(handle: sdk.AnyLogHandle): ResourceInfo {\n let parsed: RegExpMatchArray | null;\n\n if (isLiveLogHandle(handle)) {\n parsed = handle.match(liveHandleRegex);\n } else if (isReadyLogHandle(handle)) {\n parsed = handle.match(readyHandleRegex);\n } else throw new Error(`Log handle is malformed: ${handle}`);\n if (parsed == null) throw new Error(`Log handle wasn't parsed: ${handle}`);\n\n const { resourceType, resourceVersion, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: { name: resourceType, version: resourceVersion },\n };\n}\n"],"mappings":";;AAOA,SAAgB,aAAa,MAAe,OAAuC;AACjF,KAAI,KACF,QAAO,kBAAkB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;AAGpF,QAAO,mBAAmB,MAAM,KAAK,KAAK,GAAG,MAAM,KAAK,QAAQ,GAAG,OAAO,MAAM,GAAG;;;;;AAOrF,MAAa,kBACX;AAEF,SAAgB,gBAAgB,QAA6C;AAC3E,QAAO,gBAAgB,KAAK,OAAO;;;AAKrC,MAAa,mBACX;AAEF,SAAgB,iBAAiB,QAA8C;AAC7E,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,6BAA6B,QAAwC;CACnF,IAAI;AAEJ,KAAI,gBAAgB,OAAO,CACzB,UAAS,OAAO,MAAM,gBAAgB;UAC7B,iBAAiB,OAAO,CACjC,UAAS,OAAO,MAAM,iBAAiB;KAClC,OAAM,IAAI,MAAM,4BAA4B,SAAS;AAC5D,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,6BAA6B,SAAS;CAE1E,MAAM,EAAE,cAAc,iBAAiB,eAAe,OAAO;AAE7D,QAAO;EACL,IAAI,mBAAmB,OAAO,WAAW,CAAC;EAC1C,MAAM;GAAE,MAAM;GAAc,SAAS;GAAiB;EACvD"}
@@ -1,12 +1,10 @@
1
- const require_types = require('../types.cjs');
2
-
1
+ const require_types = require("../types.cjs");
3
2
  //#region src/drivers/helpers/ls_remote_import_handle.ts
4
3
  function createIndexImportHandle(storageName, path) {
5
- const data = {
4
+ return `index://index/${encodeURIComponent(JSON.stringify({
6
5
  storageId: storageName,
7
6
  path
8
- };
9
- return `index://index/${encodeURIComponent(JSON.stringify(data))}`;
7
+ }))}`;
10
8
  }
11
9
  function createUploadImportHandle(localPath, signer, sizeBytes, modificationTimeSeconds) {
12
10
  const data = {
@@ -25,10 +23,10 @@ function parseIndexHandle(handle) {
25
23
  const url = new URL(handle);
26
24
  return require_types.ImportFileHandleIndexData.parse(JSON.parse(decodeURIComponent(url.pathname.substring(1))));
27
25
  }
28
-
29
26
  //#endregion
30
27
  exports.createIndexImportHandle = createIndexImportHandle;
31
28
  exports.createUploadImportHandle = createUploadImportHandle;
32
29
  exports.parseIndexHandle = parseIndexHandle;
33
30
  exports.parseUploadHandle = parseUploadHandle;
31
+
34
32
  //# sourceMappingURL=ls_remote_import_handle.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ls_remote_import_handle.cjs","names":["ImportFileHandleUploadData","ImportFileHandleIndexData"],"sources":["../../../src/drivers/helpers/ls_remote_import_handle.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { ImportFileHandleIndexData, ImportFileHandleUploadData } from \"../types\";\n\nexport function createIndexImportHandle(\n storageName: string,\n path: string,\n): sdk.ImportFileHandleIndex {\n const data: ImportFileHandleIndexData = {\n storageId: storageName,\n path: path,\n };\n\n return `index://index/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function createUploadImportHandle(\n localPath: string,\n signer: Signer,\n sizeBytes: bigint,\n modificationTimeSeconds: bigint,\n): sdk.ImportFileHandleUpload {\n const data: ImportFileHandleUploadData = {\n localPath,\n pathSignature: signer.sign(localPath),\n sizeBytes: String(sizeBytes),\n modificationTime: String(modificationTimeSeconds),\n };\n\n return `upload://upload/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function parseUploadHandle(handle: sdk.ImportFileHandleUpload): ImportFileHandleUploadData {\n const url = new URL(handle);\n return ImportFileHandleUploadData.parse(\n JSON.parse(decodeURIComponent(url.pathname.substring(1))),\n );\n}\n\nexport function parseIndexHandle(handle: sdk.ImportFileHandleIndex): ImportFileHandleIndexData {\n const url = new URL(handle);\n return ImportFileHandleIndexData.parse(JSON.parse(decodeURIComponent(url.pathname.substring(1))));\n}\n"],"mappings":";;;AAIA,SAAgB,wBACd,aACA,MAC2B;CAC3B,MAAM,OAAkC;EACtC,WAAW;EACL;EACP;AAED,QAAO,iBAAiB,mBAAmB,KAAK,UAAU,KAAK,CAAC;;AAGlE,SAAgB,yBACd,WACA,QACA,WACA,yBAC4B;CAC5B,MAAM,OAAmC;EACvC;EACA,eAAe,OAAO,KAAK,UAAU;EACrC,WAAW,OAAO,UAAU;EAC5B,kBAAkB,OAAO,wBAAwB;EAClD;AAED,QAAO,mBAAmB,mBAAmB,KAAK,UAAU,KAAK,CAAC;;AAGpE,SAAgB,kBAAkB,QAAgE;CAChG,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAOA,yCAA2B,MAChC,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAC1D;;AAGH,SAAgB,iBAAiB,QAA8D;CAC7F,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAOC,wCAA0B,MAAM,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ls_remote_import_handle.cjs","names":["ImportFileHandleUploadData","ImportFileHandleIndexData"],"sources":["../../../src/drivers/helpers/ls_remote_import_handle.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { ImportFileHandleIndexData, ImportFileHandleUploadData } from \"../types\";\n\nexport function createIndexImportHandle(\n storageName: string,\n path: string,\n): sdk.ImportFileHandleIndex {\n const data: ImportFileHandleIndexData = {\n storageId: storageName,\n path: path,\n };\n\n return `index://index/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function createUploadImportHandle(\n localPath: string,\n signer: Signer,\n sizeBytes: bigint,\n modificationTimeSeconds: bigint,\n): sdk.ImportFileHandleUpload {\n const data: ImportFileHandleUploadData = {\n localPath,\n pathSignature: signer.sign(localPath),\n sizeBytes: String(sizeBytes),\n modificationTime: String(modificationTimeSeconds),\n };\n\n return `upload://upload/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function parseUploadHandle(handle: sdk.ImportFileHandleUpload): ImportFileHandleUploadData {\n const url = new URL(handle);\n return ImportFileHandleUploadData.parse(\n JSON.parse(decodeURIComponent(url.pathname.substring(1))),\n );\n}\n\nexport function parseIndexHandle(handle: sdk.ImportFileHandleIndex): ImportFileHandleIndexData {\n const url = new URL(handle);\n return ImportFileHandleIndexData.parse(JSON.parse(decodeURIComponent(url.pathname.substring(1))));\n}\n"],"mappings":";;AAIA,SAAgB,wBACd,aACA,MAC2B;AAM3B,QAAO,iBAAiB,mBAAmB,KAAK,UALR;EACtC,WAAW;EACL;EACP,CAE8D,CAAC;;AAGlE,SAAgB,yBACd,WACA,QACA,WACA,yBAC4B;CAC5B,MAAM,OAAmC;EACvC;EACA,eAAe,OAAO,KAAK,UAAU;EACrC,WAAW,OAAO,UAAU;EAC5B,kBAAkB,OAAO,wBAAwB;EAClD;AAED,QAAO,mBAAmB,mBAAmB,KAAK,UAAU,KAAK,CAAC;;AAGpE,SAAgB,kBAAkB,QAAgE;CAChG,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAOA,cAAAA,2BAA2B,MAChC,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAC1D;;AAGH,SAAgB,iBAAiB,QAA8D;CAC7F,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAOC,cAAAA,0BAA0B,MAAM,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC"}
@@ -1,12 +1,10 @@
1
1
  import { ImportFileHandleIndexData, ImportFileHandleUploadData } from "../types.js";
2
-
3
2
  //#region src/drivers/helpers/ls_remote_import_handle.ts
4
3
  function createIndexImportHandle(storageName, path) {
5
- const data = {
4
+ return `index://index/${encodeURIComponent(JSON.stringify({
6
5
  storageId: storageName,
7
6
  path
8
- };
9
- return `index://index/${encodeURIComponent(JSON.stringify(data))}`;
7
+ }))}`;
10
8
  }
11
9
  function createUploadImportHandle(localPath, signer, sizeBytes, modificationTimeSeconds) {
12
10
  const data = {
@@ -25,7 +23,7 @@ function parseIndexHandle(handle) {
25
23
  const url = new URL(handle);
26
24
  return ImportFileHandleIndexData.parse(JSON.parse(decodeURIComponent(url.pathname.substring(1))));
27
25
  }
28
-
29
26
  //#endregion
30
27
  export { createIndexImportHandle, createUploadImportHandle, parseIndexHandle, parseUploadHandle };
28
+
31
29
  //# sourceMappingURL=ls_remote_import_handle.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ls_remote_import_handle.js","names":[],"sources":["../../../src/drivers/helpers/ls_remote_import_handle.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { ImportFileHandleIndexData, ImportFileHandleUploadData } from \"../types\";\n\nexport function createIndexImportHandle(\n storageName: string,\n path: string,\n): sdk.ImportFileHandleIndex {\n const data: ImportFileHandleIndexData = {\n storageId: storageName,\n path: path,\n };\n\n return `index://index/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function createUploadImportHandle(\n localPath: string,\n signer: Signer,\n sizeBytes: bigint,\n modificationTimeSeconds: bigint,\n): sdk.ImportFileHandleUpload {\n const data: ImportFileHandleUploadData = {\n localPath,\n pathSignature: signer.sign(localPath),\n sizeBytes: String(sizeBytes),\n modificationTime: String(modificationTimeSeconds),\n };\n\n return `upload://upload/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function parseUploadHandle(handle: sdk.ImportFileHandleUpload): ImportFileHandleUploadData {\n const url = new URL(handle);\n return ImportFileHandleUploadData.parse(\n JSON.parse(decodeURIComponent(url.pathname.substring(1))),\n );\n}\n\nexport function parseIndexHandle(handle: sdk.ImportFileHandleIndex): ImportFileHandleIndexData {\n const url = new URL(handle);\n return ImportFileHandleIndexData.parse(JSON.parse(decodeURIComponent(url.pathname.substring(1))));\n}\n"],"mappings":";;;AAIA,SAAgB,wBACd,aACA,MAC2B;CAC3B,MAAM,OAAkC;EACtC,WAAW;EACL;EACP;AAED,QAAO,iBAAiB,mBAAmB,KAAK,UAAU,KAAK,CAAC;;AAGlE,SAAgB,yBACd,WACA,QACA,WACA,yBAC4B;CAC5B,MAAM,OAAmC;EACvC;EACA,eAAe,OAAO,KAAK,UAAU;EACrC,WAAW,OAAO,UAAU;EAC5B,kBAAkB,OAAO,wBAAwB;EAClD;AAED,QAAO,mBAAmB,mBAAmB,KAAK,UAAU,KAAK,CAAC;;AAGpE,SAAgB,kBAAkB,QAAgE;CAChG,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAO,2BAA2B,MAChC,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAC1D;;AAGH,SAAgB,iBAAiB,QAA8D;CAC7F,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAO,0BAA0B,MAAM,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ls_remote_import_handle.js","names":[],"sources":["../../../src/drivers/helpers/ls_remote_import_handle.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { Signer } from \"@milaboratories/ts-helpers\";\nimport { ImportFileHandleIndexData, ImportFileHandleUploadData } from \"../types\";\n\nexport function createIndexImportHandle(\n storageName: string,\n path: string,\n): sdk.ImportFileHandleIndex {\n const data: ImportFileHandleIndexData = {\n storageId: storageName,\n path: path,\n };\n\n return `index://index/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function createUploadImportHandle(\n localPath: string,\n signer: Signer,\n sizeBytes: bigint,\n modificationTimeSeconds: bigint,\n): sdk.ImportFileHandleUpload {\n const data: ImportFileHandleUploadData = {\n localPath,\n pathSignature: signer.sign(localPath),\n sizeBytes: String(sizeBytes),\n modificationTime: String(modificationTimeSeconds),\n };\n\n return `upload://upload/${encodeURIComponent(JSON.stringify(data))}`;\n}\n\nexport function parseUploadHandle(handle: sdk.ImportFileHandleUpload): ImportFileHandleUploadData {\n const url = new URL(handle);\n return ImportFileHandleUploadData.parse(\n JSON.parse(decodeURIComponent(url.pathname.substring(1))),\n );\n}\n\nexport function parseIndexHandle(handle: sdk.ImportFileHandleIndex): ImportFileHandleIndexData {\n const url = new URL(handle);\n return ImportFileHandleIndexData.parse(JSON.parse(decodeURIComponent(url.pathname.substring(1))));\n}\n"],"mappings":";;AAIA,SAAgB,wBACd,aACA,MAC2B;AAM3B,QAAO,iBAAiB,mBAAmB,KAAK,UALR;EACtC,WAAW;EACL;EACP,CAE8D,CAAC;;AAGlE,SAAgB,yBACd,WACA,QACA,WACA,yBAC4B;CAC5B,MAAM,OAAmC;EACvC;EACA,eAAe,OAAO,KAAK,UAAU;EACrC,WAAW,OAAO,UAAU;EAC5B,kBAAkB,OAAO,wBAAwB;EAClD;AAED,QAAO,mBAAmB,mBAAmB,KAAK,UAAU,KAAK,CAAC;;AAGpE,SAAgB,kBAAkB,QAAgE;CAChG,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAO,2BAA2B,MAChC,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAC1D;;AAGH,SAAgB,iBAAiB,QAA8D;CAC7F,MAAM,MAAM,IAAI,IAAI,OAAO;AAC3B,QAAO,0BAA0B,MAAM,KAAK,MAAM,mBAAmB,IAAI,SAAS,UAAU,EAAE,CAAC,CAAC,CAAC"}
@@ -1,7 +1,6 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
1
+ require("../../_virtual/_rolldown/runtime.cjs");
2
2
  let _milaboratories_pl_client = require("@milaboratories/pl-client");
3
3
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
4
-
5
4
  //#region src/drivers/helpers/ls_storage_entry.ts
6
5
  /**
7
6
  * Gets a storage handle and gives an underlying data from it.
@@ -52,9 +51,9 @@ function storageType(name) {
52
51
  version: "1"
53
52
  };
54
53
  }
55
-
56
54
  //#endregion
57
55
  exports.createLocalStorageHandle = createLocalStorageHandle;
58
56
  exports.createRemoteStorageHandle = createRemoteStorageHandle;
59
57
  exports.parseStorageHandle = parseStorageHandle;
58
+
60
59
  //# sourceMappingURL=ls_storage_entry.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ls_storage_entry.cjs","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\n\nexport type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;\n\n/**\n * Gets a storage handle and gives an underlying data from it.\n */\nexport function parseStorageHandle(handle: sdk.StorageHandle): StorageHandleData {\n if (isRemoteStorageHandle(handle)) {\n return parseRemoteStorageHandle(handle);\n } else if (isLocalStorageHandle(handle)) {\n return parseLocalStorageHandle(handle);\n }\n\n assertNever(handle);\n}\n\n//\n// Local storage:\n//\n\nexport type LocalStorageHandleData = {\n isRemote: false;\n name: string;\n rootPath: string;\n};\n\nconst localHandleRegex = /^local:\\/\\/(?<name>.*)\\/(?<path>.*)$/;\n\nexport function isLocalStorageHandle(handle: sdk.StorageHandle): handle is sdk.StorageHandleLocal {\n return localHandleRegex.test(handle);\n}\n\nexport function createLocalStorageHandle(name: string, path: string): sdk.StorageHandleLocal {\n return `local://${name}/${encodeURIComponent(path)}`;\n}\n\nfunction parseLocalStorageHandle(handle: string): LocalStorageHandleData {\n const parsed = handle.match(localHandleRegex);\n if (parsed == null) throw new Error(`Local list handle wasn't parsed: ${handle}`);\n\n const { name, path } = parsed.groups!;\n\n return {\n rootPath: decodeURIComponent(path),\n name,\n isRemote: false,\n };\n}\n\n//\n// Remote storage:\n//\n\nexport type RemoteStorageHandleData = {\n isRemote: true;\n name: string;\n id: ResourceId;\n type: ResourceType;\n};\n\nconst remoteHandleRegex = /^remote:\\/\\/(?<name>.*)\\/(?<resourceId>.*)$/;\n\nexport function isRemoteStorageHandle(\n handle: sdk.StorageHandle,\n): handle is sdk.StorageHandleRemote {\n return remoteHandleRegex.test(handle);\n}\n\nexport function createRemoteStorageHandle(name: string, rId: ResourceId): sdk.StorageHandleRemote {\n return `remote://${name}/${BigInt(rId)}`;\n}\n\nfunction parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {\n const parsed = handle.match(remoteHandleRegex);\n if (parsed == null) throw new Error(`Remote list handle wasn't parsed: ${handle}`);\n const { name, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: storageType(name),\n name,\n isRemote: true,\n };\n}\n\nfunction storageType(name: string): ResourceType {\n return { name: `LS/${name}`, version: \"1\" };\n}\n"],"mappings":";;;;;;;;AAUA,SAAgB,mBAAmB,QAA8C;AAC/E,KAAI,sBAAsB,OAAO,CAC/B,QAAO,yBAAyB,OAAO;UAC9B,qBAAqB,OAAO,CACrC,QAAO,wBAAwB,OAAO;AAGxC,6CAAY,OAAO;;AAarB,MAAM,mBAAmB;AAEzB,SAAgB,qBAAqB,QAA6D;AAChG,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,yBAAyB,MAAc,MAAsC;AAC3F,QAAO,WAAW,KAAK,GAAG,mBAAmB,KAAK;;AAGpD,SAAS,wBAAwB,QAAwC;CACvE,MAAM,SAAS,OAAO,MAAM,iBAAiB;AAC7C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,SAAS;CAEjF,MAAM,EAAE,MAAM,SAAS,OAAO;AAE9B,QAAO;EACL,UAAU,mBAAmB,KAAK;EAClC;EACA,UAAU;EACX;;AAcH,MAAM,oBAAoB;AAE1B,SAAgB,sBACd,QACmC;AACnC,QAAO,kBAAkB,KAAK,OAAO;;AAGvC,SAAgB,0BAA0B,MAAc,KAA0C;AAChG,QAAO,YAAY,KAAK,GAAG,OAAO,IAAI;;AAGxC,SAAS,yBAAyB,QAAyC;CACzE,MAAM,SAAS,OAAO,MAAM,kBAAkB;AAC9C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,qCAAqC,SAAS;CAClF,MAAM,EAAE,MAAM,eAAe,OAAO;AAEpC,QAAO;EACL,sDAAuB,OAAO,WAAW,CAAC;EAC1C,MAAM,YAAY,KAAK;EACvB;EACA,UAAU;EACX;;AAGH,SAAS,YAAY,MAA4B;AAC/C,QAAO;EAAE,MAAM,MAAM;EAAQ,SAAS;EAAK"}
1
+ {"version":3,"file":"ls_storage_entry.cjs","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\n\nexport type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;\n\n/**\n * Gets a storage handle and gives an underlying data from it.\n */\nexport function parseStorageHandle(handle: sdk.StorageHandle): StorageHandleData {\n if (isRemoteStorageHandle(handle)) {\n return parseRemoteStorageHandle(handle);\n } else if (isLocalStorageHandle(handle)) {\n return parseLocalStorageHandle(handle);\n }\n\n assertNever(handle);\n}\n\n//\n// Local storage:\n//\n\nexport type LocalStorageHandleData = {\n isRemote: false;\n name: string;\n rootPath: string;\n};\n\nconst localHandleRegex = /^local:\\/\\/(?<name>.*)\\/(?<path>.*)$/;\n\nexport function isLocalStorageHandle(handle: sdk.StorageHandle): handle is sdk.StorageHandleLocal {\n return localHandleRegex.test(handle);\n}\n\nexport function createLocalStorageHandle(name: string, path: string): sdk.StorageHandleLocal {\n return `local://${name}/${encodeURIComponent(path)}`;\n}\n\nfunction parseLocalStorageHandle(handle: string): LocalStorageHandleData {\n const parsed = handle.match(localHandleRegex);\n if (parsed == null) throw new Error(`Local list handle wasn't parsed: ${handle}`);\n\n const { name, path } = parsed.groups!;\n\n return {\n rootPath: decodeURIComponent(path),\n name,\n isRemote: false,\n };\n}\n\n//\n// Remote storage:\n//\n\nexport type RemoteStorageHandleData = {\n isRemote: true;\n name: string;\n id: ResourceId;\n type: ResourceType;\n};\n\nconst remoteHandleRegex = /^remote:\\/\\/(?<name>.*)\\/(?<resourceId>.*)$/;\n\nexport function isRemoteStorageHandle(\n handle: sdk.StorageHandle,\n): handle is sdk.StorageHandleRemote {\n return remoteHandleRegex.test(handle);\n}\n\nexport function createRemoteStorageHandle(name: string, rId: ResourceId): sdk.StorageHandleRemote {\n return `remote://${name}/${BigInt(rId)}`;\n}\n\nfunction parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {\n const parsed = handle.match(remoteHandleRegex);\n if (parsed == null) throw new Error(`Remote list handle wasn't parsed: ${handle}`);\n const { name, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: storageType(name),\n name,\n isRemote: true,\n };\n}\n\nfunction storageType(name: string): ResourceType {\n return { name: `LS/${name}`, version: \"1\" };\n}\n"],"mappings":";;;;;;;AAUA,SAAgB,mBAAmB,QAA8C;AAC/E,KAAI,sBAAsB,OAAO,CAC/B,QAAO,yBAAyB,OAAO;UAC9B,qBAAqB,OAAO,CACrC,QAAO,wBAAwB,OAAO;AAGxC,EAAA,GAAA,2BAAA,aAAY,OAAO;;AAarB,MAAM,mBAAmB;AAEzB,SAAgB,qBAAqB,QAA6D;AAChG,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,yBAAyB,MAAc,MAAsC;AAC3F,QAAO,WAAW,KAAK,GAAG,mBAAmB,KAAK;;AAGpD,SAAS,wBAAwB,QAAwC;CACvE,MAAM,SAAS,OAAO,MAAM,iBAAiB;AAC7C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,SAAS;CAEjF,MAAM,EAAE,MAAM,SAAS,OAAO;AAE9B,QAAO;EACL,UAAU,mBAAmB,KAAK;EAClC;EACA,UAAU;EACX;;AAcH,MAAM,oBAAoB;AAE1B,SAAgB,sBACd,QACmC;AACnC,QAAO,kBAAkB,KAAK,OAAO;;AAGvC,SAAgB,0BAA0B,MAAc,KAA0C;AAChG,QAAO,YAAY,KAAK,GAAG,OAAO,IAAI;;AAGxC,SAAS,yBAAyB,QAAyC;CACzE,MAAM,SAAS,OAAO,MAAM,kBAAkB;AAC9C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,qCAAqC,SAAS;CAClF,MAAM,EAAE,MAAM,eAAe,OAAO;AAEpC,QAAO;EACL,KAAA,GAAA,0BAAA,oBAAuB,OAAO,WAAW,CAAC;EAC1C,MAAM,YAAY,KAAK;EACvB;EACA,UAAU;EACX;;AAGH,SAAS,YAAY,MAA4B;AAC/C,QAAO;EAAE,MAAM,MAAM;EAAQ,SAAS;EAAK"}
@@ -1,6 +1,5 @@
1
1
  import { bigintToResourceId } from "@milaboratories/pl-client";
2
2
  import { assertNever } from "@milaboratories/ts-helpers";
3
-
4
3
  //#region src/drivers/helpers/ls_storage_entry.ts
5
4
  /**
6
5
  * Gets a storage handle and gives an underlying data from it.
@@ -51,7 +50,7 @@ function storageType(name) {
51
50
  version: "1"
52
51
  };
53
52
  }
54
-
55
53
  //#endregion
56
54
  export { createLocalStorageHandle, createRemoteStorageHandle, parseStorageHandle };
55
+
57
56
  //# sourceMappingURL=ls_storage_entry.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ls_storage_entry.js","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\n\nexport type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;\n\n/**\n * Gets a storage handle and gives an underlying data from it.\n */\nexport function parseStorageHandle(handle: sdk.StorageHandle): StorageHandleData {\n if (isRemoteStorageHandle(handle)) {\n return parseRemoteStorageHandle(handle);\n } else if (isLocalStorageHandle(handle)) {\n return parseLocalStorageHandle(handle);\n }\n\n assertNever(handle);\n}\n\n//\n// Local storage:\n//\n\nexport type LocalStorageHandleData = {\n isRemote: false;\n name: string;\n rootPath: string;\n};\n\nconst localHandleRegex = /^local:\\/\\/(?<name>.*)\\/(?<path>.*)$/;\n\nexport function isLocalStorageHandle(handle: sdk.StorageHandle): handle is sdk.StorageHandleLocal {\n return localHandleRegex.test(handle);\n}\n\nexport function createLocalStorageHandle(name: string, path: string): sdk.StorageHandleLocal {\n return `local://${name}/${encodeURIComponent(path)}`;\n}\n\nfunction parseLocalStorageHandle(handle: string): LocalStorageHandleData {\n const parsed = handle.match(localHandleRegex);\n if (parsed == null) throw new Error(`Local list handle wasn't parsed: ${handle}`);\n\n const { name, path } = parsed.groups!;\n\n return {\n rootPath: decodeURIComponent(path),\n name,\n isRemote: false,\n };\n}\n\n//\n// Remote storage:\n//\n\nexport type RemoteStorageHandleData = {\n isRemote: true;\n name: string;\n id: ResourceId;\n type: ResourceType;\n};\n\nconst remoteHandleRegex = /^remote:\\/\\/(?<name>.*)\\/(?<resourceId>.*)$/;\n\nexport function isRemoteStorageHandle(\n handle: sdk.StorageHandle,\n): handle is sdk.StorageHandleRemote {\n return remoteHandleRegex.test(handle);\n}\n\nexport function createRemoteStorageHandle(name: string, rId: ResourceId): sdk.StorageHandleRemote {\n return `remote://${name}/${BigInt(rId)}`;\n}\n\nfunction parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {\n const parsed = handle.match(remoteHandleRegex);\n if (parsed == null) throw new Error(`Remote list handle wasn't parsed: ${handle}`);\n const { name, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: storageType(name),\n name,\n isRemote: true,\n };\n}\n\nfunction storageType(name: string): ResourceType {\n return { name: `LS/${name}`, version: \"1\" };\n}\n"],"mappings":";;;;;;;AAUA,SAAgB,mBAAmB,QAA8C;AAC/E,KAAI,sBAAsB,OAAO,CAC/B,QAAO,yBAAyB,OAAO;UAC9B,qBAAqB,OAAO,CACrC,QAAO,wBAAwB,OAAO;AAGxC,aAAY,OAAO;;AAarB,MAAM,mBAAmB;AAEzB,SAAgB,qBAAqB,QAA6D;AAChG,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,yBAAyB,MAAc,MAAsC;AAC3F,QAAO,WAAW,KAAK,GAAG,mBAAmB,KAAK;;AAGpD,SAAS,wBAAwB,QAAwC;CACvE,MAAM,SAAS,OAAO,MAAM,iBAAiB;AAC7C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,SAAS;CAEjF,MAAM,EAAE,MAAM,SAAS,OAAO;AAE9B,QAAO;EACL,UAAU,mBAAmB,KAAK;EAClC;EACA,UAAU;EACX;;AAcH,MAAM,oBAAoB;AAE1B,SAAgB,sBACd,QACmC;AACnC,QAAO,kBAAkB,KAAK,OAAO;;AAGvC,SAAgB,0BAA0B,MAAc,KAA0C;AAChG,QAAO,YAAY,KAAK,GAAG,OAAO,IAAI;;AAGxC,SAAS,yBAAyB,QAAyC;CACzE,MAAM,SAAS,OAAO,MAAM,kBAAkB;AAC9C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,qCAAqC,SAAS;CAClF,MAAM,EAAE,MAAM,eAAe,OAAO;AAEpC,QAAO;EACL,IAAI,mBAAmB,OAAO,WAAW,CAAC;EAC1C,MAAM,YAAY,KAAK;EACvB;EACA,UAAU;EACX;;AAGH,SAAS,YAAY,MAA4B;AAC/C,QAAO;EAAE,MAAM,MAAM;EAAQ,SAAS;EAAK"}
1
+ {"version":3,"file":"ls_storage_entry.js","names":[],"sources":["../../../src/drivers/helpers/ls_storage_entry.ts"],"sourcesContent":["import type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport { bigintToResourceId } from \"@milaboratories/pl-client\";\nimport { assertNever } from \"@milaboratories/ts-helpers\";\n\nexport type StorageHandleData = RemoteStorageHandleData | LocalStorageHandleData;\n\n/**\n * Gets a storage handle and gives an underlying data from it.\n */\nexport function parseStorageHandle(handle: sdk.StorageHandle): StorageHandleData {\n if (isRemoteStorageHandle(handle)) {\n return parseRemoteStorageHandle(handle);\n } else if (isLocalStorageHandle(handle)) {\n return parseLocalStorageHandle(handle);\n }\n\n assertNever(handle);\n}\n\n//\n// Local storage:\n//\n\nexport type LocalStorageHandleData = {\n isRemote: false;\n name: string;\n rootPath: string;\n};\n\nconst localHandleRegex = /^local:\\/\\/(?<name>.*)\\/(?<path>.*)$/;\n\nexport function isLocalStorageHandle(handle: sdk.StorageHandle): handle is sdk.StorageHandleLocal {\n return localHandleRegex.test(handle);\n}\n\nexport function createLocalStorageHandle(name: string, path: string): sdk.StorageHandleLocal {\n return `local://${name}/${encodeURIComponent(path)}`;\n}\n\nfunction parseLocalStorageHandle(handle: string): LocalStorageHandleData {\n const parsed = handle.match(localHandleRegex);\n if (parsed == null) throw new Error(`Local list handle wasn't parsed: ${handle}`);\n\n const { name, path } = parsed.groups!;\n\n return {\n rootPath: decodeURIComponent(path),\n name,\n isRemote: false,\n };\n}\n\n//\n// Remote storage:\n//\n\nexport type RemoteStorageHandleData = {\n isRemote: true;\n name: string;\n id: ResourceId;\n type: ResourceType;\n};\n\nconst remoteHandleRegex = /^remote:\\/\\/(?<name>.*)\\/(?<resourceId>.*)$/;\n\nexport function isRemoteStorageHandle(\n handle: sdk.StorageHandle,\n): handle is sdk.StorageHandleRemote {\n return remoteHandleRegex.test(handle);\n}\n\nexport function createRemoteStorageHandle(name: string, rId: ResourceId): sdk.StorageHandleRemote {\n return `remote://${name}/${BigInt(rId)}`;\n}\n\nfunction parseRemoteStorageHandle(handle: string): RemoteStorageHandleData {\n const parsed = handle.match(remoteHandleRegex);\n if (parsed == null) throw new Error(`Remote list handle wasn't parsed: ${handle}`);\n const { name, resourceId } = parsed.groups!;\n\n return {\n id: bigintToResourceId(BigInt(resourceId)),\n type: storageType(name),\n name,\n isRemote: true,\n };\n}\n\nfunction storageType(name: string): ResourceType {\n return { name: `LS/${name}`, version: \"1\" };\n}\n"],"mappings":";;;;;;AAUA,SAAgB,mBAAmB,QAA8C;AAC/E,KAAI,sBAAsB,OAAO,CAC/B,QAAO,yBAAyB,OAAO;UAC9B,qBAAqB,OAAO,CACrC,QAAO,wBAAwB,OAAO;AAGxC,aAAY,OAAO;;AAarB,MAAM,mBAAmB;AAEzB,SAAgB,qBAAqB,QAA6D;AAChG,QAAO,iBAAiB,KAAK,OAAO;;AAGtC,SAAgB,yBAAyB,MAAc,MAAsC;AAC3F,QAAO,WAAW,KAAK,GAAG,mBAAmB,KAAK;;AAGpD,SAAS,wBAAwB,QAAwC;CACvE,MAAM,SAAS,OAAO,MAAM,iBAAiB;AAC7C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,oCAAoC,SAAS;CAEjF,MAAM,EAAE,MAAM,SAAS,OAAO;AAE9B,QAAO;EACL,UAAU,mBAAmB,KAAK;EAClC;EACA,UAAU;EACX;;AAcH,MAAM,oBAAoB;AAE1B,SAAgB,sBACd,QACmC;AACnC,QAAO,kBAAkB,KAAK,OAAO;;AAGvC,SAAgB,0BAA0B,MAAc,KAA0C;AAChG,QAAO,YAAY,KAAK,GAAG,OAAO,IAAI;;AAGxC,SAAS,yBAAyB,QAAyC;CACzE,MAAM,SAAS,OAAO,MAAM,kBAAkB;AAC9C,KAAI,UAAU,KAAM,OAAM,IAAI,MAAM,qCAAqC,SAAS;CAClF,MAAM,EAAE,MAAM,eAAe,OAAO;AAEpC,QAAO;EACL,IAAI,mBAAmB,OAAO,WAAW,CAAC;EAC1C,MAAM,YAAY,KAAK;EACvB;EACA,UAAU;EACX;;AAGH,SAAS,YAAY,MAA4B;AAC/C,QAAO;EAAE,MAAM,MAAM;EAAQ,SAAS;EAAK"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polling_ops.d.ts","names":[],"sources":["../../../src/drivers/helpers/polling_ops.ts"],"mappings":";;KACY,UAAA;EAAU,6EAEpB,eAAA;EAEA,gBAAA;AAAA"}
@@ -1,11 +1,10 @@
1
- const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
1
+ const require_runtime = require("../../_virtual/_rolldown/runtime.cjs");
2
2
  let node_fs_promises = require("node:fs/promises");
3
3
  node_fs_promises = require_runtime.__toESM(node_fs_promises);
4
4
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
5
5
  let node_fs = require("node:fs");
6
6
  node_fs = require_runtime.__toESM(node_fs);
7
7
  let node_stream = require("node:stream");
8
-
9
8
  //#region src/drivers/helpers/read_file.ts
10
9
  const fileReadLimiter = new _milaboratories_ts_helpers.ConcurrencyLimitingExecutor(32);
11
10
  /**
@@ -33,7 +32,7 @@ async function withFileContent({ path, range, signal, handler }) {
33
32
  }
34
33
  });
35
34
  }
36
-
37
35
  //#endregion
38
36
  exports.withFileContent = withFileContent;
37
+
39
38
  //# sourceMappingURL=read_file.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"read_file.cjs","names":["ConcurrencyLimitingExecutor","fsp","fs","Readable"],"sources":["../../../src/drivers/helpers/read_file.ts"],"sourcesContent":["import { ConcurrencyLimitingExecutor } from \"@milaboratories/ts-helpers\";\nimport type { RangeBytes } from \"@milaboratories/pl-model-common\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport { Readable } from \"node:stream\";\n\n// Global concurrency limiter for file reads - limit to 32 parallel reads\nconst fileReadLimiter = new ConcurrencyLimitingExecutor(32);\n\n/**\n * Reads file content with concurrency limiting and proper error handling.\n * Ensures file descriptors are properly cleaned up even in error cases.\n */\nexport async function withFileContent<T>({\n path,\n range,\n signal,\n handler,\n}: {\n path: string;\n range?: RangeBytes;\n signal?: AbortSignal;\n handler: (content: ReadableStream, size: number) => Promise<T>;\n}): Promise<T> {\n return await fileReadLimiter.run(async () => {\n const readOps = {\n start: range?.from,\n end: range?.to !== undefined ? range.to - 1 : undefined,\n signal: signal,\n };\n let stream: fs.ReadStream | undefined;\n let handlerSuccess = false;\n\n try {\n const stat = await fsp.stat(path);\n stream = fs.createReadStream(path, readOps);\n const webStream = Readable.toWeb(stream);\n\n const result = await handler(webStream, stat.size);\n handlerSuccess = true;\n return result;\n } catch (error) {\n // Cleanup on error (including handler errors)\n if (!handlerSuccess && stream && !stream.destroyed) {\n stream.destroy();\n }\n throw error;\n }\n });\n}\n"],"mappings":";;;;;;;;;AAOA,MAAM,kBAAkB,IAAIA,uDAA4B,GAAG;;;;;AAM3D,eAAsB,gBAAmB,EACvC,MACA,OACA,QACA,WAMa;AACb,QAAO,MAAM,gBAAgB,IAAI,YAAY;EAC3C,MAAM,UAAU;GACd,OAAO,OAAO;GACd,KAAK,OAAO,OAAO,SAAY,MAAM,KAAK,IAAI;GACtC;GACT;EACD,IAAI;EACJ,IAAI,iBAAiB;AAErB,MAAI;GACF,MAAM,OAAO,MAAMC,iBAAI,KAAK,KAAK;AACjC,YAASC,QAAG,iBAAiB,MAAM,QAAQ;GAG3C,MAAM,SAAS,MAAM,QAFHC,qBAAS,MAAM,OAAO,EAEA,KAAK,KAAK;AAClD,oBAAiB;AACjB,UAAO;WACA,OAAO;AAEd,OAAI,CAAC,kBAAkB,UAAU,CAAC,OAAO,UACvC,QAAO,SAAS;AAElB,SAAM;;GAER"}
1
+ {"version":3,"file":"read_file.cjs","names":["ConcurrencyLimitingExecutor","fsp","fs","Readable"],"sources":["../../../src/drivers/helpers/read_file.ts"],"sourcesContent":["import { ConcurrencyLimitingExecutor } from \"@milaboratories/ts-helpers\";\nimport type { RangeBytes } from \"@milaboratories/pl-model-common\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport { Readable } from \"node:stream\";\n\n// Global concurrency limiter for file reads - limit to 32 parallel reads\nconst fileReadLimiter = new ConcurrencyLimitingExecutor(32);\n\n/**\n * Reads file content with concurrency limiting and proper error handling.\n * Ensures file descriptors are properly cleaned up even in error cases.\n */\nexport async function withFileContent<T>({\n path,\n range,\n signal,\n handler,\n}: {\n path: string;\n range?: RangeBytes;\n signal?: AbortSignal;\n handler: (content: ReadableStream, size: number) => Promise<T>;\n}): Promise<T> {\n return await fileReadLimiter.run(async () => {\n const readOps = {\n start: range?.from,\n end: range?.to !== undefined ? range.to - 1 : undefined,\n signal: signal,\n };\n let stream: fs.ReadStream | undefined;\n let handlerSuccess = false;\n\n try {\n const stat = await fsp.stat(path);\n stream = fs.createReadStream(path, readOps);\n const webStream = Readable.toWeb(stream);\n\n const result = await handler(webStream, stat.size);\n handlerSuccess = true;\n return result;\n } catch (error) {\n // Cleanup on error (including handler errors)\n if (!handlerSuccess && stream && !stream.destroyed) {\n stream.destroy();\n }\n throw error;\n }\n });\n}\n"],"mappings":";;;;;;;;AAOA,MAAM,kBAAkB,IAAIA,2BAAAA,4BAA4B,GAAG;;;;;AAM3D,eAAsB,gBAAmB,EACvC,MACA,OACA,QACA,WAMa;AACb,QAAO,MAAM,gBAAgB,IAAI,YAAY;EAC3C,MAAM,UAAU;GACd,OAAO,OAAO;GACd,KAAK,OAAO,OAAO,KAAA,IAAY,MAAM,KAAK,IAAI,KAAA;GACtC;GACT;EACD,IAAI;EACJ,IAAI,iBAAiB;AAErB,MAAI;GACF,MAAM,OAAO,MAAMC,iBAAI,KAAK,KAAK;AACjC,YAASC,QAAG,iBAAiB,MAAM,QAAQ;GAG3C,MAAM,SAAS,MAAM,QAFHC,YAAAA,SAAS,MAAM,OAAO,EAEA,KAAK,KAAK;AAClD,oBAAiB;AACjB,UAAO;WACA,OAAO;AAEd,OAAI,CAAC,kBAAkB,UAAU,CAAC,OAAO,UACvC,QAAO,SAAS;AAElB,SAAM;;GAER"}
@@ -2,7 +2,6 @@ import * as fsp from "node:fs/promises";
2
2
  import { ConcurrencyLimitingExecutor } from "@milaboratories/ts-helpers";
3
3
  import * as fs$1 from "node:fs";
4
4
  import { Readable } from "node:stream";
5
-
6
5
  //#region src/drivers/helpers/read_file.ts
7
6
  const fileReadLimiter = new ConcurrencyLimitingExecutor(32);
8
7
  /**
@@ -30,7 +29,7 @@ async function withFileContent({ path, range, signal, handler }) {
30
29
  }
31
30
  });
32
31
  }
33
-
34
32
  //#endregion
35
33
  export { withFileContent };
34
+
36
35
  //# sourceMappingURL=read_file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"read_file.js","names":["fs"],"sources":["../../../src/drivers/helpers/read_file.ts"],"sourcesContent":["import { ConcurrencyLimitingExecutor } from \"@milaboratories/ts-helpers\";\nimport type { RangeBytes } from \"@milaboratories/pl-model-common\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport { Readable } from \"node:stream\";\n\n// Global concurrency limiter for file reads - limit to 32 parallel reads\nconst fileReadLimiter = new ConcurrencyLimitingExecutor(32);\n\n/**\n * Reads file content with concurrency limiting and proper error handling.\n * Ensures file descriptors are properly cleaned up even in error cases.\n */\nexport async function withFileContent<T>({\n path,\n range,\n signal,\n handler,\n}: {\n path: string;\n range?: RangeBytes;\n signal?: AbortSignal;\n handler: (content: ReadableStream, size: number) => Promise<T>;\n}): Promise<T> {\n return await fileReadLimiter.run(async () => {\n const readOps = {\n start: range?.from,\n end: range?.to !== undefined ? range.to - 1 : undefined,\n signal: signal,\n };\n let stream: fs.ReadStream | undefined;\n let handlerSuccess = false;\n\n try {\n const stat = await fsp.stat(path);\n stream = fs.createReadStream(path, readOps);\n const webStream = Readable.toWeb(stream);\n\n const result = await handler(webStream, stat.size);\n handlerSuccess = true;\n return result;\n } catch (error) {\n // Cleanup on error (including handler errors)\n if (!handlerSuccess && stream && !stream.destroyed) {\n stream.destroy();\n }\n throw error;\n }\n });\n}\n"],"mappings":";;;;;;AAOA,MAAM,kBAAkB,IAAI,4BAA4B,GAAG;;;;;AAM3D,eAAsB,gBAAmB,EACvC,MACA,OACA,QACA,WAMa;AACb,QAAO,MAAM,gBAAgB,IAAI,YAAY;EAC3C,MAAM,UAAU;GACd,OAAO,OAAO;GACd,KAAK,OAAO,OAAO,SAAY,MAAM,KAAK,IAAI;GACtC;GACT;EACD,IAAI;EACJ,IAAI,iBAAiB;AAErB,MAAI;GACF,MAAM,OAAO,MAAM,IAAI,KAAK,KAAK;AACjC,YAASA,KAAG,iBAAiB,MAAM,QAAQ;GAG3C,MAAM,SAAS,MAAM,QAFH,SAAS,MAAM,OAAO,EAEA,KAAK,KAAK;AAClD,oBAAiB;AACjB,UAAO;WACA,OAAO;AAEd,OAAI,CAAC,kBAAkB,UAAU,CAAC,OAAO,UACvC,QAAO,SAAS;AAElB,SAAM;;GAER"}
1
+ {"version":3,"file":"read_file.js","names":["fs"],"sources":["../../../src/drivers/helpers/read_file.ts"],"sourcesContent":["import { ConcurrencyLimitingExecutor } from \"@milaboratories/ts-helpers\";\nimport type { RangeBytes } from \"@milaboratories/pl-model-common\";\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport { Readable } from \"node:stream\";\n\n// Global concurrency limiter for file reads - limit to 32 parallel reads\nconst fileReadLimiter = new ConcurrencyLimitingExecutor(32);\n\n/**\n * Reads file content with concurrency limiting and proper error handling.\n * Ensures file descriptors are properly cleaned up even in error cases.\n */\nexport async function withFileContent<T>({\n path,\n range,\n signal,\n handler,\n}: {\n path: string;\n range?: RangeBytes;\n signal?: AbortSignal;\n handler: (content: ReadableStream, size: number) => Promise<T>;\n}): Promise<T> {\n return await fileReadLimiter.run(async () => {\n const readOps = {\n start: range?.from,\n end: range?.to !== undefined ? range.to - 1 : undefined,\n signal: signal,\n };\n let stream: fs.ReadStream | undefined;\n let handlerSuccess = false;\n\n try {\n const stat = await fsp.stat(path);\n stream = fs.createReadStream(path, readOps);\n const webStream = Readable.toWeb(stream);\n\n const result = await handler(webStream, stat.size);\n handlerSuccess = true;\n return result;\n } catch (error) {\n // Cleanup on error (including handler errors)\n if (!handlerSuccess && stream && !stream.destroyed) {\n stream.destroy();\n }\n throw error;\n }\n });\n}\n"],"mappings":";;;;;AAOA,MAAM,kBAAkB,IAAI,4BAA4B,GAAG;;;;;AAM3D,eAAsB,gBAAmB,EACvC,MACA,OACA,QACA,WAMa;AACb,QAAO,MAAM,gBAAgB,IAAI,YAAY;EAC3C,MAAM,UAAU;GACd,OAAO,OAAO;GACd,KAAK,OAAO,OAAO,KAAA,IAAY,MAAM,KAAK,IAAI,KAAA;GACtC;GACT;EACD,IAAI;EACJ,IAAI,iBAAiB;AAErB,MAAI;GACF,MAAM,OAAO,MAAM,IAAI,KAAK,KAAK;AACjC,YAASA,KAAG,iBAAiB,MAAM,QAAQ;GAG3C,MAAM,SAAS,MAAM,QAFH,SAAS,MAAM,OAAO,EAEA,KAAK,KAAK;AAClD,oBAAiB;AACjB,UAAO;WACA,OAAO;AAEd,OAAI,CAAC,kBAAkB,UAAU,CAAC,OAAO,UACvC,QAAO,SAAS;AAElB,SAAM;;GAER"}
@@ -1,8 +1,7 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_logs_handle = require('./helpers/logs_handle.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_logs_handle = require("./helpers/logs_handle.cjs");
3
3
  let _milaboratories_pl_client = require("@milaboratories/pl-client");
4
4
  let _milaboratories_computable = require("@milaboratories/computable");
5
-
6
5
  //#region src/drivers/logs.ts
7
6
  var LogsDriver = class {
8
7
  constructor(logger, logsStreamDriver, downloadDriver) {
@@ -95,7 +94,7 @@ function isBlob(rInfo) {
95
94
  function streamManagerGetStream(ctx, manager) {
96
95
  return ctx.accessor(manager).node().traverse("stream")?.resourceInfo;
97
96
  }
98
-
99
97
  //#endregion
100
98
  exports.LogsDriver = LogsDriver;
99
+
101
100
  //# sourceMappingURL=logs.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.cjs","names":["Computable","isLiveLogHandle"],"sources":["../../src/drivers/logs.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type { LogsStreamDriver } from \"./logs_stream\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { DownloadDriver } from \"./download_blob/download_blob\";\nimport { isLiveLogHandle } from \"./helpers/logs_handle\";\nimport { isNotFoundError } from \"@milaboratories/pl-client\";\n\nexport class LogsDriver implements sdk.LogsDriver {\n constructor(\n private readonly logger: MiLogger,\n private readonly logsStreamDriver: LogsStreamDriver,\n private readonly downloadDriver: DownloadDriver,\n ) {}\n\n /** Returns all logs and schedules a job that reads remain logs.\n * Notifies when a new portion of the log appeared. */\n getLastLogs(res: PlTreeEntry, lines: number): Computable<string | undefined>;\n getLastLogs(res: PlTreeEntry, lines: number, ctx: ComputableCtx): Computable<string | undefined>;\n getLastLogs(\n res: PlTreeEntry,\n lines: number,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLastLogs(res, lines, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLastLogs(stream, lines, ctx);\n\n try {\n return this.logsStreamDriver.getLastLogs(stream, lines, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting last logs: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLog(res: PlTreeEntry, patternToSearch: string): Computable<string | undefined>;\n getProgressLog(res: PlTreeEntry, patternToSearch: string, ctx: ComputableCtx): string | undefined;\n getProgressLog(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLog(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n\n try {\n return this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting a progress log: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Same as getProgressLog but also returns a liveliness of the log.\n * The previous getProgressLog couldn't be extended.\n * Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ): Computable<sdk.ProgressLogWithInfo | undefined>;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx: ComputableCtx,\n ): sdk.ProgressLogWithInfo | undefined;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<sdk.ProgressLogWithInfo | undefined> | sdk.ProgressLogWithInfo | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLogWithInfo(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) {\n const log = this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: false,\n };\n }\n\n try {\n const log = this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: true,\n };\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(\n `NOT_FOUND in logs stream driver while getting a progress log with info: ${e}`,\n );\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns an Id of a smart object, that can read logs directly from\n * the platform. */\n getLogHandle(res: ResourceInfo | PlTreeEntry): Computable<sdk.AnyLogHandle | undefined>;\n getLogHandle(res: PlTreeEntry, ctx: ComputableCtx): sdk.AnyLogHandle | undefined;\n getLogHandle(\n res: PlTreeEntry,\n ctx?: ComputableCtx,\n ): Computable<sdk.AnyLogHandle | undefined> | sdk.AnyLogHandle | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLogHandle(res, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLogHandle(stream, ctx);\n\n return this.logsStreamDriver.getLogHandle(stream, ctx);\n }\n\n async lastLines(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n }\n\n async readText(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.readText(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.readText(handle, lineCount, offsetBytes, searchStr);\n }\n}\n\nfunction isBlob(rInfo: ResourceInfo) {\n return !rInfo.type.name.startsWith(\"StreamWorkdir\");\n}\n\nfunction streamManagerGetStream(ctx: ComputableCtx, manager: PlTreeEntry) {\n return ctx.accessor(manager).node().traverse(\"stream\")?.resourceInfo;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs.cjs","names":["Computable","isLiveLogHandle"],"sources":["../../src/drivers/logs.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type { LogsStreamDriver } from \"./logs_stream\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { DownloadDriver } from \"./download_blob/download_blob\";\nimport { isLiveLogHandle } from \"./helpers/logs_handle\";\nimport { isNotFoundError } from \"@milaboratories/pl-client\";\n\nexport class LogsDriver implements sdk.LogsDriver {\n constructor(\n private readonly logger: MiLogger,\n private readonly logsStreamDriver: LogsStreamDriver,\n private readonly downloadDriver: DownloadDriver,\n ) {}\n\n /** Returns all logs and schedules a job that reads remain logs.\n * Notifies when a new portion of the log appeared. */\n getLastLogs(res: PlTreeEntry, lines: number): Computable<string | undefined>;\n getLastLogs(res: PlTreeEntry, lines: number, ctx: ComputableCtx): Computable<string | undefined>;\n getLastLogs(\n res: PlTreeEntry,\n lines: number,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLastLogs(res, lines, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLastLogs(stream, lines, ctx);\n\n try {\n return this.logsStreamDriver.getLastLogs(stream, lines, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting last logs: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLog(res: PlTreeEntry, patternToSearch: string): Computable<string | undefined>;\n getProgressLog(res: PlTreeEntry, patternToSearch: string, ctx: ComputableCtx): string | undefined;\n getProgressLog(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLog(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n\n try {\n return this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting a progress log: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Same as getProgressLog but also returns a liveliness of the log.\n * The previous getProgressLog couldn't be extended.\n * Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ): Computable<sdk.ProgressLogWithInfo | undefined>;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx: ComputableCtx,\n ): sdk.ProgressLogWithInfo | undefined;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<sdk.ProgressLogWithInfo | undefined> | sdk.ProgressLogWithInfo | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLogWithInfo(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) {\n const log = this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: false,\n };\n }\n\n try {\n const log = this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: true,\n };\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(\n `NOT_FOUND in logs stream driver while getting a progress log with info: ${e}`,\n );\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns an Id of a smart object, that can read logs directly from\n * the platform. */\n getLogHandle(res: ResourceInfo | PlTreeEntry): Computable<sdk.AnyLogHandle | undefined>;\n getLogHandle(res: PlTreeEntry, ctx: ComputableCtx): sdk.AnyLogHandle | undefined;\n getLogHandle(\n res: PlTreeEntry,\n ctx?: ComputableCtx,\n ): Computable<sdk.AnyLogHandle | undefined> | sdk.AnyLogHandle | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLogHandle(res, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLogHandle(stream, ctx);\n\n return this.logsStreamDriver.getLogHandle(stream, ctx);\n }\n\n async lastLines(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n }\n\n async readText(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.readText(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.readText(handle, lineCount, offsetBytes, searchStr);\n }\n}\n\nfunction isBlob(rInfo: ResourceInfo) {\n return !rInfo.type.name.startsWith(\"StreamWorkdir\");\n}\n\nfunction streamManagerGetStream(ctx: ComputableCtx, manager: PlTreeEntry) {\n return ctx.accessor(manager).node().traverse(\"stream\")?.resourceInfo;\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs.d.ts","names":[],"sources":["../../src/drivers/logs.ts"],"mappings":";;;;;;;;cAUa,UAAA,YAAsB,GAAA,CAAI,UAAA;EAAA,iBAElB,MAAA;EAAA,iBACA,gBAAA;EAAA,iBACA,cAAA;cAFA,MAAA,EAAQ,QAAA,EACR,gBAAA,EAAkB,gBAAA,EAClB,cAAA,EAAgB,cAAA;EADE;;EAMrC,WAAA,CAAY,GAAA,EAAK,WAAA,EAAa,KAAA,WAAgB,UAAA;EAC9C,WAAA,CAAY,GAAA,EAAK,WAAA,EAAa,KAAA,UAAe,GAAA,EAAK,aAAA,GAAgB,UAAA;EAAjD;;EA6BjB,cAAA,CAAe,GAAA,EAAK,WAAA,EAAa,eAAA,WAA0B,UAAA;EAC3D,cAAA,CAAe,GAAA,EAAK,WAAA,EAAa,eAAA,UAAyB,GAAA,EAAK,aAAA;EADJ;;;;EAiC3D,sBAAA,CACE,GAAA,EAAK,WAAA,EACL,eAAA,WACC,UAAA,CAAW,GAAA,CAAI,mBAAA;EAClB,sBAAA,CACE,GAAA,EAAK,WAAA,EACL,eAAA,UACA,GAAA,EAAK,aAAA,GACJ,GAAA,CAAI,mBAAA;EAHA;;EA6CP,YAAA,CAAa,GAAA,EAAK,YAAA,GAAe,WAAA,GAAc,UAAA,CAAW,GAAA,CAAI,YAAA;EAC9D,YAAA,CAAa,GAAA,EAAK,WAAA,EAAa,GAAA,EAAK,aAAA,GAAgB,GAAA,CAAI,YAAA;EAkBlD,SAAA,CACJ,MAAA,EAAQ,GAAA,CAAI,YAAA,EACZ,SAAA,UACA,WAAA,WACA,SAAA,YACC,OAAA,CAAQ,GAAA,CAAI,oBAAA;EAMT,QAAA,CACJ,MAAA,EAAQ,GAAA,CAAI,YAAA,EACZ,SAAA,UACA,WAAA,WACA,SAAA,YACC,OAAA,CAAQ,GAAA,CAAI,oBAAA;AAAA"}
@@ -1,7 +1,6 @@
1
1
  import { isLiveLogHandle } from "./helpers/logs_handle.js";
2
2
  import { isNotFoundError } from "@milaboratories/pl-client";
3
3
  import { Computable } from "@milaboratories/computable";
4
-
5
4
  //#region src/drivers/logs.ts
6
5
  var LogsDriver = class {
7
6
  constructor(logger, logsStreamDriver, downloadDriver) {
@@ -94,7 +93,7 @@ function isBlob(rInfo) {
94
93
  function streamManagerGetStream(ctx, manager) {
95
94
  return ctx.accessor(manager).node().traverse("stream")?.resourceInfo;
96
95
  }
97
-
98
96
  //#endregion
99
97
  export { LogsDriver };
98
+
100
99
  //# sourceMappingURL=logs.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs.js","names":[],"sources":["../../src/drivers/logs.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type { LogsStreamDriver } from \"./logs_stream\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { DownloadDriver } from \"./download_blob/download_blob\";\nimport { isLiveLogHandle } from \"./helpers/logs_handle\";\nimport { isNotFoundError } from \"@milaboratories/pl-client\";\n\nexport class LogsDriver implements sdk.LogsDriver {\n constructor(\n private readonly logger: MiLogger,\n private readonly logsStreamDriver: LogsStreamDriver,\n private readonly downloadDriver: DownloadDriver,\n ) {}\n\n /** Returns all logs and schedules a job that reads remain logs.\n * Notifies when a new portion of the log appeared. */\n getLastLogs(res: PlTreeEntry, lines: number): Computable<string | undefined>;\n getLastLogs(res: PlTreeEntry, lines: number, ctx: ComputableCtx): Computable<string | undefined>;\n getLastLogs(\n res: PlTreeEntry,\n lines: number,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLastLogs(res, lines, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLastLogs(stream, lines, ctx);\n\n try {\n return this.logsStreamDriver.getLastLogs(stream, lines, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting last logs: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLog(res: PlTreeEntry, patternToSearch: string): Computable<string | undefined>;\n getProgressLog(res: PlTreeEntry, patternToSearch: string, ctx: ComputableCtx): string | undefined;\n getProgressLog(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLog(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n\n try {\n return this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting a progress log: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Same as getProgressLog but also returns a liveliness of the log.\n * The previous getProgressLog couldn't be extended.\n * Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ): Computable<sdk.ProgressLogWithInfo | undefined>;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx: ComputableCtx,\n ): sdk.ProgressLogWithInfo | undefined;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<sdk.ProgressLogWithInfo | undefined> | sdk.ProgressLogWithInfo | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLogWithInfo(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) {\n const log = this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: false,\n };\n }\n\n try {\n const log = this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: true,\n };\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(\n `NOT_FOUND in logs stream driver while getting a progress log with info: ${e}`,\n );\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns an Id of a smart object, that can read logs directly from\n * the platform. */\n getLogHandle(res: ResourceInfo | PlTreeEntry): Computable<sdk.AnyLogHandle | undefined>;\n getLogHandle(res: PlTreeEntry, ctx: ComputableCtx): sdk.AnyLogHandle | undefined;\n getLogHandle(\n res: PlTreeEntry,\n ctx?: ComputableCtx,\n ): Computable<sdk.AnyLogHandle | undefined> | sdk.AnyLogHandle | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLogHandle(res, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLogHandle(stream, ctx);\n\n return this.logsStreamDriver.getLogHandle(stream, ctx);\n }\n\n async lastLines(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n }\n\n async readText(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.readText(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.readText(handle, lineCount, offsetBytes, searchStr);\n }\n}\n\nfunction isBlob(rInfo: ResourceInfo) {\n return !rInfo.type.name.startsWith(\"StreamWorkdir\");\n}\n\nfunction streamManagerGetStream(ctx: ComputableCtx, manager: PlTreeEntry) {\n return ctx.accessor(manager).node().traverse(\"stream\")?.resourceInfo;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"logs.js","names":[],"sources":["../../src/drivers/logs.ts"],"sourcesContent":["import type { ComputableCtx } from \"@milaboratories/computable\";\nimport { Computable } from \"@milaboratories/computable\";\nimport type { PlTreeEntry, ResourceInfo } from \"@milaboratories/pl-tree\";\nimport type { LogsStreamDriver } from \"./logs_stream\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport type { DownloadDriver } from \"./download_blob/download_blob\";\nimport { isLiveLogHandle } from \"./helpers/logs_handle\";\nimport { isNotFoundError } from \"@milaboratories/pl-client\";\n\nexport class LogsDriver implements sdk.LogsDriver {\n constructor(\n private readonly logger: MiLogger,\n private readonly logsStreamDriver: LogsStreamDriver,\n private readonly downloadDriver: DownloadDriver,\n ) {}\n\n /** Returns all logs and schedules a job that reads remain logs.\n * Notifies when a new portion of the log appeared. */\n getLastLogs(res: PlTreeEntry, lines: number): Computable<string | undefined>;\n getLastLogs(res: PlTreeEntry, lines: number, ctx: ComputableCtx): Computable<string | undefined>;\n getLastLogs(\n res: PlTreeEntry,\n lines: number,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLastLogs(res, lines, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLastLogs(stream, lines, ctx);\n\n try {\n return this.logsStreamDriver.getLastLogs(stream, lines, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting last logs: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLog(res: PlTreeEntry, patternToSearch: string): Computable<string | undefined>;\n getProgressLog(res: PlTreeEntry, patternToSearch: string, ctx: ComputableCtx): string | undefined;\n getProgressLog(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLog(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n\n try {\n return this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(`NOT_FOUND in logs stream driver while getting a progress log: ${e}`);\n return undefined;\n }\n throw e;\n }\n }\n\n /** Same as getProgressLog but also returns a liveliness of the log.\n * The previous getProgressLog couldn't be extended.\n * Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ): Computable<sdk.ProgressLogWithInfo | undefined>;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx: ComputableCtx,\n ): sdk.ProgressLogWithInfo | undefined;\n getProgressLogWithInfo(\n res: PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<sdk.ProgressLogWithInfo | undefined> | sdk.ProgressLogWithInfo | undefined {\n if (ctx === undefined)\n return Computable.make((ctx) => this.getProgressLogWithInfo(res, patternToSearch, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) {\n const log = this.downloadDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: false,\n };\n }\n\n try {\n const log = this.logsStreamDriver.getProgressLog(stream, patternToSearch, ctx);\n return {\n progressLine: log,\n live: true,\n };\n } catch (e: any) {\n if (isNotFoundError(e)) {\n ctx.markUnstable(\n `NOT_FOUND in logs stream driver while getting a progress log with info: ${e}`,\n );\n return undefined;\n }\n throw e;\n }\n }\n\n /** Returns an Id of a smart object, that can read logs directly from\n * the platform. */\n getLogHandle(res: ResourceInfo | PlTreeEntry): Computable<sdk.AnyLogHandle | undefined>;\n getLogHandle(res: PlTreeEntry, ctx: ComputableCtx): sdk.AnyLogHandle | undefined;\n getLogHandle(\n res: PlTreeEntry,\n ctx?: ComputableCtx,\n ): Computable<sdk.AnyLogHandle | undefined> | sdk.AnyLogHandle | undefined {\n if (ctx === undefined) return Computable.make((ctx) => this.getLogHandle(res, ctx));\n\n const stream = streamManagerGetStream(ctx, res);\n if (stream === undefined) {\n ctx.markUnstable(\"no stream in stream manager\");\n return undefined;\n }\n\n if (isBlob(stream)) return this.downloadDriver.getLogHandle(stream, ctx);\n\n return this.logsStreamDriver.getLogHandle(stream, ctx);\n }\n\n async lastLines(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.lastLines(handle, lineCount, offsetBytes, searchStr);\n }\n\n async readText(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string,\n ): Promise<sdk.StreamingApiResponse> {\n if (isLiveLogHandle(handle))\n return await this.logsStreamDriver.readText(handle, lineCount, offsetBytes, searchStr);\n return await this.downloadDriver.readText(handle, lineCount, offsetBytes, searchStr);\n }\n}\n\nfunction isBlob(rInfo: ResourceInfo) {\n return !rInfo.type.name.startsWith(\"StreamWorkdir\");\n}\n\nfunction streamManagerGetStream(ctx: ComputableCtx, manager: PlTreeEntry) {\n return ctx.accessor(manager).node().traverse(\"stream\")?.resourceInfo;\n}\n"],"mappings":"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"}
@@ -1,13 +1,12 @@
1
- const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
- const require_helpers = require('./helpers/helpers.cjs');
3
- const require_logs_handle = require('./helpers/logs_handle.cjs');
1
+ require("../_virtual/_rolldown/runtime.cjs");
2
+ const require_helpers = require("./helpers/helpers.cjs");
3
+ const require_logs_handle = require("./helpers/logs_handle.cjs");
4
4
  let _milaboratories_pl_client = require("@milaboratories/pl-client");
5
5
  let _milaboratories_ts_helpers = require("@milaboratories/ts-helpers");
6
6
  let _milaboratories_computable = require("@milaboratories/computable");
7
7
  let _milaboratories_pl_tree = require("@milaboratories/pl-tree");
8
8
  let node_crypto = require("node:crypto");
9
9
  let node_timers_promises = require("node:timers/promises");
10
-
11
10
  //#region src/drivers/logs_stream.ts
12
11
  var LogsStreamDriver = class {
13
12
  /** Holds a map of StreamManager Resource Id to all logs of this stream. */
@@ -210,7 +209,7 @@ var LogGetter = class {
210
209
  function validateResourceType(methodName, rType) {
211
210
  if (!rType.name.startsWith("StreamWorkdir")) throw new require_helpers.WrongResourceTypeError(`${methodName}: wrong resource type: ${rType.name}, expected: a resource of type 'StreamWorkdir'.`);
212
211
  }
213
-
214
212
  //#endregion
215
213
  exports.LogsStreamDriver = LogsStreamDriver;
214
+
216
215
  //# sourceMappingURL=logs_stream.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"logs_stream.cjs","names":["PollingComputableHooks","Computable","newLogHandle","getResourceInfoFromLogHandle","isLiveLogHandle","scheduler","ChangeSource","CallersCounter","WrongResourceTypeError"],"sources":["../../src/drivers/logs_stream.ts"],"sourcesContent":["import type { ComputableCtx, Watcher } from \"@milaboratories/computable\";\nimport { ChangeSource, Computable, PollingComputableHooks } from \"@milaboratories/computable\";\nimport type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport {\n isNotFoundError,\n resourceIdToString,\n stringifyWithResourceId,\n} from \"@milaboratories/pl-client\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport { asyncPool, CallersCounter } from \"@milaboratories/ts-helpers\";\nimport type { ClientLogs } from \"../clients/logs\";\nimport { randomUUID } from \"node:crypto\";\nimport type { PlTreeEntry, ResourceInfo } from \"@milaboratories/pl-tree\";\nimport { treeEntryToResourceInfo } from \"@milaboratories/pl-tree\";\nimport { scheduler } from \"node:timers/promises\";\nimport type { StreamingAPI_Response } from \"../proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { PollingOps } from \"./helpers/polling_ops\";\nimport { getResourceInfoFromLogHandle, isLiveLogHandle, newLogHandle } from \"./helpers/logs_handle\";\nimport { WrongResourceTypeError } from \"./helpers/helpers\";\n\nexport type LogsStreamDriverOps = PollingOps & {\n /** Max number of concurrent requests to log streaming backend while calculating computable states */\n nConcurrentGetLogs: number;\n};\n\nexport class LogsStreamDriver implements sdk.LogsDriver {\n /** Holds a map of StreamManager Resource Id to all logs of this stream. */\n private readonly idToLastLines: Map<ResourceId, LogGetter> = new Map();\n\n /** Holds a map of StreamManager Resource Id to the last log line of this stream. */\n private readonly idToProgressLog: Map<ResourceId, LogGetter> = new Map();\n\n /** Holds a map of StreamManager Resource Id to log id smart object. */\n private readonly hooks: PollingComputableHooks;\n\n constructor(\n private readonly logger: MiLogger,\n private readonly clientLogs: ClientLogs,\n private readonly opts: LogsStreamDriverOps = {\n nConcurrentGetLogs: 10,\n pollingInterval: 1000,\n stopPollingDelay: 1000,\n },\n ) {\n this.hooks = new PollingComputableHooks(\n () => this.startUpdating(),\n () => this.stopUpdating(),\n { stopDebounce: opts.stopPollingDelay },\n (resolve, reject) => this.scheduleOnNextState(resolve, reject),\n );\n }\n\n getLastLogs(res: ResourceInfo | PlTreeEntry, lines: number): Computable<string | undefined>;\n getLastLogs(\n res: ResourceInfo | PlTreeEntry,\n lines: number,\n ctx: ComputableCtx,\n ): Computable<string | undefined>;\n getLastLogs(\n res: ResourceInfo | PlTreeEntry,\n lines: number,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx == undefined) return Computable.make((ctx) => this.getLastLogs(res, lines, ctx));\n\n const r = treeEntryToResourceInfo(res, ctx);\n const callerId = randomUUID();\n ctx.attacheHooks(this.hooks);\n ctx.addOnDestroy(() => this.releaseLastLogs(r.id, callerId));\n\n const result = this.getLastLogsNoCtx(ctx.watcher, r, lines, callerId);\n ctx.markUnstable(\n \"The logs are from stream, so we consider them unstable. Final values will be got from blobs.\",\n );\n\n return result;\n }\n\n private getLastLogsNoCtx(\n w: Watcher,\n rInfo: ResourceInfo,\n lines: number,\n callerId: string,\n ): string | undefined {\n validateResourceType(\"getLastLogs\", rInfo.type);\n\n let logGetter = this.idToLastLines.get(rInfo.id);\n\n if (logGetter == undefined) {\n const newLogGetter = new LogGetter(this.logger, this.clientLogs, rInfo, lines);\n this.idToLastLines.set(rInfo.id, newLogGetter);\n\n logGetter = newLogGetter;\n }\n\n logGetter.attach(w, callerId);\n const result = logGetter.getLog();\n if (result.error != undefined) throw result.error;\n\n return result.log;\n }\n\n /** Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLog(\n res: ResourceInfo | PlTreeEntry,\n patternToSearch: string,\n ): Computable<string | undefined>;\n getProgressLog(\n res: ResourceInfo | PlTreeEntry,\n patternToSearch: string,\n ctx: ComputableCtx,\n ): string | undefined;\n getProgressLog(\n res: ResourceInfo | PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx == undefined)\n return Computable.make((ctx) => this.getProgressLog(res, patternToSearch, ctx));\n\n const r = treeEntryToResourceInfo(res, ctx);\n const callerId = randomUUID();\n ctx.attacheHooks(this.hooks);\n ctx.addOnDestroy(() => this.releaseProgressLog(r.id, callerId));\n\n const result = this.getProgressLogNoCtx(ctx.watcher, r, patternToSearch, callerId);\n ctx.markUnstable(\n \"The progress log is from the stream, so we consider it unstable. Final value will be got from blobs.\",\n );\n\n return result;\n }\n\n private getProgressLogNoCtx(\n w: Watcher,\n rInfo: ResourceInfo,\n patternToSearch: string,\n callerId: string,\n ): string | undefined {\n validateResourceType(\"getProgressLog\", rInfo.type);\n\n let logGetter = this.idToProgressLog.get(rInfo.id);\n\n if (logGetter == undefined) {\n const newLogGetter = new LogGetter(this.logger, this.clientLogs, rInfo, 1, patternToSearch);\n this.idToProgressLog.set(rInfo.id, newLogGetter);\n\n logGetter = newLogGetter;\n }\n\n logGetter.attach(w, callerId);\n const result = logGetter.getLog();\n if (result.error) throw result.error;\n\n return result.log;\n }\n\n getLogHandle(res: ResourceInfo | PlTreeEntry): Computable<sdk.AnyLogHandle>;\n getLogHandle(res: ResourceInfo | PlTreeEntry, ctx: ComputableCtx): sdk.AnyLogHandle;\n getLogHandle(\n res: ResourceInfo | PlTreeEntry,\n ctx?: ComputableCtx,\n ): Computable<sdk.AnyLogHandle> | sdk.AnyLogHandle {\n if (ctx == undefined) return Computable.make((ctx) => this.getLogHandle(res, ctx));\n\n const r = treeEntryToResourceInfo(res, ctx);\n\n const result = this.getLogHandleNoCtx(r);\n\n // All logs from streams should be considered unstable,\n // final value will be got from blobs.\n ctx.markUnstable(`live_log:${resourceIdToString(r.id)}`);\n\n return result;\n }\n\n private getLogHandleNoCtx(rInfo: ResourceInfo): sdk.AnyLogHandle {\n validateResourceType(\"getLogHandle\", rInfo.type);\n\n return newLogHandle(true, rInfo);\n }\n\n async lastLines(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string | undefined,\n ) {\n return await this.tryWithNotFound(handle, () =>\n this.clientLogs.lastLines(\n getResourceInfoFromLogHandle(handle),\n lineCount,\n BigInt(offsetBytes ?? 0),\n searchStr,\n ),\n );\n }\n\n async readText(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string | undefined,\n ) {\n return await this.tryWithNotFound(handle, () =>\n this.clientLogs.readText(\n getResourceInfoFromLogHandle(handle),\n lineCount,\n BigInt(offsetBytes ?? 0),\n searchStr,\n ),\n );\n }\n\n private async tryWithNotFound(\n handle: sdk.AnyLogHandle,\n method: () => Promise<StreamingAPI_Response>,\n ): Promise<sdk.StreamingApiResponse> {\n if (!isLiveLogHandle(handle))\n throw new Error(`Not live log handle was passed to live log driver, handle: ${handle}`);\n\n try {\n const resp = await method();\n return {\n live: true,\n shouldUpdateHandle: false,\n data: resp.data,\n size: Number(resp.size),\n newOffset: Number(resp.newOffset),\n };\n } catch (e: any) {\n if (isNotFoundError(e)) {\n return { shouldUpdateHandle: true };\n }\n\n throw e;\n }\n }\n\n private async releaseLastLogs(rId: ResourceId, callerId: string) {\n const deleted = this.idToLastLines.get(rId)?.release(callerId);\n if (deleted) this.idToLastLines.delete(rId);\n }\n\n private async releaseProgressLog(rId: ResourceId, callerId: string) {\n const deleted = this.idToProgressLog.get(rId)?.release(callerId);\n if (deleted) this.idToProgressLog.delete(rId);\n }\n\n async releaseAll() {}\n\n private scheduledOnNextState: ScheduledRefresh[] = [];\n\n private scheduleOnNextState(resolve: () => void, reject: (err: any) => void): void {\n this.scheduledOnNextState.push({ resolve, reject });\n }\n\n /** Called from observer */\n private startUpdating(): void {\n this.keepRunning = true;\n if (this.currentLoop === undefined) this.currentLoop = this.mainLoop();\n }\n\n /** Called from observer */\n private stopUpdating(): void {\n this.keepRunning = false;\n }\n\n /** Stops polling loop and waits for it to finish */\n public async terminate(): Promise<void> {\n this.stopUpdating();\n if (this.currentLoop !== undefined) {\n await this.currentLoop;\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.terminate();\n }\n\n /** If true, main loop will continue polling pl state. */\n private keepRunning = false;\n /** Actual state of main loop. */\n private currentLoop: Promise<void> | undefined = undefined;\n\n private async mainLoop() {\n while (this.keepRunning) {\n const toNotify = this.scheduledOnNextState;\n this.scheduledOnNextState = [];\n\n try {\n const logs = this.getAllLogs();\n await asyncPool(\n this.opts.nConcurrentGetLogs,\n logs.map((getter) => async () => await getter.update()),\n );\n\n toNotify.forEach((n) => n.resolve());\n } catch (e: any) {\n console.error(e);\n toNotify.forEach((n) => n.reject(e));\n }\n\n if (!this.keepRunning) break;\n await scheduler.wait(this.opts.pollingInterval);\n }\n\n this.currentLoop = undefined;\n }\n\n private getAllLogs(): Array<LogGetter> {\n return Array.from(this.idToLastLines.entries())\n .concat(Array.from(this.idToProgressLog.entries()))\n .map(([_, getter]) => getter);\n }\n}\n\n/** A job that gets last lines from a StreamWorkdir resource. */\nclass LogGetter {\n private logs: string | undefined;\n private error: any | undefined = undefined;\n\n private readonly change: ChangeSource = new ChangeSource();\n private readonly counter: CallersCounter = new CallersCounter();\n\n constructor(\n private readonly logger: MiLogger,\n private readonly clientLogs: ClientLogs,\n private readonly rInfo: ResourceInfo,\n private readonly lines: number,\n private readonly patternToSearch?: string,\n ) {}\n\n getLog(): {\n log: string | undefined;\n error?: any | undefined;\n } {\n return {\n log: this.logs,\n error: this.error,\n };\n }\n\n attach(w: Watcher, callerId: string) {\n this.change.attachWatcher(w);\n this.counter.inc(callerId);\n }\n\n release(callerId: string): boolean {\n return this.counter.dec(callerId);\n }\n\n async update() {\n try {\n const resp = await this.clientLogs.lastLines(\n this.rInfo,\n this.lines,\n 0n,\n this.patternToSearch,\n );\n\n const newLogs = new TextDecoder().decode(resp.data);\n if (this.logs != newLogs)\n this.change.markChanged(`logs for ${resourceIdToString(this.rInfo.id)} updated`);\n this.logs = newLogs;\n this.error = undefined;\n\n return;\n } catch (e: any) {\n if (isNotFoundError(e)) {\n // No resource\n this.logs = \"\";\n this.error = e;\n this.change.markChanged();\n return;\n }\n\n this.logger.error(\n `Stream log lines for ${stringifyWithResourceId(this.rInfo.id)} failed, reason: ${JSON.stringify(e)}`,\n );\n throw e;\n }\n }\n}\n\ntype ScheduledRefresh = {\n resolve: () => void;\n reject: (err: any) => void;\n};\n\nfunction validateResourceType(methodName: string, rType: ResourceType) {\n if (!rType.name.startsWith(\"StreamWorkdir\")) {\n throw new WrongResourceTypeError(\n `${methodName}: wrong resource type: ${rType.name}, ` +\n `expected: a resource of type 'StreamWorkdir'.`,\n );\n }\n}\n"],"mappings":";;;;;;;;;;;AA0BA,IAAa,mBAAb,MAAwD;;CAEtD,AAAiB,gCAA4C,IAAI,KAAK;;CAGtE,AAAiB,kCAA8C,IAAI,KAAK;;CAGxE,AAAiB;CAEjB,YACE,AAAiB,QACjB,AAAiB,YACjB,AAAiB,OAA4B;EAC3C,oBAAoB;EACpB,iBAAiB;EACjB,kBAAkB;EACnB,EACD;EAPiB;EACA;EACA;AAMjB,OAAK,QAAQ,IAAIA,wDACT,KAAK,eAAe,QACpB,KAAK,cAAc,EACzB,EAAE,cAAc,KAAK,kBAAkB,GACtC,SAAS,WAAW,KAAK,oBAAoB,SAAS,OAAO,CAC/D;;CASH,YACE,KACA,OACA,KACqD;AACrD,MAAI,OAAO,OAAW,QAAOC,sCAAW,MAAM,QAAQ,KAAK,YAAY,KAAK,OAAO,IAAI,CAAC;EAExF,MAAM,yDAA4B,KAAK,IAAI;EAC3C,MAAM,wCAAuB;AAC7B,MAAI,aAAa,KAAK,MAAM;AAC5B,MAAI,mBAAmB,KAAK,gBAAgB,EAAE,IAAI,SAAS,CAAC;EAE5D,MAAM,SAAS,KAAK,iBAAiB,IAAI,SAAS,GAAG,OAAO,SAAS;AACrE,MAAI,aACF,+FACD;AAED,SAAO;;CAGT,AAAQ,iBACN,GACA,OACA,OACA,UACoB;AACpB,uBAAqB,eAAe,MAAM,KAAK;EAE/C,IAAI,YAAY,KAAK,cAAc,IAAI,MAAM,GAAG;AAEhD,MAAI,aAAa,QAAW;GAC1B,MAAM,eAAe,IAAI,UAAU,KAAK,QAAQ,KAAK,YAAY,OAAO,MAAM;AAC9E,QAAK,cAAc,IAAI,MAAM,IAAI,aAAa;AAE9C,eAAY;;AAGd,YAAU,OAAO,GAAG,SAAS;EAC7B,MAAM,SAAS,UAAU,QAAQ;AACjC,MAAI,OAAO,SAAS,OAAW,OAAM,OAAO;AAE5C,SAAO,OAAO;;CAchB,eACE,KACA,iBACA,KACqD;AACrD,MAAI,OAAO,OACT,QAAOA,sCAAW,MAAM,QAAQ,KAAK,eAAe,KAAK,iBAAiB,IAAI,CAAC;EAEjF,MAAM,yDAA4B,KAAK,IAAI;EAC3C,MAAM,wCAAuB;AAC7B,MAAI,aAAa,KAAK,MAAM;AAC5B,MAAI,mBAAmB,KAAK,mBAAmB,EAAE,IAAI,SAAS,CAAC;EAE/D,MAAM,SAAS,KAAK,oBAAoB,IAAI,SAAS,GAAG,iBAAiB,SAAS;AAClF,MAAI,aACF,uGACD;AAED,SAAO;;CAGT,AAAQ,oBACN,GACA,OACA,iBACA,UACoB;AACpB,uBAAqB,kBAAkB,MAAM,KAAK;EAElD,IAAI,YAAY,KAAK,gBAAgB,IAAI,MAAM,GAAG;AAElD,MAAI,aAAa,QAAW;GAC1B,MAAM,eAAe,IAAI,UAAU,KAAK,QAAQ,KAAK,YAAY,OAAO,GAAG,gBAAgB;AAC3F,QAAK,gBAAgB,IAAI,MAAM,IAAI,aAAa;AAEhD,eAAY;;AAGd,YAAU,OAAO,GAAG,SAAS;EAC7B,MAAM,SAAS,UAAU,QAAQ;AACjC,MAAI,OAAO,MAAO,OAAM,OAAO;AAE/B,SAAO,OAAO;;CAKhB,aACE,KACA,KACiD;AACjD,MAAI,OAAO,OAAW,QAAOA,sCAAW,MAAM,QAAQ,KAAK,aAAa,KAAK,IAAI,CAAC;EAElF,MAAM,yDAA4B,KAAK,IAAI;EAE3C,MAAM,SAAS,KAAK,kBAAkB,EAAE;AAIxC,MAAI,aAAa,8DAA+B,EAAE,GAAG,GAAG;AAExD,SAAO;;CAGT,AAAQ,kBAAkB,OAAuC;AAC/D,uBAAqB,gBAAgB,MAAM,KAAK;AAEhD,SAAOC,iCAAa,MAAM,MAAM;;CAGlC,MAAM,UACJ,QACA,WACA,aACA,WACA;AACA,SAAO,MAAM,KAAK,gBAAgB,cAChC,KAAK,WAAW,UACdC,iDAA6B,OAAO,EACpC,WACA,OAAO,eAAe,EAAE,EACxB,UACD,CACF;;CAGH,MAAM,SACJ,QACA,WACA,aACA,WACA;AACA,SAAO,MAAM,KAAK,gBAAgB,cAChC,KAAK,WAAW,SACdA,iDAA6B,OAAO,EACpC,WACA,OAAO,eAAe,EAAE,EACxB,UACD,CACF;;CAGH,MAAc,gBACZ,QACA,QACmC;AACnC,MAAI,CAACC,oCAAgB,OAAO,CAC1B,OAAM,IAAI,MAAM,8DAA8D,SAAS;AAEzF,MAAI;GACF,MAAM,OAAO,MAAM,QAAQ;AAC3B,UAAO;IACL,MAAM;IACN,oBAAoB;IACpB,MAAM,KAAK;IACX,MAAM,OAAO,KAAK,KAAK;IACvB,WAAW,OAAO,KAAK,UAAU;IAClC;WACM,GAAQ;AACf,sDAAoB,EAAE,CACpB,QAAO,EAAE,oBAAoB,MAAM;AAGrC,SAAM;;;CAIV,MAAc,gBAAgB,KAAiB,UAAkB;AAE/D,MADgB,KAAK,cAAc,IAAI,IAAI,EAAE,QAAQ,SAAS,CACjD,MAAK,cAAc,OAAO,IAAI;;CAG7C,MAAc,mBAAmB,KAAiB,UAAkB;AAElE,MADgB,KAAK,gBAAgB,IAAI,IAAI,EAAE,QAAQ,SAAS,CACnD,MAAK,gBAAgB,OAAO,IAAI;;CAG/C,MAAM,aAAa;CAEnB,AAAQ,uBAA2C,EAAE;CAErD,AAAQ,oBAAoB,SAAqB,QAAkC;AACjF,OAAK,qBAAqB,KAAK;GAAE;GAAS;GAAQ,CAAC;;;CAIrD,AAAQ,gBAAsB;AAC5B,OAAK,cAAc;AACnB,MAAI,KAAK,gBAAgB,OAAW,MAAK,cAAc,KAAK,UAAU;;;CAIxE,AAAQ,eAAqB;AAC3B,OAAK,cAAc;;;CAIrB,MAAa,YAA2B;AACtC,OAAK,cAAc;AACnB,MAAI,KAAK,gBAAgB,OACvB,OAAM,KAAK;;CAIf,OAAO,OAAO,gBAA+B;AAC3C,QAAM,KAAK,WAAW;;;CAIxB,AAAQ,cAAc;;CAEtB,AAAQ,cAAyC;CAEjD,MAAc,WAAW;AACvB,SAAO,KAAK,aAAa;GACvB,MAAM,WAAW,KAAK;AACtB,QAAK,uBAAuB,EAAE;AAE9B,OAAI;IACF,MAAM,OAAO,KAAK,YAAY;AAC9B,oDACE,KAAK,KAAK,oBACV,KAAK,KAAK,WAAW,YAAY,MAAM,OAAO,QAAQ,CAAC,CACxD;AAED,aAAS,SAAS,MAAM,EAAE,SAAS,CAAC;YAC7B,GAAQ;AACf,YAAQ,MAAM,EAAE;AAChB,aAAS,SAAS,MAAM,EAAE,OAAO,EAAE,CAAC;;AAGtC,OAAI,CAAC,KAAK,YAAa;AACvB,SAAMC,+BAAU,KAAK,KAAK,KAAK,gBAAgB;;AAGjD,OAAK,cAAc;;CAGrB,AAAQ,aAA+B;AACrC,SAAO,MAAM,KAAK,KAAK,cAAc,SAAS,CAAC,CAC5C,OAAO,MAAM,KAAK,KAAK,gBAAgB,SAAS,CAAC,CAAC,CAClD,KAAK,CAAC,GAAG,YAAY,OAAO;;;;AAKnC,IAAM,YAAN,MAAgB;CACd,AAAQ;CACR,AAAQ,QAAyB;CAEjC,AAAiB,SAAuB,IAAIC,yCAAc;CAC1D,AAAiB,UAA0B,IAAIC,2CAAgB;CAE/D,YACE,AAAiB,QACjB,AAAiB,YACjB,AAAiB,OACjB,AAAiB,OACjB,AAAiB,iBACjB;EALiB;EACA;EACA;EACA;EACA;;CAGnB,SAGE;AACA,SAAO;GACL,KAAK,KAAK;GACV,OAAO,KAAK;GACb;;CAGH,OAAO,GAAY,UAAkB;AACnC,OAAK,OAAO,cAAc,EAAE;AAC5B,OAAK,QAAQ,IAAI,SAAS;;CAG5B,QAAQ,UAA2B;AACjC,SAAO,KAAK,QAAQ,IAAI,SAAS;;CAGnC,MAAM,SAAS;AACb,MAAI;GACF,MAAM,OAAO,MAAM,KAAK,WAAW,UACjC,KAAK,OACL,KAAK,OACL,IACA,KAAK,gBACN;GAED,MAAM,UAAU,IAAI,aAAa,CAAC,OAAO,KAAK,KAAK;AACnD,OAAI,KAAK,QAAQ,QACf,MAAK,OAAO,YAAY,8DAA+B,KAAK,MAAM,GAAG,CAAC,UAAU;AAClF,QAAK,OAAO;AACZ,QAAK,QAAQ;AAEb;WACO,GAAQ;AACf,sDAAoB,EAAE,EAAE;AAEtB,SAAK,OAAO;AACZ,SAAK,QAAQ;AACb,SAAK,OAAO,aAAa;AACzB;;AAGF,QAAK,OAAO,MACV,+EAAgD,KAAK,MAAM,GAAG,CAAC,mBAAmB,KAAK,UAAU,EAAE,GACpG;AACD,SAAM;;;;AAUZ,SAAS,qBAAqB,YAAoB,OAAqB;AACrE,KAAI,CAAC,MAAM,KAAK,WAAW,gBAAgB,CACzC,OAAM,IAAIC,uCACR,GAAG,WAAW,yBAAyB,MAAM,KAAK,iDAEnD"}
1
+ {"version":3,"file":"logs_stream.cjs","names":["PollingComputableHooks","Computable","newLogHandle","getResourceInfoFromLogHandle","isLiveLogHandle","scheduler","ChangeSource","CallersCounter","WrongResourceTypeError"],"sources":["../../src/drivers/logs_stream.ts"],"sourcesContent":["import type { ComputableCtx, Watcher } from \"@milaboratories/computable\";\nimport { ChangeSource, Computable, PollingComputableHooks } from \"@milaboratories/computable\";\nimport type { ResourceId, ResourceType } from \"@milaboratories/pl-client\";\nimport {\n isNotFoundError,\n resourceIdToString,\n stringifyWithResourceId,\n} from \"@milaboratories/pl-client\";\nimport type { MiLogger } from \"@milaboratories/ts-helpers\";\nimport { asyncPool, CallersCounter } from \"@milaboratories/ts-helpers\";\nimport type { ClientLogs } from \"../clients/logs\";\nimport { randomUUID } from \"node:crypto\";\nimport type { PlTreeEntry, ResourceInfo } from \"@milaboratories/pl-tree\";\nimport { treeEntryToResourceInfo } from \"@milaboratories/pl-tree\";\nimport { scheduler } from \"node:timers/promises\";\nimport type { StreamingAPI_Response } from \"../proto-grpc/github.com/milaboratory/pl/controllers/shared/grpc/streamingapi/protocol\";\nimport type * as sdk from \"@milaboratories/pl-model-common\";\nimport type { PollingOps } from \"./helpers/polling_ops\";\nimport { getResourceInfoFromLogHandle, isLiveLogHandle, newLogHandle } from \"./helpers/logs_handle\";\nimport { WrongResourceTypeError } from \"./helpers/helpers\";\n\nexport type LogsStreamDriverOps = PollingOps & {\n /** Max number of concurrent requests to log streaming backend while calculating computable states */\n nConcurrentGetLogs: number;\n};\n\nexport class LogsStreamDriver implements sdk.LogsDriver {\n /** Holds a map of StreamManager Resource Id to all logs of this stream. */\n private readonly idToLastLines: Map<ResourceId, LogGetter> = new Map();\n\n /** Holds a map of StreamManager Resource Id to the last log line of this stream. */\n private readonly idToProgressLog: Map<ResourceId, LogGetter> = new Map();\n\n /** Holds a map of StreamManager Resource Id to log id smart object. */\n private readonly hooks: PollingComputableHooks;\n\n constructor(\n private readonly logger: MiLogger,\n private readonly clientLogs: ClientLogs,\n private readonly opts: LogsStreamDriverOps = {\n nConcurrentGetLogs: 10,\n pollingInterval: 1000,\n stopPollingDelay: 1000,\n },\n ) {\n this.hooks = new PollingComputableHooks(\n () => this.startUpdating(),\n () => this.stopUpdating(),\n { stopDebounce: opts.stopPollingDelay },\n (resolve, reject) => this.scheduleOnNextState(resolve, reject),\n );\n }\n\n getLastLogs(res: ResourceInfo | PlTreeEntry, lines: number): Computable<string | undefined>;\n getLastLogs(\n res: ResourceInfo | PlTreeEntry,\n lines: number,\n ctx: ComputableCtx,\n ): Computable<string | undefined>;\n getLastLogs(\n res: ResourceInfo | PlTreeEntry,\n lines: number,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx == undefined) return Computable.make((ctx) => this.getLastLogs(res, lines, ctx));\n\n const r = treeEntryToResourceInfo(res, ctx);\n const callerId = randomUUID();\n ctx.attacheHooks(this.hooks);\n ctx.addOnDestroy(() => this.releaseLastLogs(r.id, callerId));\n\n const result = this.getLastLogsNoCtx(ctx.watcher, r, lines, callerId);\n ctx.markUnstable(\n \"The logs are from stream, so we consider them unstable. Final values will be got from blobs.\",\n );\n\n return result;\n }\n\n private getLastLogsNoCtx(\n w: Watcher,\n rInfo: ResourceInfo,\n lines: number,\n callerId: string,\n ): string | undefined {\n validateResourceType(\"getLastLogs\", rInfo.type);\n\n let logGetter = this.idToLastLines.get(rInfo.id);\n\n if (logGetter == undefined) {\n const newLogGetter = new LogGetter(this.logger, this.clientLogs, rInfo, lines);\n this.idToLastLines.set(rInfo.id, newLogGetter);\n\n logGetter = newLogGetter;\n }\n\n logGetter.attach(w, callerId);\n const result = logGetter.getLog();\n if (result.error != undefined) throw result.error;\n\n return result.log;\n }\n\n /** Returns a last line that has patternToSearch.\n * Notifies when a new line appeared or EOF reached. */\n getProgressLog(\n res: ResourceInfo | PlTreeEntry,\n patternToSearch: string,\n ): Computable<string | undefined>;\n getProgressLog(\n res: ResourceInfo | PlTreeEntry,\n patternToSearch: string,\n ctx: ComputableCtx,\n ): string | undefined;\n getProgressLog(\n res: ResourceInfo | PlTreeEntry,\n patternToSearch: string,\n ctx?: ComputableCtx,\n ): Computable<string | undefined> | string | undefined {\n if (ctx == undefined)\n return Computable.make((ctx) => this.getProgressLog(res, patternToSearch, ctx));\n\n const r = treeEntryToResourceInfo(res, ctx);\n const callerId = randomUUID();\n ctx.attacheHooks(this.hooks);\n ctx.addOnDestroy(() => this.releaseProgressLog(r.id, callerId));\n\n const result = this.getProgressLogNoCtx(ctx.watcher, r, patternToSearch, callerId);\n ctx.markUnstable(\n \"The progress log is from the stream, so we consider it unstable. Final value will be got from blobs.\",\n );\n\n return result;\n }\n\n private getProgressLogNoCtx(\n w: Watcher,\n rInfo: ResourceInfo,\n patternToSearch: string,\n callerId: string,\n ): string | undefined {\n validateResourceType(\"getProgressLog\", rInfo.type);\n\n let logGetter = this.idToProgressLog.get(rInfo.id);\n\n if (logGetter == undefined) {\n const newLogGetter = new LogGetter(this.logger, this.clientLogs, rInfo, 1, patternToSearch);\n this.idToProgressLog.set(rInfo.id, newLogGetter);\n\n logGetter = newLogGetter;\n }\n\n logGetter.attach(w, callerId);\n const result = logGetter.getLog();\n if (result.error) throw result.error;\n\n return result.log;\n }\n\n getLogHandle(res: ResourceInfo | PlTreeEntry): Computable<sdk.AnyLogHandle>;\n getLogHandle(res: ResourceInfo | PlTreeEntry, ctx: ComputableCtx): sdk.AnyLogHandle;\n getLogHandle(\n res: ResourceInfo | PlTreeEntry,\n ctx?: ComputableCtx,\n ): Computable<sdk.AnyLogHandle> | sdk.AnyLogHandle {\n if (ctx == undefined) return Computable.make((ctx) => this.getLogHandle(res, ctx));\n\n const r = treeEntryToResourceInfo(res, ctx);\n\n const result = this.getLogHandleNoCtx(r);\n\n // All logs from streams should be considered unstable,\n // final value will be got from blobs.\n ctx.markUnstable(`live_log:${resourceIdToString(r.id)}`);\n\n return result;\n }\n\n private getLogHandleNoCtx(rInfo: ResourceInfo): sdk.AnyLogHandle {\n validateResourceType(\"getLogHandle\", rInfo.type);\n\n return newLogHandle(true, rInfo);\n }\n\n async lastLines(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string | undefined,\n ) {\n return await this.tryWithNotFound(handle, () =>\n this.clientLogs.lastLines(\n getResourceInfoFromLogHandle(handle),\n lineCount,\n BigInt(offsetBytes ?? 0),\n searchStr,\n ),\n );\n }\n\n async readText(\n handle: sdk.AnyLogHandle,\n lineCount: number,\n offsetBytes?: number,\n searchStr?: string | undefined,\n ) {\n return await this.tryWithNotFound(handle, () =>\n this.clientLogs.readText(\n getResourceInfoFromLogHandle(handle),\n lineCount,\n BigInt(offsetBytes ?? 0),\n searchStr,\n ),\n );\n }\n\n private async tryWithNotFound(\n handle: sdk.AnyLogHandle,\n method: () => Promise<StreamingAPI_Response>,\n ): Promise<sdk.StreamingApiResponse> {\n if (!isLiveLogHandle(handle))\n throw new Error(`Not live log handle was passed to live log driver, handle: ${handle}`);\n\n try {\n const resp = await method();\n return {\n live: true,\n shouldUpdateHandle: false,\n data: resp.data,\n size: Number(resp.size),\n newOffset: Number(resp.newOffset),\n };\n } catch (e: any) {\n if (isNotFoundError(e)) {\n return { shouldUpdateHandle: true };\n }\n\n throw e;\n }\n }\n\n private async releaseLastLogs(rId: ResourceId, callerId: string) {\n const deleted = this.idToLastLines.get(rId)?.release(callerId);\n if (deleted) this.idToLastLines.delete(rId);\n }\n\n private async releaseProgressLog(rId: ResourceId, callerId: string) {\n const deleted = this.idToProgressLog.get(rId)?.release(callerId);\n if (deleted) this.idToProgressLog.delete(rId);\n }\n\n async releaseAll() {}\n\n private scheduledOnNextState: ScheduledRefresh[] = [];\n\n private scheduleOnNextState(resolve: () => void, reject: (err: any) => void): void {\n this.scheduledOnNextState.push({ resolve, reject });\n }\n\n /** Called from observer */\n private startUpdating(): void {\n this.keepRunning = true;\n if (this.currentLoop === undefined) this.currentLoop = this.mainLoop();\n }\n\n /** Called from observer */\n private stopUpdating(): void {\n this.keepRunning = false;\n }\n\n /** Stops polling loop and waits for it to finish */\n public async terminate(): Promise<void> {\n this.stopUpdating();\n if (this.currentLoop !== undefined) {\n await this.currentLoop;\n }\n }\n\n async [Symbol.asyncDispose](): Promise<void> {\n await this.terminate();\n }\n\n /** If true, main loop will continue polling pl state. */\n private keepRunning = false;\n /** Actual state of main loop. */\n private currentLoop: Promise<void> | undefined = undefined;\n\n private async mainLoop() {\n while (this.keepRunning) {\n const toNotify = this.scheduledOnNextState;\n this.scheduledOnNextState = [];\n\n try {\n const logs = this.getAllLogs();\n await asyncPool(\n this.opts.nConcurrentGetLogs,\n logs.map((getter) => async () => await getter.update()),\n );\n\n toNotify.forEach((n) => n.resolve());\n } catch (e: any) {\n console.error(e);\n toNotify.forEach((n) => n.reject(e));\n }\n\n if (!this.keepRunning) break;\n await scheduler.wait(this.opts.pollingInterval);\n }\n\n this.currentLoop = undefined;\n }\n\n private getAllLogs(): Array<LogGetter> {\n return Array.from(this.idToLastLines.entries())\n .concat(Array.from(this.idToProgressLog.entries()))\n .map(([_, getter]) => getter);\n }\n}\n\n/** A job that gets last lines from a StreamWorkdir resource. */\nclass LogGetter {\n private logs: string | undefined;\n private error: any | undefined = undefined;\n\n private readonly change: ChangeSource = new ChangeSource();\n private readonly counter: CallersCounter = new CallersCounter();\n\n constructor(\n private readonly logger: MiLogger,\n private readonly clientLogs: ClientLogs,\n private readonly rInfo: ResourceInfo,\n private readonly lines: number,\n private readonly patternToSearch?: string,\n ) {}\n\n getLog(): {\n log: string | undefined;\n error?: any | undefined;\n } {\n return {\n log: this.logs,\n error: this.error,\n };\n }\n\n attach(w: Watcher, callerId: string) {\n this.change.attachWatcher(w);\n this.counter.inc(callerId);\n }\n\n release(callerId: string): boolean {\n return this.counter.dec(callerId);\n }\n\n async update() {\n try {\n const resp = await this.clientLogs.lastLines(\n this.rInfo,\n this.lines,\n 0n,\n this.patternToSearch,\n );\n\n const newLogs = new TextDecoder().decode(resp.data);\n if (this.logs != newLogs)\n this.change.markChanged(`logs for ${resourceIdToString(this.rInfo.id)} updated`);\n this.logs = newLogs;\n this.error = undefined;\n\n return;\n } catch (e: any) {\n if (isNotFoundError(e)) {\n // No resource\n this.logs = \"\";\n this.error = e;\n this.change.markChanged();\n return;\n }\n\n this.logger.error(\n `Stream log lines for ${stringifyWithResourceId(this.rInfo.id)} failed, reason: ${JSON.stringify(e)}`,\n );\n throw e;\n }\n }\n}\n\ntype ScheduledRefresh = {\n resolve: () => void;\n reject: (err: any) => void;\n};\n\nfunction validateResourceType(methodName: string, rType: ResourceType) {\n if (!rType.name.startsWith(\"StreamWorkdir\")) {\n throw new WrongResourceTypeError(\n `${methodName}: wrong resource type: ${rType.name}, ` +\n `expected: a resource of type 'StreamWorkdir'.`,\n );\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logs_stream.d.ts","names":[],"sources":["../../src/drivers/logs_stream.ts"],"mappings":";;;;;;;;KAqBY,mBAAA,GAAsB,UAAA;EAAtB,qGAEV,kBAAA;AAAA;AAAA,cAGW,gBAAA,YAA4B,GAAA,CAAI,UAAA;EAAA,iBAWxB,MAAA;EAAA,iBACA,UAAA;EAAA,iBACA,IAAA;;mBAXF,aAAA;EAUc;EAAA,iBAPd,eAAA;EAsBA;EAAA,iBAnBA,KAAA;cAGE,MAAA,EAAQ,QAAA,EACR,UAAA,EAAY,UAAA,EACZ,IAAA,GAAM,mBAAA;EAczB,WAAA,CAAY,GAAA,EAAK,YAAA,GAAe,WAAA,EAAa,KAAA,WAAgB,UAAA;EAC7D,WAAA,CACE,GAAA,EAAK,YAAA,GAAe,WAAA,EACpB,KAAA,UACA,GAAA,EAAK,aAAA,GACJ,UAAA;EAAA,QAqBK,gBAAA;EArBL;;EA+CH,cAAA,CACE,GAAA,EAAK,YAAA,GAAe,WAAA,EACpB,eAAA,WACC,UAAA;EACH,cAAA,CACE,GAAA,EAAK,YAAA,GAAe,WAAA,EACpB,eAAA,UACA,GAAA,EAAK,aAAA;EAAA,QAuBC,mBAAA;EAwBR,YAAA,CAAa,GAAA,EAAK,YAAA,GAAe,WAAA,GAAc,UAAA,CAAW,GAAA,CAAI,YAAA;EAC9D,YAAA,CAAa,GAAA,EAAK,YAAA,GAAe,WAAA,EAAa,GAAA,EAAK,aAAA,GAAgB,GAAA,CAAI,YAAA;EAAA,QAkB/D,iBAAA;EAMF,SAAA,CACJ,MAAA,EAAQ,GAAA,CAAI,YAAA,EACZ,SAAA,UACA,WAAA,WACA,SAAA,wBAA8B,OAAA,CAAA,GAAA,CAAA,oBAAA;EAY1B,QAAA,CACJ,MAAA,EAAQ,GAAA,CAAI,YAAA,EACZ,SAAA,UACA,WAAA,WACA,SAAA,wBAA8B,OAAA,CAAA,GAAA,CAAA,oBAAA;EAAA,QAYlB,eAAA;EAAA,QAyBA,eAAA;EAAA,QAKA,kBAAA;EAKR,UAAA,CAAA,GAAU,OAAA;EAAA,QAER,oBAAA;EAAA,QAEA,mBAAA;EAnEwB;EAAA,QAwExB,aAAA;EA3DE;EAAA,QAiEF,YAAA;EA9DwB;EAmEnB,SAAA,CAAA,GAAa,OAAA;EAAA,CAOnB,MAAA,CAAO,YAAA,KAAiB,OAAA;EAAA;EAAA,QAKvB,WAAA;EAjQ+B;EAAA,QAmQ/B,WAAA;EAAA,QAEM,QAAA;EAAA,QAyBN,UAAA;AAAA"}
@@ -6,7 +6,6 @@ import { ChangeSource, Computable, PollingComputableHooks } from "@milaboratorie
6
6
  import { treeEntryToResourceInfo } from "@milaboratories/pl-tree";
7
7
  import { randomUUID } from "node:crypto";
8
8
  import { scheduler } from "node:timers/promises";
9
-
10
9
  //#region src/drivers/logs_stream.ts
11
10
  var LogsStreamDriver = class {
12
11
  /** Holds a map of StreamManager Resource Id to all logs of this stream. */
@@ -209,7 +208,7 @@ var LogGetter = class {
209
208
  function validateResourceType(methodName, rType) {
210
209
  if (!rType.name.startsWith("StreamWorkdir")) throw new WrongResourceTypeError(`${methodName}: wrong resource type: ${rType.name}, expected: a resource of type 'StreamWorkdir'.`);
211
210
  }
212
-
213
211
  //#endregion
214
212
  export { LogsStreamDriver };
213
+
215
214
  //# sourceMappingURL=logs_stream.js.map