@theia/filesystem 1.77.0-next.1 → 1.77.0-next.108

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 +5 -5
  98. package/lib/browser/file-tree/file-tree-model.d.ts.map +1 -1
  99. package/lib/browser/file-tree/file-tree-model.js +48 -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 +66 -72
  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 +12 -6
  372. package/src/browser/file-tree/file-tree-widget.tsx +8 -5
  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
@@ -0,0 +1,226 @@
1
+ // *****************************************************************************
2
+ // Copyright (C) 2026 Sahil Gupta 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 { FrontendApplicationConfigProvider } from '@theia/core/lib/browser/frontend-application-config-provider';
21
+ FrontendApplicationConfigProvider.set({});
22
+
23
+ import { Disposable, URI } from '@theia/core';
24
+ import { expect } from 'chai';
25
+ import * as sinon from 'sinon';
26
+ import { FileSystemProvider, FileSystemProviderCapabilities } from '../common/files.js';
27
+ import { FileService } from './file-service.js';
28
+
29
+ disableJSDOM();
30
+
31
+ function createMockProvider(caseSensitive: boolean): FileSystemProvider {
32
+ return {
33
+ capabilities: caseSensitive ? FileSystemProviderCapabilities.PathCaseSensitive : 0,
34
+ onDidChangeCapabilities: () => Disposable.NULL,
35
+ onDidChangeFile: () => Disposable.NULL,
36
+ onFileWatchError: () => Disposable.NULL,
37
+ watch: () => Disposable.NULL,
38
+ stat: () => { throw new Error('not implemented'); },
39
+ readdir: () => { throw new Error('not implemented'); },
40
+ readFile: () => { throw new Error('not implemented'); },
41
+ writeFile: () => { throw new Error('not implemented'); },
42
+ delete: () => { throw new Error('not implemented'); },
43
+ mkdir: () => { throw new Error('not implemented'); },
44
+ rename: () => { throw new Error('not implemented'); },
45
+ copy: () => { throw new Error('not implemented'); },
46
+ } as unknown as FileSystemProvider;
47
+ }
48
+
49
+ /** Resolve to the rejection reason of the given promise, or to `undefined` if it fulfills. */
50
+ async function rejection(promise: Promise<unknown>): Promise<Error | undefined> {
51
+ try {
52
+ await promise;
53
+ return undefined;
54
+ } catch (error) {
55
+ return error as Error;
56
+ }
57
+ }
58
+
59
+ describe('FileService move/copy validation', () => {
60
+ const sandbox = sinon.createSandbox();
61
+ let fileService: FileService;
62
+ let provider: FileSystemProvider;
63
+ let existsStub: sinon.SinonStub;
64
+
65
+ before(() => {
66
+ disableJSDOM = enableJSDOM();
67
+ });
68
+
69
+ after(() => {
70
+ disableJSDOM();
71
+ });
72
+
73
+ afterEach(() => {
74
+ sandbox.restore();
75
+ });
76
+
77
+ /** Create a `FileService` backed by a single mock provider for both source and target. */
78
+ function setup(caseSensitive: boolean = true): void {
79
+ sandbox.restore();
80
+ fileService = new FileService();
81
+ provider = createMockProvider(caseSensitive);
82
+ /* eslint-disable @typescript-eslint/no-explicit-any */
83
+ sandbox.stub(fileService as any, 'withProvider').resolves(provider);
84
+ sandbox.stub(fileService as any, 'withReadProvider').resolves(provider);
85
+ sandbox.stub(fileService as any, 'withWriteProvider').resolves(provider);
86
+ // The error messages name the involved resources through the label provider.
87
+ (fileService as any).labelProvider = { getLongName: (resource: URI) => resource.path.toString() };
88
+ /* eslint-enable @typescript-eslint/no-explicit-any */
89
+ // By default the target does not exist yet, which is the case when pasting a folder into one of its own subfolders.
90
+ existsStub = sandbox.stub(fileService, 'exists').resolves(false);
91
+ }
92
+
93
+ function validate(source: string, target: string, mode: 'move' | 'copy'): Promise<unknown> {
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ return (fileService as any).doValidateMoveCopy(provider, new URI(source), provider, new URI(target), mode, false);
96
+ }
97
+
98
+ describe('source containing the target', () => {
99
+
100
+ it('should reject copying a folder into a subfolder of itself', async () => {
101
+ setup();
102
+ const error = await rejection(validate('file:///a', 'file:///a/b/a', 'copy'));
103
+ expect(error, 'copying a folder into its own subfolder was allowed').to.be.an.instanceOf(Error);
104
+ expect(error!.message).to.contain('is parent of target');
105
+ });
106
+
107
+ it('should reject moving a folder into a subfolder of itself', async () => {
108
+ setup();
109
+ const error = await rejection(validate('file:///a', 'file:///a/b', 'move'));
110
+ expect(error, 'moving a folder into its own subfolder was allowed').to.be.an.instanceOf(Error);
111
+ expect(error!.message).to.contain('is parent of target');
112
+ });
113
+
114
+ it('should reject a deeply nested target inside the source', async () => {
115
+ setup();
116
+ const error = await rejection(validate('file:///a', 'file:///a/b/c/d/a', 'copy'));
117
+ expect(error, 'copying a folder deep into its own subtree was allowed').to.be.an.instanceOf(Error);
118
+ expect(error!.message).to.contain('is parent of target');
119
+ });
120
+
121
+ it('should reject copying a folder into its own subfolder through FileService.copy', async () => {
122
+ setup();
123
+ const error = await rejection(fileService.copy(new URI('file:///a'), new URI('file:///a/b/a'), { fromUserGesture: false }));
124
+ expect(error, 'FileService.copy allowed a copy into the source subtree').to.be.an.instanceOf(Error);
125
+ expect(error!.message).to.contain('is parent of target');
126
+ });
127
+
128
+ it('should reject moving a folder into its own subfolder through FileService.move', async () => {
129
+ setup();
130
+ const error = await rejection(fileService.move(new URI('file:///a'), new URI('file:///a/b'), { fromUserGesture: false }));
131
+ expect(error, 'FileService.move allowed a move into the source subtree').to.be.an.instanceOf(Error);
132
+ expect(error!.message).to.contain('is parent of target');
133
+ });
134
+
135
+ it('should reject a target inside the source that only differs in case on a case-insensitive provider', async () => {
136
+ setup(false);
137
+ const error = await rejection(validate('file:///a', 'file:///A/b/a', 'copy'));
138
+ expect(error, 'a case-insensitive provider allowed a copy into the source subtree').to.be.an.instanceOf(Error);
139
+ expect(error!.message).to.contain('is parent of target');
140
+ });
141
+ });
142
+
143
+ describe('the same resource', () => {
144
+
145
+ it('should reject copying a resource onto itself', async () => {
146
+ setup();
147
+ const error = await rejection(validate('file:///a/b', 'file:///a/b', 'copy'));
148
+ expect(error, 'copying a resource onto itself was allowed').to.be.an.instanceOf(Error);
149
+ expect(error!.message).to.contain('is parent of target');
150
+ });
151
+
152
+ it('should reject moving a resource onto itself', async () => {
153
+ setup();
154
+ const error = await rejection(validate('file:///a/b', 'file:///a/b', 'move'));
155
+ expect(error, 'moving a resource onto itself was allowed').to.be.an.instanceOf(Error);
156
+ expect(error!.message).to.contain('is parent of target');
157
+ });
158
+ });
159
+
160
+ describe('unrelated and adjacent targets', () => {
161
+
162
+ it('should accept an unrelated target', async () => {
163
+ setup();
164
+ const result = await validate('file:///a', 'file:///c/a', 'copy');
165
+ expect(result).to.deep.equal({ exists: false, isSameResourceWithDifferentPathCase: false });
166
+ });
167
+
168
+ it('should accept a target whose path merely shares a prefix with the source', async () => {
169
+ setup();
170
+ const result = await validate('file:///a', 'file:///ab/a', 'copy');
171
+ expect(result).to.deep.equal({ exists: false, isSameResourceWithDifferentPathCase: false });
172
+ });
173
+
174
+ it('should accept a target in a different file system', async () => {
175
+ setup();
176
+ const result = await validate('file:///a', 'memory:///a/b/a', 'copy');
177
+ expect(result).to.deep.equal({ exists: false, isSameResourceWithDifferentPathCase: false });
178
+ });
179
+ });
180
+
181
+ describe('the target containing the source', () => {
182
+
183
+ it('should reject moving a resource onto the existing folder that contains it', async () => {
184
+ setup();
185
+ existsStub.resolves(true);
186
+ const error = await rejection(validate('file:///a/b', 'file:///a', 'move'));
187
+ expect(error, 'moving a resource onto its own parent folder was allowed').to.be.an.instanceOf(Error);
188
+ expect(error!.message).to.contain('would replace the folder it is contained in');
189
+ });
190
+ });
191
+
192
+ describe('case-only renames on a case-insensitive provider', () => {
193
+
194
+ it('should accept a case-only rename', async () => {
195
+ setup(false);
196
+ const result = await validate('file:///a/Foo', 'file:///a/foo', 'move');
197
+ expect(result).to.deep.equal({ exists: false, isSameResourceWithDifferentPathCase: true });
198
+ });
199
+
200
+ it('should accept a case-only rename of a nested resource', async () => {
201
+ setup(false);
202
+ const result = await validate('file:///a/b/Foo.ts', 'file:///a/b/foo.ts', 'move');
203
+ expect(result).to.deep.equal({ exists: false, isSameResourceWithDifferentPathCase: true });
204
+ });
205
+
206
+ it('should accept a case-only rename even when the target is reported as existing', async () => {
207
+ setup(false);
208
+ existsStub.resolves(true);
209
+ const result = await validate('file:///a/Foo', 'file:///a/foo', 'move');
210
+ expect(result).to.deep.equal({ exists: true, isSameResourceWithDifferentPathCase: true });
211
+ });
212
+
213
+ it('should reject a case-only copy', async () => {
214
+ setup(false);
215
+ const error = await rejection(validate('file:///a/Foo', 'file:///a/foo', 'copy'));
216
+ expect(error, 'a case-only copy was allowed').to.be.an.instanceOf(Error);
217
+ expect(error!.message).to.contain('is parent of target');
218
+ });
219
+
220
+ it('should accept a case-only rename on a case-sensitive provider as a distinct resource', async () => {
221
+ setup(true);
222
+ const result = await validate('file:///a/Foo', 'file:///a/foo', 'move');
223
+ expect(result).to.deep.equal({ exists: false, isSameResourceWithDifferentPathCase: false });
224
+ });
225
+ });
226
+ });
@@ -23,8 +23,8 @@ FrontendApplicationConfigProvider.set({});
23
23
  import { Disposable, Emitter, URI } from '@theia/core';
