feat(cli): add videos script for NeetCode embed lookup and CLI command

This commit is contained in:
Prad Nukala committed 2026-09-21 15:53:15 -04:00
1 parent 204e178fa4
commit 5059eb72cb
3 files changed
+206 -18

No files matched your search

+31 -17
View File
@@ -30,17 +30,27 @@ function lcNumber(rel: string): number | undefined {
}
/** Fuzzy-pick a solution under work/ and run `leetcode <command>` on it. */
export async function runOnSolution(command: "test" | "submit", message: string): Promise<never> {
export async function runOnSolution(
command: "test" | "submit",
message: string,
): Promise<never> {
const db = problemDb();
const scanned = [...new Bun.Glob("**/*.{js,ts,py,java,c,cpp,go,rs,rb,swift,kt,cs}").scanSync({ cwd: WORK_DIR })];
const scanned = [
...new Bun.Glob("**/*.{js,ts,py,java,c,cpp,go,rs,rb,swift,kt,cs}").scanSync(
{ cwd: WORK_DIR },
),
];
// register creation times so files older than the db still sort correctly
for (const f of scanned) {
const num = lcNumber(f);
if (num === undefined) continue;
const stat = statSync(join(WORK_DIR, f));
db.ensureSolution(num, new Date(stat.birthtimeMs || stat.mtimeMs).toISOString());
db.ensureSolution(
num,
new Date(stat.birthtimeMs || stat.mtimeMs).toISOString(),
);
}
const activity = db.solutionActivity();
@@ -51,20 +61,21 @@ export async function runOnSolution(command: "test" | "submit", message: string)
return (command === "test" ? row?.lastTested : row?.createdAt) ?? undefined;
};
const files = scanned
.sort((a, b) => {
const ka = sortKey(a);
const kb = sortKey(b);
if (ka !== kb) {
if (ka === undefined) return 1;
if (kb === undefined) return -1;
return kb.localeCompare(ka); // ISO timestamps: lexicographic = chronological
}
return a.localeCompare(b, undefined, { numeric: true });
});
const files = scanned.sort((a, b) => {
const ka = sortKey(a);
const kb = sortKey(b);
if (ka !== kb) {
if (ka === undefined) return 1;
if (kb === undefined) return -1;
return kb.localeCompare(ka); // ISO timestamps: lexicographic = chronological
}
return a.localeCompare(b, undefined, { numeric: true });
});
if (files.length === 0) {
log.error(`No solution files found in ${relative(process.cwd(), WORK_DIR)}/`);
log.error(
`No solution files found in ${relative(process.cwd(), WORK_DIR)}/`,
);
process.exit(1);
}
@@ -74,11 +85,14 @@ export async function runOnSolution(command: "test" | "submit", message: string)
maxItems: 12,
options: files.map((f) => {
const parsed = parseWorkPath(f);
const stage = parsed?.bucket === 1 ? "first solve" : `${parsed?.bucket}-day review`;
const stage =
parsed?.bucket === 1 ? "first solve" : `${parsed?.bucket}-day review`;
return {
value: f,
label: basename(f),
hint: parsed ? `${stage} · ${parsed.difficulty} · ${parsed.category}` : f,
hint: parsed
? `${stage} · ${parsed.difficulty} · ${parsed.category}`
: f,
};
}),
filter: (search, option) => {