@theia/filesystem 1.77.0-next.0 → 1.77.0-next.101

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 (436) hide show
  1. package/lib/browser/breadcrumbs/filepath-breadcrumb.js +4 -8
  2. package/lib/browser/breadcrumbs/filepath-breadcrumb.js.map +1 -1
  3. package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.d.ts +1 -1
  4. package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.d.ts.map +1 -1
  5. package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.js +18 -25
  6. package/lib/browser/breadcrumbs/filepath-breadcrumbs-container.js.map +1 -1
  7. package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.d.ts +5 -5
  8. package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.d.ts.map +1 -1
  9. package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.js +27 -33
  10. package/lib/browser/breadcrumbs/filepath-breadcrumbs-contribution.js.map +1 -1
  11. package/lib/browser/download/file-download-command-contribution.d.ts +1 -1
  12. package/lib/browser/download/file-download-command-contribution.d.ts.map +1 -1
  13. package/lib/browser/download/file-download-command-contribution.js +28 -33
  14. package/lib/browser/download/file-download-command-contribution.js.map +1 -1
  15. package/lib/browser/download/file-download-frontend-module.js +8 -10
  16. package/lib/browser/download/file-download-frontend-module.js.map +1 -1
  17. package/lib/browser/download/file-download-service.d.ts +1 -1
  18. package/lib/browser/download/file-download-service.d.ts.map +1 -1
  19. package/lib/browser/download/file-download-service.js +19 -25
  20. package/lib/browser/download/file-download-service.js.map +1 -1
  21. package/lib/browser/file-dialog/file-dialog-container.d.ts +1 -1
  22. package/lib/browser/file-dialog/file-dialog-container.d.ts.map +1 -1
  23. package/lib/browser/file-dialog/file-dialog-container.js +25 -30
  24. package/lib/browser/file-dialog/file-dialog-container.js.map +1 -1
  25. package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.d.ts +1 -1
  26. package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.d.ts.map +1 -1
  27. package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.js +13 -21
  28. package/lib/browser/file-dialog/file-dialog-hidden-files-renderer.js.map +1 -1
  29. package/lib/browser/file-dialog/file-dialog-model.d.ts +2 -2
  30. package/lib/browser/file-dialog/file-dialog-model.d.ts.map +1 -1
  31. package/lib/browser/file-dialog/file-dialog-model.js +20 -27
  32. package/lib/browser/file-dialog/file-dialog-model.js.map +1 -1
  33. package/lib/browser/file-dialog/file-dialog-module.js +21 -23
  34. package/lib/browser/file-dialog/file-dialog-module.js.map +1 -1
  35. package/lib/browser/file-dialog/file-dialog-service.d.ts +4 -4
  36. package/lib/browser/file-dialog/file-dialog-service.d.ts.map +1 -1
  37. package/lib/browser/file-dialog/file-dialog-service.js +29 -38
  38. package/lib/browser/file-dialog/file-dialog-service.js.map +1 -1
  39. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.d.ts +3 -1
  40. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.d.ts.map +1 -1
  41. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.js +17 -22
  42. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.js.map +1 -1
  43. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.spec.d.ts +2 -0
  44. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.spec.d.ts.map +1 -0
  45. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.spec.js +35 -0
  46. package/lib/browser/file-dialog/file-dialog-tree-filters-renderer.spec.js.map +1 -0
  47. package/lib/browser/file-dialog/file-dialog-tree.d.ts +2 -2
  48. package/lib/browser/file-dialog/file-dialog-tree.d.ts.map +1 -1
  49. package/lib/browser/file-dialog/file-dialog-tree.js +8 -11
  50. package/lib/browser/file-dialog/file-dialog-tree.js.map +1 -1
  51. package/lib/browser/file-dialog/file-dialog-widget.d.ts +2 -2
  52. package/lib/browser/file-dialog/file-dialog-widget.d.ts.map +1 -1
  53. package/lib/browser/file-dialog/file-dialog-widget.js +18 -23
  54. package/lib/browser/file-dialog/file-dialog-widget.js.map +1 -1
  55. package/lib/browser/file-dialog/file-dialog.d.ts +11 -6
  56. package/lib/browser/file-dialog/file-dialog.d.ts.map +1 -1
  57. package/lib/browser/file-dialog/file-dialog.js +109 -126
  58. package/lib/browser/file-dialog/file-dialog.js.map +1 -1
  59. package/lib/browser/file-dialog/index.d.ts +4 -4
  60. package/lib/browser/file-dialog/index.d.ts.map +1 -1
  61. package/lib/browser/file-dialog/index.js +4 -7
  62. package/lib/browser/file-dialog/index.js.map +1 -1
  63. package/lib/browser/file-resource.d.ts +2 -2
  64. package/lib/browser/file-resource.d.ts.map +1 -1
  65. package/lib/browser/file-resource.js +64 -71
  66. package/lib/browser/file-resource.js.map +1 -1
  67. package/lib/browser/file-resource.spec.js +39 -41
  68. package/lib/browser/file-resource.spec.js.map +1 -1
  69. package/lib/browser/file-selection.d.ts +1 -1
  70. package/lib/browser/file-selection.d.ts.map +1 -1
  71. package/lib/browser/file-selection.js +7 -10
  72. package/lib/browser/file-selection.js.map +1 -1
  73. package/lib/browser/file-service-activation.spec.d.ts +2 -0
  74. package/lib/browser/file-service-activation.spec.d.ts.map +1 -0
  75. package/lib/browser/file-service-activation.spec.js +79 -0
  76. package/lib/browser/file-service-activation.spec.js.map +1 -0
  77. package/lib/browser/file-service-copy.spec.d.ts +2 -0
  78. package/lib/browser/file-service-copy.spec.d.ts.map +1 -0
  79. package/lib/browser/file-service-copy.spec.js +193 -0
  80. package/lib/browser/file-service-copy.spec.js.map +1 -0
  81. package/lib/browser/file-service-watcher.spec.js +199 -201
  82. package/lib/browser/file-service-watcher.spec.js.map +1 -1
  83. package/lib/browser/file-service.d.ts +4 -4
  84. package/lib/browser/file-service.d.ts.map +1 -1
  85. package/lib/browser/file-service.js +179 -182
  86. package/lib/browser/file-service.js.map +1 -1
  87. package/lib/browser/file-tree/file-tree-container.js +12 -15
  88. package/lib/browser/file-tree/file-tree-container.js.map +1 -1
  89. package/lib/browser/file-tree/file-tree-decorator-adapter.js +23 -31
  90. package/lib/browser/file-tree/file-tree-decorator-adapter.js.map +1 -1
  91. package/lib/browser/file-tree/file-tree-decorator-adapter.spec.js +26 -28
  92. package/lib/browser/file-tree/file-tree-decorator-adapter.spec.js.map +1 -1
  93. package/lib/browser/file-tree/file-tree-label-provider.d.ts +1 -1
  94. package/lib/browser/file-tree/file-tree-label-provider.d.ts.map +1 -1
  95. package/lib/browser/file-tree/file-tree-label-provider.js +13 -18
  96. package/lib/browser/file-tree/file-tree-label-provider.js.map +1 -1
  97. package/lib/browser/file-tree/file-tree-model.d.ts +4 -4
  98. package/lib/browser/file-tree/file-tree-model.d.ts.map +1 -1
  99. package/lib/browser/file-tree/file-tree-model.js +42 -52
  100. package/lib/browser/file-tree/file-tree-model.js.map +1 -1
  101. package/lib/browser/file-tree/file-tree-widget.d.ts +3 -3
  102. package/lib/browser/file-tree/file-tree-widget.d.ts.map +1 -1
  103. package/lib/browser/file-tree/file-tree-widget.js +63 -71
  104. package/lib/browser/file-tree/file-tree-widget.js.map +1 -1
  105. package/lib/browser/file-tree/file-tree.d.ts +3 -3
  106. package/lib/browser/file-tree/file-tree.d.ts.map +1 -1
  107. package/lib/browser/file-tree/file-tree.js +26 -31
  108. package/lib/browser/file-tree/file-tree.js.map +1 -1
  109. package/lib/browser/file-tree/index.d.ts +6 -6
  110. package/lib/browser/file-tree/index.d.ts.map +1 -1
  111. package/lib/browser/file-tree/index.js +6 -9
  112. package/lib/browser/file-tree/index.js.map +1 -1
  113. package/lib/browser/filesystem-frontend-contribution.d.ts +6 -6
  114. package/lib/browser/filesystem-frontend-contribution.d.ts.map +1 -1
  115. package/lib/browser/filesystem-frontend-contribution.js +75 -90
  116. package/lib/browser/filesystem-frontend-contribution.js.map +1 -1
  117. package/lib/browser/filesystem-frontend-module.js +47 -50
  118. package/lib/browser/filesystem-frontend-module.js.map +1 -1
  119. package/lib/browser/filesystem-saveable-service.d.ts +2 -2
  120. package/lib/browser/filesystem-saveable-service.d.ts.map +1 -1
  121. package/lib/browser/filesystem-saveable-service.js +35 -44
  122. package/lib/browser/filesystem-saveable-service.js.map +1 -1
  123. package/lib/browser/filesystem-watcher-error-handler.js +13 -18
  124. package/lib/browser/filesystem-watcher-error-handler.js.map +1 -1
  125. package/lib/browser/index.d.ts +4 -4
  126. package/lib/browser/index.d.ts.map +1 -1
  127. package/lib/browser/index.js +4 -7
  128. package/lib/browser/index.js.map +1 -1
  129. package/lib/browser/location/index.d.ts +2 -2
  130. package/lib/browser/location/index.d.ts.map +1 -1
  131. package/lib/browser/location/index.js +2 -5
  132. package/lib/browser/location/index.js.map +1 -1
  133. package/lib/browser/location/location-renderer.d.ts +3 -3
  134. package/lib/browser/location/location-renderer.d.ts.map +1 -1
  135. package/lib/browser/location/location-renderer.js +42 -51
  136. package/lib/browser/location/location-renderer.js.map +1 -1
  137. package/lib/browser/location/location-renderer.spec.js +61 -63
  138. package/lib/browser/location/location-renderer.spec.js.map +1 -1
  139. package/lib/browser/location/location-service.js +1 -2
  140. package/lib/browser/location/location-service.js.map +1 -1
  141. package/lib/browser/remote-file-service-contribution.d.ts +2 -2
  142. package/lib/browser/remote-file-service-contribution.d.ts.map +1 -1
  143. package/lib/browser/remote-file-service-contribution.js +8 -12
  144. package/lib/browser/remote-file-service-contribution.js.map +1 -1
  145. package/lib/browser/upload/file-upload-service-impl.d.ts +3 -3
  146. package/lib/browser/upload/file-upload-service-impl.d.ts.map +1 -1
  147. package/lib/browser/upload/file-upload-service-impl.js +55 -64
  148. package/lib/browser/upload/file-upload-service-impl.js.map +1 -1
  149. package/lib/browser/vscode-file-service-contribution.d.ts +2 -2
  150. package/lib/browser/vscode-file-service-contribution.d.ts.map +1 -1
  151. package/lib/browser/vscode-file-service-contribution.js +23 -28
  152. package/lib/browser/vscode-file-service-contribution.js.map +1 -1
  153. package/lib/browser-only/browser-only-filesystem-frontend-module.js +21 -23
  154. package/lib/browser-only/browser-only-filesystem-frontend-module.js.map +1 -1
  155. package/lib/browser-only/browser-only-filesystem-provider-server.d.ts +1 -1
  156. package/lib/browser-only/browser-only-filesystem-provider-server.d.ts.map +1 -1
  157. package/lib/browser-only/browser-only-filesystem-provider-server.js +10 -13
  158. package/lib/browser-only/browser-only-filesystem-provider-server.js.map +1 -1
  159. package/lib/browser-only/download/file-download-command-contribution.d.ts +1 -1
  160. package/lib/browser-only/download/file-download-command-contribution.d.ts.map +1 -1
  161. package/lib/browser-only/download/file-download-command-contribution.js +14 -19
  162. package/lib/browser-only/download/file-download-command-contribution.js.map +1 -1
  163. package/lib/browser-only/download/file-download-frontend-module.js +8 -10
  164. package/lib/browser-only/download/file-download-frontend-module.js.map +1 -1
  165. package/lib/browser-only/download/file-download-service.d.ts +3 -3
  166. package/lib/browser-only/download/file-download-service.d.ts.map +1 -1
  167. package/lib/browser-only/download/file-download-service.js +26 -33
  168. package/lib/browser-only/download/file-download-service.js.map +1 -1
  169. package/lib/browser-only/file-search.d.ts.map +1 -1
  170. package/lib/browser-only/file-search.js +9 -14
  171. package/lib/browser-only/file-search.js.map +1 -1
  172. package/lib/browser-only/opfs-filesystem-initialization.d.ts +1 -1
  173. package/lib/browser-only/opfs-filesystem-initialization.d.ts.map +1 -1
  174. package/lib/browser-only/opfs-filesystem-initialization.js +6 -9
  175. package/lib/browser-only/opfs-filesystem-initialization.js.map +1 -1
  176. package/lib/browser-only/opfs-filesystem-provider.d.ts +2 -2
  177. package/lib/browser-only/opfs-filesystem-provider.d.ts.map +1 -1
  178. package/lib/browser-only/opfs-filesystem-provider.js +60 -68
  179. package/lib/browser-only/opfs-filesystem-provider.js.map +1 -1
  180. package/lib/browser-only/upload/file-upload-service-impl.d.ts +3 -3
  181. package/lib/browser-only/upload/file-upload-service-impl.d.ts.map +1 -1
  182. package/lib/browser-only/upload/file-upload-service-impl.js +51 -60
  183. package/lib/browser-only/upload/file-upload-service-impl.js.map +1 -1
  184. package/lib/common/delegating-file-system-provider.d.ts +1 -1
  185. package/lib/common/delegating-file-system-provider.d.ts.map +1 -1
  186. package/lib/common/delegating-file-system-provider.js +18 -22
  187. package/lib/common/delegating-file-system-provider.js.map +1 -1
  188. package/lib/common/download/file-download.js +5 -8
  189. package/lib/common/download/file-download.js.map +1 -1
  190. package/lib/common/file-upload.js +1 -4
  191. package/lib/common/file-upload.js.map +1 -1
  192. package/lib/common/files.js +38 -58
  193. package/lib/common/files.js.map +1 -1
  194. package/lib/common/files.spec.js +22 -24
  195. package/lib/common/files.spec.js.map +1 -1
  196. package/lib/common/filesystem-preferences.js +39 -44
  197. package/lib/common/filesystem-preferences.js.map +1 -1
  198. package/lib/common/filesystem-utils.d.ts +1 -1
  199. package/lib/common/filesystem-utils.d.ts.map +1 -1
  200. package/lib/common/filesystem-utils.js +2 -5
  201. package/lib/common/filesystem-utils.js.map +1 -1
  202. package/lib/common/filesystem-utils.spec.js +227 -229
  203. package/lib/common/filesystem-utils.spec.js.map +1 -1
  204. package/lib/common/filesystem-watcher-protocol.d.ts +5 -1
  205. package/lib/common/filesystem-watcher-protocol.d.ts.map +1 -1
  206. package/lib/common/filesystem-watcher-protocol.js +2 -5
  207. package/lib/common/filesystem-watcher-protocol.js.map +1 -1
  208. package/lib/common/filesystem.js +2 -5
  209. package/lib/common/filesystem.js.map +1 -1
  210. package/lib/common/index.d.ts +3 -3
  211. package/lib/common/index.d.ts.map +1 -1
  212. package/lib/common/index.js +3 -6
  213. package/lib/common/index.js.map +1 -1
  214. package/lib/common/io.d.ts +2 -2
  215. package/lib/common/io.d.ts.map +1 -1
  216. package/lib/common/io.js +10 -13
  217. package/lib/common/io.js.map +1 -1
  218. package/lib/common/remote-file-system-provider.d.ts +1 -1
  219. package/lib/common/remote-file-system-provider.d.ts.map +1 -1
  220. package/lib/common/remote-file-system-provider.js +81 -93
  221. package/lib/common/remote-file-system-provider.js.map +1 -1
  222. package/lib/common/upload/file-upload.js +1 -4
  223. package/lib/common/upload/file-upload.js.map +1 -1
  224. package/lib/electron-browser/file-dialog/electron-file-dialog-module.js +6 -8
  225. package/lib/electron-browser/file-dialog/electron-file-dialog-module.js.map +1 -1
  226. package/lib/electron-browser/file-dialog/electron-file-dialog-service.d.ts +3 -3
  227. package/lib/electron-browser/file-dialog/electron-file-dialog-service.d.ts.map +1 -1
  228. package/lib/electron-browser/file-dialog/electron-file-dialog-service.js +20 -24
  229. package/lib/electron-browser/file-dialog/electron-file-dialog-service.js.map +1 -1
  230. package/lib/electron-browser/file-dialog/electron-file-dialog-service.spec.d.ts +2 -0
  231. package/lib/electron-browser/file-dialog/electron-file-dialog-service.spec.d.ts.map +1 -0
  232. package/lib/electron-browser/file-dialog/electron-file-dialog-service.spec.js +46 -0
  233. package/lib/electron-browser/file-dialog/electron-file-dialog-service.spec.js.map +1 -0
  234. package/lib/electron-browser/preload.js +6 -9
  235. package/lib/electron-browser/preload.js.map +1 -1
  236. package/lib/electron-common/electron-api.js +2 -5
  237. package/lib/electron-common/electron-api.js.map +1 -1
  238. package/lib/electron-main/electron-api-main.js +15 -18
  239. package/lib/electron-main/electron-api-main.js.map +1 -1
  240. package/lib/electron-main/electron-main-module.js +6 -8
  241. package/lib/electron-main/electron-main-module.js.map +1 -1
  242. package/lib/node/disk-file-system-provider.d.ts +2 -2
  243. package/lib/node/disk-file-system-provider.d.ts.map +1 -1
  244. package/lib/node/disk-file-system-provider.js +116 -121
  245. package/lib/node/disk-file-system-provider.js.map +1 -1
  246. package/lib/node/disk-file-system-provider.spec.js +77 -54
  247. package/lib/node/disk-file-system-provider.spec.js.map +1 -1
  248. package/lib/node/download/directory-archiver.js +13 -16
  249. package/lib/node/download/directory-archiver.js.map +1 -1
  250. package/lib/node/download/directory-archiver.spec.js +20 -22
  251. package/lib/node/download/directory-archiver.spec.js.map +1 -1
  252. package/lib/node/download/file-download-backend-module.js +14 -16
  253. package/lib/node/download/file-download-backend-module.js.map +1 -1
  254. package/lib/node/download/file-download-cache.js +12 -16
  255. package/lib/node/download/file-download-cache.js.map +1 -1
  256. package/lib/node/download/file-download-endpoint.d.ts +1 -1
  257. package/lib/node/download/file-download-endpoint.d.ts.map +1 -1
  258. package/lib/node/download/file-download-endpoint.js +25 -31
  259. package/lib/node/download/file-download-endpoint.js.map +1 -1
  260. package/lib/node/download/file-download-handler.d.ts +2 -2
  261. package/lib/node/download/file-download-handler.d.ts.map +1 -1
  262. package/lib/node/download/file-download-handler.js +70 -77
  263. package/lib/node/download/file-download-handler.js.map +1 -1
  264. package/lib/node/download/test/mock-directory-archiver.d.ts +1 -1
  265. package/lib/node/download/test/mock-directory-archiver.d.ts.map +1 -1
  266. package/lib/node/download/test/mock-directory-archiver.js +2 -6
  267. package/lib/node/download/test/mock-directory-archiver.js.map +1 -1
  268. package/lib/node/file-change-collection.d.ts +1 -1
  269. package/lib/node/file-change-collection.d.ts.map +1 -1
  270. package/lib/node/file-change-collection.js +1 -5
  271. package/lib/node/file-change-collection.js.map +1 -1
  272. package/lib/node/file-change-collection.spec.js +5 -7
  273. package/lib/node/file-change-collection.spec.js.map +1 -1
  274. package/lib/node/filesystem-backend-module.d.ts +3 -3
  275. package/lib/node/filesystem-backend-module.d.ts.map +1 -1
  276. package/lib/node/filesystem-backend-module.js +57 -62
  277. package/lib/node/filesystem-backend-module.js.map +1 -1
  278. package/lib/node/filesystem-watcher-client.d.ts +2 -2
  279. package/lib/node/filesystem-watcher-client.d.ts.map +1 -1
  280. package/lib/node/filesystem-watcher-client.js +11 -16
  281. package/lib/node/filesystem-watcher-client.js.map +1 -1
  282. package/lib/node/filesystem-watcher-dispatcher.d.ts +1 -1
  283. package/lib/node/filesystem-watcher-dispatcher.d.ts.map +1 -1
  284. package/lib/node/filesystem-watcher-dispatcher.js +9 -13
  285. package/lib/node/filesystem-watcher-dispatcher.js.map +1 -1
  286. package/lib/node/filesystem-watcher-service-impl.d.ts +30 -0
  287. package/lib/node/filesystem-watcher-service-impl.d.ts.map +1 -0
  288. package/lib/node/filesystem-watcher-service-impl.js +88 -0
  289. package/lib/node/filesystem-watcher-service-impl.js.map +1 -0
  290. package/lib/node/filesystem-watcher-service-impl.spec.d.ts +2 -0
  291. package/lib/node/filesystem-watcher-service-impl.spec.d.ts.map +1 -0
  292. package/lib/node/filesystem-watcher-service-impl.spec.js +199 -0
  293. package/lib/node/filesystem-watcher-service-impl.spec.js.map +1 -0
  294. package/lib/node/filesystem-watcher.d.ts +93 -0
  295. package/lib/node/filesystem-watcher.d.ts.map +1 -0
  296. package/lib/node/filesystem-watcher.js +129 -0
  297. package/lib/node/filesystem-watcher.js.map +1 -0
  298. package/lib/node/nodejs-watcher/node-directory-watcher.d.ts +175 -0
  299. package/lib/node/nodejs-watcher/node-directory-watcher.d.ts.map +1 -0
  300. package/lib/node/nodejs-watcher/node-directory-watcher.js +574 -0
  301. package/lib/node/nodejs-watcher/node-directory-watcher.js.map +1 -0
  302. package/lib/node/nodejs-watcher/node-directory-watcher.spec.d.ts +2 -0
  303. package/lib/node/nodejs-watcher/node-directory-watcher.spec.d.ts.map +1 -0
  304. package/lib/node/nodejs-watcher/node-directory-watcher.spec.js +1281 -0
  305. package/lib/node/nodejs-watcher/node-directory-watcher.spec.js.map +1 -0
  306. package/lib/node/nodejs-watcher/watch-request-router.d.ts +63 -0
  307. package/lib/node/nodejs-watcher/watch-request-router.d.ts.map +1 -0
  308. package/lib/node/nodejs-watcher/watch-request-router.js +178 -0
  309. package/lib/node/nodejs-watcher/watch-request-router.js.map +1 -0
  310. package/lib/node/nodejs-watcher/watcher-host.d.ts +50 -0
  311. package/lib/node/nodejs-watcher/watcher-host.d.ts.map +1 -0
  312. package/lib/node/nodejs-watcher/watcher-host.js +94 -0
  313. package/lib/node/nodejs-watcher/watcher-host.js.map +1 -0
  314. package/lib/node/parcel-watcher/index.js +6 -8
  315. package/lib/node/parcel-watcher/index.js.map +1 -1
  316. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts +14 -194
  317. package/lib/node/parcel-watcher/parcel-filesystem-service.d.ts.map +1 -1
  318. package/lib/node/parcel-watcher/parcel-filesystem-service.js +5 -426
  319. package/lib/node/parcel-watcher/parcel-filesystem-service.js.map +1 -1
  320. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js +23 -25
  321. package/lib/node/parcel-watcher/parcel-filesystem-watcher.spec.js.map +1 -1
  322. package/lib/node/parcel-watcher/parcel-options.js +1 -4
  323. package/lib/node/parcel-watcher/parcel-options.js.map +1 -1
  324. package/lib/node/parcel-watcher/parcel-watcher-exclude.spec.js +12 -16
  325. package/lib/node/parcel-watcher/parcel-watcher-exclude.spec.js.map +1 -1
  326. package/lib/node/parcel-watcher/parcel-watcher-retry.spec.js +11 -15
  327. package/lib/node/parcel-watcher/parcel-watcher-retry.spec.js.map +1 -1
  328. package/lib/node/parcel-watcher/parcel-watcher.d.ts +165 -0
  329. package/lib/node/parcel-watcher/parcel-watcher.d.ts.map +1 -0
  330. package/lib/node/parcel-watcher/parcel-watcher.js +366 -0
  331. package/lib/node/parcel-watcher/parcel-watcher.js.map +1 -0
  332. package/lib/node/test/watcher-test-helper.d.ts +21 -0
  333. package/lib/node/test/watcher-test-helper.d.ts.map +1 -0
  334. package/lib/node/test/watcher-test-helper.js +51 -0
  335. package/lib/node/test/watcher-test-helper.js.map +1 -0
  336. package/lib/node/upload/node-file-upload-service.d.ts +1 -1
  337. package/lib/node/upload/node-file-upload-service.d.ts.map +1 -1
  338. package/lib/node/upload/node-file-upload-service.js +20 -25
  339. package/lib/node/upload/node-file-upload-service.js.map +1 -1
  340. package/lib/node/upload/node-file-upload-service.spec.js +21 -23
  341. package/lib/node/upload/node-file-upload-service.spec.js.map +1 -1
  342. package/package.json +21 -7
  343. package/src/browser/breadcrumbs/filepath-breadcrumb.ts +1 -1
  344. package/src/browser/breadcrumbs/filepath-breadcrumbs-container.ts +1 -1
  345. package/src/browser/breadcrumbs/filepath-breadcrumbs-contribution.ts +5 -5
  346. package/src/browser/download/file-download-command-contribution.ts +1 -1
  347. package/src/browser/download/file-download-frontend-module.ts +3 -3
  348. package/src/browser/download/file-download-service.ts +1 -2
  349. package/src/browser/file-dialog/file-dialog-container.ts +5 -5
  350. package/src/browser/file-dialog/file-dialog-hidden-files-renderer.tsx +1 -1
  351. package/src/browser/file-dialog/file-dialog-model.ts +2 -2
  352. package/src/browser/file-dialog/file-dialog-module.ts +5 -5
  353. package/src/browser/file-dialog/file-dialog-service.ts +4 -4
  354. package/src/browser/file-dialog/file-dialog-tree-filters-renderer.spec.ts +43 -0
  355. package/src/browser/file-dialog/file-dialog-tree-filters-renderer.tsx +4 -2
  356. package/src/browser/file-dialog/file-dialog-tree.ts +2 -2
  357. package/src/browser/file-dialog/file-dialog-widget.ts +2 -2
  358. package/src/browser/file-dialog/file-dialog.ts +17 -7
  359. package/src/browser/file-dialog/index.ts +4 -4
  360. package/src/browser/file-resource.spec.ts +3 -3
  361. package/src/browser/file-resource.ts +3 -3
  362. package/src/browser/file-selection.ts +1 -1
  363. package/src/browser/file-service-activation.spec.ts +93 -0
  364. package/src/browser/file-service-copy.spec.ts +226 -0
  365. package/src/browser/file-service-watcher.spec.ts +2 -2
  366. package/src/browser/file-service.ts +22 -11
  367. package/src/browser/file-tree/file-tree-container.ts +3 -3
  368. package/src/browser/file-tree/file-tree-decorator-adapter.spec.ts +1 -1
  369. package/src/browser/file-tree/file-tree-decorator-adapter.ts +1 -1
  370. package/src/browser/file-tree/file-tree-label-provider.ts +1 -1
  371. package/src/browser/file-tree/file-tree-model.ts +5 -5
  372. package/src/browser/file-tree/file-tree-widget.tsx +4 -4
  373. package/src/browser/file-tree/file-tree.ts +3 -3
  374. package/src/browser/file-tree/index.ts +6 -6
  375. package/src/browser/filesystem-frontend-contribution.ts +6 -6
  376. package/src/browser/filesystem-frontend-module.ts +14 -14
  377. package/src/browser/filesystem-saveable-service.ts +2 -2
  378. package/src/browser/index.ts +4 -4
  379. package/src/browser/location/index.ts +2 -2
  380. package/src/browser/location/location-renderer.spec.ts +3 -3
  381. package/src/browser/location/location-renderer.tsx +3 -3
  382. package/src/browser/remote-file-service-contribution.ts +2 -2
  383. package/src/browser/upload/file-upload-service-impl.ts +5 -5
  384. package/src/browser/vscode-file-service-contribution.ts +2 -2
  385. package/src/browser-only/browser-only-filesystem-frontend-module.ts +7 -7
  386. package/src/browser-only/browser-only-filesystem-provider-server.ts +1 -1
  387. package/src/browser-only/download/file-download-command-contribution.ts +2 -2
  388. package/src/browser-only/download/file-download-frontend-module.ts +3 -3
  389. package/src/browser-only/download/file-download-service.ts +3 -3
  390. package/src/browser-only/file-search.ts +2 -1
  391. package/src/browser-only/opfs-filesystem-initialization.ts +1 -1
  392. package/src/browser-only/opfs-filesystem-provider.ts +3 -3
  393. package/src/browser-only/upload/file-upload-service-impl.ts +4 -4
  394. package/src/common/delegating-file-system-provider.ts +1 -1
  395. package/src/common/files.spec.ts +1 -1
  396. package/src/common/filesystem-utils.spec.ts +2 -2
  397. package/src/common/filesystem-utils.ts +1 -1
  398. package/src/common/filesystem-watcher-protocol.ts +5 -1
  399. package/src/common/index.ts +3 -3
  400. package/src/common/io.ts +2 -2
  401. package/src/common/remote-file-system-provider.ts +1 -1
  402. package/src/electron-browser/file-dialog/electron-file-dialog-module.ts +2 -2
  403. package/src/electron-browser/file-dialog/electron-file-dialog-service.spec.ts +57 -0
  404. package/src/electron-browser/file-dialog/electron-file-dialog-service.ts +5 -5
  405. package/src/electron-browser/preload.ts +1 -1
  406. package/src/electron-main/electron-api-main.ts +1 -1
  407. package/src/electron-main/electron-main-module.ts +1 -1
  408. package/src/node/disk-file-system-provider.spec.ts +32 -3
  409. package/src/node/disk-file-system-provider.ts +12 -8
  410. package/src/node/download/directory-archiver.spec.ts +1 -1
  411. package/src/node/download/file-download-backend-module.ts +4 -4
  412. package/src/node/download/file-download-cache.ts +1 -1
  413. package/src/node/download/file-download-endpoint.ts +4 -3
  414. package/src/node/download/file-download-handler.ts +3 -4
  415. package/src/node/download/test/mock-directory-archiver.ts +1 -1
  416. package/src/node/file-change-collection.spec.ts +2 -2
  417. package/src/node/file-change-collection.ts +1 -1
  418. package/src/node/filesystem-backend-module.ts +15 -14
  419. package/src/node/filesystem-watcher-client.ts +2 -2
  420. package/src/node/filesystem-watcher-dispatcher.ts +1 -1
  421. package/src/node/filesystem-watcher-service-impl.spec.ts +272 -0
  422. package/src/node/filesystem-watcher-service-impl.ts +109 -0
  423. package/src/node/filesystem-watcher.ts +197 -0
  424. package/src/node/nodejs-watcher/node-directory-watcher.spec.ts +1594 -0
  425. package/src/node/nodejs-watcher/node-directory-watcher.ts +664 -0
  426. package/src/node/nodejs-watcher/watch-request-router.ts +224 -0
  427. package/src/node/nodejs-watcher/watcher-host.ts +126 -0
  428. package/src/node/parcel-watcher/index.ts +3 -3
  429. package/src/node/parcel-watcher/parcel-filesystem-service.ts +14 -500
  430. package/src/node/parcel-watcher/parcel-filesystem-watcher.spec.ts +5 -5
  431. package/src/node/parcel-watcher/parcel-watcher-exclude.spec.ts +7 -11
  432. package/src/node/parcel-watcher/parcel-watcher-retry.spec.ts +6 -8
  433. package/src/node/parcel-watcher/parcel-watcher.ts +433 -0
  434. package/src/node/test/watcher-test-helper.ts +58 -0
  435. package/src/node/upload/node-file-upload-service.spec.ts +1 -1
  436. package/src/node/upload/node-file-upload-service.ts +6 -6