24
24
  import { expect } from 'chai';
25
25
  import * as sinon from 'sinon';
26
- import { FileChange, FileChangeType, FileSystemProvider, FileSystemProviderCapabilities, WatchOptions } from '../common/files';
27
- import { FileService } from './file-service';
26
+ import { FileChange, FileChangeType, FileSystemProvider, FileSystemProviderCapabilities, WatchOptions } from '../common/files.js';
27
+ import { FileService } from './file-service.js';
28
28
 
29
29
  disableJSDOM();
30
30
 
@@ -24,9 +24,9 @@
24
24
  // and https://github.com/microsoft/vscode/blob/04c36be045a94fee58e5f8992d3e3fd980294a84/src/vs/workbench/services/workingCopy/common/workingCopyFileOperationParticipant.ts
25
25
 
26
26
  /* eslint-disable max-len */
27
+ /* eslint-disable @stylistic/brace-style, @stylistic/semi-spacing */
27
28
  /* eslint-disable @typescript-eslint/no-shadow */
28
29
  /* eslint-disable no-null/no-null */
29
- /* eslint-disable @typescript-eslint/tslint/config */
30
30
  /* eslint-disable @typescript-eslint/no-explicit-any */
31
31
 
32
32
  import { injectable, inject, named, postConstruct } from '@theia/core/shared/inversify';
