From 7b0e42317b14a06015270c96e47130c4438a899d Mon Sep 17 00:00:00 2001 From: Miorel-Lucian Palii Date: Sun, 6 Oct 2024 16:38:53 -0700 Subject: [PATCH] Split LeetCode API package into specific imports --- .../src/getFilenameForSubmission.ts | 2 +- .../download-leetcode-submissions/src/main.ts | 2 +- .../src/transformSubmission.ts | 2 +- .../fetch-leetcode-problem-list/src/main.ts | 2 +- .../src/main.ts | 2 +- workspaces/leetcode-api/README.md | 2 +- workspaces/leetcode-api/package.json | 5 ++- .../api/submission-list-non-graphql/main.ts | 7 ++-- workspaces/leetcode-api/src/main.ts | 38 ------------------- .../src/getPotdMessage.ts | 2 +- .../post-leetcode-potd-to-discord/src/main.ts | 2 +- 11 files changed, 16 insertions(+), 50 deletions(-) delete mode 100644 workspaces/leetcode-api/src/main.ts diff --git a/workspaces/download-leetcode-submissions/src/getFilenameForSubmission.ts b/workspaces/download-leetcode-submissions/src/getFilenameForSubmission.ts index 2287b16b..813f30bd 100644 --- a/workspaces/download-leetcode-submissions/src/getFilenameForSubmission.ts +++ b/workspaces/download-leetcode-submissions/src/getFilenameForSubmission.ts @@ -1,6 +1,6 @@ import nullthrows from "nullthrows"; -import { SUBMISSION_STATUS_TO_ABBREVIATION } from "@code-chronicles/leetcode-api"; +import { SUBMISSION_STATUS_TO_ABBREVIATION } from "@code-chronicles/leetcode-api/submission-list-non-graphql"; import { timestampInSecondsToYearMonthDay } from "@code-chronicles/util/timestampInSecondsToYearMonthDay"; import { LANGUAGE_TO_FILE_EXTENSION } from "./constants.ts"; diff --git a/workspaces/download-leetcode-submissions/src/main.ts b/workspaces/download-leetcode-submissions/src/main.ts index c8e3c38b..a14ab5e9 100644 --- a/workspaces/download-leetcode-submissions/src/main.ts +++ b/workspaces/download-leetcode-submissions/src/main.ts @@ -5,7 +5,7 @@ import process from "node:process"; import { fetchSubmissionList, SUBMISSIONS_LIST_DEFAULT_PAGE_SIZE, -} from "@code-chronicles/leetcode-api"; +} from "@code-chronicles/leetcode-api/submission-list-non-graphql"; import { promiseAllLimitingConcurrency } from "@code-chronicles/util/promiseAllLimitingConcurrency"; import { sleep } from "@code-chronicles/util/sleep"; import { whileReturnsTrueAsync } from "@code-chronicles/util/whileReturnsTrueAsync"; diff --git a/workspaces/download-leetcode-submissions/src/transformSubmission.ts b/workspaces/download-leetcode-submissions/src/transformSubmission.ts index e2776dab..e287a6a3 100644 --- a/workspaces/download-leetcode-submissions/src/transformSubmission.ts +++ b/workspaces/download-leetcode-submissions/src/transformSubmission.ts @@ -1,4 +1,4 @@ -import type { Submission } from "@code-chronicles/leetcode-api"; +import type { Submission } from "@code-chronicles/leetcode-api/submission-list-non-graphql"; import { sha512 } from "@code-chronicles/util/sha512"; export type TransformedSubmission = Omit< diff --git a/workspaces/fetch-leetcode-problem-list/src/main.ts b/workspaces/fetch-leetcode-problem-list/src/main.ts index 88d92e65..e0e4fc10 100644 --- a/workspaces/fetch-leetcode-problem-list/src/main.ts +++ b/workspaces/fetch-leetcode-problem-list/src/main.ts @@ -5,7 +5,7 @@ import process from "node:process"; import { fetchQuestionList, type QuestionListQuestion, -} from "@code-chronicles/leetcode-api"; +} from "@code-chronicles/leetcode-api/question-list"; import { sleep } from "@code-chronicles/util/sleep"; import { whileReturnsTrueAsync } from "@code-chronicles/util/whileReturnsTrueAsync"; diff --git a/workspaces/fetch-recent-accepted-leetcode-submissions/src/main.ts b/workspaces/fetch-recent-accepted-leetcode-submissions/src/main.ts index a761a4d9..28bfcce5 100644 --- a/workspaces/fetch-recent-accepted-leetcode-submissions/src/main.ts +++ b/workspaces/fetch-recent-accepted-leetcode-submissions/src/main.ts @@ -3,7 +3,7 @@ import process from "node:process"; import { fetchRecentAcSubmissionList, type RecentAcSubmission, -} from "@code-chronicles/leetcode-api"; +} from "@code-chronicles/leetcode-api/recent-ac-submission-list"; import { distinctArray } from "@code-chronicles/util/distinctArray"; import { promiseAllLimitingConcurrency } from "@code-chronicles/util/promiseAllLimitingConcurrency"; diff --git a/workspaces/leetcode-api/README.md b/workspaces/leetcode-api/README.md index 4a552d27..c151f9d2 100644 --- a/workspaces/leetcode-api/README.md +++ b/workspaces/leetcode-api/README.md @@ -5,7 +5,7 @@ Read data from the LeetCode API in TypeScript! For example, run: ```ts -import { fetchActiveDailyCodingChallengeQuestionWithDateValidation as fetchPotd } from "@code-chronicles/leetcode-api"; +import { fetchActiveDailyCodingChallengeQuestionWithDateValidation as fetchPotd } from "@code-chronicles/leetcode-api/active-daily-coding-challenge-question"; const potd = await fetchPotd(); console.log(JSON.stringify(potd, null, 2)); diff --git a/workspaces/leetcode-api/package.json b/workspaces/leetcode-api/package.json index f2f6f8fb..1d976493 100644 --- a/workspaces/leetcode-api/package.json +++ b/workspaces/leetcode-api/package.json @@ -13,7 +13,10 @@ "url": "https://github.com/miorel" }, "type": "module", - "exports": "./src/main.ts", + "exports": { + "./*": "./src/api/*/main.ts", + ".": null + }, "scripts": { "codegen": "cross-env NODE_OPTIONS=\"--import tsx\" graphql-codegen-esm --config graphql-codegen.config.ts", "format": "prettier --color --write .", diff --git a/workspaces/leetcode-api/src/api/submission-list-non-graphql/main.ts b/workspaces/leetcode-api/src/api/submission-list-non-graphql/main.ts index cbaf7bb1..81bb6df3 100644 --- a/workspaces/leetcode-api/src/api/submission-list-non-graphql/main.ts +++ b/workspaces/leetcode-api/src/api/submission-list-non-graphql/main.ts @@ -106,11 +106,11 @@ const submissionListZodType = z.object({ export type SubmissionList = z.infer; -export const PAGE_SIZE = 20; +export const SUBMISSIONS_LIST_DEFAULT_PAGE_SIZE = 20; export async function fetchSubmissionList({ // Note: Even if you specify a higher limit it seems LeetCode caps this to the page size. - limit = PAGE_SIZE, + limit = SUBMISSIONS_LIST_DEFAULT_PAGE_SIZE, page = 0, session, }: { @@ -120,7 +120,8 @@ export async function fetchSubmissionList({ }): Promise { const url = new URL("https://leetcode.com/api/submissions/"); url.search = new URLSearchParams({ - offset: String(page * PAGE_SIZE), + // TODO: maybe take in an offset argument instead + offset: String(page * SUBMISSIONS_LIST_DEFAULT_PAGE_SIZE), limit: String(limit), }).toString(); diff --git a/workspaces/leetcode-api/src/main.ts b/workspaces/leetcode-api/src/main.ts deleted file mode 100644 index 90529dc8..00000000 --- a/workspaces/leetcode-api/src/main.ts +++ /dev/null @@ -1,38 +0,0 @@ -export { - fetchActiveDailyCodingChallengeQuestionWithDateValidation, - fetchActiveDailyCodingChallengeQuestionWithoutDateValidation, - type ActiveDailyCodingChallengeQuestion, -} from "./api/active-daily-coding-challenge-question/main.ts"; - -export { - fetchCommunitySolutionTopic, - type CommunitySolutionTopic, -} from "./api/topic/main.ts"; - -export { - fetchGraphQLTypeInformation, - type LeetCodeGraphQLType, -} from "./fetchGraphQLTypeInformation.ts"; - -export { - fetchQuestionList, - CategorySlug, - type QuestionList, - type QuestionListQuestion, -} from "./api/question-list/main.ts"; - -export { - fetchRecentAcSubmissionList, - type RecentAcSubmission, -} from "./api/recent-ac-submission-list/main.ts"; - -export { - PAGE_SIZE as SUBMISSIONS_LIST_DEFAULT_PAGE_SIZE, - SUBMISSION_STATUS_TO_ABBREVIATION, - SUBMISSION_STATUS_TO_DISPLAY_TEXT, - fetchSubmissionList, - type Submission, - type SubmissionList, -} from "./api/submission-list-non-graphql/main.ts"; - -export type { QuestionDifficulty } from "./zod-types/questionDifficultyZodType.ts"; diff --git a/workspaces/post-leetcode-potd-to-discord/src/getPotdMessage.ts b/workspaces/post-leetcode-potd-to-discord/src/getPotdMessage.ts index 56e56a41..fc374288 100644 --- a/workspaces/post-leetcode-potd-to-discord/src/getPotdMessage.ts +++ b/workspaces/post-leetcode-potd-to-discord/src/getPotdMessage.ts @@ -1,4 +1,4 @@ -import type { ActiveDailyCodingChallengeQuestion } from "@code-chronicles/leetcode-api"; +import type { ActiveDailyCodingChallengeQuestion } from "@code-chronicles/leetcode-api/active-daily-coding-challenge-question"; import { SEC_IN_DAY } from "@code-chronicles/util/timeConstants"; import { yearMonthDayToTimestampInSeconds } from "@code-chronicles/util/yearMonthDayToTimestampInSeconds"; diff --git a/workspaces/post-leetcode-potd-to-discord/src/main.ts b/workspaces/post-leetcode-potd-to-discord/src/main.ts index 2675c207..9773887e 100644 --- a/workspaces/post-leetcode-potd-to-discord/src/main.ts +++ b/workspaces/post-leetcode-potd-to-discord/src/main.ts @@ -1,6 +1,6 @@ import process from "node:process"; -import { fetchActiveDailyCodingChallengeQuestionWithDateValidation as fetchPotd } from "@code-chronicles/leetcode-api"; +import { fetchActiveDailyCodingChallengeQuestionWithDateValidation as fetchPotd } from "@code-chronicles/leetcode-api/active-daily-coding-challenge-question"; import { promiseAllObject } from "@code-chronicles/util/promiseAllObject"; import { sleep } from "@code-chronicles/util/sleep"; import {