A CLI for publishing standard.site documents to ATProto

chore: linting updates

+15 -15
+4 -1
packages/cli/biome.json
··· 15 "linter": { 16 "enabled": true, 17 "rules": { 18 - "recommended": true 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("")}...`; 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 223 default: 224 slug = getSlugFromFilename(path.basename(relativePath)); 225 break;