pwd-fs 2.4.2 → 3.1.4
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/.travis.yml +2 -3
- package/appveyor.yml +2 -4
- package/lib/src/index.d.ts +4 -186
- package/lib/src/index.js +18 -294
- package/lib/src/powered-file-system.d.ts +156 -0
- package/lib/src/powered-file-system.js +264 -0
- package/lib/src/recurse-io-sync.d.ts +10 -5
- package/lib/src/recurse-io-sync.js +74 -69
- package/lib/src/recurse-io.d.ts +14 -6
- package/lib/src/recurse-io.js +164 -160
- package/lib/test/__fmock.d.ts +5 -0
- package/lib/test/__fmock.js +40 -0
- package/lib/test/append.spec.js +36 -77
- package/lib/test/bitmask.spec.js +14 -17
- package/lib/test/chmod.spec.js +42 -84
- package/lib/test/chown.spec.js +45 -71
- package/lib/test/constructor.spec.js +7 -10
- package/lib/test/copy.spec.js +53 -108
- package/lib/test/mkdir.spec.js +62 -119
- package/lib/test/read.spec.js +47 -78
- package/lib/test/readdir.spec.js +48 -90
- package/lib/test/remove.spec.js +44 -65
- package/lib/test/rename.spec.js +43 -75
- package/lib/test/stat.spec.js +50 -78
- package/lib/test/symlink.spec.js +51 -95
- package/lib/test/test.spec.js +37 -66
- package/lib/test/write.spec.js +52 -103
- package/package.json +8 -11
- package/readme.md +10 -21
- package/src/index.ts +4 -623
- package/src/powered-file-system.ts +527 -0
- package/src/recurse-io-sync.ts +77 -71
- package/src/recurse-io.ts +181 -176
- package/test/__fmock.ts +45 -0
- package/test/append.spec.ts +44 -98
- package/test/bitmask.spec.ts +14 -17
- package/test/chmod.spec.ts +45 -95
- package/test/chown.spec.ts +61 -93
- package/test/constructor.spec.ts +4 -7
- package/test/copy.spec.ts +72 -142
- package/test/mkdir.spec.ts +87 -153
- package/test/read.spec.ts +64 -103
- package/test/readdir.spec.ts +65 -113
- package/test/remove.spec.ts +58 -82
- package/test/rename.spec.ts +58 -96
- package/test/stat.spec.ts +68 -100
- package/test/symlink.spec.ts +74 -125
- package/test/test.spec.ts +51 -84
- package/test/write.spec.ts +68 -131
- package/tsconfig.json +14 -7
- package/lib/src/index.js.map +0 -1
- package/lib/src/recurse-io-sync.js.map +0 -1
- package/lib/src/recurse-io.js.map +0 -1
- package/lib/test/append.spec.js.map +0 -1
- package/lib/test/bitmask.spec.js.map +0 -1
- package/lib/test/chmod.spec.js.map +0 -1
- package/lib/test/chown.spec.js.map +0 -1
- package/lib/test/constructor.spec.js.map +0 -1
- package/lib/test/copy.spec.js.map +0 -1
- package/lib/test/mkdir.spec.js.map +0 -1
- package/lib/test/read.spec.js.map +0 -1
- package/lib/test/readdir.spec.js.map +0 -1
- package/lib/test/remove.spec.js.map +0 -1
- package/lib/test/rename.spec.js.map +0 -1
- package/lib/test/stat.spec.js.map +0 -1
- package/lib/test/symlink.spec.js.map +0 -1
- package/lib/test/test.spec.js.map +0 -1
- package/lib/test/write.spec.js.map +0 -1
package/lib/src/recurse-io.js
CHANGED
|
@@ -3,186 +3,190 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const { sep } =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
this.chmod(`${src}${sep}${loc}`, mode, (err) => {
|
|
27
|
-
if (err) {
|
|
28
|
-
return callback(err);
|
|
29
|
-
}
|
|
30
|
-
if (--reduce === 0) {
|
|
31
|
-
fs_1.default.chmod(src, mode, callback);
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
fs_1.default.chmod(src, mode, callback);
|
|
39
|
-
}
|
|
40
|
-
});
|
|
41
|
-
},
|
|
42
|
-
chown(src, uid, gid, callback) {
|
|
43
|
-
let reduce = 0;
|
|
44
|
-
fs_1.default.stat(src, (err, stats) => {
|
|
45
|
-
if (err) {
|
|
46
|
-
return callback(err);
|
|
47
|
-
}
|
|
48
|
-
if (stats.isDirectory()) {
|
|
49
|
-
fs_1.default.readdir(src, (err, list) => {
|
|
50
|
-
if (err) {
|
|
51
|
-
return callback(err);
|
|
52
|
-
}
|
|
53
|
-
if (list.length === 0) {
|
|
54
|
-
return fs_1.default.chown(src, uid, gid, callback);
|
|
55
|
-
}
|
|
56
|
-
reduce += list.length;
|
|
57
|
-
for (const loc of list) {
|
|
58
|
-
this.chown(`${src}${sep}${loc}`, uid, gid, (err) => {
|
|
59
|
-
if (err) {
|
|
60
|
-
return callback(err);
|
|
61
|
-
}
|
|
62
|
-
if (--reduce === 0) {
|
|
63
|
-
fs_1.default.chown(src, uid, gid, callback);
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
else {
|
|
70
|
-
fs_1.default.chown(src, uid, gid, callback);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
},
|
|
74
|
-
copy(src, dir, umask, callback) {
|
|
75
|
-
let reduce = 0;
|
|
76
|
-
fs_1.default.stat(src, (err, stat) => {
|
|
77
|
-
if (err) {
|
|
78
|
-
return callback(err);
|
|
79
|
-
}
|
|
80
|
-
if (stat.isDirectory()) {
|
|
81
|
-
fs_1.default.readdir(src, (err, list) => {
|
|
82
|
-
if (err) {
|
|
83
|
-
return callback(err);
|
|
84
|
-
}
|
|
85
|
-
reduce += list.length;
|
|
86
|
-
const paths = src.split(sep);
|
|
87
|
-
const loc = paths[paths.length - 1];
|
|
88
|
-
const mode = 0o777 - umask;
|
|
89
|
-
dir = `${dir}${sep}${loc}`;
|
|
90
|
-
fs_1.default.mkdir(dir, { mode }, (err) => {
|
|
6
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
7
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
8
|
+
const { sep } = node_path_1.default;
|
|
9
|
+
function chmod(src, mode, callback) {
|
|
10
|
+
let reduce = 0;
|
|
11
|
+
node_fs_1.default.stat(src, (err, stat) => {
|
|
12
|
+
if (err) {
|
|
13
|
+
return callback(err);
|
|
14
|
+
}
|
|
15
|
+
if (stat.isDirectory()) {
|
|
16
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
17
|
+
if (err) {
|
|
18
|
+
return callback(err);
|
|
19
|
+
}
|
|
20
|
+
if (list.length === 0) {
|
|
21
|
+
return node_fs_1.default.chmod(src, mode, callback);
|
|
22
|
+
}
|
|
23
|
+
reduce += list.length;
|
|
24
|
+
for (const loc of list) {
|
|
25
|
+
chmod(`${src}${sep}${loc}`, mode, (err) => {
|
|
91
26
|
if (err) {
|
|
92
27
|
return callback(err);
|
|
93
28
|
}
|
|
94
|
-
if (reduce === 0) {
|
|
95
|
-
|
|
29
|
+
if (--reduce === 0) {
|
|
30
|
+
node_fs_1.default.chmod(src, mode, callback);
|
|
96
31
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
node_fs_1.default.chmod(src, mode, callback);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
function chown(src, uid, gid, callback) {
|
|
42
|
+
let reduce = 0;
|
|
43
|
+
node_fs_1.default.stat(src, (err, stats) => {
|
|
44
|
+
if (err) {
|
|
45
|
+
return callback(err);
|
|
46
|
+
}
|
|
47
|
+
if (stats.isDirectory()) {
|
|
48
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
49
|
+
if (err) {
|
|
50
|
+
return callback(err);
|
|
51
|
+
}
|
|
52
|
+
if (list.length === 0) {
|
|
53
|
+
return node_fs_1.default.chown(src, uid, gid, callback);
|
|
54
|
+
}
|
|
55
|
+
reduce += list.length;
|
|
56
|
+
for (const loc of list) {
|
|
57
|
+
chown(`${src}${sep}${loc}`, uid, gid, (err) => {
|
|
58
|
+
if (err) {
|
|
59
|
+
return callback(err);
|
|
60
|
+
}
|
|
61
|
+
if (--reduce === 0) {
|
|
62
|
+
node_fs_1.default.chown(src, uid, gid, callback);
|
|
106
63
|
}
|
|
107
64
|
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
fs_1.default.readdir(src, (err, list) => {
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
node_fs_1.default.chown(src, uid, gid, callback);
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
function copy(src, dir, umask, callback) {
|
|
74
|
+
let reduce = 0;
|
|
75
|
+
node_fs_1.default.stat(src, (err, stat) => {
|
|
76
|
+
if (err) {
|
|
77
|
+
return callback(err);
|
|
78
|
+
}
|
|
79
|
+
if (stat.isDirectory()) {
|
|
80
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
81
|
+
if (err) {
|
|
82
|
+
return callback(err);
|
|
83
|
+
}
|
|
84
|
+
reduce += list.length;
|
|
85
|
+
const paths = src.split(sep);
|
|
86
|
+
const loc = paths[paths.length - 1];
|
|
87
|
+
const mode = 0o777 - umask;
|
|
88
|
+
dir = `${dir}${sep}${loc}`;
|
|
89
|
+
node_fs_1.default.mkdir(dir, { mode }, (err) => {
|
|
134
90
|
if (err) {
|
|
135
91
|
return callback(err);
|
|
136
92
|
}
|
|
137
|
-
if (
|
|
138
|
-
return
|
|
93
|
+
if (reduce === 0) {
|
|
94
|
+
return callback(null);
|
|
139
95
|
}
|
|
140
|
-
reduce += list.length;
|
|
141
96
|
for (const loc of list) {
|
|
142
|
-
|
|
97
|
+
copy(`${src}${sep}${loc}`, dir, umask, (err) => {
|
|
143
98
|
if (err) {
|
|
144
99
|
return callback(err);
|
|
145
100
|
}
|
|
146
101
|
if (--reduce === 0) {
|
|
147
|
-
|
|
102
|
+
callback(null);
|
|
148
103
|
}
|
|
149
104
|
});
|
|
150
105
|
}
|
|
151
106
|
});
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
fs_1.default.unlink(src, callback);
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
},
|
|
158
|
-
mkdir(dir, umask, callback) {
|
|
159
|
-
const cwd = process.cwd();
|
|
160
|
-
if (dir === cwd) {
|
|
161
|
-
return callback(null);
|
|
107
|
+
});
|
|
162
108
|
}
|
|
163
|
-
|
|
164
|
-
const
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
109
|
+
else {
|
|
110
|
+
const mode = 0o666 - umask;
|
|
111
|
+
const loc = node_path_1.default.basename(src);
|
|
112
|
+
const readStream = node_fs_1.default.createReadStream(src);
|
|
113
|
+
const writeStream = node_fs_1.default.createWriteStream(`${dir}${sep}${loc}`, {
|
|
114
|
+
mode
|
|
115
|
+
});
|
|
116
|
+
readStream.on('error', callback);
|
|
117
|
+
writeStream.on('error', callback);
|
|
118
|
+
writeStream.on('close', () => {
|
|
119
|
+
callback(null);
|
|
120
|
+
});
|
|
121
|
+
readStream.pipe(writeStream);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
function remove(src, callback) {
|
|
126
|
+
node_fs_1.default.stat(src, (err, stat) => {
|
|
127
|
+
if (err) {
|
|
128
|
+
return callback(err);
|
|
129
|
+
}
|
|
130
|
+
if (stat.isDirectory()) {
|
|
131
|
+
node_fs_1.default.readdir(src, (err, list) => {
|
|
132
|
+
if (err) {
|
|
133
|
+
return callback(err);
|
|
134
|
+
}
|
|
135
|
+
let reduce = list.length;
|
|
136
|
+
if (reduce === 0) {
|
|
137
|
+
return node_fs_1.default.rmdir(src, callback);
|
|
138
|
+
}
|
|
139
|
+
for (const loc of list) {
|
|
140
|
+
remove(`${src}${sep}${loc}`, (err) => {
|
|
141
|
+
if (err) {
|
|
142
|
+
return callback(err);
|
|
143
|
+
}
|
|
144
|
+
if (--reduce === 0) {
|
|
145
|
+
node_fs_1.default.rmdir(src, callback);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
node_fs_1.default.unlink(src, callback);
|
|
181
153
|
}
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
function mkdir(dir, umask, callback) {
|
|
157
|
+
const cwd = process.cwd();
|
|
158
|
+
if (dir === cwd) {
|
|
159
|
+
return callback(null);
|
|
187
160
|
}
|
|
161
|
+
const sequence = function* (dir, files, mode) {
|
|
162
|
+
const iter = yield;
|
|
163
|
+
for (const item of files) {
|
|
164
|
+
dir += `${sep}${item}`;
|
|
165
|
+
node_fs_1.default.mkdir(dir, { mode }, (err) => {
|
|
166
|
+
if (err && err.errno !== -17) {
|
|
167
|
+
return callback(err);
|
|
168
|
+
}
|
|
169
|
+
iter.next();
|
|
170
|
+
});
|
|
171
|
+
yield;
|
|
172
|
+
}
|
|
173
|
+
callback(null);
|
|
174
|
+
};
|
|
175
|
+
let use = '';
|
|
176
|
+
if (dir.indexOf(cwd) === 0) {
|
|
177
|
+
use = cwd;
|
|
178
|
+
dir = dir.substr(cwd.length);
|
|
179
|
+
}
|
|
180
|
+
const files = dir.split(sep);
|
|
181
|
+
const mode = 0o777 - umask;
|
|
182
|
+
const iter = sequence(use, files, mode);
|
|
183
|
+
iter.next();
|
|
184
|
+
iter.next(iter);
|
|
185
|
+
}
|
|
186
|
+
exports.default = {
|
|
187
|
+
chmod,
|
|
188
|
+
chown,
|
|
189
|
+
copy,
|
|
190
|
+
remove,
|
|
191
|
+
mkdir
|
|
188
192
|
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.restore = exports.fmock = void 0;
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
function fmock(frame) {
|
|
10
|
+
for (const src of Object.keys(frame)) {
|
|
11
|
+
const { dir } = node_path_1.default.parse(src);
|
|
12
|
+
const value = frame[src];
|
|
13
|
+
node_fs_1.default.mkdirSync(dir, { recursive: true });
|
|
14
|
+
if (value.type === 'directory') {
|
|
15
|
+
node_fs_1.default.mkdirSync(src);
|
|
16
|
+
}
|
|
17
|
+
if (value.type === 'file') {
|
|
18
|
+
node_fs_1.default.writeFileSync(src, value.data);
|
|
19
|
+
}
|
|
20
|
+
if (value.type === 'symlink') {
|
|
21
|
+
node_fs_1.default.symlinkSync(value.target, src);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
exports.fmock = fmock;
|
|
26
|
+
function restore(tmpDir) {
|
|
27
|
+
const removeRecursive = (src) => {
|
|
28
|
+
if (node_fs_1.default.existsSync(src)) {
|
|
29
|
+
node_fs_1.default.readdirSync(src).forEach((item) => {
|
|
30
|
+
const curl = `${src}/${item}`;
|
|
31
|
+
node_fs_1.default.lstatSync(curl).isDirectory()
|
|
32
|
+
? removeRecursive(curl)
|
|
33
|
+
: node_fs_1.default.unlinkSync(curl);
|
|
34
|
+
});
|
|
35
|
+
node_fs_1.default.rmdirSync(src);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
removeRecursive(tmpDir);
|
|
39
|
+
}
|
|
40
|
+
exports.restore = restore;
|
package/lib/test/append.spec.js
CHANGED
|
@@ -3,97 +3,56 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const mock_fs_1 = __importDefault(require("mock-fs"));
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
9
8
|
const chance_1 = __importDefault(require("chance"));
|
|
10
|
-
const
|
|
9
|
+
const expect_1 = require("expect");
|
|
10
|
+
const __fmock_1 = require("./__fmock");
|
|
11
|
+
const src_1 = require("../src");
|
|
11
12
|
describe('append(src, data [, options])', () => {
|
|
13
|
+
const chance = new chance_1.default();
|
|
12
14
|
beforeEach(() => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
'
|
|
17
|
-
|
|
18
|
-
},
|
|
19
|
-
'flexapp': mock_fs_1.default.symlink({
|
|
20
|
-
path: 'tmpdir/binapp'
|
|
21
|
-
})
|
|
15
|
+
(0, __fmock_1.fmock)({
|
|
16
|
+
'./tmpdir/tings.txt': {
|
|
17
|
+
type: 'file',
|
|
18
|
+
data: 'hoodie'
|
|
19
|
+
}
|
|
22
20
|
});
|
|
23
21
|
});
|
|
24
|
-
afterEach(
|
|
25
|
-
|
|
26
|
-
const pfs = new src_1.default();
|
|
27
|
-
const chance = new chance_1.default();
|
|
28
|
-
const before = await pfs.stat('./tmpdir/binapp');
|
|
29
|
-
const payload = chance.string();
|
|
30
|
-
await pfs.append('./tmpdir/binapp', payload);
|
|
31
|
-
const after = await pfs.stat('./tmpdir/binapp');
|
|
32
|
-
(0, assert_1.default)(after.size > before.size);
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
(0, __fmock_1.restore)('./tmpdir');
|
|
33
24
|
});
|
|
34
|
-
it('Positive: Must append content to file
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
const payload = chance.string();
|
|
40
|
-
await pfs.append(`${cwd}${path_1.sep}tmpdir${path_1.sep}binapp`, payload, {
|
|
41
|
-
resolve: false
|
|
42
|
-
});
|
|
43
|
-
const after = await pfs.stat('./tmpdir/binapp');
|
|
44
|
-
(0, assert_1.default)(after.size > before.size);
|
|
25
|
+
it('Positive: Must append content to file', async () => {
|
|
26
|
+
const payload = chance.paragraph();
|
|
27
|
+
await src_1.pfs.append('./tmpdir/tings.txt', payload);
|
|
28
|
+
const { size } = node_fs_1.default.statSync('./tmpdir/tings.txt');
|
|
29
|
+
(0, node_assert_1.default)(payload.length + 6 === size);
|
|
45
30
|
});
|
|
46
31
|
it(`Negative: Unexpected option 'flag' returns Error`, async () => {
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
const payload = chance.string();
|
|
51
|
-
await pfs.append('./tmpdir/binapp', payload, {
|
|
32
|
+
const payload = chance.paragraph();
|
|
33
|
+
await (0, expect_1.expect)(async () => {
|
|
34
|
+
await src_1.pfs.append('./tmpdir/tings.txt', payload, {
|
|
52
35
|
flag: 'r'
|
|
53
36
|
});
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
37
|
+
})
|
|
38
|
+
.rejects
|
|
39
|
+
.toThrow();
|
|
58
40
|
});
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
const before = await pfs.stat('./tmpdir/binapp');
|
|
64
|
-
const payload = chance.string();
|
|
65
|
-
pfs.append('./tmpdir/binapp', payload, {
|
|
66
|
-
sync: true
|
|
67
|
-
});
|
|
68
|
-
const after = await pfs.stat('./tmpdir/binapp');
|
|
69
|
-
(0, assert_1.default)(after.size > before.size);
|
|
41
|
+
it(`[sync] Positive: Must append content to file`, () => {
|
|
42
|
+
const payload = chance.paragraph();
|
|
43
|
+
src_1.pfs.append('./tmpdir/tings.txt', payload, {
|
|
44
|
+
sync: true
|
|
70
45
|
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
pfs.append(
|
|
46
|
+
const { size } = node_fs_1.default.statSync('./tmpdir/tings.txt');
|
|
47
|
+
(0, node_assert_1.default)(payload.length + 6 === size);
|
|
48
|
+
});
|
|
49
|
+
it(`[sync] Negative: Unexpected option 'flag' returns Error`, () => {
|
|
50
|
+
const payload = chance.paragraph();
|
|
51
|
+
node_assert_1.default.throws(() => {
|
|
52
|
+
src_1.pfs.append('./tmpdir/tings.txt', payload, {
|
|
78
53
|
sync: true,
|
|
79
|
-
|
|
54
|
+
flag: 'r'
|
|
80
55
|
});
|
|
81
|
-
const after = await pfs.stat('./tmpdir/binapp');
|
|
82
|
-
(0, assert_1.default)(after.size > before.size);
|
|
83
|
-
});
|
|
84
|
-
it(`Negative: Unexpected option 'flag' returns Error`, async () => {
|
|
85
|
-
const pfs = new src_1.default();
|
|
86
|
-
const chance = new chance_1.default();
|
|
87
|
-
try {
|
|
88
|
-
const payload = chance.string();
|
|
89
|
-
pfs.append('./tmpdir/binapp', payload, {
|
|
90
|
-
sync: true,
|
|
91
|
-
flag: 'r'
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
catch (err) {
|
|
95
|
-
(0, assert_1.default)(err.errno === -9);
|
|
96
|
-
}
|
|
97
56
|
});
|
|
98
57
|
});
|
|
99
58
|
});
|
package/lib/test/bitmask.spec.js
CHANGED
|
@@ -3,27 +3,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const src_1 =
|
|
6
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
7
|
+
const src_1 = require("../src");
|
|
8
8
|
describe('static bitmask(mode: number)', () => {
|
|
9
9
|
it('Positive: Calculate bitmask', () => {
|
|
10
|
-
(0,
|
|
11
|
-
(0,
|
|
12
|
-
(0,
|
|
13
|
-
(0,
|
|
14
|
-
(0,
|
|
15
|
-
(0,
|
|
16
|
-
(0,
|
|
17
|
-
(0,
|
|
18
|
-
(0,
|
|
10
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(33024) === 0o400); // (r--------)
|
|
11
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(33152) === 0o600); // (rw-------)
|
|
12
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(33216) === 0o700); // (rwx------)
|
|
13
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(32800) === 0o040); // (---r-----)
|
|
14
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(32816) === 0o060); // (---rw----)
|
|
15
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(32824) === 0o070); // (---rwx---)
|
|
16
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(32772) === 0o004); // (------r--)
|
|
17
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(32774) === 0o006); // (------rw-)
|
|
18
|
+
(0, node_assert_1.default)((0, src_1.bitmask)(32775) === 0o007); // (------rwx)
|
|
19
19
|
});
|
|
20
20
|
it(`Negative: Throw an exception if the argument is 'null' type`, () => {
|
|
21
|
-
|
|
21
|
+
node_assert_1.default.throws(() => {
|
|
22
22
|
// @ts-ignore
|
|
23
|
-
src_1.
|
|
24
|
-
}
|
|
25
|
-
catch (err) {
|
|
26
|
-
(0, assert_1.default)(err);
|
|
27
|
-
}
|
|
23
|
+
(0, src_1.bitmask)(null);
|
|
24
|
+
});
|
|
28
25
|
});
|
|
29
26
|
});
|