mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
37 lines
1.5 KiB
TypeScript
37 lines
1.5 KiB
TypeScript
/**
|
||
* The `companies:` frontmatter vocabulary, shared by its writer
|
||
* (`apps/cli/sync.ts`, from the local DuckDB company-frequency database), its
|
||
* schema (`blume.config.ts`) and its two readers: the company table under a
|
||
* problem page's badge row (`components/ProblemBadges.astro`) and the
|
||
* Companies section of the Appendix (`pages/appendix.astro`), where each
|
||
* company's card — anchored at `companyHref()` — lists the problems it asked.
|
||
* Plain data, no Astro imports: sync imports this file under Bun.
|
||
*/
|
||
|
||
/** The database's recency windows, most recent first; they nest, so a company is filed under the first it appears in. */
|
||
export const RECENCY = ["Thirty Days", "Three Months", "Six Months"] as const;
|
||
export type Recency = (typeof RECENCY)[number];
|
||
|
||
/** Read under an "Asked within" heading (the company table) or as a row chip (the Appendix card). */
|
||
export const RECENCY_LABEL: Record<Recency, string> = {
|
||
"Thirty Days": "30 days",
|
||
"Three Months": "3 months",
|
||
"Six Months": "6 months",
|
||
};
|
||
|
||
export interface Company {
|
||
name: string;
|
||
/** The most recent window the company asked the problem in. */
|
||
period: Recency;
|
||
/** 5–100, relative within the company and window: 100 is its most-asked problem there. */
|
||
frequency: number;
|
||
}
|
||
|
||
/** The company's card on the Appendix; `company-` keeps it clear of the tag cards' `#<slug>` ids. */
|
||
export function companyHref(name: string): string {
|
||
return `/appendix#company-${name
|
||
.toLowerCase()
|
||
.replace(/[^a-z0-9]+/g, "-")
|
||
.replace(/^-|-$/g, "")}`;
|
||
}
|