@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
@@ -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()
@@ -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';
@@ -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 {
@@ -23,15 +23,15 @@ import { Deferred } from '@theia/core/lib/common/promise-util';
23
23
  import { MessageService } from '@theia/core/lib/common/message-service';
24
24
  import { Progress } from '@theia/core/lib/common/message-service-protocol';
25
25
  import { Endpoint } from '@theia/core/lib/browser/endpoint';
26
- import throttle = require('@theia/core/shared/lodash.throttle');
27
- import { HTTP_FILE_UPLOAD_PATH } from '../../common/file-upload';
26
+ import throttle from '@theia/core/shared/lodash.throttle';
27
+ import { HTTP_FILE_UPLOAD_PATH } from '../../common/file-upload.js';
28
28
  import { Semaphore } from 'async-mutex';
29
- import { FileSystemPreferences } from '../../common/filesystem-preferences';
30
- import { FileService } from '../file-service';
29
+ import { FileSystemPreferences } from '../../common/filesystem-preferences.js';
30
+ import { FileService } from '../file-service.js';
31
31
  import { ConfirmDialog, Dialog } from '@theia/core/lib/browser';
32
32
  import { nls } from '@theia/core/lib/common/nls';
33
33
  import { Emitter, Event } from '@theia/core/lib/common/event';
34
- import type { CustomDataTransfer, FileUploadService } from '../../common/upload/file-upload';
34
+ import type { CustomDataTransfer, FileUploadService } from '../../common/upload/file-upload.js';
35
35
 
36
36
  interface UploadFilesParams {
37
37
  source: FileUploadService.Source,