@@ -52,22 +52,22 @@ import {
52
52
  ResolveFileResult, ResolveFileResultWithMetadata,
53
53
  MoveFileOptions, CopyFileOptions, BaseStatWithMetadata, FileDeleteOptions, FileOperationOptions, hasAccessCapability, hasUpdateCapability,
54
54
  hasFileReadStreamCapability, FileSystemProviderWithFileReadStreamCapability, ReadOnlyMessageFileSystemProvider
55
- } from '../common/files';
55
+ } from '../common/files.js';
56
56
  import { BinaryBuffer, BinaryBufferReadable, BinaryBufferReadableStream, BinaryBufferReadableBufferedStream, BinaryBufferWriteableStream } from '@theia/core/lib/common/buffer';
57
57
  import { ReadableStream, isReadableStream, isReadableBufferedStream, transform, consumeStream, peekStream, peekReadable, Readable } from '@theia/core/lib/common/stream';
58
58
  import { LabelProvider } from '@theia/core/lib/browser/label-provider';
59
- import { FileSystemPreferences } from '../common/filesystem-preferences';
59
+ import { FileSystemPreferences } from '../common/filesystem-preferences.js';
60
60
  import { ProgressService } from '@theia/core/lib/common/progress-service';
61
- import { DelegatingFileSystemProvider } from '../common/delegating-file-system-provider';
61
+ import { DelegatingFileSystemProvider } from '../common/delegating-file-system-provider.js';
62
62
  import type { TextDocumentContentChangeEvent } from '@theia/core/shared/vscode-languageserver-protocol';
