@emdzej/csfs-cli 0.1.0 → 0.2.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/dist/index.js +80 -12
- package/dist/index.js.map +1 -1
- package/package.json +7 -6
package/dist/index.js
CHANGED
|
@@ -9,22 +9,51 @@
|
|
|
9
9
|
* which is how a backend bug becomes a failing command rather than a blank
|
|
10
10
|
* page.
|
|
11
11
|
*/
|
|
12
|
-
import { writeFile } from "node:fs/promises";
|
|
12
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
13
|
+
import { existsSync } from "node:fs";
|
|
14
|
+
import { resolve } from "node:path";
|
|
15
|
+
import { createRequire } from "node:module";
|
|
13
16
|
import { Command } from "@commander-js/extra-typings";
|
|
14
17
|
import chalk from "chalk";
|
|
18
|
+
import ignore from "ignore";
|
|
15
19
|
import { walkFileSystem } from "@emdzej/csfs-core";
|
|
16
20
|
import { httpFileSystem } from "@emdzej/csfs-http";
|
|
17
|
-
import { buildManifest, formatManifest, MANIFEST_FILE } from "@emdzej/csfs-manifest";
|
|
21
|
+
import { buildManifest, formatManifest, ManifestIndex, MANIFEST_FILE, } from "@emdzej/csfs-manifest";
|
|
18
22
|
import { nodeFileSystem } from "@emdzej/csfs-node";
|
|
19
23
|
import { withArchives } from "@emdzej/csfs-zip";
|
|
24
|
+
/** Where `manifest` looks for ignore patterns when not told otherwise. */
|
|
25
|
+
const IGNORE_FILE = ".csfsignore";
|
|
20
26
|
/** A URL means HTTP; anything else is a directory. */
|
|
21
|
-
function open(source) {
|
|
27
|
+
function open(source, opts = {}) {
|
|
22
28
|
const remote = source.startsWith("http://") || source.startsWith("https://");
|
|
23
|
-
|
|
29
|
+
const caseInsensitive = opts.caseInsensitive ?? false;
|
|
30
|
+
return withArchives(remote ? httpFileSystem(source, { caseInsensitive }) : nodeFileSystem(source), { caseInsensitive });
|
|
24
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* A gitignore-style matcher over csfs paths.
|
|
34
|
+
*
|
|
35
|
+
* `ignore` wants a repo-relative path with no leading slash, and a trailing
|
|
36
|
+
* slash to mean "this is a directory" — csfs paths are rooted and carry
|
|
37
|
+
* neither, so the translation happens here rather than at three call sites.
|
|
38
|
+
*/
|
|
39
|
+
function matcher(patterns) {
|
|
40
|
+
const ig = ignore().add(patterns);
|
|
41
|
+
return (path, isDir) => {
|
|
42
|
+
const rel = path.replace(/^\/+/, "");
|
|
43
|
+
if (rel === "")
|
|
44
|
+
return false;
|
|
45
|
+
return ig.ignores(isDir ? `${rel}/` : rel);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/*
|
|
49
|
+
* Read from package.json rather than written here. The literal had drifted a
|
|
50
|
+
* release behind, which is the only thing a hand-maintained version string
|
|
51
|
+
* reliably does.
|
|
52
|
+
*/
|
|
53
|
+
const { version } = createRequire(import.meta.url)("../package.json");
|
|
25
54
|
const program = new Command("csfs")
|
|
26
55
|
.description("Client-side file system tooling")
|
|
27
|
-
.version(
|
|
56
|
+
.version(version);
|
|
28
57
|
program
|
|
29
58
|
.command("manifest")
|
|
30
59
|
.description("describe a directory so it can be served over static HTTP")
|
|
@@ -34,6 +63,7 @@ program
|
|
|
34
63
|
.option("--pretty", "indent the JSON — larger, but readable in a diff", false)
|
|
35
64
|
.option("--archive <spec...>", "an archive to read in place: <archive>:<serves>[:basename]. " +
|
|
36
65
|
"Repeatable. Without this an archive is just a file.")
|
|
66
|
+
.option("--ignore <file>", `gitignore-style patterns to leave out (default: <dir>/${IGNORE_FILE} if present)`)
|
|
37
67
|
.option("-n, --dry-run", "print the summary and stop", false)
|
|
38
68
|
.action(async (dir, opts) => {
|
|
39
69
|
const fs = nodeFileSystem(dir);
|
|
@@ -42,6 +72,24 @@ program
|
|
|
42
72
|
process.exitCode = 1;
|
|
43
73
|
return;
|
|
44
74
|
}
|
|
75
|
+
let ignoreFile = opts.ignore;
|
|
76
|
+
if (!ignoreFile) {
|
|
77
|
+
const candidate = resolve(dir, IGNORE_FILE);
|
|
78
|
+
if (existsSync(candidate))
|
|
79
|
+
ignoreFile = candidate;
|
|
80
|
+
}
|
|
81
|
+
else if (!existsSync(ignoreFile)) {
|
|
82
|
+
console.error(chalk.red(`${ignoreFile}: no such file`));
|
|
83
|
+
process.exitCode = 1;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// csfs's own two metadata files are never described. A manifest that
|
|
87
|
+
// carries its own size is wrong the moment it is written, and an ignore
|
|
88
|
+
// file is an instruction to the builder rather than part of the tree.
|
|
89
|
+
const patterns = [`${MANIFEST_FILE}\n${IGNORE_FILE}\n`];
|
|
90
|
+
if (ignoreFile)
|
|
91
|
+
patterns.push(await readFile(ignoreFile, "utf8"));
|
|
92
|
+
const ignored = matcher(patterns.join("\n"));
|
|
45
93
|
const archives = (opts.archive ?? []).map((spec) => {
|
|
46
94
|
const [archive, serves, entry] = spec.split(":");
|
|
47
95
|
if (!archive || !serves) {
|
|
@@ -58,9 +106,8 @@ program
|
|
|
58
106
|
...(opts.label !== undefined ? { label: opts.label } : {}),
|
|
59
107
|
builtAt: new Date().toISOString(),
|
|
60
108
|
...(archives.length > 0 ? { archives } : {}),
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
filter: (path) => !path.endsWith(`/${MANIFEST_FILE}`),
|
|
109
|
+
filter: (path) => !ignored(path, false),
|
|
110
|
+
prune: (path) => ignored(path, true),
|
|
64
111
|
onProgress: (found, path) => {
|
|
65
112
|
if (Date.now() - last < 250)
|
|
66
113
|
return;
|
|
@@ -79,6 +126,24 @@ program
|
|
|
79
126
|
for (const a of archives) {
|
|
80
127
|
console.log(chalk.dim(` archive ${a.archive} serves ${a.serves} (${a.entry ?? "relative"})`));
|
|
81
128
|
}
|
|
129
|
+
if (ignoreFile)
|
|
130
|
+
console.log(chalk.dim(` ignoring per ${ignoreFile}`));
|
|
131
|
+
// Reported whether or not anyone asked, because the hazard is not visible
|
|
132
|
+
// from here: a consumer opening this tree with `caseInsensitive` can reach
|
|
133
|
+
// only the first of each group, and a tree that quietly hides a file looks
|
|
134
|
+
// exactly like one that does not contain it.
|
|
135
|
+
const collisions = new ManifestIndex(manifest, { caseInsensitive: true }).caseCollisions;
|
|
136
|
+
if (collisions.length > 0) {
|
|
137
|
+
console.warn(chalk.yellow(`\n${collisions.length} path${collisions.length === 1 ? "" : "s"} differ only in case. ` +
|
|
138
|
+
`Read case-insensitively, only the first of each group is reachable:`));
|
|
139
|
+
for (const group of collisions.slice(0, 10)) {
|
|
140
|
+
console.warn(chalk.yellow(` ${group[0]}`) + chalk.dim(` ← ${group.slice(1).join(", ")}`));
|
|
141
|
+
}
|
|
142
|
+
if (collisions.length > 10) {
|
|
143
|
+
console.warn(chalk.dim(` … and ${collisions.length - 10} more`));
|
|
144
|
+
}
|
|
145
|
+
console.warn("");
|
|
146
|
+
}
|
|
82
147
|
if (opts.dryRun) {
|
|
83
148
|
console.log(chalk.dim("--dry-run: nothing written."));
|
|
84
149
|
return;
|
|
@@ -86,7 +151,8 @@ program
|
|
|
86
151
|
const out = opts.out ?? `${dir.replace(/\/+$/, "")}/${MANIFEST_FILE}`;
|
|
87
152
|
await writeFile(out, text);
|
|
88
153
|
console.log(`written to ${chalk.bold(out)}`);
|
|
89
|
-
console.log(chalk.dim("\nServe the directory
|
|
154
|
+
console.log(chalk.dim("\nServe the directory and point a client at its URL. A host that honours " +
|
|
155
|
+
"`Range` is read a slice at a time; one that does not is read whole files."));
|
|
90
156
|
});
|
|
91
157
|
program
|
|
92
158
|
.command("ls")
|
|
@@ -94,8 +160,9 @@ program
|
|
|
94
160
|
.argument("<source>", "a directory, or an http(s) URL")
|
|
95
161
|
.argument("[path]", "path within the tree", "/")
|
|
96
162
|
.option("-R, --recursive", "walk the whole subtree", false)
|
|
163
|
+
.option("-i, --case-insensitive", "match names without regard to case", false)
|
|
97
164
|
.action(async (source, path, opts) => {
|
|
98
|
-
const fs = open(source);
|
|
165
|
+
const fs = open(source, { caseInsensitive: opts.caseInsensitive });
|
|
99
166
|
if (opts.recursive) {
|
|
100
167
|
let files = 0;
|
|
101
168
|
let bytes = 0;
|
|
@@ -131,8 +198,9 @@ program
|
|
|
131
198
|
.description("write a file to stdout, including one inside an archive")
|
|
132
199
|
.argument("<source>", "a directory, or an http(s) URL")
|
|
133
200
|
.argument("<path>", "path within the tree; may use archive.zip#/inner")
|
|
134
|
-
.
|
|
135
|
-
|
|
201
|
+
.option("-i, --case-insensitive", "match names without regard to case", false)
|
|
202
|
+
.action(async (source, path, opts) => {
|
|
203
|
+
const file = await open(source, { caseInsensitive: opts.caseInsensitive }).file(path);
|
|
136
204
|
if (!file) {
|
|
137
205
|
console.error(chalk.red(`${path}: not found`));
|
|
138
206
|
process.exitCode = 1;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;GASG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@emdzej/csfs-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Build csfs manifests, and inspect a tree through any backend",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -33,11 +33,12 @@
|
|
|
33
33
|
"@commander-js/extra-typings": "^15.0.0",
|
|
34
34
|
"chalk": "^6.0.0",
|
|
35
35
|
"commander": "^15.0.0",
|
|
36
|
-
"
|
|
37
|
-
"@emdzej/csfs-
|
|
38
|
-
"@emdzej/csfs-manifest": "0.
|
|
39
|
-
"@emdzej/csfs-
|
|
40
|
-
"@emdzej/csfs-zip": "0.
|
|
36
|
+
"ignore": "^7.0.9",
|
|
37
|
+
"@emdzej/csfs-http": "0.2.0",
|
|
38
|
+
"@emdzej/csfs-manifest": "0.2.0",
|
|
39
|
+
"@emdzej/csfs-core": "0.2.0",
|
|
40
|
+
"@emdzej/csfs-zip": "0.2.0",
|
|
41
|
+
"@emdzej/csfs-node": "0.2.0"
|
|
41
42
|
},
|
|
42
43
|
"devDependencies": {
|
|
43
44
|
"@types/node": "^22.13.1"
|