@seedcli/filesystem 0.1.0
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/LICENSE +21 -0
- package/dist/copy.d.ts +3 -0
- package/dist/copy.d.ts.map +1 -0
- package/dist/copy.js +9 -0
- package/dist/copy.js.map +1 -0
- package/dist/dir.d.ts +4 -0
- package/dist/dir.d.ts.map +1 -0
- package/dist/dir.js +16 -0
- package/dist/dir.js.map +1 -0
- package/dist/errors.d.ts +13 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +25 -0
- package/dist/errors.js.map +1 -0
- package/dist/exists.d.ts +4 -0
- package/dist/exists.d.ts.map +1 -0
- package/dist/exists.js +29 -0
- package/dist/exists.js.map +1 -0
- package/dist/find.d.ts +3 -0
- package/dist/find.d.ts.map +1 -0
- package/dist/find.js +35 -0
- package/dist/find.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/move.d.ts +4 -0
- package/dist/move.d.ts.map +1 -0
- package/dist/move.js +22 -0
- package/dist/move.js.map +1 -0
- package/dist/path.d.ts +3 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +16 -0
- package/dist/path.js.map +1 -0
- package/dist/read.d.ts +6 -0
- package/dist/read.d.ts.map +1 -0
- package/dist/read.js +46 -0
- package/dist/read.js.map +1 -0
- package/dist/remove.d.ts +2 -0
- package/dist/remove.d.ts.map +1 -0
- package/dist/remove.js +5 -0
- package/dist/remove.js.map +1 -0
- package/dist/stat.d.ts +13 -0
- package/dist/stat.d.ts.map +1 -0
- package/dist/stat.js +36 -0
- package/dist/stat.js.map +1 -0
- package/dist/tmp.d.ts +4 -0
- package/dist/tmp.d.ts.map +1 -0
- package/dist/tmp.js +16 -0
- package/dist/tmp.js.map +1 -0
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/write.d.ts +4 -0
- package/dist/write.d.ts.map +1 -0
- package/dist/write.js +20 -0
- package/dist/write.js.map +1 -0
- package/package.json +44 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Seed CLI Contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/copy.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.d.ts","sourceRoot":"","sources":["../src/copy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1F"}
|
package/dist/copy.js
ADDED
package/dist/copy.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"copy.js","sourceRoot":"","sources":["../src/copy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAGtC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,IAAY,EAAE,OAAqB;IAC1E,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE;QACnB,SAAS,EAAE,IAAI;QACf,KAAK,EAAE,OAAO,EAAE,SAAS,IAAI,IAAI;QACjC,MAAM,EAAE,OAAO,EAAE,MAAM;KACvB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/dir.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.d.ts","sourceRoot":"","sources":["../src/dir.ts"],"names":[],"mappings":"AAEA,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAGzD;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAMnE"}
|
package/dist/dir.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { mkdir, readdir } from "node:fs/promises";
|
|
2
|
+
export async function ensureDir(dir) {
|
|
3
|
+
await mkdir(dir, { recursive: true });
|
|
4
|
+
}
|
|
5
|
+
export async function list(dir) {
|
|
6
|
+
const entries = await readdir(dir);
|
|
7
|
+
return entries.sort();
|
|
8
|
+
}
|
|
9
|
+
export async function subdirectories(dir) {
|
|
10
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
11
|
+
return entries
|
|
12
|
+
.filter((e) => e.isDirectory())
|
|
13
|
+
.map((e) => e.name)
|
|
14
|
+
.sort();
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=dir.js.map
|
package/dist/dir.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dir.js","sourceRoot":"","sources":["../src/dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IAC1C,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW;IACrC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,GAAW;IAC/C,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,OAAO,OAAO;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAC9B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;SAClB,IAAI,EAAE,CAAC;AACV,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class FileNotFoundError extends Error {
|
|
2
|
+
path: string;
|
|
3
|
+
constructor(filePath: string);
|
|
4
|
+
}
|
|
5
|
+
export declare class PermissionError extends Error {
|
|
6
|
+
path: string;
|
|
7
|
+
constructor(filePath: string);
|
|
8
|
+
}
|
|
9
|
+
export declare class DirectoryNotEmptyError extends Error {
|
|
10
|
+
path: string;
|
|
11
|
+
constructor(dirPath: string);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAkB,SAAQ,KAAK;IAC3C,IAAI,EAAE,MAAM,CAAC;gBACD,QAAQ,EAAE,MAAM;CAK5B;AAED,qBAAa,eAAgB,SAAQ,KAAK;IACzC,IAAI,EAAE,MAAM,CAAC;gBACD,QAAQ,EAAE,MAAM;CAK5B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAChD,IAAI,EAAE,MAAM,CAAC;gBACD,OAAO,EAAE,MAAM;CAK3B"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class FileNotFoundError extends Error {
|
|
2
|
+
path;
|
|
3
|
+
constructor(filePath) {
|
|
4
|
+
super(`File not found: ${filePath}`);
|
|
5
|
+
this.name = "FileNotFoundError";
|
|
6
|
+
this.path = filePath;
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export class PermissionError extends Error {
|
|
10
|
+
path;
|
|
11
|
+
constructor(filePath) {
|
|
12
|
+
super(`Permission denied: ${filePath}`);
|
|
13
|
+
this.name = "PermissionError";
|
|
14
|
+
this.path = filePath;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class DirectoryNotEmptyError extends Error {
|
|
18
|
+
path;
|
|
19
|
+
constructor(dirPath) {
|
|
20
|
+
super(`Directory not empty: ${dirPath}`);
|
|
21
|
+
this.name = "DirectoryNotEmptyError";
|
|
22
|
+
this.path = dirPath;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC3C,IAAI,CAAS;IACb,YAAY,QAAgB;QAC3B,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;QAChC,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACtB,CAAC;CACD;AAED,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACzC,IAAI,CAAS;IACb,YAAY,QAAgB;QAC3B,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACtB,CAAC;CACD;AAED,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAChD,IAAI,CAAS;IACb,YAAY,OAAe;QAC1B,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;IACrB,CAAC;CACD"}
|
package/dist/exists.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exists.d.ts","sourceRoot":"","sources":["../src/exists.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpE"}
|
package/dist/exists.js
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { stat } from "node:fs/promises";
|
|
2
|
+
export async function exists(filePath) {
|
|
3
|
+
try {
|
|
4
|
+
await stat(filePath);
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
catch {
|
|
8
|
+
return false;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export async function isFile(filePath) {
|
|
12
|
+
try {
|
|
13
|
+
const s = await stat(filePath);
|
|
14
|
+
return s.isFile();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function isDirectory(filePath) {
|
|
21
|
+
try {
|
|
22
|
+
const s = await stat(filePath);
|
|
23
|
+
return s.isDirectory();
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=exists.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exists.js","sourceRoot":"","sources":["../src/exists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACJ,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACJ,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB;IACjD,IAAI,CAAC;QACJ,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,KAAK,CAAC;IACd,CAAC;AACF,CAAC"}
|
package/dist/find.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoChF"}
|
package/dist/find.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export async function find(dir, options) {
|
|
2
|
+
const defaultPattern = options?.recursive === false ? "*" : "**/*";
|
|
3
|
+
const patterns = options?.matching
|
|
4
|
+
? Array.isArray(options.matching)
|
|
5
|
+
? options.matching
|
|
6
|
+
: [options.matching]
|
|
7
|
+
: [defaultPattern];
|
|
8
|
+
const results = [];
|
|
9
|
+
for (const pattern of patterns) {
|
|
10
|
+
const glob = new Bun.Glob(pattern);
|
|
11
|
+
for await (const match of glob.scan({
|
|
12
|
+
cwd: dir,
|
|
13
|
+
dot: options?.dot ?? false,
|
|
14
|
+
onlyFiles: !(options?.directories ?? false),
|
|
15
|
+
})) {
|
|
16
|
+
// Apply ignore patterns
|
|
17
|
+
if (options?.ignore) {
|
|
18
|
+
const ignorePatterns = Array.isArray(options.ignore) ? options.ignore : [options.ignore];
|
|
19
|
+
let ignored = false;
|
|
20
|
+
for (const ignorePattern of ignorePatterns) {
|
|
21
|
+
const ignoreGlob = new Bun.Glob(ignorePattern);
|
|
22
|
+
if (ignoreGlob.match(match)) {
|
|
23
|
+
ignored = true;
|
|
24
|
+
break;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
if (ignored)
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
results.push(match);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return results.sort();
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=find.js.map
|
package/dist/find.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"find.js","sourceRoot":"","sources":["../src/find.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,OAAqB;IAC5D,MAAM,cAAc,GAAG,OAAO,EAAE,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACnE,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ;QACjC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;YAChC,CAAC,CAAC,OAAO,CAAC,QAAQ;YAClB,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACrB,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;IAEpB,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC;YACnC,GAAG,EAAE,GAAG;YACR,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK;YAC1B,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,KAAK,CAAC;SAC3C,CAAC,EAAE,CAAC;YACJ,wBAAwB;YACxB,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;gBACrB,MAAM,cAAc,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACzF,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;oBAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC/C,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;wBAC7B,OAAO,GAAG,IAAI,CAAC;wBACf,MAAM;oBACP,CAAC;gBACF,CAAC;gBACD,IAAI,OAAO;oBAAE,SAAS;YACvB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACF,CAAC;IAED,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export { copy } from "./copy.js";
|
|
2
|
+
export { ensureDir, list, subdirectories } from "./dir.js";
|
|
3
|
+
export { DirectoryNotEmptyError, FileNotFoundError, PermissionError } from "./errors.js";
|
|
4
|
+
export { exists, isDirectory, isFile } from "./exists.js";
|
|
5
|
+
export { find } from "./find.js";
|
|
6
|
+
export { move, rename } from "./move.js";
|
|
7
|
+
export { path } from "./path.js";
|
|
8
|
+
export { read, readBuffer, readJson, readToml, readYaml } from "./read.js";
|
|
9
|
+
export { remove } from "./remove.js";
|
|
10
|
+
export type { FileInfo } from "./stat.js";
|
|
11
|
+
export { size, stat } from "./stat.js";
|
|
12
|
+
export { tmpDir, tmpFile } from "./tmp.js";
|
|
13
|
+
export type { CopyOptions, FindOptions, JsonWriteOptions, MoveOptions, PathHelpers, TmpFileOptions, TmpOptions, } from "./types.js";
|
|
14
|
+
export { write, writeJson } from "./write.js";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,YAAY,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAC3C,YAAY,EACX,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,GACV,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { copy } from "./copy.js";
|
|
2
|
+
export { ensureDir, list, subdirectories } from "./dir.js";
|
|
3
|
+
export { DirectoryNotEmptyError, FileNotFoundError, PermissionError } from "./errors.js";
|
|
4
|
+
export { exists, isDirectory, isFile } from "./exists.js";
|
|
5
|
+
export { find } from "./find.js";
|
|
6
|
+
export { move, rename } from "./move.js";
|
|
7
|
+
export { path } from "./path.js";
|
|
8
|
+
export { read, readBuffer, readJson, readToml, readYaml } from "./read.js";
|
|
9
|
+
export { remove } from "./remove.js";
|
|
10
|
+
export { size, stat } from "./stat.js";
|
|
11
|
+
export { tmpDir, tmpFile } from "./tmp.js";
|
|
12
|
+
export { write, writeJson } from "./write.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACzF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAU3C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/move.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../src/move.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAsB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1F;AAED,wBAAsB,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAErE"}
|
package/dist/move.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { rename as fsRename } from "node:fs/promises";
|
|
2
|
+
import { copy } from "./copy.js";
|
|
3
|
+
import { exists } from "./exists.js";
|
|
4
|
+
import { remove } from "./remove.js";
|
|
5
|
+
export async function move(src, dest, options) {
|
|
6
|
+
if (!options?.overwrite && (await exists(dest))) {
|
|
7
|
+
throw new Error(`Destination already exists: ${dest}`);
|
|
8
|
+
}
|
|
9
|
+
try {
|
|
10
|
+
// Try rename first (fast, same filesystem)
|
|
11
|
+
await fsRename(src, dest);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Cross-filesystem: copy then remove
|
|
15
|
+
await copy(src, dest, { overwrite: options?.overwrite ?? false });
|
|
16
|
+
await remove(src);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export async function rename(src, dest) {
|
|
20
|
+
await fsRename(src, dest);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=move.js.map
|
package/dist/move.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"move.js","sourceRoot":"","sources":["../src/move.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,IAAY,EAAE,OAAqB;IAC1E,IAAI,CAAC,OAAO,EAAE,SAAS,IAAI,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,IAAI,CAAC;QACJ,2CAA2C;QAC3C,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,MAAM,CAAC;QACR,qCAAqC;QACrC,MAAM,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,GAAW,EAAE,IAAY;IACrD,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC"}
|
package/dist/path.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,eAAO,MAAM,IAAI,EAAE,WAYlB,CAAC"}
|
package/dist/path.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { homedir } from "node:os";
|
|
2
|
+
import nodePath from "node:path";
|
|
3
|
+
export const path = {
|
|
4
|
+
resolve: (...segments) => nodePath.resolve(...segments),
|
|
5
|
+
join: (...segments) => nodePath.join(...segments),
|
|
6
|
+
dirname: (p) => nodePath.dirname(p),
|
|
7
|
+
basename: (p, ext) => nodePath.basename(p, ext),
|
|
8
|
+
ext: (p) => nodePath.extname(p),
|
|
9
|
+
isAbsolute: (p) => nodePath.isAbsolute(p),
|
|
10
|
+
relative: (from, to) => nodePath.relative(from, to),
|
|
11
|
+
normalize: (p) => nodePath.normalize(p),
|
|
12
|
+
separator: nodePath.sep,
|
|
13
|
+
home: () => homedir(),
|
|
14
|
+
cwd: () => process.cwd(),
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=path.js.map
|
package/dist/path.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,IAAI,GAAgB;IAChC,OAAO,EAAE,CAAC,GAAG,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;IACjE,IAAI,EAAE,CAAC,GAAG,QAAkB,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;IAC3D,OAAO,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,QAAQ,EAAE,CAAC,CAAS,EAAE,GAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC;IAChE,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACvC,UAAU,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACjD,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAU,EAAE,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;IACnE,SAAS,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAC/C,SAAS,EAAE,QAAQ,CAAC,GAAG;IACvB,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE;IACrB,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;CACxB,CAAC"}
|
package/dist/read.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function read(filePath: string, _encoding?: BufferEncoding): Promise<string>;
|
|
2
|
+
export declare function readJson<T = unknown>(filePath: string): Promise<T>;
|
|
3
|
+
export declare function readBuffer(filePath: string): Promise<Buffer>;
|
|
4
|
+
export declare function readToml<T = unknown>(filePath: string): Promise<T>;
|
|
5
|
+
export declare function readYaml<T = unknown>(filePath: string): Promise<T>;
|
|
6
|
+
//# sourceMappingURL=read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.d.ts","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAcA,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAQxF;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGxE;AAED,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQlE;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAGxE;AAED,wBAAsB,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAIxE"}
|
package/dist/read.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { FileNotFoundError, PermissionError } from "./errors.js";
|
|
2
|
+
function handleError(err, filePath) {
|
|
3
|
+
if (err instanceof Error) {
|
|
4
|
+
if ("code" in err && err.code === "ENOENT") {
|
|
5
|
+
throw new FileNotFoundError(filePath);
|
|
6
|
+
}
|
|
7
|
+
if ("code" in err && err.code === "EACCES") {
|
|
8
|
+
throw new PermissionError(filePath);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
throw err;
|
|
12
|
+
}
|
|
13
|
+
export async function read(filePath, _encoding) {
|
|
14
|
+
try {
|
|
15
|
+
const file = Bun.file(filePath);
|
|
16
|
+
// Bun.file().text() always returns UTF-8; encoding param reserved for future use
|
|
17
|
+
return await file.text();
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
return handleError(err, filePath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
export async function readJson(filePath) {
|
|
24
|
+
const content = await read(filePath);
|
|
25
|
+
return JSON.parse(content);
|
|
26
|
+
}
|
|
27
|
+
export async function readBuffer(filePath) {
|
|
28
|
+
try {
|
|
29
|
+
const file = Bun.file(filePath);
|
|
30
|
+
const arrayBuffer = await file.arrayBuffer();
|
|
31
|
+
return Buffer.from(arrayBuffer);
|
|
32
|
+
}
|
|
33
|
+
catch (err) {
|
|
34
|
+
return handleError(err, filePath);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function readToml(filePath) {
|
|
38
|
+
const content = await read(filePath);
|
|
39
|
+
return Bun.TOML.parse(content);
|
|
40
|
+
}
|
|
41
|
+
export async function readYaml(filePath) {
|
|
42
|
+
const { parse } = await import("yaml");
|
|
43
|
+
const content = await read(filePath);
|
|
44
|
+
return parse(content);
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=read.js.map
|
package/dist/read.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read.js","sourceRoot":"","sources":["../src/read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEjE,SAAS,WAAW,CAAC,GAAY,EAAE,QAAgB;IAClD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAC1B,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IACD,MAAM,GAAG,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,QAAgB,EAAE,SAA0B;IACtE,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,iFAAiF;QACjF,OAAO,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAc,QAAgB;IAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAChD,IAAI,CAAC;QACJ,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACjC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAc,QAAgB;IAC3D,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAc,QAAgB;IAC3D,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,OAAO,CAAM,CAAC;AAC5B,CAAC"}
|
package/dist/remove.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"AAEA,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5D"}
|
package/dist/remove.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove.js","sourceRoot":"","sources":["../src/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAEtC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,QAAgB;IAC5C,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
|
package/dist/stat.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface FileInfo {
|
|
2
|
+
size: number;
|
|
3
|
+
created: Date;
|
|
4
|
+
modified: Date;
|
|
5
|
+
accessed: Date;
|
|
6
|
+
isFile: boolean;
|
|
7
|
+
isDirectory: boolean;
|
|
8
|
+
isSymlink: boolean;
|
|
9
|
+
permissions: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function stat(filePath: string): Promise<FileInfo>;
|
|
12
|
+
export declare function size(filePath: string): Promise<number>;
|
|
13
|
+
//# sourceMappingURL=stat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat.d.ts","sourceRoot":"","sources":["../src/stat.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,IAAI,CAAC;IACd,QAAQ,EAAE,IAAI,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACpB;AAcD,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAgB9D;AAED,wBAAsB,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5D"}
|
package/dist/stat.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { stat as fsStat, lstat } from "node:fs/promises";
|
|
2
|
+
import { FileNotFoundError, PermissionError } from "./errors.js";
|
|
3
|
+
function handleError(err, filePath) {
|
|
4
|
+
if (err instanceof Error) {
|
|
5
|
+
if ("code" in err && err.code === "ENOENT") {
|
|
6
|
+
throw new FileNotFoundError(filePath);
|
|
7
|
+
}
|
|
8
|
+
if ("code" in err && err.code === "EACCES") {
|
|
9
|
+
throw new PermissionError(filePath);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
throw err;
|
|
13
|
+
}
|
|
14
|
+
export async function stat(filePath) {
|
|
15
|
+
try {
|
|
16
|
+
const [stats, lstats] = await Promise.all([fsStat(filePath), lstat(filePath)]);
|
|
17
|
+
return {
|
|
18
|
+
size: stats.size,
|
|
19
|
+
created: stats.birthtime,
|
|
20
|
+
modified: stats.mtime,
|
|
21
|
+
accessed: stats.atime,
|
|
22
|
+
isFile: stats.isFile(),
|
|
23
|
+
isDirectory: stats.isDirectory(),
|
|
24
|
+
isSymlink: lstats.isSymbolicLink(),
|
|
25
|
+
permissions: stats.mode & 0o777,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
return handleError(err, filePath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
export async function size(filePath) {
|
|
33
|
+
const info = await stat(filePath);
|
|
34
|
+
return info.size;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=stat.js.map
|
package/dist/stat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stat.js","sourceRoot":"","sources":["../src/stat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAajE,SAAS,WAAW,CAAC,GAAY,EAAE,QAAgB;IAClD,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QAC1B,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;QACrC,CAAC;IACF,CAAC;IACD,MAAM,GAAG,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACJ,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC/E,OAAO;YACN,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,SAAS;YACxB,QAAQ,EAAE,KAAK,CAAC,KAAK;YACrB,QAAQ,EAAE,KAAK,CAAC,KAAK;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;YACtB,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;YAChC,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE;YAClC,WAAW,EAAE,KAAK,CAAC,IAAI,GAAG,KAAK;SAC/B,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACd,OAAO,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,QAAgB;IAC1C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,IAAI,CAAC,IAAI,CAAC;AAClB,CAAC"}
|
package/dist/tmp.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmp.d.ts","sourceRoot":"","sources":["../src/tmp.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7D,wBAAsB,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAGlE;AAED,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAOvE"}
|
package/dist/tmp.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { mkdtemp, writeFile } from "node:fs/promises";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import nodePath from "node:path";
|
|
4
|
+
export async function tmpDir(options) {
|
|
5
|
+
const prefix = options?.prefix ?? "seedcli-";
|
|
6
|
+
return await mkdtemp(nodePath.join(tmpdir(), prefix));
|
|
7
|
+
}
|
|
8
|
+
export async function tmpFile(options) {
|
|
9
|
+
const dir = options?.dir ?? (await tmpDir({ prefix: options?.prefix ?? "seedcli-" }));
|
|
10
|
+
const ext = options?.ext ?? "";
|
|
11
|
+
const name = `${crypto.randomUUID()}${ext}`;
|
|
12
|
+
const filePath = nodePath.join(dir, name);
|
|
13
|
+
await writeFile(filePath, "");
|
|
14
|
+
return filePath;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=tmp.js.map
|
package/dist/tmp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tmp.js","sourceRoot":"","sources":["../src/tmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,QAAQ,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAoB;IAChD,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,UAAU,CAAC;IAC7C,OAAO,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAwB;IACrD,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,UAAU,EAAE,GAAG,GAAG,EAAE,CAAC;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1C,MAAM,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC9B,OAAO,QAAQ,CAAC;AACjB,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface PathHelpers {
|
|
2
|
+
resolve(...segments: string[]): string;
|
|
3
|
+
join(...segments: string[]): string;
|
|
4
|
+
dirname(path: string): string;
|
|
5
|
+
basename(path: string, ext?: string): string;
|
|
6
|
+
ext(path: string): string;
|
|
7
|
+
isAbsolute(path: string): boolean;
|
|
8
|
+
relative(from: string, to: string): string;
|
|
9
|
+
normalize(path: string): string;
|
|
10
|
+
separator: string;
|
|
11
|
+
home(): string;
|
|
12
|
+
cwd(): string;
|
|
13
|
+
}
|
|
14
|
+
export interface CopyOptions {
|
|
15
|
+
overwrite?: boolean;
|
|
16
|
+
filter?: (path: string) => boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface MoveOptions {
|
|
19
|
+
overwrite?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface FindOptions {
|
|
22
|
+
matching?: string | string[];
|
|
23
|
+
ignore?: string | string[];
|
|
24
|
+
files?: boolean;
|
|
25
|
+
directories?: boolean;
|
|
26
|
+
recursive?: boolean;
|
|
27
|
+
dot?: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface JsonWriteOptions {
|
|
30
|
+
indent?: number;
|
|
31
|
+
sortKeys?: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface TmpOptions {
|
|
34
|
+
prefix?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface TmpFileOptions {
|
|
37
|
+
ext?: string;
|
|
38
|
+
prefix?: string;
|
|
39
|
+
dir?: string;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,WAAW;IAC3B,OAAO,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACvC,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,IAAI,MAAM,CAAC;IACf,GAAG,IAAI,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/write.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { JsonWriteOptions } from "./types.js";
|
|
2
|
+
export declare function write(filePath: string, content: string | Buffer): Promise<void>;
|
|
3
|
+
export declare function writeJson(filePath: string, data: unknown, options?: JsonWriteOptions): Promise<void>;
|
|
4
|
+
//# sourceMappingURL=write.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.d.ts","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,wBAAsB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrF;AAED,wBAAsB,SAAS,CAC9B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC,IAAI,CAAC,CAcf"}
|
package/dist/write.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { mkdir } from "node:fs/promises";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
export async function write(filePath, content) {
|
|
4
|
+
await mkdir(dirname(filePath), { recursive: true });
|
|
5
|
+
await Bun.write(filePath, content);
|
|
6
|
+
}
|
|
7
|
+
export async function writeJson(filePath, data, options) {
|
|
8
|
+
const indent = options?.indent ?? 2;
|
|
9
|
+
let obj = data;
|
|
10
|
+
if (options?.sortKeys && typeof data === "object" && data !== null && !Array.isArray(data)) {
|
|
11
|
+
const sorted = {};
|
|
12
|
+
for (const key of Object.keys(data).sort()) {
|
|
13
|
+
sorted[key] = data[key];
|
|
14
|
+
}
|
|
15
|
+
obj = sorted;
|
|
16
|
+
}
|
|
17
|
+
const json = JSON.stringify(obj, null, indent);
|
|
18
|
+
await write(filePath, `${json}\n`);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write.js","sourceRoot":"","sources":["../src/write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,QAAgB,EAAE,OAAwB;IACrE,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,QAAgB,EAChB,IAAa,EACb,OAA0B;IAE1B,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,CAAC,CAAC;IAEpC,IAAI,GAAG,GAAG,IAAI,CAAC;IACf,IAAI,OAAO,EAAE,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5F,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAA+B,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACvE,MAAM,CAAC,GAAG,CAAC,GAAI,IAAgC,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;QACD,GAAG,GAAG,MAAM,CAAC;IACd,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,MAAM,KAAK,CAAC,QAAQ,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@seedcli/filesystem",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "File system utilities: read, write, copy, move, find, path helpers, temp dirs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "Rully Ardiansyah <rully@dreamshive.io>",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/SeedCLI/seed",
|
|
11
|
+
"directory": "packages/filesystem"
|
|
12
|
+
},
|
|
13
|
+
"homepage": "https://seedcli.dev",
|
|
14
|
+
"keywords": [
|
|
15
|
+
"cli",
|
|
16
|
+
"filesystem",
|
|
17
|
+
"file",
|
|
18
|
+
"directory",
|
|
19
|
+
"read",
|
|
20
|
+
"write",
|
|
21
|
+
"copy"
|
|
22
|
+
],
|
|
23
|
+
"engines": {
|
|
24
|
+
"bun": ">=1.3.0"
|
|
25
|
+
},
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"main": "./dist/index.js",
|
|
30
|
+
"types": "./dist/index.d.ts",
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"import": "./dist/index.js",
|
|
34
|
+
"types": "./dist/index.d.ts"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"files": [
|
|
38
|
+
"dist",
|
|
39
|
+
"LICENSE"
|
|
40
|
+
],
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"yaml": "^2.7.0"
|
|
43
|
+
}
|
|
44
|
+
}
|