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