63
63
  import { EncodingRegistry } from '@theia/core/lib/browser/encoding-registry';
64
64
  import { UTF8, UTF8_with_bom } from '@theia/core/lib/common/encodings';
65
65
  import { EncodingService, ResourceEncoding, DecodeStreamResult } from '@theia/core/lib/common/encoding-service';
66
66
  import { Minimatch } from 'minimatch';
67
67
  import { Mutable } from '@theia/core/lib/common/types';
68
- import { readFileIntoStream } from '../common/io';
69
- import { FileSystemWatcherErrorHandler } from './filesystem-watcher-error-handler';
70
- import { FileSystemUtils } from '../common/filesystem-utils';
68
+ import { readFileIntoStream } from '../common/io.js';
69
+ import { FileSystemWatcherErrorHandler } from './filesystem-watcher-error-handler.js';
70
+ import { FileSystemUtils } from '../common/filesystem-utils.js';
71
71
  import { nls, ILogger } from '@theia/core';
72
72
  import { MarkdownString } from '@theia/core/lib/common/markdown-rendering';
73
73
 
@@ -201,7 +201,7 @@ export const FileServiceContribution = Symbol('FileServiceContribution');
201
201
  * });
202
202
  *
203
203
  * }
204
- *```
204
+ * ```
205
205
  */