@@ -15,10 +15,10 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { inject, injectable } from '@theia/core/shared/inversify';
18
- import { FileServiceContribution, FileService } from './file-service';
18
+ import { FileServiceContribution, FileService } from './file-service.js';
19
19
  import {
20
20
  FileChange, FileDeleteOptions, FileOverwriteOptions, FilePermission, FileSystemProvider, FileSystemProviderCapabilities, FileType, FileWriteOptions, Stat, WatchOptions
21
- } from '../common/files';
21
+ } from '../common/files.js';
22
22
  import { Event, URI, Disposable, Emitter } from '@theia/core';
23
23
  import { JsonSchemaDataStore } from '@theia/core/lib/browser/json-schema-store';
24
24
  import { BinaryBuffer } from '@theia/core/lib/common/buffer';
@@ -15,13 +15,13 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { ContainerModule } from '@theia/core/shared/inversify';
18
- import { FileSystemProvider } from '../common/files';
19
- import { OPFSFileSystemProvider } from './opfs-filesystem-provider';
20
- import { RemoteFileSystemProvider, RemoteFileSystemServer } from '../common/remote-file-system-provider';
21
- import { OPFSInitialization, DefaultOPFSInitialization } from './opfs-filesystem-initialization';
22
- import { BrowserOnlyFileSystemProviderServer } from './browser-only-filesystem-provider-server';
23
- import { FileUploadService } from '../common/upload/file-upload';
24
- import { FileUploadServiceImpl } from './upload/file-upload-service-impl';
18
+ import { FileSystemProvider } from '../common/files.js';
19
+ import { OPFSFileSystemProvider } from './opfs-filesystem-provider.js';
20
+ import { RemoteFileSystemProvider, RemoteFileSystemServer } from '../common/remote-file-system-provider.js';
21
+ import { OPFSInitialization, DefaultOPFSInitialization } from './opfs-filesystem-initialization.js';
22
+ import { BrowserOnlyFileSystemProviderServer } from './browser-only-filesystem-provider-server.js';
23
+ import { FileUploadService } from '../common/upload/file-upload.js';
24
+ import { FileUploadServiceImpl } from './upload/file-upload-service-impl.js';
25
25
 
