cline 1.0.1 → 1.0.2

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 (299) hide show
  1. package/bin/cline +0 -0
  2. package/bin/cline-darwin-amd64 +0 -0
  3. package/bin/cline-darwin-arm64 +0 -0
  4. package/bin/cline-host +0 -0
  5. package/bin/cline-host-darwin-amd64 +0 -0
  6. package/bin/cline-host-darwin-arm64 +0 -0
  7. package/bin/cline-host-linux-amd64 +0 -0
  8. package/bin/cline-host-linux-arm64 +0 -0
  9. package/bin/cline-linux-amd64 +0 -0
  10. package/bin/cline-linux-arm64 +0 -0
  11. package/cline-core.js +24143 -16610
  12. package/extension/package.json +12 -4
  13. package/node_modules/b4a/LICENSE +201 -0
  14. package/node_modules/b4a/README.md +153 -0
  15. package/node_modules/b4a/browser.js +563 -0
  16. package/node_modules/b4a/index.js +188 -0
  17. package/node_modules/b4a/lib/ascii.js +31 -0
  18. package/node_modules/b4a/lib/base64.js +65 -0
  19. package/node_modules/b4a/lib/hex.js +51 -0
  20. package/node_modules/b4a/lib/utf16le.js +40 -0
  21. package/node_modules/b4a/lib/utf8.js +141 -0
  22. package/node_modules/b4a/package.json +49 -0
  23. package/node_modules/b4a/react-native.js +5 -0
  24. package/node_modules/bare-events/LICENSE +201 -0
  25. package/node_modules/bare-events/README.md +25 -0
  26. package/node_modules/bare-events/global.d.ts +15 -0
  27. package/node_modules/bare-events/global.js +5 -0
  28. package/node_modules/bare-events/index.d.ts +94 -0
  29. package/node_modules/bare-events/index.js +355 -0
  30. package/node_modules/bare-events/lib/errors.js +32 -0
  31. package/node_modules/bare-events/package.json +61 -0
  32. package/node_modules/bare-events/web.d.ts +79 -0
  33. package/node_modules/bare-events/web.js +347 -0
  34. package/node_modules/bare-fs/CMakeLists.txt +13 -0
  35. package/node_modules/bare-fs/LICENSE +201 -0
  36. package/node_modules/bare-fs/README.md +29 -0
  37. package/node_modules/bare-fs/binding.c +2238 -0
  38. package/node_modules/bare-fs/binding.js +1 -0
  39. package/node_modules/bare-fs/index.d.ts +1115 -0
  40. package/node_modules/bare-fs/index.js +2330 -0
  41. package/node_modules/bare-fs/lib/constants.d.ts +49 -0
  42. package/node_modules/bare-fs/lib/constants.js +49 -0
  43. package/node_modules/bare-fs/lib/errors.d.ts +11 -0
  44. package/node_modules/bare-fs/lib/errors.js +55 -0
  45. package/node_modules/bare-fs/package.json +71 -0
  46. package/node_modules/bare-fs/prebuilds/android-arm/bare-fs.bare +0 -0
  47. package/node_modules/bare-fs/prebuilds/android-arm64/bare-fs.bare +0 -0
  48. package/node_modules/bare-fs/prebuilds/android-ia32/bare-fs.bare +0 -0
  49. package/node_modules/bare-fs/prebuilds/android-x64/bare-fs.bare +0 -0
  50. package/node_modules/bare-fs/prebuilds/darwin-arm64/bare-fs.bare +0 -0
  51. package/node_modules/bare-fs/prebuilds/darwin-x64/bare-fs.bare +0 -0
  52. package/node_modules/bare-fs/prebuilds/ios-arm64/bare-fs.bare +0 -0
  53. package/node_modules/bare-fs/prebuilds/ios-arm64-simulator/bare-fs.bare +0 -0
  54. package/node_modules/bare-fs/prebuilds/ios-x64-simulator/bare-fs.bare +0 -0
  55. package/node_modules/bare-fs/prebuilds/linux-arm64/bare-fs.bare +0 -0
  56. package/node_modules/bare-fs/prebuilds/linux-x64/bare-fs.bare +0 -0
  57. package/node_modules/bare-fs/prebuilds/win32-arm64/bare-fs.bare +0 -0
  58. package/node_modules/bare-fs/prebuilds/win32-x64/bare-fs.bare +0 -0
  59. package/node_modules/bare-fs/promises.d.ts +282 -0
  60. package/node_modules/bare-fs/promises.js +90 -0
  61. package/node_modules/bare-os/CMakeLists.txt +13 -0
  62. package/node_modules/bare-os/LICENSE +201 -0
  63. package/node_modules/bare-os/README.md +11 -0
  64. package/node_modules/bare-os/binding.c +1119 -0
  65. package/node_modules/bare-os/binding.js +1 -0
  66. package/node_modules/bare-os/index.d.ts +109 -0
  67. package/node_modules/bare-os/index.js +99 -0
  68. package/node_modules/bare-os/lib/constants.js +6 -0
  69. package/node_modules/bare-os/lib/errors.js +22 -0
  70. package/node_modules/bare-os/package.json +46 -0
  71. package/node_modules/bare-os/prebuilds/android-arm/bare-os.bare +0 -0
  72. package/node_modules/bare-os/prebuilds/android-arm64/bare-os.bare +0 -0
  73. package/node_modules/bare-os/prebuilds/android-ia32/bare-os.bare +0 -0
  74. package/node_modules/bare-os/prebuilds/android-x64/bare-os.bare +0 -0
  75. package/node_modules/bare-os/prebuilds/darwin-arm64/bare-os.bare +0 -0
  76. package/node_modules/bare-os/prebuilds/darwin-x64/bare-os.bare +0 -0
  77. package/node_modules/bare-os/prebuilds/ios-arm64/bare-os.bare +0 -0
  78. package/node_modules/bare-os/prebuilds/ios-arm64-simulator/bare-os.bare +0 -0
  79. package/node_modules/bare-os/prebuilds/ios-x64-simulator/bare-os.bare +0 -0
  80. package/node_modules/bare-os/prebuilds/linux-arm64/bare-os.bare +0 -0
  81. package/node_modules/bare-os/prebuilds/linux-x64/bare-os.bare +0 -0
  82. package/node_modules/bare-os/prebuilds/win32-arm64/bare-os.bare +0 -0
  83. package/node_modules/bare-os/prebuilds/win32-x64/bare-os.bare +0 -0
  84. package/node_modules/bare-path/LICENSE +201 -0
  85. package/node_modules/bare-path/NOTICE +28 -0
  86. package/node_modules/bare-path/README.md +19 -0
  87. package/node_modules/bare-path/index.js +11 -0
  88. package/node_modules/bare-path/lib/constants.js +11 -0
  89. package/node_modules/bare-path/lib/posix.js +242 -0
  90. package/node_modules/bare-path/lib/shared.js +67 -0
  91. package/node_modules/bare-path/lib/win32.js +513 -0
  92. package/node_modules/bare-path/package.json +36 -0
  93. package/node_modules/bare-stream/LICENSE +201 -0
  94. package/node_modules/bare-stream/README.md +15 -0
  95. package/node_modules/bare-stream/global.js +8 -0
  96. package/node_modules/bare-stream/index.d.ts +237 -0
  97. package/node_modules/bare-stream/index.js +355 -0
  98. package/node_modules/bare-stream/package.json +61 -0
  99. package/node_modules/bare-stream/promises.js +3 -0
  100. package/node_modules/bare-stream/web.d.ts +73 -0
  101. package/node_modules/bare-stream/web.js +229 -0
  102. package/node_modules/bare-url/CMakeLists.txt +27 -0
  103. package/node_modules/bare-url/LICENSE +201 -0
  104. package/node_modules/bare-url/README.md +19 -0
  105. package/node_modules/bare-url/binding.c +188 -0
  106. package/node_modules/bare-url/binding.js +1 -0
  107. package/node_modules/bare-url/global.d.ts +12 -0
  108. package/node_modules/bare-url/global.js +2 -0
  109. package/node_modules/bare-url/index.d.ts +39 -0
  110. package/node_modules/bare-url/index.js +450 -0
  111. package/node_modules/bare-url/lib/errors.d.ts +8 -0
  112. package/node_modules/bare-url/lib/errors.js +38 -0
  113. package/node_modules/bare-url/lib/url-search-params.d.ts +21 -0
  114. package/node_modules/bare-url/lib/url-search-params.js +176 -0
  115. package/node_modules/bare-url/package.json +51 -0
  116. package/node_modules/bare-url/prebuilds/android-arm/bare-url.bare +0 -0
  117. package/node_modules/bare-url/prebuilds/android-arm64/bare-url.bare +0 -0
  118. package/node_modules/bare-url/prebuilds/android-ia32/bare-url.bare +0 -0
  119. package/node_modules/bare-url/prebuilds/android-x64/bare-url.bare +0 -0
  120. package/node_modules/bare-url/prebuilds/darwin-arm64/bare-url.bare +0 -0
  121. package/node_modules/bare-url/prebuilds/darwin-x64/bare-url.bare +0 -0
  122. package/node_modules/bare-url/prebuilds/ios-arm64/bare-url.bare +0 -0
  123. package/node_modules/bare-url/prebuilds/ios-arm64-simulator/bare-url.bare +0 -0
  124. package/node_modules/bare-url/prebuilds/ios-x64-simulator/bare-url.bare +0 -0
  125. package/node_modules/bare-url/prebuilds/linux-arm64/bare-url.bare +0 -0
  126. package/node_modules/bare-url/prebuilds/linux-x64/bare-url.bare +0 -0
  127. package/node_modules/bare-url/prebuilds/win32-arm64/bare-url.bare +0 -0
  128. package/node_modules/bare-url/prebuilds/win32-x64/bare-url.bare +0 -0
  129. package/node_modules/better-sqlite3/deps/download.sh +1 -1
  130. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +122 -81
  131. package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +45 -45
  132. package/node_modules/better-sqlite3/lib/database.js +1 -1
  133. package/node_modules/better-sqlite3/package.json +4 -7
  134. package/node_modules/better-sqlite3/src/addon.cpp +47 -0
  135. package/node_modules/better-sqlite3/src/better_sqlite3.cpp +44 -2164
  136. package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
  137. package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
  138. package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
  139. package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
  140. package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
  141. package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
  142. package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
  143. package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
  144. package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
  145. package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
  146. package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
  147. package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
  148. package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
  149. package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
  150. package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
  151. package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
  152. package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
  153. package/node_modules/better-sqlite3/src/util/macros.cpp +63 -0
  154. package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
  155. package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
  156. package/node_modules/events-universal/LICENSE +201 -0
  157. package/node_modules/events-universal/README.md +17 -0
  158. package/node_modules/events-universal/bare.js +1 -0
  159. package/node_modules/events-universal/default.js +1 -0
  160. package/node_modules/events-universal/index.js +1 -0
  161. package/node_modules/events-universal/package.json +39 -0
  162. package/node_modules/events-universal/react-native.js +1 -0
  163. package/node_modules/{fs-constants → fast-fifo}/LICENSE +1 -1
  164. package/node_modules/fast-fifo/README.md +78 -0
  165. package/node_modules/fast-fifo/fixed-size.js +39 -0
  166. package/node_modules/fast-fifo/index.js +48 -0
  167. package/node_modules/fast-fifo/package.json +28 -0
  168. package/node_modules/{base64-js → streamx}/LICENSE +1 -1
  169. package/node_modules/streamx/README.md +489 -0
  170. package/node_modules/streamx/index.js +1184 -0
  171. package/node_modules/streamx/package.json +34 -0
  172. package/node_modules/tar-fs/README.md +23 -34
  173. package/node_modules/tar-fs/index.js +211 -184
  174. package/node_modules/tar-fs/package.json +27 -7
  175. package/node_modules/tar-stream/README.md +34 -19
  176. package/node_modules/tar-stream/constants.js +14 -0
  177. package/node_modules/tar-stream/extract.js +341 -192
  178. package/node_modules/tar-stream/headers.js +201 -175
  179. package/node_modules/tar-stream/pack.js +226 -194
  180. package/node_modules/tar-stream/package.json +23 -46
  181. package/node_modules/text-decoder/LICENSE +201 -0
  182. package/node_modules/text-decoder/README.md +36 -0
  183. package/node_modules/text-decoder/index.js +64 -0
  184. package/node_modules/text-decoder/lib/browser-decoder.js +17 -0
  185. package/node_modules/text-decoder/lib/pass-through-decoder.js +19 -0
  186. package/node_modules/text-decoder/lib/utf8-decoder.js +104 -0
  187. package/node_modules/text-decoder/package.json +38 -0
  188. package/package.json +1 -1
  189. package/proto/cline/account.proto +10 -8
  190. package/proto/cline/browser.proto +3 -1
  191. package/proto/cline/checkpoints.proto +5 -3
  192. package/proto/cline/commands.proto +4 -2
  193. package/proto/cline/common.proto +5 -7
  194. package/proto/cline/dictation.proto +3 -1
  195. package/proto/cline/file.proto +36 -34
  196. package/proto/cline/hooks.proto +3 -2
  197. package/proto/cline/mcp.proto +6 -4
  198. package/proto/cline/models.proto +189 -19
  199. package/proto/cline/oca_account.proto +6 -7
  200. package/proto/cline/slash.proto +3 -1
  201. package/proto/cline/state.proto +144 -292
  202. package/proto/cline/task.proto +4 -2
  203. package/proto/cline/ui.proto +25 -24
  204. package/proto/cline/web.proto +3 -1
  205. package/proto/descriptor_set.pb +0 -0
  206. package/proto/host/diff.proto +5 -4
  207. package/proto/host/env.proto +8 -7
  208. package/proto/host/testing.proto +3 -3
  209. package/proto/host/window.proto +2 -2
  210. package/proto/host/workspace.proto +13 -12
  211. package/node_modules/base64-js/README.md +0 -34
  212. package/node_modules/base64-js/base64js.min.js +0 -1
  213. package/node_modules/base64-js/index.d.ts +0 -3
  214. package/node_modules/base64-js/index.js +0 -150
  215. package/node_modules/base64-js/package.json +0 -47
  216. package/node_modules/better-sqlite3/src/better_sqlite3.hpp +0 -1036
  217. package/node_modules/bl/.travis.yml +0 -17
  218. package/node_modules/bl/BufferList.js +0 -396
  219. package/node_modules/bl/LICENSE.md +0 -13
  220. package/node_modules/bl/README.md +0 -247
  221. package/node_modules/bl/bl.js +0 -84
  222. package/node_modules/bl/package.json +0 -37
  223. package/node_modules/bl/test/convert.js +0 -21
  224. package/node_modules/bl/test/indexOf.js +0 -492
  225. package/node_modules/bl/test/isBufferList.js +0 -32
  226. package/node_modules/bl/test/test.js +0 -869
  227. package/node_modules/buffer/AUTHORS.md +0 -70
  228. package/node_modules/buffer/LICENSE +0 -21
  229. package/node_modules/buffer/README.md +0 -410
  230. package/node_modules/buffer/index.d.ts +0 -186
  231. package/node_modules/buffer/index.js +0 -1817
  232. package/node_modules/buffer/package.json +0 -96
  233. package/node_modules/chownr/LICENSE +0 -15
  234. package/node_modules/chownr/README.md +0 -3
  235. package/node_modules/chownr/chownr.js +0 -167
  236. package/node_modules/chownr/package.json +0 -29
  237. package/node_modules/fs-constants/README.md +0 -26
  238. package/node_modules/fs-constants/browser.js +0 -1
  239. package/node_modules/fs-constants/index.js +0 -1
  240. package/node_modules/fs-constants/package.json +0 -19
  241. package/node_modules/ieee754/LICENSE +0 -11
  242. package/node_modules/ieee754/README.md +0 -51
  243. package/node_modules/ieee754/index.d.ts +0 -10
  244. package/node_modules/ieee754/index.js +0 -85
  245. package/node_modules/ieee754/package.json +0 -52
  246. package/node_modules/inherits/LICENSE +0 -16
  247. package/node_modules/inherits/README.md +0 -42
  248. package/node_modules/inherits/inherits.js +0 -9
  249. package/node_modules/inherits/inherits_browser.js +0 -27
  250. package/node_modules/inherits/package.json +0 -29
  251. package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  252. package/node_modules/readable-stream/GOVERNANCE.md +0 -136
  253. package/node_modules/readable-stream/LICENSE +0 -47
  254. package/node_modules/readable-stream/README.md +0 -106
  255. package/node_modules/readable-stream/errors-browser.js +0 -127
  256. package/node_modules/readable-stream/errors.js +0 -116
  257. package/node_modules/readable-stream/experimentalWarning.js +0 -17
  258. package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
  259. package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
  260. package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
  261. package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
  262. package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
  263. package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
  264. package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
  265. package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
  266. package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
  267. package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
  268. package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
  269. package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
  270. package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
  271. package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  272. package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  273. package/node_modules/readable-stream/package.json +0 -68
  274. package/node_modules/readable-stream/readable-browser.js +0 -9
  275. package/node_modules/readable-stream/readable.js +0 -16
  276. package/node_modules/string_decoder/LICENSE +0 -48
  277. package/node_modules/string_decoder/README.md +0 -47
  278. package/node_modules/string_decoder/lib/string_decoder.js +0 -296
  279. package/node_modules/string_decoder/package.json +0 -34
  280. package/node_modules/tar-fs/.travis.yml +0 -6
  281. package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
  282. package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
  283. package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
  284. package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
  285. package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
  286. package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
  287. package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
  288. package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
  289. package/node_modules/tar-fs/test/fixtures/e/file +0 -0
  290. package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
  291. package/node_modules/tar-fs/test/index.js +0 -346
  292. package/node_modules/tar-stream/sandbox.js +0 -11
  293. package/node_modules/util-deprecate/History.md +0 -16
  294. package/node_modules/util-deprecate/LICENSE +0 -24
  295. package/node_modules/util-deprecate/README.md +0 -53
  296. package/node_modules/util-deprecate/browser.js +0 -67
  297. package/node_modules/util-deprecate/node.js +0 -6
  298. package/node_modules/util-deprecate/package.json +0 -27
  299. package/test-startup.sh +0 -14
