tangled
alpha
login
or
join now
stevedylan.dev
/
sequoia
A CLI for publishing standard.site documents to ATProto
sequoia.pub
standard
site
lexicon
cli
publishing
30
fork
atom
overview
issues
5
pulls
1
pipelines
chore: linting updates
stevedylan.dev
1 week ago
0ecddb26
5dd325f9
+15
-15
6 changed files
expand all
collapse all
unified
split
packages
cli
biome.json
src
commands
init.ts
publish.ts
sync.ts
lib
atproto.ts
markdown.ts
+4
-1
packages/cli/biome.json
···
15
15
"linter": {
16
16
"enabled": true,
17
17
"rules": {
18
18
-
"recommended": true
18
18
+
"recommended": true,
19
19
+
"style": {
20
20
+
"noNonNullAssertion": "off"
21
21
+
}
19
22
}
20
23
},
21
24
"javascript": {
+4
-4
packages/cli/src/commands/init.ts
···
199
199
200
200
const s = spinner();
201
201
s.start("Connecting to ATProto...");
202
202
-
let agent;
202
202
+
let agent: Awaited<ReturnType<typeof createAgent>> | undefined;
203
203
try {
204
204
agent = await createAgent(credentials);
205
205
s.stop("Connected!");
206
206
-
} catch (error) {
206
206
+
} catch (_error) {
207
207
s.stop("Failed to connect");
208
208
log.error(
209
209
"Failed to connect. Check your credentials with 'sequoia auth'.",
···
288
288
placeholder: "7",
289
289
validate: (value) => {
290
290
const num = parseInt(value, 10);
291
291
-
if (isNaN(num) || num < 1) {
291
291
+
if (Number.isNaN(num) || num < 1) {
292
292
return "Please enter a positive number";
293
293
}
294
294
},
···
351
351
if (!gitignoreContent.includes(stateFilename)) {
352
352
await fs.writeFile(
353
353
gitignorePath,
354
354
-
gitignoreContent + `\n${stateFilename}\n`,
354
354
+
`${gitignoreContent}\n${stateFilename}\n`,
355
355
);
356
356
log.info(`Added ${stateFilename} to .gitignore`);
357
357
}
+1
-1
packages/cli/src/commands/publish.ts
···
207
207
208
208
// Create agent
209
209
s.start(`Connecting to ${credentials.pdsUrl}...`);
210
210
-
let agent;
210
210
+
let agent: Awaited<ReturnType<typeof createAgent>> | undefined;
211
211
try {
212
212
agent = await createAgent(credentials);
213
213
s.stop(`Logged in as ${agent.session?.handle}`);
+1
-1
packages/cli/src/commands/sync.ts
···
73
73
// Create agent
74
74
const s = spinner();
75
75
s.start(`Connecting to ${credentials.pdsUrl}...`);
76
76
-
let agent;
76
76
+
let agent: Awaited<ReturnType<typeof createAgent>> | undefined;
77
77
try {
78
78
agent = await createAgent(credentials);
79
79
s.stop(`Logged in as ${agent.session?.handle}`);
+5
-7
packages/cli/src/lib/atproto.ts
···
420
420
const segmenter = new Intl.Segmenter("en", { granularity: "grapheme" });
421
421
const segments = [...segmenter.segment(str)];
422
422
if (segments.length <= maxGraphemes) return str;
423
423
-
return (
424
424
-
segments
425
425
-
.slice(0, maxGraphemes - 3)
426
426
-
.map((s) => s.segment)
427
427
-
.join("") + "..."
428
428
-
);
423
423
+
return `${segments
424
424
+
.slice(0, maxGraphemes - 3)
425
425
+
.map((s) => s.segment)
426
426
+
.join("")}...`;
429
427
}
430
428
// Fallback
431
429
const chars = [...str];
432
430
if (chars.length <= maxGraphemes) return str;
433
433
-
return chars.slice(0, maxGraphemes - 3).join("") + "...";
431
431
+
return `${chars.slice(0, maxGraphemes - 3).join("")}...`;
434
432
}
435
433
436
434
/**
-1
packages/cli/src/lib/markdown.ts
···
220
220
break;
221
221
}
222
222
223
223
-
case "filename":
224
223
default:
225
224
slug = getSlugFromFilename(path.basename(relativePath));
226
225
break;