26
26
  export default new ContainerModule((bind, _unbind, isBound, rebind) => {
27
27
  bind(DefaultOPFSInitialization).toSelf();
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { injectable } from '@theia/core/shared/inversify';
18
- import { FileSystemProviderServer } from '../common/remote-file-system-provider';
18
+ import { FileSystemProviderServer } from '../common/remote-file-system-provider.js';
19
19
  import { Event } from '@theia/core';
20
20
 
21
21
  /**
@@ -19,8 +19,8 @@ import URI from '@theia/core/lib/common/uri';
19
19
  import { SelectionService } from '@theia/core/lib/common/selection-service';
20
20
  import { CommandContribution, CommandRegistry } from '@theia/core/lib/common/command';
21
21
  import { UriAwareCommandHandler } from '@theia/core/lib/common/uri-command-handler';
22
- import { FileDownloadService } from '../../common/download/file-download';
23
- import { FileDownloadCommands } from '../../browser/download/file-download-command-contribution';
22
+ import { FileDownloadService } from '../../common/download/file-download.js';
23
+ import { FileDownloadCommands } from '../../browser/download/file-download-command-contribution.js';
24
24
 
25
25
  @injectable()
26
26
  export class FileDownloadCommandContribution implements CommandContribution {
@@ -15,10 +15,10 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { ContainerModule } from '@theia/core/shared/inversify';
18
- import { FileDownloadService } from '../../common/download/file-download';
19
- import { FileDownloadServiceImpl } from './file-download-service';
18
+ import { FileDownloadService } from '../../common/download/file-download.js';
19
+ import { FileDownloadServiceImpl } from './file-download-service.js';
20
20
  import { CommandContribution } from '@theia/core/lib/common';
21
- import { FileDownloadCommandContribution } from './file-download-command-contribution';
21
+ import { FileDownloadCommandContribution } from './file-download-command-contribution.js';
22
22
 
23
23
  export default new ContainerModule(bind => {
24
24
  bind(FileDownloadService).to(FileDownloadServiceImpl).inSingletonScope();
@@ -18,12 +18,12 @@ import { inject, injectable, named } from '@theia/core/shared/inversify';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
  import { ILogger } from '@theia/core/lib/common/logger';
20
20
  import { MessageService } from '@theia/core/lib/common/message-service';
21
- import { FileSystemPreferences } from '../../common/filesystem-preferences';
21
+ import { FileSystemPreferences } from '../../common/filesystem-preferences.js';
22
22
  import { nls } from '@theia/core';
23
23
  import { BinaryBuffer } from '@theia/core/lib/common/buffer';
24
24
  import { binaryStreamToWebStream } from '@theia/core/lib/common/stream';
25
- import { FileService } from '../../browser/file-service';
26
- import type { FileDownloadService } from '../../common/download/file-download';
25
+ import { FileService } from '../../browser/file-service.js';
26
+ import type { FileDownloadService } from '../../common/download/file-download.js';
27
27
  import * as tarStream from 'tar-stream';
28
28
  import { minimatch } from 'minimatch';
29
29
 
@@ -89,7 +89,8 @@ export function matchesPattern(text: string, patterns: string[], opts?: Minimatc
89
89
  * @returns An object with add and ignores methods
90
90
  */
91
91
  export function createIgnoreMatcher(): { add: (patterns: string | string[]) => void; ignores: (path: string) => boolean } {
92
- const ig = ignore();
92
+ // `ignore` is a CommonJS module that also provides itself as `default` export.
93
+ const ig = ignore.default();
93
94
 
94
95
  return {
95
96
  add: (patterns: string | string[]) => ig.add(patterns),
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import type { OPFSFileSystemProvider } from './opfs-filesystem-provider';
17
+ import type { OPFSFileSystemProvider } from './opfs-filesystem-provider.js';
18
18
  import { injectable } from '@theia/core/shared/inversify';
19
19
 
20
20
  export const OPFSInitialization = Symbol('OPFSInitialization');
@@ -26,16 +26,16 @@ import {
26
26
  FileType, FileWriteOptions, Stat, WatchOptions, createFileSystemProviderError,
27
27
  FileOpenOptions, FileUpdateOptions, FileUpdateResult,
28
28
  type FileReadStreamOptions
29
- } from '../common/files';
29
+ } from '../common/files.js';
30
30
  import { Emitter, Event, URI, Disposable, DisposableCollection, type CancellationToken } from '@theia/core';
31
31
  import { EncodingService } from '@theia/core/lib/common/encoding-service';
32
32
  import { BinaryBuffer } from '@theia/core/lib/common/buffer';
33
33
  import { TextDocumentContentChangeEvent } from '@theia/core/shared/vscode-languageserver-protocol';
34
34
  import { TextDocument } from 'vscode-languageserver-textdocument';
35
35
  import { OPFSFileSystem, WatchEventType, type FileStat, type OPFSError, type WatchEvent } from 'opfs-worker';
36
- import { OPFSInitialization } from './opfs-filesystem-initialization';
36
+ import { OPFSInitialization } from './opfs-filesystem-initialization.js';
37
37
  import { ReadableStreamEvents, newWriteableStream } from '@theia/core/lib/common/stream';
38
- import { readFileIntoStream } from '../common/io';
38
+ import { readFileIntoStream } from '../common/io.js';
39
39
  import { Path } from '@theia/core/lib/common/path';
40
40
 
41
41
  @injectable()
@@ -20,17 +20,17 @@ import { CancellationTokenSource, CancellationToken, checkCancelled, isCancelled
20
20
  import { Deferred } from '@theia/core/lib/common/promise-util';
21
21
  import { MessageService } from '@theia/core/lib/common/message-service';
22
22
  import { Progress } from '@theia/core/lib/common/message-service-protocol';
23
- import throttle = require('@theia/core/shared/lodash.throttle');
23
+ import throttle from '@theia/core/shared/lodash.throttle';
24
24
  import { Semaphore } from 'async-mutex';
25
- import { FileService } from '../../browser/file-service';
25
+ import { FileService } from '../../browser/file-service.js';
26
26
  import { ConfirmDialog, Dialog } from '@theia/core/lib/browser';
27
27
  import { nls } from '@theia/core/lib/common/nls';
28
28
  import { Emitter, Event } from '@theia/core/lib/common/event';
29
- import { FileSystemPreferences } from '../../common/filesystem-preferences';
29
+ import { FileSystemPreferences } from '../../common/filesystem-preferences.js';
30
30
  import { fileToStream } from '@theia/core/lib/common/stream';
31
31
  import { minimatch } from 'minimatch';
32
32
 
33
- import type { FileUploadService } from '../../common/upload/file-upload';
33
+ import type { FileUploadService } from '../../common/upload/file-upload.js';
34
34
 
35
35
  interface UploadState {
36
36
  uploaded?: boolean;
@@ -22,7 +22,7 @@ import {
22
22
  hasReadWriteCapability, hasFileFolderCopyCapability, hasOpenReadWriteCloseCapability, hasAccessCapability, FileUpdateOptions, hasUpdateCapability, FileUpdateResult,
23
23
  FileReadStreamOptions,
24
24
  hasFileReadStreamCapability
25
- } from './files';
25
+ } from './files.js';
26
26
  import type { TextDocumentContentChangeEvent } from '@theia/core/shared/vscode-languageserver-protocol';
27
27
  import { ReadableStreamEvents } from '@theia/core/lib/common/stream';
28
28
 
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { FileChangesEvent, FileChangeType } from './files';
17
+ import { FileChangesEvent, FileChangeType } from './files.js';
18
18
  import { expect } from 'chai';
19
19
  import URI from '@theia/core/lib/common/uri';
20
20
 
@@ -14,9 +14,9 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { FileStat } from './files';
17
+ import { FileStat } from './files.js';
18
18
  import { expect } from 'chai';
19
- import { FileSystemUtils } from './filesystem-utils';
19
+ import { FileSystemUtils } from './filesystem-utils.js';
20
20
 
21
21
  describe('generateUniqueResourceURI', () => {
22
22
  describe('Target is file', () => {
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { FileStat } from '../common/files';
17
+ import { FileStat } from '../common/files.js';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
 
20
20
  export namespace FileSystemUtils {
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { RpcServer } from '@theia/core';
18
- import { FileChangeType } from './files';
18
+ import { FileChangeType } from './files.js';
19
19
  export { FileChangeType };
20
20
 
21
21
  export const FileSystemWatcherService = Symbol('FileSystemWatcherServer2');
@@ -89,6 +89,10 @@ export interface FileSystemWatcherClient {
89
89
 
90
90
  export interface WatchOptions {
91
91
  ignored: string[];
92
+ /**
93
+ * Watch the whole subtree under the given path. Defaults to `true`.
94
+ */
95
+ recursive?: boolean;
92
96
  }
93
97
  export interface FileChange {
94
98
  uri: string;
@@ -14,6 +14,6 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- export * from './filesystem';
18
- export * from './filesystem-utils';
19
- export * from './filesystem-preferences';
17
+ export * from './filesystem.js';
18
+ export * from './filesystem-utils.js';
19
+ export * from './filesystem-preferences.js';
package/src/common/io.ts CHANGED
@@ -22,9 +22,9 @@
22
22
  /* eslint-disable max-len */
23
23
 
24
24
  import URI from '@theia/core/lib/common/uri';
25
- import { BinaryBuffer } from '@theia/core/lib/common//buffer';
25
+ import { BinaryBuffer } from '@theia/core/lib/common/buffer';
26
26
  import { CancellationToken, cancelled as canceled } from '@theia/core/lib/common/cancellation';
27
- import { FileSystemProviderWithOpenReadWriteCloseCapability, FileReadStreamOptions, ensureFileSystemProviderError, createFileSystemProviderError, FileSystemProviderErrorCode } from './files';
27
+ import { FileSystemProviderWithOpenReadWriteCloseCapability, FileReadStreamOptions, ensureFileSystemProviderError, createFileSystemProviderError, FileSystemProviderErrorCode } from './files.js';
28
28
  import { WriteableStream, ErrorTransformer, DataTransformer } from '@theia/core/lib/common/stream';
29
29
 
30
30
  export interface CreateReadStreamOptions extends FileReadStreamOptions {
@@ -25,7 +25,7 @@ import {
25
25
  hasOpenReadWriteCloseCapability, hasFileFolderCopyCapability, hasReadWriteCapability, hasAccessCapability,
26
26
  FileSystemProviderError, FileSystemProviderErrorCode, FileUpdateOptions, hasUpdateCapability, FileUpdateResult, FileReadStreamOptions, hasFileReadStreamCapability,
27
27
  ReadOnlyMessageFileSystemProvider
28
- } from './files';
28
+ } from './files.js';
29
29
  import { RpcServer, RpcProxy, RpcProxyFactory } from '@theia/core/lib/common/messaging/proxy-factory';
30
30
  import { ApplicationError } from '@theia/core/lib/common/application-error';
31
31
  import { Deferred } from '@theia/core/lib/common/promise-util';
@@ -15,8 +15,8 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { ContainerModule } from '@theia/core/shared/inversify';
18
- import { ElectronFileDialogService } from './electron-file-dialog-service';
19
- import { FileDialogService } from '../../browser';
18
+ import { ElectronFileDialogService } from './electron-file-dialog-service.js';
19
+ import { FileDialogService } from '../../browser/index.js';
20
20
 
21
21
  export default new ContainerModule((bind, _unbind, _isBound, rebind) => {
22
22
  bind(ElectronFileDialogService).toSelf().inSingletonScope();
@@ -0,0 +1,57 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 Vinay Kaushal and others.
3
+ //
4
+ // This program and the accompanying materials are made available under the
5
+ // terms of the Eclipse Public License v. 2.0 which is available at
6
+ // http://www.eclipse.org/legal/epl-2.0.
7
+ //
8
+ // This Source Code may also be made available under the following Secondary
9
+ // Licenses when the conditions for such availability set forth in the Eclipse
10
+ // Public License v. 2.0 are satisfied: GNU General Public License, version 2
11
+ // with the GNU Classpath Exception which is available at
12
+ // https://www.gnu.org/software/classpath/license.html.
13
+ //
14
+ // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
+ // *****************************************************************************
16
+
17
+ import { enableJSDOM } from '@theia/core/lib/browser/test/jsdom';
18
+ let disableJSDOM = enableJSDOM();
19
+
20
+ import { expect } from 'chai';
21
+ import { FileUri } from '@theia/core/lib/common/file-uri';
22
+ import URI from '@theia/core/lib/common/uri';
23
+ import { OpenFileDialogProps } from '../../browser/file-dialog/index.js';
24
+ import { OpenDialogOptions } from '../../electron-common/electron-api.js';
25
+ import { ElectronFileDialogService } from './electron-file-dialog-service.js';
26
+
27
+ disableJSDOM();
28
+
29
+ class TestElectronFileDialogService extends ElectronFileDialogService {
30
+ override toOpenDialogOptions(uri: URI, props: OpenFileDialogProps): OpenDialogOptions {
31
+ return super.toOpenDialogOptions(uri, props);
32
+ }
33
+ }
34
+
35
+ describe('ElectronFileDialogService', () => {
36
+
37
+ before(() => disableJSDOM = enableJSDOM());
38
+ after(() => disableJSDOM());
39
+
40
+ const uri = FileUri.create('/home/user');
41
+ const filters = { 'Theia Workspace': ['theia-workspace'] };
42
+
43
+ it('adds an All Files filter to the given filters', () => {
44
+ const options = new TestElectronFileDialogService().toOpenDialogOptions(uri, { title: 'Open', canSelectFiles: true, filters });
45
+ expect(options.filters).to.deep.equal([
46
+ { name: 'Theia Workspace', extensions: ['theia-workspace'] },
47
+ { name: 'All Files', extensions: ['*'] }
48
+ ]);
49
+ });
50
+
51
+ it('omits the All Files filter if it is disabled', () => {
52
+ const options = new TestElectronFileDialogService().toOpenDialogOptions(uri, { title: 'Open', canSelectFiles: true, filters, disableAllFilesFilter: true });
53
+ expect(options.filters).to.deep.equal([
54
+ { name: 'Theia Workspace', extensions: ['theia-workspace'] }
55
+ ]);
56
+ });
57
+ });
@@ -18,9 +18,9 @@ import { inject, injectable } from '@theia/core/shared/inversify';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
  import { MaybeArray } from '@theia/core/lib/common/types';
20
20
  import { MessageService } from '@theia/core/lib/common/message-service';
21
- import { FileStat } from '../../common/files';
22
- import { FileAccess } from '../../common/filesystem';
23
- import { DefaultFileDialogService, OpenFileDialogProps, SaveFileDialogProps } from '../../browser/file-dialog';
21
+ import { FileStat } from '../../common/files.js';
22
+ import { FileAccess } from '../../common/filesystem.js';
23
+ import { DefaultFileDialogService, OpenFileDialogProps, SaveFileDialogProps } from '../../browser/file-dialog/index.js';
24
24
  //
25
25
  // We are OK to use this here because the electron backend and frontend are on the same host.
26
26
  // If required, we can move this single service (and its module) to a dedicated Theia extension,
@@ -29,7 +29,7 @@ import { DefaultFileDialogService, OpenFileDialogProps, SaveFileDialogProps } fr
29
29
  //
30
30
  // eslint-disable-next-line @theia/runtime-import-check
31
31
  import { FileUri } from '@theia/core/lib/common/file-uri';
32
- import { OpenDialogOptions, SaveDialogOptions } from '../../electron-common/electron-api';
32
+ import { OpenDialogOptions, SaveDialogOptions } from '../../electron-common/electron-api.js';
33
33
 
34
34
  import '@theia/core/lib/electron-common/electron-api';
35
35
 
@@ -136,7 +136,7 @@ export class ElectronFileDialogService extends DefaultFileDialogService {
136
136
  result.filters.push({ name: label, extensions: extensions });
137
137
  }
138
138
 
139
- if (props.canSelectFiles) {
139
+ if (props.canSelectFiles && !props.disableAllFilesFilter) {
140
140
  if (filters.length > 0) {
141
141
  result.filters.push({ name: 'All Files', extensions: ['*'] });
142
142
  }
@@ -13,7 +13,7 @@
13
13
  //
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
- import { CHANNEL_SHOW_OPEN, CHANNEL_SHOW_SAVE, OpenDialogOptions, SaveDialogOptions, TheiaFilesystemAPI } from '../electron-common/electron-api';
16
+ import { CHANNEL_SHOW_OPEN, CHANNEL_SHOW_SAVE, OpenDialogOptions, SaveDialogOptions, TheiaFilesystemAPI } from '../electron-common/electron-api.js';
17
17
 
18
18
  // eslint-disable-next-line import/no-extraneous-dependencies
19
19
  import { ipcRenderer, contextBridge } from '@theia/core/electron-shared/electron';
@@ -18,7 +18,7 @@ import { injectable } from '@theia/core/shared/inversify';
18
18
 
19
19
  import { ElectronMainApplication, ElectronMainApplicationContribution } from '@theia/core/lib/electron-main/electron-main-application';
20
20
  import { MaybePromise } from '@theia/core';
21
- import { CHANNEL_SHOW_OPEN, CHANNEL_SHOW_SAVE, OpenDialogOptions, SaveDialogOptions } from '../electron-common/electron-api';
21
+ import { CHANNEL_SHOW_OPEN, CHANNEL_SHOW_SAVE, OpenDialogOptions, SaveDialogOptions } from '../electron-common/electron-api.js';
22
22
  import { ipcMain, OpenDialogOptions as ElectronOpenDialogOptions, SaveDialogOptions as ElectronSaveDialogOptions, BrowserWindow, dialog }
23
23
  from '@theia/core/electron-shared/electron';
24
24
 
@@ -15,7 +15,7 @@
15
15
  // *****************************************************************************
16
16
  import { ContainerModule } from '@theia/core/shared/inversify';
17
17
  import { ElectronMainApplicationContribution } from '@theia/core/lib/electron-main/electron-main-application';
18
- import { ElectronApi } from './electron-api-main';
18
+ import { ElectronApi } from './electron-api-main.js';
19
19
 
20
20
  export default new ContainerModule(bind => {
21
21
  bind(ElectronApi).toSelf().inSingletonScope();
@@ -27,9 +27,9 @@ import * as os from 'os';
27
27
  import { join } from 'path';
28
28
  import * as temp from 'temp';
29
29
  import { generateUuid } from '@theia/core/lib/common/uuid';
30
- import { FilePermission, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode } from '../common/files';
31
- import { DiskFileSystemProvider } from './disk-file-system-provider';
32
- import { bindFileSystemWatcherServer } from './filesystem-backend-module';
30
+ import { FilePermission, FileSystemProviderCapabilities, FileSystemProviderError, FileSystemProviderErrorCode } from '../common/files.js';
31
+ import { DiskFileSystemProvider } from './disk-file-system-provider.js';
32
+ import { bindFileSystemWatcherServer } from './filesystem-backend-module.js';
33
33
 
34
34
  const tracked = temp.track();
35
35
 
@@ -114,6 +114,35 @@ describe('disk-file-system-provider', () => {
114
114
  }
115
115
  });
116
116
 
117
+ it('handles errors during temporary cleanup', async () => {
118
+ const tempDirPath = tracked.mkdirSync();
119
+ const provider = fsProvider as unknown as {
120
+ rimrafMove(path: string): Promise<void>;
121
+ rimrafUnlink(path: string): Promise<void>;
122
+ logger: ILogger;
123
+ };
124
+ const originalRimrafUnlink = provider.rimrafUnlink;
125
+ const originalWarn = provider.logger.warn;
126
+ let resolveWarning!: () => void;
127
+ const warningHandled = new Promise<void>(resolve => {
128
+ resolveWarning = resolve;
129
+ });
130
+ provider.rimrafUnlink = async path => {
131
+ await fs.rm(path, { recursive: true, force: true });
132
+ throw new Error('Cleanup failed');
133
+ };
134
+ provider.logger.warn = async () => {
135
+ resolveWarning();
136
+ };
137
+ try {
138
+ await provider.rimrafMove(tempDirPath);
139
+ await warningHandled;
140
+ } finally {
141
+ provider.rimrafUnlink = originalRimrafUnlink;
142
+ provider.logger.warn = originalWarn;
143
+ }
144
+ });
145
+
117
146
  it('delete is able to delete file', async function (): Promise<void> {
118
147
  this.timeout(10000);
119
148
  // Place the temp dir under $HOME so the XDG trash dir (~/.local/share/Trash) is on the same
@@ -56,17 +56,18 @@ import {
56
56
  FileChange,
57
57
  WatchOptions,
58
58
  FileUpdateOptions, FileUpdateResult, FileReadStreamOptions, FilePermission
59
- } from '../common/files';
60
- import { FileSystemWatcherServer } from '../common/filesystem-watcher-protocol';
61
- import trash = require('trash');
59
+ } from '../common/files.js';
60
+ import { FileSystemWatcherServer } from '../common/filesystem-watcher-protocol.js';
61
+ import trash from 'trash';
62
62
  import { TextDocumentContentChangeEvent } from '@theia/core/shared/vscode-languageserver-protocol';
63
63
  import { TextDocument } from 'vscode-languageserver-textdocument';
64
64
  import { EncodingService } from '@theia/core/lib/common/encoding-service';
65
65
  import { BinaryBuffer } from '@theia/core/lib/common/buffer';
66
66
  import { ReadableStreamEvents, newWriteableStream } from '@theia/core/lib/common/stream';
67
67
  import { CancellationToken } from '@theia/core/lib/common/cancellation';
68
- import { readFileIntoStream } from '../common/io';
69
- import { Mode } from 'stat-mode';
68
+ import { readFileIntoStream } from '../common/io.js';
69
+ // A CommonJS module whose exports cannot be detected statically, so it is imported as a whole.
70
+ import statMode from 'stat-mode';
70
71
 
71
72
  export namespace DiskFileSystemProvider {
72
73
  export interface StatAndLink {
@@ -156,7 +157,7 @@ export class DiskFileSystemProvider implements Disposable,
156
157
  async stat(resource: URI): Promise<Stat> {
157
158
  try {
158
159
  const { stat, symbolicLink } = await this.statLink(this.toFilePath(resource)); // cannot use fs.stat() here to support links properly
159
- const mode = new Mode(stat);
160
+ const mode = new statMode.Mode(stat);
160
161
  return {
161
162
  type: this.toType(stat, symbolicLink),
162
163
  ctime: stat.birthtime.getTime(), // intentionally not using ctime here, we want the creation time
@@ -541,7 +542,9 @@ export class DiskFileSystemProvider implements Disposable,
541
542
  }
542
543
 
543
544
  // Delete but do not return as promise
544
- this.rimrafUnlink(pathInTemp);
545
+ this.rimrafUnlink(pathInTemp).catch(error => {
546
+ this.logger.warn(`Failed to clean up temporary rimraf folder '${pathInTemp}':`, error);
547
+ });
545
548
  } catch (error) {
546
549
  if (error.code !== 'ENOENT') {
547
550
  throw error;
@@ -833,7 +836,8 @@ export class DiskFileSystemProvider implements Disposable,
833
836
  };
834
837
  watcherService.watchFileChanges(resource.toString(), {
835
838
  // Convert from `files.WatchOptions` to internal `watcher-protocol.WatchOptions`:
836
- ignored: opts.excludes
839
+ ignored: opts.excludes,
840
+ recursive: opts.recursive
837
841
  }).then(watcherId => {
838
842
  if (handle.disposed) {
839
843
  watcherService.unwatchFileChanges(watcherId);
@@ -20,7 +20,7 @@ import * as temp from 'temp';
20
20
  import { extract } from 'tar-fs';
21
21
  import { expect } from 'chai';
22
22
  import URI from '@theia/core/lib/common/uri';
23
- import { MockDirectoryArchiver } from './test/mock-directory-archiver';
23
+ import { MockDirectoryArchiver } from './test/mock-directory-archiver.js';
24
24
  import { FileUri } from '@theia/core/lib/common/file-uri';
25
25
 
26
26
  const track = temp.track();
@@ -16,10 +16,10 @@
16
16
 
17
17
  import { ContainerModule } from '@theia/core/shared/inversify';
18
18
  import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
19
- import { FileDownloadEndpoint } from './file-download-endpoint';
20
- import { FileDownloadHandler, SingleFileDownloadHandler, MultiFileDownloadHandler, DownloadLinkHandler } from './file-download-handler';
21
- import { DirectoryArchiver } from './directory-archiver';
22
- import { FileDownloadCache } from './file-download-cache';
19
+ import { FileDownloadEndpoint } from './file-download-endpoint.js';
20
+ import { FileDownloadHandler, SingleFileDownloadHandler, MultiFileDownloadHandler, DownloadLinkHandler } from './file-download-handler.js';
21
+ import { DirectoryArchiver } from './directory-archiver.js';
22
+ import { FileDownloadCache } from './file-download-cache.js';
23
23
 
24
24
  export default new ContainerModule(bind => {
25
25
  bind(FileDownloadEndpoint).toSelf().inSingletonScope();
@@ -39,7 +39,7 @@ export class FileDownloadCache {
39
39
  downloadInfo.root = encodeURIComponent(downloadInfo.root);
40
40
  }
41
41
  // expires in 1 minute enough for parallel connections to be connected.
42
- downloadInfo.expire = Date.now() + (this.expireTimeInMinutes * 600000);
42
+ downloadInfo.expire = Date.now() + (this.expireTimeInMinutes * 60 * 1000);
43
43
  this.downloads.set(id, downloadInfo);
44
44
  }
45
45
 
@@ -17,12 +17,13 @@
17
17
  /* eslint-disable @typescript-eslint/no-explicit-any */
18
18
 
19
19
  import { injectable, inject, named } from '@theia/core/shared/inversify';
20
- import { json } from 'body-parser';
20
+ // A CommonJS module whose exports cannot be detected statically, so it is imported as a whole.
21
+ import bodyParser from 'body-parser';
21
22
  import { Application, Router, RequestHandler } from '@theia/core/shared/express';
22
23
  import { BackendApplicationContribution } from '@theia/core/lib/node/backend-application';
23
24
  import { HttpConnectionValidator } from '@theia/core/lib/node';
24
25
  import { FileUri } from '@theia/core/lib/common/file-uri';
25
- import { FileDownloadHandler } from './file-download-handler';
26
+ import { FileDownloadHandler } from './file-download-handler.js';
26
27
 
27
28
  @injectable()
28
29
  export class FileDownloadEndpoint implements BackendApplicationContribution {
@@ -52,7 +53,7 @@ export class FileDownloadEndpoint implements BackendApplicationContribution {
52
53
  router.get('/', (request, response) => this.singleFileDownloadHandler.handle(request, response));
53
54
  router.put('/', (request, response) => this.multiFileDownloadHandler.handle(request, response));
54
55
  // Content-Type: application/json
55
- app.use(json());
56
+ app.use(bodyParser.json());
56
57
  app.use(FileDownloadEndpoint.PATH, guard, router);
57
58
  app.get('/file', guard, (request, response) => {
58
59
  const uri = new URL(request.url, 'http://localhost').search.slice(1);
@@ -25,9 +25,9 @@ import URI from '@theia/core/lib/common/uri';
25
25
  import { isEmpty } from '@theia/core/lib/common/objects';
26
26
  import { ILogger } from '@theia/core/lib/common/logger';
27
27
  import { FileUri } from '@theia/core/lib/common/file-uri';
28
- import { DirectoryArchiver } from './directory-archiver';
29
- import { FileDownloadData } from '../../common/download/file-download';
30
- import { FileDownloadCache, DownloadStorageItem } from './file-download-cache';
28
+ import { DirectoryArchiver } from './directory-archiver.js';
29
+ import { FileDownloadData } from '../../common/download/file-download.js';
30
+ import { FileDownloadCache, DownloadStorageItem } from './file-download-cache.js';
31
31
 
32
32
  interface PrepareDownloadOptions {
33
33
  filePath: string;
@@ -285,7 +285,6 @@ export class MultiFileDownloadHandler extends FileDownloadHandler {
285
285
  }
286
286
  const options: PrepareDownloadOptions = { filePath: '', downloadId, remove: true, root: outputRootPath };
287
287
  if (tarPaths.length === 1) {
288
- // tslint:disable-next-line:whitespace
289
288
  const [outputPath,] = tarPaths;
290
289
  options.filePath = outputPath;
291
290
  await this.prepareDownload(request, response, options);
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { DirectoryArchiver } from '../directory-archiver';
17
+ import { DirectoryArchiver } from '../directory-archiver.js';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
 
20
20
  export class MockDirectoryArchiver extends DirectoryArchiver {
@@ -16,8 +16,8 @@
16
16
 
17
17
  import * as assert from 'assert';
18
18
  import { FileUri } from '@theia/core/lib/common/file-uri';
19
- import { FileChangeCollection } from './file-change-collection';
20
- import { FileChangeType } from '../common/files';
19
+ import { FileChangeCollection } from './file-change-collection.js';
20
+ import { FileChangeType } from '../common/files.js';
21
21
 
22
22
  describe('FileChangeCollection', () => {
23
23
 
@@ -14,7 +14,7 @@
14
14
  // SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0
15
15
  // *****************************************************************************
16
16
 
17
- import { FileChange, FileChangeType } from '../common/filesystem-watcher-protocol';
17
+ import { FileChange, FileChangeType } from '../common/filesystem-watcher-protocol.js';
18
18
 
19
19
  /**
20
20
  * A file change collection guarantees that only one change is reported for each URI.