206
206
  export interface FileServiceContribution {
207
207
  /**
@@ -409,6 +409,15 @@ export class FileService {
409
409
  if (!activation) {
410
410
  const deferredActivation = new Deferred<FileSystemProvider>();
411
411
  this.activations.set(scheme, activation = deferredActivation.promise);
412
+ // Resolve the activation as soon as a provider is registered for the scheme. Otherwise a
413
+ // slow or dangling `onWillActivateFileSystemProvider` listener whose `waitUntil` promise
414
+ // never settles would wedge this activation (and everything awaiting it) forever. See #17506.
415
+ const registration = this.onDidChangeFileSystemProviderRegistrations(event => {
416
+ if (event.added && event.scheme === scheme && event.provider) {
417
+ deferredActivation.resolve(event.provider);
418
+ }
419
+ });
420
+ deferredActivation.promise.then(() => registration.dispose(), () => registration.dispose());
412
421
  WaitUntilEvent.fire(this.onWillActivateFileSystemProviderEmitter, { scheme }).then(() => {
413
422
  provider = this.providers.get(scheme);
414
423
  if (!provider) {
@@ -515,7 +524,7 @@ export class FileService {
515
524
  */
516
525
  resolve(resource: URI, options: ResolveMetadataFileOptions): Promise<FileStatWithMetadata>;
517
526
  resolve(resource: URI, options?: ResolveFileOptions | undefined): Promise<FileStat>;
518
- async resolve(resource: any, options?: any) {
527
+ async resolve(resource: any, options?: any): Promise<FileStat> {
519
528
  try {
520
529
  return await this.doResolveFile(resource, options);
521
530
  } catch (error) {
@@ -1282,7 +1291,7 @@ export class FileService {
1282
1291
  throw new Error(nls.localizeByDefault("Unable to move/copy when source '{0}' is parent of target '{1}'.", this.resourceForError(source), this.resourceForError(target)));
1283
1292
  }
1284
1293
 
1285
- if (!isSameResourceWithDifferentPathCase && target.isEqualOrParent(source, isPathCaseSensitive)) {
1294
+ if (!isSameResourceWithDifferentPathCase && source.isEqualOrParent(target, isPathCaseSensitive)) {
1286
1295
  throw new Error(nls.localizeByDefault("Unable to move/copy when source '{0}' is parent of target '{1}'.", this.resourceForError(source), this.resourceForError(target)));
1287
1296
  }
1288
1297
  }
@@ -1295,7 +1304,7 @@ export class FileService {
1295
1304
  // it as it would delete the source as well. In this case we have to throw
1296
1305
  if (sourceProvider === targetProvider) {
1297
1306
  const isPathCaseSensitive = !!(sourceProvider.capabilities & FileSystemProviderCapabilities.PathCaseSensitive);
1298
- if (source.isEqualOrParent(target, isPathCaseSensitive)) {
1307
+ if (target.isEqualOrParent(source, isPathCaseSensitive)) {
1299
1308
  throw new Error(nls.localizeByDefault("Unable to move/copy '{0}' into '{1}' since a file would replace the folder it is contained in.", this.resourceForError(source), this.resourceForError(target)));
1300
1309
  }
1301
1310
  }
@@ -2107,6 +2116,8 @@ export class FileService {
2107
2116
  }
2108
2117
  } else if (detectedEncoding) {
2109
2118
  preferredEncoding = detectedEncoding;
2119
+ } else if (this.preferences.get('files.encoding', undefined, resource.toString()) === UTF8_with_bom) {
2120
+ preferredEncoding = UTF8; // if we did not detect UTF 8 BOM before, this can only be UTF 8 then
2110
2121
  }
2111
2122
 
2112
2123
  return this.getEncodingForResource(resource, preferredEncoding);
@@ -16,9 +16,9 @@
16
16
 
17
17
  import { interfaces, Container } from '@theia/core/shared/inversify';
18
18
  import { CompressedExpansionService, CompressionToggle, createTreeContainer, TreeCompressionService, TreeContainerProps } from '@theia/core/lib/browser';
19
- import { FileTree } from './file-tree';
20
- import { FileTreeModel } from './file-tree-model';
21
- import { FileTreeWidget } from './file-tree-widget';
19
+ import { FileTree } from './file-tree.js';
20
+ import { FileTreeModel } from './file-tree-model.js';
21
+ import { FileTreeWidget } from './file-tree-widget.js';
22
22
 
23
23
  const fileTreeDefaults: Partial<TreeContainerProps> = {
24
24
  tree: FileTree,
@@ -24,7 +24,7 @@ import { CancellationToken, Emitter, Event } from '@theia/core/lib/common';
24
24
  import URI from '@theia/core/lib/common/uri';
25
25
  import { Container } from '@theia/core/shared/inversify';
26
26
  import { expect } from 'chai';
27
- import { FileTreeDecoratorAdapter } from './file-tree-decorator-adapter';
27
+ import { FileTreeDecoratorAdapter } from './file-tree-decorator-adapter.js';
28
28
 
29
29
  disableJSDOM();
30
30
 
@@ -21,7 +21,7 @@ import { Decoration, DecorationsService } from '@theia/core/lib/browser/decorati
21
21
  import { TreeNode, TreeDecoration, TreeDecorator, Tree, TopDownTreeIterator } from '@theia/core/lib/browser';
22
22
  import { MaybePromise } from '@theia/core/lib/common/types';
23
23
  import { ColorRegistry } from '@theia/core/lib/browser/color-registry';
24
- import { FileStatNode } from './file-tree';
24
+ import { FileStatNode } from './file-tree.js';
25
25
 
26
26
  @injectable()
27
27
  export class FileTreeDecoratorAdapter implements TreeDecorator {
@@ -16,7 +16,7 @@
16
16
 
17
17
  import { injectable, inject } from '@theia/core/shared/inversify';
18
18
  import { LabelProviderContribution, DidChangeLabelEvent, LabelProvider } from '@theia/core/lib/browser/label-provider';
19
- import { FileStatNode } from './file-tree';
19
+ import { FileStatNode } from './file-tree.js';
20
20
  import { TreeLabelProvider } from '@theia/core/lib/browser/tree/tree-label-provider';
21
21
 
22
22
  @injectable()
@@ -17,14 +17,14 @@
17
17
  import { injectable, inject, postConstruct } from '@theia/core/shared/inversify';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
  import { CompositeTreeNode, TreeNode, ConfirmDialog, CompressedTreeModel, Dialog } from '@theia/core/lib/browser';
20
- import { FileStatNode, DirNode, FileNode } from './file-tree';
21
- import { LocationService } from '../location';
20
+ import { FileStatNode, DirNode, FileNode } from './file-tree.js';
21
+ import { LocationService } from '../location/index.js';
22
22
  import { LabelProvider } from '@theia/core/lib/browser/label-provider';
23
- import { FileService } from '../file-service';
24
- import { FileOperationError, FileOperationResult, FileChangesEvent, FileChangeType, FileChange } from '../../common/files';
23
+ import { FileService } from '../file-service.js';
24
+ import { FileOperationError, FileOperationResult, FileChangesEvent, FileChangeType, FileChange } from '../../common/files.js';
25
25
  import { MessageService } from '@theia/core/lib/common/message-service';
26
26
  import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
27
- import { FileSystemUtils } from '../../common';
27
+ import { FileSystemUtils } from '../../common/index.js';
28
28
  import { nls } from '@theia/core';
29
29
 
30
30
  @injectable()
@@ -133,12 +133,15 @@ export class FileTreeModel extends CompressedTreeModel implements LocationServic
133
133
  return nodes;
134
134
  }
135
135
 
136
- async copy(source: URI, target: Readonly<FileStatNode>): Promise<URI> {
136
+ async copy(source: URI, target: Readonly<FileStatNode>): Promise<URI | undefined> {
137
137
  /** If the target is a file or if the target is a directory, but is the same as the source, use the parent of the target as a destination. */
138
138
  const parentNode = (target.fileStat.isFile || target.uri.isEqual(source)) ? target.parent : target;
139
139
  if (!FileStatNode.is(parentNode)) {
140
140
  throw new Error('Parent of file has to be a FileStatNode');
141
141
  }
142
+ if (source.isEqualOrParent(parentNode.uri)) {
143
+ return undefined;
144
+ }
142
145
  let targetUri = parentNode.uri.resolve(source.path.base);
143
146
  try {
144
147
  const parent = await this.fileService.resolve(parentNode.uri);
@@ -156,6 +159,9 @@ export class FileTreeModel extends CompressedTreeModel implements LocationServic
156
159
  */
157
160
  async move(source: TreeNode, target: TreeNode): Promise<URI | undefined> {
158
161
  if (DirNode.is(target) && FileStatNode.is(source)) {
162
+ if (source.uri.isEqualOrParent(target.uri)) {
163
+ return undefined;
164
+ }
159
165
  const name = source.fileStat.name;
160
166
  const targetUri = target.uri.resolve(name);
161
167
  if (source.uri.isEqual(targetUri)) { return; }
@@ -21,13 +21,13 @@ import URI from '@theia/core/lib/common/uri';
21
21
  import { UriSelection } from '@theia/core/lib/common/selection';
22
22
  import { isCancelled } from '@theia/core/lib/common/cancellation';
23
23
  import { ContextMenuRenderer, NodeProps, TreeProps, TreeNode, CompositeTreeNode, CompressedTreeWidget, CompressedNodeProps } from '@theia/core/lib/browser';
24
- import { DirNode, FileStatNode, FileStatNodeData } from './file-tree';
25
- import { FileTreeModel } from './file-tree-model';
24
+ import { DirNode, FileStatNode, FileStatNodeData } from './file-tree.js';
25
+ import { FileTreeModel } from './file-tree-model.js';
26
26
  import { IconThemeService } from '@theia/core/lib/browser/icon-theme-service';
27
27
  import { ApplicationShell } from '@theia/core/lib/browser/shell';
28
- import { FileStat, FileType } from '../../common/files';
28
+ import { FileStat, FileType } from '../../common/files.js';
29
29
  import { isOSX, ILogger } from '@theia/core';
30
- import { FileUploadService } from '../../common/upload/file-upload';
30
+ import { FileUploadService } from '../../common/upload/file-upload.js';
31
31
 
32
32
  export const FILE_TREE_CLASS = 'theia-FileTree';
33
33
  export const FILE_STAT_NODE_CLASS = 'theia-FileStatNode';
@@ -98,7 +98,10 @@ export class FileTreeWidget extends CompressedTreeWidget {
98
98
  }
99
99
 
100
100
  protected getNodeTooltip(node: TreeNode): string | undefined {
101
- const operativeNode = this.compressionService.getCompressionChain(node)?.tail() ?? node;
101
+ const operativeNode = this.compressionToggle.compress
102
+ ? this.compressionService.getCompressionChain(node)?.tail() ?? node
103
+ : node;
104
+
102
105
  const uri = UriSelection.getUri(operativeNode);
103
106
  return uri ? uri.path.fsPath() : undefined;
104
107
  }
@@ -18,11 +18,11 @@ import { injectable, inject } from '@theia/core/shared/inversify';
18
18
  import URI from '@theia/core/lib/common/uri';
19
19
  import { isObject, Mutable } from '@theia/core/lib/common';
20
20
  import { TreeNode, CompositeTreeNode, SelectableTreeNode, ExpandableTreeNode, TreeImpl } from '@theia/core/lib/browser';
21
- import { FileStat, Stat, FileType, FileOperationError, FileOperationResult } from '../../common/files';
21
+ import { FileStat, Stat, FileType, FileOperationError, FileOperationResult } from '../../common/files.js';
22
22
  import { UriSelection } from '@theia/core/lib/common/selection';
23
23
  import { MessageService } from '@theia/core/lib/common/message-service';
24
- import { FileSelection } from '../file-selection';
25
- import { FileService } from '../file-service';
24
+ import { FileSelection } from '../file-selection.js';
25
+ import { FileService } from '../file-service.js';
26
26
 
27
27
  @injectable()
28
28
  export class FileTree extends TreeImpl {
@@ -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
- export * from './file-tree';
18
- export * from './file-tree-model';
19
- export * from './file-tree-widget';
20
- export * from './file-tree-container';
21
- export * from './file-tree-decorator-adapter';
22
- export * from './file-tree-label-provider';
17
+ export * from './file-tree.js';
18
+ export * from './file-tree-model.js';
19
+ export * from './file-tree-widget.js';
20
+ export * from './file-tree-container.js';
21
+ export * from './file-tree-decorator-adapter.js';
22
+ export * from './file-tree-label-provider.js';
@@ -37,12 +37,12 @@ import URI from '@theia/core/lib/common/uri';
37
37
  import { environment } from '@theia/core/shared/@theia/application-package/lib/environment';
38
38
  import { inject, injectable, named } from '@theia/core/shared/inversify';
39
39
  import { UserWorkingDirectoryProvider } from '@theia/core/lib/browser/user-working-directory-provider';
40
- import { FileChangeType, FileChangesEvent, FileOperation } from '../common/files';
41
- import { FileDialogService, SaveFileDialogProps } from './file-dialog';
42
- import { FileSelection } from './file-selection';
43
- import { FileService, UserFileOperationEvent } from './file-service';
44
- import { FileSystemPreferences } from '../common/filesystem-preferences';
45
- import { FileUploadService } from '../common/upload/file-upload';
40
+ import { FileChangeType, FileChangesEvent, FileOperation } from '../common/files.js';
41
+ import { FileDialogService, SaveFileDialogProps } from './file-dialog/index.js';
42
+ import { FileSelection } from './file-selection.js';
43
+ import { FileService, UserFileOperationEvent } from './file-service.js';
44
+ import { FileSystemPreferences } from '../common/filesystem-preferences.js';
45
+ import { FileUploadService } from '../common/upload/file-upload.js';
46
46
 
47
47
  export namespace FileSystemCommands {
48
48
 
@@ -19,22 +19,22 @@ import '../../src/browser/style/index.css';
19
19
  import { ContainerModule, interfaces } from '@theia/core/shared/inversify';
20
20
  import { ResourceResolver, CommandContribution } from '@theia/core/lib/common';
21
21
  import { WebSocketConnectionProvider, FrontendApplicationContribution, LabelProviderContribution, BreadcrumbsContribution } from '@theia/core/lib/browser';
22
- import { FileResourceResolver } from './file-resource';
23
- import { bindFileSystemPreferences } from '../common/filesystem-preferences';
24
- import { FileSystemFrontendContribution } from './filesystem-frontend-contribution';
25
- import { FileTreeDecoratorAdapter, FileTreeLabelProvider } from './file-tree';
26
- import { FileService, FileServiceContribution } from './file-service';
27
- import { RemoteFileSystemProvider, RemoteFileSystemServer, remoteFileSystemPath, RemoteFileSystemProxyFactory } from '../common/remote-file-system-provider';
22
+ import { FileResourceResolver } from './file-resource.js';
23
+ import { bindFileSystemPreferences } from '../common/filesystem-preferences.js';
24
+ import { FileSystemFrontendContribution } from './filesystem-frontend-contribution.js';
25
+ import { FileTreeDecoratorAdapter, FileTreeLabelProvider } from './file-tree/index.js';
26
+ import { FileService, FileServiceContribution } from './file-service.js';
27
+ import { RemoteFileSystemProvider, RemoteFileSystemServer, remoteFileSystemPath, RemoteFileSystemProxyFactory } from '../common/remote-file-system-provider.js';
28
28
  import { bindRootContributionProvider } from '@theia/core/lib/common/contribution-provider';
29
- import { RemoteFileServiceContribution } from './remote-file-service-contribution';
30
- import { FileSystemWatcherErrorHandler } from './filesystem-watcher-error-handler';
31
- import { FilepathBreadcrumbsContribution } from './breadcrumbs/filepath-breadcrumbs-contribution';
32
- import { BreadcrumbsFileTreeWidget, createFileTreeBreadcrumbsWidget } from './breadcrumbs/filepath-breadcrumbs-container';
33
- import { FilesystemSaveableService } from './filesystem-saveable-service';
29
+ import { RemoteFileServiceContribution } from './remote-file-service-contribution.js';
30
+ import { FileSystemWatcherErrorHandler } from './filesystem-watcher-error-handler.js';
31
+ import { FilepathBreadcrumbsContribution } from './breadcrumbs/filepath-breadcrumbs-contribution.js';
32
+ import { BreadcrumbsFileTreeWidget, createFileTreeBreadcrumbsWidget } from './breadcrumbs/filepath-breadcrumbs-container.js';
33
+ import { FilesystemSaveableService } from './filesystem-saveable-service.js';
34
34
  import { SaveableService } from '@theia/core/lib/browser/saveable-service';
35
- import { VSCodeFileServiceContribution, VSCodeFileSystemProvider } from './vscode-file-service-contribution';
36
- import { FileUploadService } from '../common/upload/file-upload';
37
- import { FileUploadServiceImpl } from './upload/file-upload-service-impl';
35
+ import { VSCodeFileServiceContribution, VSCodeFileSystemProvider } from './vscode-file-service-contribution.js';
36
+ import { FileUploadService } from '../common/upload/file-upload.js';
37
+ import { FileUploadServiceImpl } from './upload/file-upload-service-impl.js';
38
38
 
39
39
  export default new ContainerModule((bind, unbind, isBound, rebind) => {
40
40
  bindFileSystemPreferences(bind);
@@ -19,8 +19,8 @@ import { inject, injectable, named } from '@theia/core/shared/inversify';
19
19
  import { Navigatable, Saveable, SaveableSource, SaveOptions, Widget, open, OpenerService, ConfirmDialog, CommonCommands, LabelProvider } from '@theia/core/lib/browser';
20
20
  import { SaveableService } from '@theia/core/lib/browser/saveable-service';
21
21
  import URI from '@theia/core/lib/common/uri';
22
- import { FileService } from './file-service';
23
- import { FileDialogService } from './file-dialog';
22
+ import { FileService } from './file-service.js';
23
+ import { FileDialogService } from './file-dialog/index.js';
24
24
  import { BinaryBuffer } from '@theia/core/lib/common/buffer';
25
25
 
26
26
  @injectable()
@@ -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
- export * from './location';
18
- export * from './file-tree';
19
- export * from './file-dialog';
20
- export * from './file-resource';
17
+ export * from './location/index.js';
18
+ export * from './file-tree/index.js';
19
+ export * from './file-dialog/index.js';
20
+ export * from './file-resource.js';
@@ -14,5 +14,5 @@
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 './location-service';
18
- export * from './location-renderer';
17
+ export * from './location-service.js';
18
+ export * from './location-renderer.js';
@@ -20,9 +20,9 @@ let disableJSDOM = enableJSDOM();
20
20
  import URI from '@theia/core/lib/common/uri';
21
21
  import { expect } from 'chai';
22
22
  import * as React from '@theia/core/shared/react';
23
- import type { FileDialogModel } from '../file-dialog/file-dialog-model';
24
- import { LocationListRenderer } from './location-renderer';
25
- import type { LocationService } from './location-service';
23
+ import type { FileDialogModel } from '../file-dialog/file-dialog-model.js';
24
+ import { LocationListRenderer } from './location-renderer.js';
25
+ import type { LocationService } from './location-service.js';
26
26
 
27
27
  disableJSDOM();
28
28
 
@@ -15,12 +15,12 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import URI from '@theia/core/lib/common/uri';
18
- import { LocationService } from './location-service';
18
+ import { LocationService } from './location-service.js';
19
19
  import * as React from '@theia/core/shared/react';
20
- import { FileService } from '../file-service';
20
+ import { FileService } from '../file-service.js';
21
21
  import { DisposableCollection, Emitter, Path } from '@theia/core/lib/common';
22
22
  import { injectable, inject, postConstruct } from '@theia/core/shared/inversify';
23
- import { FileDialogModel } from '../file-dialog/file-dialog-model';
23
+ import { FileDialogModel } from '../file-dialog/file-dialog-model.js';
24
24
  import { EnvVariablesServer } from '@theia/core/lib/common/env-variables';
25
25
  import { ReactRenderer } from '@theia/core/lib/browser/widgets/react-renderer';
26
26
  import { codicon } from '@theia/core/lib/browser';
@@ -15,8 +15,8 @@
15
15
  // *****************************************************************************
16
16
 
17
17
  import { inject, injectable } from '@theia/core/shared/inversify';
18
- import { FileServiceContribution, FileService } from './file-service';
19
- import { RemoteFileSystemProvider } from '../common/remote-file-system-provider';
18
+ import { FileServiceContribution, FileService } from './file-service.js';
19
+ import { RemoteFileSystemProvider } from '../common/remote-file-system-provider.js';
20
20
 
21
21
  @injectable()
22
22
  export class RemoteFileServiceContribution implements FileServiceContribution {