@@ -1,78 +1,26 @@
1
- var chownr = require('chownr')
2
- var tar = require('tar-stream')
3
- var pump = require('pump')
4
- var mkdirp = require('mkdirp-classic')
5
- var fs = require('fs')
6
- var path = require('path')
7
- var os = require('os')
1
+ const tar = require('tar-stream')
2
+ const pump = require('pump')
3
+ const fs = require('fs')
4
+ const path = require('path')
8
5
 
9
- var win32 = os.platform() === 'win32'
6
+ const win32 = (global.Bare ? global.Bare.platform : process.platform) === 'win32'
10
7
 
11
- var noop = function () {}
12
-
13
- var echo = function (name) {
14
- return name
15
- }
16
-
17
- var normalize = !win32 ? echo : function (name) {
18
- return name.replace(/\\/g, '/').replace(/[:?<>|]/g, '_')
19
- }
20
-
21
- var statAll = function (fs, stat, cwd, ignore, entries, sort) {
22
- var queue = entries || ['.']
23
-
24
- return function loop (callback) {
25
- if (!queue.length) return callback()
26
- var next = queue.shift()
27
- var nextAbs = path.join(cwd, next)
28
-
29
- stat.call(fs, nextAbs, function (err, stat) {
30
- if (err) return callback(err)
31
-
32
- if (!stat.isDirectory()) return callback(null, next, stat)
33
-
34
- fs.readdir(nextAbs, function (err, files) {
35
- if (err) return callback(err)
36
-
37
- if (sort) files.sort()
38
- for (var i = 0; i < files.length; i++) {
39
- if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]))
40
- }
41
-
42
- callback(null, next, stat)
43
- })
44
- })
45
- }
46
- }
47
-
48
- var strip = function (map, level) {
49
- return function (header) {
50
- header.name = header.name.split('/').slice(level).join('/')
51
-
52
- var linkname = header.linkname
53
- if (linkname && (header.type === 'link' || path.isAbsolute(linkname))) {
54
- header.linkname = linkname.split('/').slice(level).join('/')
55
- }
56
-
57
- return map(header)
58
- }
59
- }
60
-
61
- exports.pack = function (cwd, opts) {
8
+ exports.pack = function pack (cwd, opts) {
62
9
  if (!cwd) cwd = '.'
63
10
  if (!opts) opts = {}
64
11
 
65
- var xfs = opts.fs || fs
66
- var ignore = opts.ignore || opts.filter || noop
67
- var map = opts.map || noop
68
- var mapStream = opts.mapStream || echo
69
- var statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort)
70
- var strict = opts.strict !== false
71
- var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
72
- var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
73
- var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
74
- var pack = opts.pack || tar.pack()
75
- var finish = opts.finish || noop
12
+ const xfs = opts.fs || fs
13
+ const ignore = opts.ignore || opts.filter || noop
14
+ const mapStream = opts.mapStream || echo
15
+ const statNext = statAll(xfs, opts.dereference ? xfs.stat : xfs.lstat, cwd, ignore, opts.entries, opts.sort)
16
+ const strict = opts.strict !== false
17
+ const umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
18
+ const pack = opts.pack || tar.pack()
19
+ const finish = opts.finish || noop
20
+
21
+ let map = opts.map || noop
22
+ let dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
23
+ let fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
76
24
 
77
25
  if (opts.strip) map = strip(map, opts.strip)
78
26
 
@@ -85,7 +33,9 @@ exports.pack = function (cwd, opts) {
85
33
  fmode |= parseInt(222, 8)
86
34
  }
87
35
 
88
- var onsymlink = function (filename, header) {
36
+ onnextentry()
37
+
38
+ function onsymlink (filename, header) {
89
39
  xfs.readlink(path.join(cwd, filename), function (err, linkname) {
90
40
  if (err) return pack.destroy(err)
91
41
  header.linkname = normalize(linkname)
@@ -93,7 +43,8 @@ exports.pack = function (cwd, opts) {
93
43
  })
94
44
  }
95
45
 
96
- var onstat = function (err, filename, stat) {
46
+ function onstat (err, filename, stat) {
47
+ if (pack.destroyed) return
97
48
  if (err) return pack.destroy(err)
98
49
  if (!filename) {
99
50
  if (opts.finalize !== false) pack.finalize()
@@ -102,7 +53,7 @@ exports.pack = function (cwd, opts) {
102
53
 
103
54
  if (stat.isSocket()) return onnextentry() // tar does not support sockets...
104
55
 
105
- var header = {
56
+ let header = {
106
57
  name: normalize(filename),
107
58
  mode: (stat.mode | (stat.isDirectory() ? dmode : fmode)) & umask,
108
59
  mtime: stat.mtime,
@@ -135,10 +86,8 @@ exports.pack = function (cwd, opts) {
135
86
  return onnextentry()
136
87
  }
137
88
 
138
- var entry = pack.entry(header, onnextentry)
139
- if (!entry) return
140
-
141
- var rs = mapStream(xfs.createReadStream(path.join(cwd, filename), { start: 0, end: header.size > 0 ? header.size - 1 : header.size }), header)
89
+ const entry = pack.entry(header, onnextentry)
90
+ const rs = mapStream(xfs.createReadStream(path.join(cwd, filename), { start: 0, end: header.size > 0 ? header.size - 1 : header.size }), header)
142
91
 
143
92
  rs.on('error', function (err) { // always forward errors on destroy
144
93
  entry.destroy(err)
@@ -147,44 +96,46 @@ exports.pack = function (cwd, opts) {
147
96
  pump(rs, entry)
148
97
  }
149
98
 
150
- var onnextentry = function (err) {
99
+ function onnextentry (err) {
151
100
  if (err) return pack.destroy(err)
152
101
  statNext(onstat)
153
102
  }
154
103
 
155
- onnextentry()
156
-
157
104
  return pack
158
105
  }
159
106
 
160
- var head = function (list) {
107
+ function head (list) {
161
108
  return list.length ? list[list.length - 1] : null
162
109
  }
163
110
 
164
- var processGetuid = function () {
165
- return process.getuid ? process.getuid() : -1
111
+ function processGetuid () {
112
+ return (!global.Bare && process.getuid) ? process.getuid() : -1
166
113
  }
167
114
 
168
- var processUmask = function () {
169
- return process.umask ? process.umask() : 0
115
+ function processUmask () {
116
+ return (!global.Bare && process.umask) ? process.umask() : 0
170
117
  }
171
118
 
172
- exports.extract = function (cwd, opts) {
119
+ exports.extract = function extract (cwd, opts) {
173
120
  if (!cwd) cwd = '.'
174
121
  if (!opts) opts = {}
175
122
 
176
- var xfs = opts.fs || fs
177
- var ignore = opts.ignore || opts.filter || noop
178
- var map = opts.map || noop
179
- var mapStream = opts.mapStream || echo
180
- var own = opts.chown !== false && !win32 && processGetuid() === 0
181
- var extract = opts.extract || tar.extract()
182
- var stack = []
183
- var now = new Date()
184
- var umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
185
- var dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
186
- var fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
187
- var strict = opts.strict !== false
123
+ cwd = path.resolve(cwd)
124
+
125
+ const xfs = opts.fs || fs
126
+ const ignore = opts.ignore || opts.filter || noop
127
+ const mapStream = opts.mapStream || echo
128
+ const own = opts.chown !== false && !win32 && processGetuid() === 0
129
+ const extract = opts.extract || tar.extract()
130
+ const stack = []
131
+ const now = new Date()
132
+ const umask = typeof opts.umask === 'number' ? ~opts.umask : ~processUmask()
133
+ const strict = opts.strict !== false
134
+ const validateSymLinks = opts.validateSymlinks !== false
135
+
136
+ let map = opts.map || noop
137
+ let dmode = typeof opts.dmode === 'number' ? opts.dmode : 0
138
+ let fmode = typeof opts.fmode === 'number' ? opts.fmode : 0
188
139
 
189
140
  if (opts.strip) map = strip(map, opts.strip)
190
141
 
@@ -197,58 +148,66 @@ exports.extract = function (cwd, opts) {
197
148
  fmode |= parseInt(222, 8)
198
149
  }
199
150
 
200
- var utimesParent = function (name, cb) { // we just set the mtime on the parent dir again everytime we write an entry
201
- var top
202
- while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop()
203
- if (!top) return cb()
204
- xfs.utimes(top[0], now, top[1], cb)
205
- }
151
+ extract.on('entry', onentry)
206
152
 
207
- var utimes = function (name, header, cb) {
208
- if (opts.utimes === false) return cb()
153
+ if (opts.finish) extract.on('finish', opts.finish)
209
154
 
210
- if (header.type === 'directory') return xfs.utimes(name, now, header.mtime, cb)
211
- if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?
155
+ return extract
212
156
 
213
- xfs.utimes(name, now, header.mtime, function (err) {
214
- if (err) return cb(err)
215
- utimesParent(name, cb)
216
- })
217
- }
157
+ function onentry (header, stream, next) {
158
+ header = map(header) || header
159
+ header.name = normalize(header.name)
218
160
 
219
- var chperm = function (name, header, cb) {
220
- var link = header.type === 'symlink'
161
+ const name = path.join(cwd, path.join('/', header.name))
221
162
 
222
- /* eslint-disable node/no-deprecated-api */
223
- var chmod = link ? xfs.lchmod : xfs.chmod
224
- var chown = link ? xfs.lchown : xfs.chown
225
- /* eslint-enable node/no-deprecated-api */
163
+ if (ignore(name, header)) {
164
+ stream.resume()
165
+ return next()
166
+ }
226
167
 
227
- if (!chmod) return cb()
168
+ const dir = path.join(name, '.') === path.join(cwd, '.') ? cwd : path.dirname(name)
228
169
 
229
- var mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask
170
+ validate(xfs, dir, path.join(cwd, '.'), function (err, valid) {
171
+ if (err) return next(err)
172
+ if (!valid) return next(new Error(dir + ' is not a valid path'))
230
173
 
231
- if (chown && own) chown.call(xfs, name, header.uid, header.gid, onchown)
232
- else onchown(null)
174
+ if (header.type === 'directory') {
175
+ stack.push([name, header.mtime])
176
+ return mkdirfix(name, {
177
+ fs: xfs,
178
+ own,
179
+ uid: header.uid,
180
+ gid: header.gid,
181
+ mode: header.mode
182
+ }, stat)
183
+ }
233
184
 
234
- function onchown (err) {
235
- if (err) return cb(err)
236
- if (!chmod) return cb()
237
- chmod.call(xfs, name, mode, cb)
238
- }
239
- }
185
+ mkdirfix(dir, {
186
+ fs: xfs,
187
+ own,
188
+ uid: header.uid,
189
+ gid: header.gid,
190
+ // normally, the folders with rights and owner should be part of the TAR file
191
+ // if this is not the case, create folder for same user as file and with
192
+ // standard permissions of 0o755 (rwxr-xr-x)
193
+ mode: 0o755
194
+ }, function (err) {
195
+ if (err) return next(err)
240
196
 
241
- extract.on('entry', function (header, stream, next) {
242
- header = map(header) || header
243
- header.name = normalize(header.name)
244
- var name = path.join(cwd, path.join('/', header.name))
197
+ switch (header.type) {
198
+ case 'file': return onfile()
199
+ case 'link': return onlink()
200
+ case 'symlink': return onsymlink()
201
+ }
245
202
 
246
- if (ignore(name, header)) {
247
- stream.resume()
248
- return next()
249
- }
203
+ if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))
250
204
 
251
- var stat = function (err) {
205
+ stream.resume()
206
+ next()
207
+ })
208
+ })
209
+
210
+ function stat (err) {
252
211
  if (err) return next(err)
253
212
  utimes(name, header, function (err) {
254
213
  if (err) return next(err)
@@ -257,27 +216,27 @@ exports.extract = function (cwd, opts) {
257
216
  })
258
217
  }
259
218
 
260
- var onsymlink = function () {
219
+ function onsymlink () {
261
220
  if (win32) return next() // skip symlinks on win for now before it can be tested
262
221
  xfs.unlink(name, function () {
263
- var dst = path.resolve(path.dirname(name), header.linkname)
264
- if (!dst.startsWith(path.resolve(cwd))) return next(new Error(name + ' is not a valid symlink'))
222
+ const dst = path.resolve(path.dirname(name), header.linkname)
223
+ if (!inCwd(dst) && validateSymLinks) return next(new Error(name + ' is not a valid symlink'))
265
224
 
266
225
  xfs.symlink(header.linkname, name, stat)
267
226
  })
268
227
  }
269
228
 
270
- var onlink = function () {
229
+ function onlink () {
271
230
  if (win32) return next() // skip links on win for now before it can be tested
272
231
  xfs.unlink(name, function () {
273
- var srcpath = path.join(cwd, path.join('/', header.linkname))
232
+ const link = path.join(cwd, path.join('/', header.linkname))
274
233
 
275
- xfs.realpath(srcpath, function (err, dst) {
276
- if (err || !dst.startsWith(path.resolve(cwd))) return next(new Error(name + ' is not a valid hardlink'))
234
+ fs.realpath(link, function (err, dst) {
235
+ if (err || !inCwd(dst)) return next(new Error(name + ' is not a valid hardlink'))
277
236
 
278
237
  xfs.link(dst, name, function (err) {
279
238
  if (err && err.code === 'EPERM' && opts.hardlinkAsFilesFallback) {
280
- stream = xfs.createReadStream(srcpath)
239
+ stream = xfs.createReadStream(dst)
281
240
  return onfile()
282
241
  }
283
242
 
@@ -287,9 +246,13 @@ exports.extract = function (cwd, opts) {
287
246
  })
288
247
  }
289
248
 
290
- var onfile = function () {
291
- var ws = xfs.createWriteStream(name)
292
- var rs = mapStream(stream, header)
249
+ function inCwd (dst) {
250
+ return dst === cwd || dst.startsWith(cwd + path.sep)
251
+ }
252
+
253
+ function onfile () {
254
+ const ws = xfs.createWriteStream(name)
255
+ const rs = mapStream(stream, header)
293
256
 
294
257
  ws.on('error', function (err) { // always forward errors on destroy
295
258
  rs.destroy(err)
@@ -300,59 +263,123 @@ exports.extract = function (cwd, opts) {
300
263
  ws.on('close', stat)
301
264
  })
302
265
  }
266
+ }
303
267
 
304
- if (header.type === 'directory') {
305
- stack.push([name, header.mtime])
306
- return mkdirfix(name, {
307
- fs: xfs, own: own, uid: header.uid, gid: header.gid
308
- }, stat)
309
- }
268
+ function utimesParent (name, cb) { // we just set the mtime on the parent dir again everytime we write an entry
269
+ let top
270
+ while ((top = head(stack)) && name.slice(0, top[0].length) !== top[0]) stack.pop()
271
+ if (!top) return cb()
272
+ xfs.utimes(top[0], now, top[1], cb)
273
+ }
310
274
 
311
- var dir = path.dirname(name)
275
+ function utimes (name, header, cb) {
276
+ if (opts.utimes === false) return cb()
312
277
 
313
- validate(xfs, dir, path.join(cwd, '.'), function (err, valid) {
314
- if (err) return next(err)
315
- if (!valid) return next(new Error(dir + ' is not a valid path'))
278
+ if (header.type === 'directory') return xfs.utimes(name, now, header.mtime, cb)
279
+ if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?
316
280
 
317
- mkdirfix(dir, {
318
- fs: xfs, own: own, uid: header.uid, gid: header.gid
319
- }, function (err) {
320
- if (err) return next(err)
281
+ xfs.utimes(name, now, header.mtime, function (err) {
282
+ if (err) return cb(err)
283
+ utimesParent(name, cb)
284
+ })
285
+ }
321
286
 
322
- switch (header.type) {
323
- case 'file': return onfile()
324
- case 'link': return onlink()
325
- case 'symlink': return onsymlink()
326
- }
287
+ function chperm (name, header, cb) {
288
+ const link = header.type === 'symlink'
327
289
 
328
- if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))
290
+ /* eslint-disable n/no-deprecated-api */
291
+ const chmod = link ? xfs.lchmod : xfs.chmod
292
+ const chown = link ? xfs.lchown : xfs.chown
293
+ /* eslint-enable n/no-deprecated-api */
329
294
 
330
- stream.resume()
331
- next()
332
- })
333
- })
334
- })
295
+ if (!chmod) return cb()
335
296
 
336
- if (opts.finish) extract.on('finish', opts.finish)
297
+ const mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask
337
298
 
338
- return extract
299
+ if (chown && own) chown.call(xfs, name, header.uid, header.gid, onchown)
300
+ else onchown(null)
301
+
302
+ function onchown (err) {
303
+ if (err) return cb(err)
304
+ if (!chmod) return cb()
305
+ chmod.call(xfs, name, mode, cb)
306
+ }
307
+ }
308
+
309
+ function mkdirfix (name, opts, cb) {
310
+ // when mkdir is called on an existing directory, the permissions
311
+ // will be overwritten (?), to avoid this we check for its existance first
312
+ xfs.stat(name, function (err) {
313
+ if (!err) return cb(null)
314
+ if (err.code !== 'ENOENT') return cb(err)
315
+ xfs.mkdir(name, { mode: opts.mode, recursive: true }, function (err, made) {
316
+ if (err) return cb(err)
317
+ chperm(name, opts, cb)
318
+ })
319
+ })
320
+ }
339
321
  }
340
322
 
341
323
  function validate (fs, name, root, cb) {
342
324
  if (name === root) return cb(null, true)
325
+
343
326
  fs.lstat(name, function (err, st) {
344
- if (err && err.code !== 'ENOENT') return cb(err)
327
+ if (err && err.code !== 'ENOENT' && err.code !== 'EPERM') return cb(err)
345
328
  if (err || st.isDirectory()) return validate(fs, path.join(name, '..'), root, cb)
346
329
  cb(null, false)
347
330
  })
348
331
  }
349
332
 
350
- function mkdirfix (name, opts, cb) {
351
- mkdirp(name, { fs: opts.fs }, function (err, made) {
352
- if (!err && made && opts.own) {
353
- chownr(made, opts.uid, opts.gid, cb)
354
- } else {
355
- cb(err)
333
+ function noop () {}
334
+
335
+ function echo (name) {
336
+ return name
337
+ }
338
+
339
+ function normalize (name) {
340
+ return win32 ? name.replace(/\\/g, '/').replace(/[:?<>|]/g, '_') : name
341
+ }
342
+
343
+ function statAll (fs, stat, cwd, ignore, entries, sort) {
344
+ if (!entries) entries = ['.']
345
+ const queue = entries.slice(0)
346
+
347
+ return function loop (callback) {
348
+ if (!queue.length) return callback(null)
349
+
350
+ const next = queue.shift()
351
+ const nextAbs = path.join(cwd, next)
352
+
353
+ stat.call(fs, nextAbs, function (err, stat) {
354
+ // ignore errors if the files were deleted while buffering
355
+ if (err) return callback(entries.indexOf(next) === -1 && err.code === 'ENOENT' ? null : err)
356
+
357
+ if (!stat.isDirectory()) return callback(null, next, stat)
358
+
359
+ fs.readdir(nextAbs, function (err, files) {
360
+ if (err) return callback(err)
361
+
362
+ if (sort) files.sort()
363
+
364
+ for (let i = 0; i < files.length; i++) {
365
+ if (!ignore(path.join(cwd, next, files[i]))) queue.push(path.join(next, files[i]))
366
+ }
367
+
368
+ callback(null, next, stat)
369
+ })
370
+ })
371
+ }
372
+ }
373
+
374
+ function strip (map, level) {
375
+ return function (header) {
376
+ header.name = header.name.split('/').slice(level).join('/')
377
+
378
+ const linkname = header.linkname
379
+ if (linkname && (header.type === 'link' || path.isAbsolute(linkname))) {
380
+ header.linkname = linkname.split('/').slice(level).join('/')
356
381
  }
357
- })
382
+
383
+ return map(header)
384
+ }
358
385
  }
@@ -1,12 +1,32 @@
1
1
  {
2
2
  "name": "tar-fs",
3
- "version": "2.1.3",
3
+ "version": "3.1.1",
4
4
  "description": "filesystem bindings for tar-stream",
5
5
  "dependencies": {
6
- "chownr": "^1.1.1",
7
- "mkdirp-classic": "^0.5.2",
8
6
  "pump": "^3.0.0",
9
- "tar-stream": "^2.1.4"
7
+ "tar-stream": "^3.1.5"
8
+ },
9
+ "optionalDependencies": {
10
+ "bare-fs": "^4.0.1",
11
+ "bare-path": "^3.0.0"
12
+ },
13
+ "imports": {
14
+ "fs": {
15
+ "bare": "bare-fs",
16
+ "default": "fs"
17
+ },
18
+ "path": {
19
+ "bare": "bare-path",
20
+ "default": "path"
21
+ }
22
+ },
23
+ "files": [
24
+ "index.js"
25
+ ],
26
+ "standard": {
27
+ "ignore": [
28
+ "test/fixtures/**"
29
+ ]
10
30
  },
11
31
  "keywords": [
12
32
  "tar",
@@ -17,12 +37,12 @@
17
37
  "stream"
18
38
  ],
19
39
  "devDependencies": {
40
+ "brittle": "^3.1.3",
20
41
  "rimraf": "^2.6.3",
21
- "standard": "^13.0.1",
22
- "tape": "^4.9.2"
42
+ "standard": "^17.0.1"
23
43
  },
24
44
  "scripts": {
25
- "test": "standard && tape test/index.js"
45
+ "test": "standard && brittle test/index.js"
26
46
  },
27
47
  "bugs": {
28
48
  "url": "https://github.com/mafintosh/tar-fs/issues"