From 9bfe629cd7ddfb958615972fb33a3a3ceec1da30 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Thu, 6 Aug 2026 20:39:39 -0600 Subject: [PATCH] =?UTF-8?q?feat(=E9=98=B6=E6=AE=B51):=20monorepo=20?= =?UTF-8?q?=E9=AA=A8=E6=9E=B6=E4=B8=8E=20@oj2/contract=20=E5=A5=91?= =?UTF-8?q?=E7=BA=A6=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lock | 35 ++++++++++++++++++++++++++++++++ bunfig.toml | 3 +++ package.json | 17 ++++++++++++++++ packages/contract/package.json | 12 +++++++++++ packages/contract/src/index.ts | 1 + packages/contract/src/problem.ts | 13 ++++++++++++ packages/contract/tsconfig.json | 4 ++++ tsconfig.base.json | 14 +++++++++++++ 8 files changed, 99 insertions(+) create mode 100644 bun.lock create mode 100644 bunfig.toml create mode 100644 package.json create mode 100644 packages/contract/package.json create mode 100644 packages/contract/src/index.ts create mode 100644 packages/contract/src/problem.ts create mode 100644 packages/contract/tsconfig.json create mode 100644 tsconfig.base.json diff --git a/bun.lock b/bun.lock new file mode 100644 index 0000000..d21d3ac --- /dev/null +++ b/bun.lock @@ -0,0 +1,35 @@ +{ + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "oj2", + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5.7.0", + }, + }, + "packages/contract": { + "name": "@oj2/contract", + "version": "0.0.0", + "dependencies": { + "zod": "^4.0.0", + }, + }, + }, + "packages": { + "@oj2/contract": ["@oj2/contract@workspace:packages/contract"], + + "@types/bun": ["@types/bun@1.3.14", "", { "dependencies": { "bun-types": "1.3.14" } }, "sha512-h1hFqFVcvAvD9j9K7ZW7vd82aSA+rTdznZa+5bwvCwqSB1jmmfLcbIWhOLx1/+boy/xmjgCs/OMUL8hRJSmnPw=="], + + "@types/node": ["@types/node@26.1.2", "", { "dependencies": { "undici-types": "~8.3.0" } }, "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg=="], + + "bun-types": ["bun-types@1.3.14", "", { "dependencies": { "@types/node": "*" } }, "sha512-4N0ig0fEomHt5R0KCFWjovxow98rIoRwKolrYdCcknNwMekCXRnWEUvgu5soYV8QXtVsrUD8B95MBOZGPvr6KQ=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@8.3.0", "", {}, "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ=="], + + "zod": ["zod@4.4.3", "", {}, "sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ=="], + } +} diff --git a/bunfig.toml b/bunfig.toml new file mode 100644 index 0000000..a2f3173 --- /dev/null +++ b/bunfig.toml @@ -0,0 +1,3 @@ +[install] +# workspace 内部依赖走本地链接,不去 registry 找 +linker = "hoisted" diff --git a/package.json b/package.json new file mode 100644 index 0000000..7c265a2 --- /dev/null +++ b/package.json @@ -0,0 +1,17 @@ +{ + "name": "oj2", + "private": true, + "type": "module", + "workspaces": ["apps/*", "packages/*"], + "scripts": { + "dev": "bun run --filter '*' dev", + "dev:api": "bun run --filter '@oj2/api' dev", + "dev:web": "bun run --filter '@oj2/web' dev", + "db:up": "docker compose -f docker/compose.dev.yml up -d", + "db:down": "docker compose -f docker/compose.dev.yml down" + }, + "devDependencies": { + "typescript": "^5.7.0", + "@types/bun": "latest" + } +} diff --git a/packages/contract/package.json b/packages/contract/package.json new file mode 100644 index 0000000..a28dc39 --- /dev/null +++ b/packages/contract/package.json @@ -0,0 +1,12 @@ +{ + "name": "@oj2/contract", + "version": "0.0.0", + "private": true, + "type": "module", + "main": "./src/index.ts", + "types": "./src/index.ts", + "exports": { ".": "./src/index.ts" }, + "dependencies": { + "zod": "^4.0.0" + } +} diff --git a/packages/contract/src/index.ts b/packages/contract/src/index.ts new file mode 100644 index 0000000..ddfe08e --- /dev/null +++ b/packages/contract/src/index.ts @@ -0,0 +1 @@ +export * from "./problem" diff --git a/packages/contract/src/problem.ts b/packages/contract/src/problem.ts new file mode 100644 index 0000000..91ccdc7 --- /dev/null +++ b/packages/contract/src/problem.ts @@ -0,0 +1,13 @@ +import { z } from "zod" + +/** 题目列表项。字段取自 problem 表,只含列表页需要的列。 */ +export const problemSummarySchema = z.object({ + id: z.number().int(), + _id: z.string(), // 展示用编号,与自增 id 不同 + title: z.string(), + difficulty: z.string(), + submissionNumber: z.number().int(), + acceptedNumber: z.number().int(), +}) + +export type ProblemSummary = z.infer diff --git a/packages/contract/tsconfig.json b/packages/contract/tsconfig.json new file mode 100644 index 0000000..564a599 --- /dev/null +++ b/packages/contract/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..49b1488 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,14 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "ESNext", + "moduleResolution": "bundler", + "lib": ["ESNext", "DOM"], + "strict": true, + "noUncheckedIndexedAccess": true, + "skipLibCheck": true, + "esModuleInterop": true, + "resolveJsonModule": true, + "types": ["bun"] + } +}