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.
- package/bin/cline +0 -0
- package/bin/cline-darwin-amd64 +0 -0
- package/bin/cline-darwin-arm64 +0 -0
- package/bin/cline-host +0 -0
- package/bin/cline-host-darwin-amd64 +0 -0
- package/bin/cline-host-darwin-arm64 +0 -0
- package/bin/cline-host-linux-amd64 +0 -0
- package/bin/cline-host-linux-arm64 +0 -0
- package/bin/cline-linux-amd64 +0 -0
- package/bin/cline-linux-arm64 +0 -0
- package/cline-core.js +24143 -16610
- package/extension/package.json +12 -4
- package/node_modules/b4a/LICENSE +201 -0
- package/node_modules/b4a/README.md +153 -0
- package/node_modules/b4a/browser.js +563 -0
- package/node_modules/b4a/index.js +188 -0
- package/node_modules/b4a/lib/ascii.js +31 -0
- package/node_modules/b4a/lib/base64.js +65 -0
- package/node_modules/b4a/lib/hex.js +51 -0
- package/node_modules/b4a/lib/utf16le.js +40 -0
- package/node_modules/b4a/lib/utf8.js +141 -0
- package/node_modules/b4a/package.json +49 -0
- package/node_modules/b4a/react-native.js +5 -0
- package/node_modules/bare-events/LICENSE +201 -0
- package/node_modules/bare-events/README.md +25 -0
- package/node_modules/bare-events/global.d.ts +15 -0
- package/node_modules/bare-events/global.js +5 -0
- package/node_modules/bare-events/index.d.ts +94 -0
- package/node_modules/bare-events/index.js +355 -0
- package/node_modules/bare-events/lib/errors.js +32 -0
- package/node_modules/bare-events/package.json +61 -0
- package/node_modules/bare-events/web.d.ts +79 -0
- package/node_modules/bare-events/web.js +347 -0
- package/node_modules/bare-fs/CMakeLists.txt +13 -0
- package/node_modules/bare-fs/LICENSE +201 -0
- package/node_modules/bare-fs/README.md +29 -0
- package/node_modules/bare-fs/binding.c +2238 -0
- package/node_modules/bare-fs/binding.js +1 -0
- package/node_modules/bare-fs/index.d.ts +1115 -0
- package/node_modules/bare-fs/index.js +2330 -0
- package/node_modules/bare-fs/lib/constants.d.ts +49 -0
- package/node_modules/bare-fs/lib/constants.js +49 -0
- package/node_modules/bare-fs/lib/errors.d.ts +11 -0
- package/node_modules/bare-fs/lib/errors.js +55 -0
- package/node_modules/bare-fs/package.json +71 -0
- package/node_modules/bare-fs/prebuilds/android-arm/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/android-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/android-ia32/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/android-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/darwin-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/darwin-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/ios-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/ios-arm64-simulator/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/ios-x64-simulator/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/linux-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/linux-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/win32-arm64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/prebuilds/win32-x64/bare-fs.bare +0 -0
- package/node_modules/bare-fs/promises.d.ts +282 -0
- package/node_modules/bare-fs/promises.js +90 -0
- package/node_modules/bare-os/CMakeLists.txt +13 -0
- package/node_modules/bare-os/LICENSE +201 -0
- package/node_modules/bare-os/README.md +11 -0
- package/node_modules/bare-os/binding.c +1119 -0
- package/node_modules/bare-os/binding.js +1 -0
- package/node_modules/bare-os/index.d.ts +109 -0
- package/node_modules/bare-os/index.js +99 -0
- package/node_modules/bare-os/lib/constants.js +6 -0
- package/node_modules/bare-os/lib/errors.js +22 -0
- package/node_modules/bare-os/package.json +46 -0
- package/node_modules/bare-os/prebuilds/android-arm/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/android-arm64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/android-ia32/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/android-x64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/darwin-arm64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/darwin-x64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/ios-arm64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/ios-arm64-simulator/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/ios-x64-simulator/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/linux-arm64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/linux-x64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/win32-arm64/bare-os.bare +0 -0
- package/node_modules/bare-os/prebuilds/win32-x64/bare-os.bare +0 -0
- package/node_modules/bare-path/LICENSE +201 -0
- package/node_modules/bare-path/NOTICE +28 -0
- package/node_modules/bare-path/README.md +19 -0
- package/node_modules/bare-path/index.js +11 -0
- package/node_modules/bare-path/lib/constants.js +11 -0
- package/node_modules/bare-path/lib/posix.js +242 -0
- package/node_modules/bare-path/lib/shared.js +67 -0
- package/node_modules/bare-path/lib/win32.js +513 -0
- package/node_modules/bare-path/package.json +36 -0
- package/node_modules/bare-stream/LICENSE +201 -0
- package/node_modules/bare-stream/README.md +15 -0
- package/node_modules/bare-stream/global.js +8 -0
- package/node_modules/bare-stream/index.d.ts +237 -0
- package/node_modules/bare-stream/index.js +355 -0
- package/node_modules/bare-stream/package.json +61 -0
- package/node_modules/bare-stream/promises.js +3 -0
- package/node_modules/bare-stream/web.d.ts +73 -0
- package/node_modules/bare-stream/web.js +229 -0
- package/node_modules/bare-url/CMakeLists.txt +27 -0
- package/node_modules/bare-url/LICENSE +201 -0
- package/node_modules/bare-url/README.md +19 -0
- package/node_modules/bare-url/binding.c +188 -0
- package/node_modules/bare-url/binding.js +1 -0
- package/node_modules/bare-url/global.d.ts +12 -0
- package/node_modules/bare-url/global.js +2 -0
- package/node_modules/bare-url/index.d.ts +39 -0
- package/node_modules/bare-url/index.js +450 -0
- package/node_modules/bare-url/lib/errors.d.ts +8 -0
- package/node_modules/bare-url/lib/errors.js +38 -0
- package/node_modules/bare-url/lib/url-search-params.d.ts +21 -0
- package/node_modules/bare-url/lib/url-search-params.js +176 -0
- package/node_modules/bare-url/package.json +51 -0
- package/node_modules/bare-url/prebuilds/android-arm/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/android-arm64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/android-ia32/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/android-x64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/darwin-arm64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/darwin-x64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/ios-arm64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/ios-arm64-simulator/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/ios-x64-simulator/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/linux-arm64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/linux-x64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/win32-arm64/bare-url.bare +0 -0
- package/node_modules/bare-url/prebuilds/win32-x64/bare-url.bare +0 -0
- package/node_modules/better-sqlite3/deps/download.sh +1 -1
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.c +122 -81
- package/node_modules/better-sqlite3/deps/sqlite3/sqlite3.h +45 -45
- package/node_modules/better-sqlite3/lib/database.js +1 -1
- package/node_modules/better-sqlite3/package.json +4 -7
- package/node_modules/better-sqlite3/src/addon.cpp +47 -0
- package/node_modules/better-sqlite3/src/better_sqlite3.cpp +44 -2164
- package/node_modules/better-sqlite3/src/objects/backup.cpp +120 -0
- package/node_modules/better-sqlite3/src/objects/backup.hpp +36 -0
- package/node_modules/better-sqlite3/src/objects/database.cpp +417 -0
- package/node_modules/better-sqlite3/src/objects/database.hpp +103 -0
- package/node_modules/better-sqlite3/src/objects/statement-iterator.cpp +113 -0
- package/node_modules/better-sqlite3/src/objects/statement-iterator.hpp +50 -0
- package/node_modules/better-sqlite3/src/objects/statement.cpp +383 -0
- package/node_modules/better-sqlite3/src/objects/statement.hpp +58 -0
- package/node_modules/better-sqlite3/src/util/bind-map.cpp +73 -0
- package/node_modules/better-sqlite3/src/util/binder.cpp +193 -0
- package/node_modules/better-sqlite3/src/util/constants.cpp +172 -0
- package/node_modules/better-sqlite3/src/util/custom-aggregate.cpp +121 -0
- package/node_modules/better-sqlite3/src/util/custom-function.cpp +59 -0
- package/node_modules/better-sqlite3/src/util/custom-table.cpp +409 -0
- package/node_modules/better-sqlite3/src/util/data-converter.cpp +17 -0
- package/node_modules/better-sqlite3/src/util/data.cpp +194 -0
- package/node_modules/better-sqlite3/src/util/helpers.cpp +109 -0
- package/node_modules/better-sqlite3/src/util/macros.cpp +63 -0
- package/node_modules/better-sqlite3/src/util/query-macros.cpp +71 -0
- package/node_modules/better-sqlite3/src/util/row-builder.cpp +49 -0
- package/node_modules/events-universal/LICENSE +201 -0
- package/node_modules/events-universal/README.md +17 -0
- package/node_modules/events-universal/bare.js +1 -0
- package/node_modules/events-universal/default.js +1 -0
- package/node_modules/events-universal/index.js +1 -0
- package/node_modules/events-universal/package.json +39 -0
- package/node_modules/events-universal/react-native.js +1 -0
- package/node_modules/{fs-constants → fast-fifo}/LICENSE +1 -1
- package/node_modules/fast-fifo/README.md +78 -0
- package/node_modules/fast-fifo/fixed-size.js +39 -0
- package/node_modules/fast-fifo/index.js +48 -0
- package/node_modules/fast-fifo/package.json +28 -0
- package/node_modules/{base64-js → streamx}/LICENSE +1 -1
- package/node_modules/streamx/README.md +489 -0
- package/node_modules/streamx/index.js +1184 -0
- package/node_modules/streamx/package.json +34 -0
- package/node_modules/tar-fs/README.md +23 -34
- package/node_modules/tar-fs/index.js +211 -184
- package/node_modules/tar-fs/package.json +27 -7
- package/node_modules/tar-stream/README.md +34 -19
- package/node_modules/tar-stream/constants.js +14 -0
- package/node_modules/tar-stream/extract.js +341 -192
- package/node_modules/tar-stream/headers.js +201 -175
- package/node_modules/tar-stream/pack.js +226 -194
- package/node_modules/tar-stream/package.json +23 -46
- package/node_modules/text-decoder/LICENSE +201 -0
- package/node_modules/text-decoder/README.md +36 -0
- package/node_modules/text-decoder/index.js +64 -0
- package/node_modules/text-decoder/lib/browser-decoder.js +17 -0
- package/node_modules/text-decoder/lib/pass-through-decoder.js +19 -0
- package/node_modules/text-decoder/lib/utf8-decoder.js +104 -0
- package/node_modules/text-decoder/package.json +38 -0
- package/package.json +1 -1
- package/proto/cline/account.proto +10 -8
- package/proto/cline/browser.proto +3 -1
- package/proto/cline/checkpoints.proto +5 -3
- package/proto/cline/commands.proto +4 -2
- package/proto/cline/common.proto +5 -7
- package/proto/cline/dictation.proto +3 -1
- package/proto/cline/file.proto +36 -34
- package/proto/cline/hooks.proto +3 -2
- package/proto/cline/mcp.proto +6 -4
- package/proto/cline/models.proto +189 -19
- package/proto/cline/oca_account.proto +6 -7
- package/proto/cline/slash.proto +3 -1
- package/proto/cline/state.proto +144 -292
- package/proto/cline/task.proto +4 -2
- package/proto/cline/ui.proto +25 -24
- package/proto/cline/web.proto +3 -1
- package/proto/descriptor_set.pb +0 -0
- package/proto/host/diff.proto +5 -4
- package/proto/host/env.proto +8 -7
- package/proto/host/testing.proto +3 -3
- package/proto/host/window.proto +2 -2
- package/proto/host/workspace.proto +13 -12
- package/node_modules/base64-js/README.md +0 -34
- package/node_modules/base64-js/base64js.min.js +0 -1
- package/node_modules/base64-js/index.d.ts +0 -3
- package/node_modules/base64-js/index.js +0 -150
- package/node_modules/base64-js/package.json +0 -47
- package/node_modules/better-sqlite3/src/better_sqlite3.hpp +0 -1036
- package/node_modules/bl/.travis.yml +0 -17
- package/node_modules/bl/BufferList.js +0 -396
- package/node_modules/bl/LICENSE.md +0 -13
- package/node_modules/bl/README.md +0 -247
- package/node_modules/bl/bl.js +0 -84
- package/node_modules/bl/package.json +0 -37
- package/node_modules/bl/test/convert.js +0 -21
- package/node_modules/bl/test/indexOf.js +0 -492
- package/node_modules/bl/test/isBufferList.js +0 -32
- package/node_modules/bl/test/test.js +0 -869
- package/node_modules/buffer/AUTHORS.md +0 -70
- package/node_modules/buffer/LICENSE +0 -21
- package/node_modules/buffer/README.md +0 -410
- package/node_modules/buffer/index.d.ts +0 -186
- package/node_modules/buffer/index.js +0 -1817
- package/node_modules/buffer/package.json +0 -96
- package/node_modules/chownr/LICENSE +0 -15
- package/node_modules/chownr/README.md +0 -3
- package/node_modules/chownr/chownr.js +0 -167
- package/node_modules/chownr/package.json +0 -29
- package/node_modules/fs-constants/README.md +0 -26
- package/node_modules/fs-constants/browser.js +0 -1
- package/node_modules/fs-constants/index.js +0 -1
- package/node_modules/fs-constants/package.json +0 -19
- package/node_modules/ieee754/LICENSE +0 -11
- package/node_modules/ieee754/README.md +0 -51
- package/node_modules/ieee754/index.d.ts +0 -10
- package/node_modules/ieee754/index.js +0 -85
- package/node_modules/ieee754/package.json +0 -52
- package/node_modules/inherits/LICENSE +0 -16
- package/node_modules/inherits/README.md +0 -42
- package/node_modules/inherits/inherits.js +0 -9
- package/node_modules/inherits/inherits_browser.js +0 -27
- package/node_modules/inherits/package.json +0 -29
- package/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- package/node_modules/readable-stream/GOVERNANCE.md +0 -136
- package/node_modules/readable-stream/LICENSE +0 -47
- package/node_modules/readable-stream/README.md +0 -106
- package/node_modules/readable-stream/errors-browser.js +0 -127
- package/node_modules/readable-stream/errors.js +0 -116
- package/node_modules/readable-stream/experimentalWarning.js +0 -17
- package/node_modules/readable-stream/lib/_stream_duplex.js +0 -126
- package/node_modules/readable-stream/lib/_stream_passthrough.js +0 -37
- package/node_modules/readable-stream/lib/_stream_readable.js +0 -1027
- package/node_modules/readable-stream/lib/_stream_transform.js +0 -190
- package/node_modules/readable-stream/lib/_stream_writable.js +0 -641
- package/node_modules/readable-stream/lib/internal/streams/async_iterator.js +0 -180
- package/node_modules/readable-stream/lib/internal/streams/buffer_list.js +0 -183
- package/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -96
- package/node_modules/readable-stream/lib/internal/streams/end-of-stream.js +0 -86
- package/node_modules/readable-stream/lib/internal/streams/from-browser.js +0 -3
- package/node_modules/readable-stream/lib/internal/streams/from.js +0 -52
- package/node_modules/readable-stream/lib/internal/streams/pipeline.js +0 -86
- package/node_modules/readable-stream/lib/internal/streams/state.js +0 -22
- package/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- package/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- package/node_modules/readable-stream/package.json +0 -68
- package/node_modules/readable-stream/readable-browser.js +0 -9
- package/node_modules/readable-stream/readable.js +0 -16
- package/node_modules/string_decoder/LICENSE +0 -48
- package/node_modules/string_decoder/README.md +0 -47
- package/node_modules/string_decoder/lib/string_decoder.js +0 -296
- package/node_modules/string_decoder/package.json +0 -34
- package/node_modules/tar-fs/.travis.yml +0 -6
- package/node_modules/tar-fs/test/fixtures/a/hello.txt +0 -1
- package/node_modules/tar-fs/test/fixtures/b/a/test.txt +0 -1
- package/node_modules/tar-fs/test/fixtures/d/file1 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/file2 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-dir/file5 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file3 +0 -0
- package/node_modules/tar-fs/test/fixtures/d/sub-files/file4 +0 -0
- package/node_modules/tar-fs/test/fixtures/e/directory/.ignore +0 -0
- package/node_modules/tar-fs/test/fixtures/e/file +0 -0
- package/node_modules/tar-fs/test/fixtures/invalid.tar +0 -0
- package/node_modules/tar-fs/test/index.js +0 -346
- package/node_modules/tar-stream/sandbox.js +0 -11
- package/node_modules/util-deprecate/History.md +0 -16
- package/node_modules/util-deprecate/LICENSE +0 -24
- package/node_modules/util-deprecate/README.md +0 -53
- package/node_modules/util-deprecate/browser.js +0 -67
- package/node_modules/util-deprecate/node.js +0 -6
- package/node_modules/util-deprecate/package.json +0 -27
- package/test-startup.sh +0 -14
|
@@ -1,78 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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
|
-
|
|
6
|
+
const win32 = (global.Bare ? global.Bare.platform : process.platform) === 'win32'
|
|
10
7
|
|
|
11
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
-
|
|
107
|
+
function head (list) {
|
|
161
108
|
return list.length ? list[list.length - 1] : null
|
|
162
109
|
}
|
|
163
110
|
|
|
164
|
-
|
|
165
|
-
return process.getuid ? process.getuid() : -1
|
|
111
|
+
function processGetuid () {
|
|
112
|
+
return (!global.Bare && process.getuid) ? process.getuid() : -1
|
|
166
113
|
}
|
|
167
114
|
|
|
168
|
-
|
|
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
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
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
|
-
|
|
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
|
-
|
|
208
|
-
if (opts.utimes === false) return cb()
|
|
153
|
+
if (opts.finish) extract.on('finish', opts.finish)
|
|
209
154
|
|
|
210
|
-
|
|
211
|
-
if (header.type === 'symlink') return utimesParent(name, cb) // TODO: how to set mtime on link?
|
|
155
|
+
return extract
|
|
212
156
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
})
|
|
217
|
-
}
|
|
157
|
+
function onentry (header, stream, next) {
|
|
158
|
+
header = map(header) || header
|
|
159
|
+
header.name = normalize(header.name)
|
|
218
160
|
|
|
219
|
-
|
|
220
|
-
var link = header.type === 'symlink'
|
|
161
|
+
const name = path.join(cwd, path.join('/', header.name))
|
|
221
162
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
163
|
+
if (ignore(name, header)) {
|
|
164
|
+
stream.resume()
|
|
165
|
+
return next()
|
|
166
|
+
}
|
|
226
167
|
|
|
227
|
-
|
|
168
|
+
const dir = path.join(name, '.') === path.join(cwd, '.') ? cwd : path.dirname(name)
|
|
228
169
|
|
|
229
|
-
|
|
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
|
-
|
|
232
|
-
|
|
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
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
197
|
+
switch (header.type) {
|
|
198
|
+
case 'file': return onfile()
|
|
199
|
+
case 'link': return onlink()
|
|
200
|
+
case 'symlink': return onsymlink()
|
|
201
|
+
}
|
|
245
202
|
|
|
246
|
-
|
|
247
|
-
stream.resume()
|
|
248
|
-
return next()
|
|
249
|
-
}
|
|
203
|
+
if (strict) return next(new Error('unsupported type for ' + name + ' (' + header.type + ')'))
|
|
250
204
|
|
|
251
|
-
|
|
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
|
-
|
|
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
|
-
|
|
264
|
-
if (!dst
|
|
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
|
-
|
|
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
|
-
|
|
232
|
+
const link = path.join(cwd, path.join('/', header.linkname))
|
|
274
233
|
|
|
275
|
-
|
|
276
|
-
if (err || !dst
|
|
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(
|
|
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
|
-
|
|
291
|
-
|
|
292
|
-
|
|
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
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
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
|
-
|
|
275
|
+
function utimes (name, header, cb) {
|
|
276
|
+
if (opts.utimes === false) return cb()
|
|
312
277
|
|
|
313
|
-
|
|
314
|
-
|
|
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
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
281
|
+
xfs.utimes(name, now, header.mtime, function (err) {
|
|
282
|
+
if (err) return cb(err)
|
|
283
|
+
utimesParent(name, cb)
|
|
284
|
+
})
|
|
285
|
+
}
|
|
321
286
|
|
|
322
|
-
|
|
323
|
-
|
|
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
|
-
|
|
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
|
-
|
|
331
|
-
next()
|
|
332
|
-
})
|
|
333
|
-
})
|
|
334
|
-
})
|
|
295
|
+
if (!chmod) return cb()
|
|
335
296
|
|
|
336
|
-
|
|
297
|
+
const mode = (header.mode | (header.type === 'directory' ? dmode : fmode)) & umask
|
|
337
298
|
|
|
338
|
-
|
|
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
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
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": "
|
|
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": "^
|
|
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": "^
|
|
22
|
-
"tape": "^4.9.2"
|
|
42
|
+
"standard": "^17.0.1"
|
|
23
43
|
},
|
|
24
44
|
"scripts": {
|
|
25
|
-
"test": "standard &&
|
|
45
|
+
"test": "standard && brittle test/index.js"
|
|
26
46
|
},
|
|
27
47
|
"bugs": {
|
|
28
48
|
"url": "https://github.com/mafintosh/tar-fs/issues"
|