From 3b649ae2ff817affa4f771727a88e815aabf6b10 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 00:00:22 -1000 Subject: [PATCH 01/11] refactor: use workspaces to turn into true monorepo --- apps/api/package.json | 20 ++++++++++ {src/api => apps/api/src/app}/index.ts | 3 -- .../api/src/app}/routes/ci-check.ts | 3 +- .../api => apps/api/src/app}/routes/health.ts | 0 .../api/src/app}/routes/webhook.ts | 2 +- {src => apps/api/src}/server.ts | 2 +- apps/api/tsconfig.json | 8 ++++ bun.lock | 38 ++++++++++++++++--- package.json | 20 +++++----- packages/core/package.json | 22 +++++++++++ .../core/src}/application/ci-check.ts | 2 +- .../core/src}/application/rebase.ts | 7 +--- {src/core => packages/core/src}/github/app.ts | 0 .../core => packages/core/src}/github/auth.ts | 0 .../core/src}/github/handlers/on-pr-merged.ts | 0 packages/core/src/index.ts | 8 ++++ .../core/src}/models/commit.model.ts | 0 .../core/src}/models/pull-request.model.ts | 0 .../core/src}/schemas/ci-check.schema.ts | 0 .../core/src}/schemas/shared.schema.ts | 0 .../core/src}/services/git.service.ts | 0 .../core/src}/services/octokit.service.ts | 0 packages/core/tsconfig.json | 4 ++ tsconfig.json | 10 +++-- 24 files changed, 116 insertions(+), 33 deletions(-) create mode 100644 apps/api/package.json rename {src/api => apps/api/src/app}/index.ts (78%) rename {src/api => apps/api/src/app}/routes/ci-check.ts (80%) rename {src/api => apps/api/src/app}/routes/health.ts (100%) rename {src/api => apps/api/src/app}/routes/webhook.ts (91%) rename {src => apps/api/src}/server.ts (76%) create mode 100644 apps/api/tsconfig.json create mode 100644 packages/core/package.json rename {src/core => packages/core/src}/application/ci-check.ts (97%) rename {src/core => packages/core/src}/application/rebase.ts (97%) rename {src/core => packages/core/src}/github/app.ts (100%) rename {src/core => packages/core/src}/github/auth.ts (100%) rename {src/core => packages/core/src}/github/handlers/on-pr-merged.ts (100%) create mode 100644 packages/core/src/index.ts rename {src/core => packages/core/src}/models/commit.model.ts (100%) rename {src/core => packages/core/src}/models/pull-request.model.ts (100%) rename {src/api => packages/core/src}/schemas/ci-check.schema.ts (100%) rename {src/api => packages/core/src}/schemas/shared.schema.ts (100%) rename {src/core => packages/core/src}/services/git.service.ts (100%) rename {src/core => packages/core/src}/services/octokit.service.ts (100%) create mode 100644 packages/core/tsconfig.json diff --git a/apps/api/package.json b/apps/api/package.json new file mode 100644 index 0000000..aba7137 --- /dev/null +++ b/apps/api/package.json @@ -0,0 +1,20 @@ +{ + "name": "@pr-stack/api", + "private": true, + "scripts": { + "dev": "bun run --hot src/index.ts", + "build": "bun build src/index.ts --outdir=dist --target=bun", + "types:check": "tsc --noEmit --skipLibCheck", + "lint:check": "biome check .", + "lint:fix": "biome check . --write" + }, + "dependencies": { + "@pr-stack/core": "workspace:*", + "hono": "^4.11.10", + "typescript": "^5.9.3" + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest" + } +} diff --git a/src/api/index.ts b/apps/api/src/app/index.ts similarity index 78% rename from src/api/index.ts rename to apps/api/src/app/index.ts index 7daa521..de48939 100644 --- a/src/api/index.ts +++ b/apps/api/src/app/index.ts @@ -3,9 +3,6 @@ import ci from "./routes/ci-check"; import health from "./routes/health"; import webhook from "./routes/webhook"; -// Register webhook handlers -import "../core/github/handlers/on-pr-merged"; - const app = new Hono(); app.route("/ci-check", ci); diff --git a/src/api/routes/ci-check.ts b/apps/api/src/app/routes/ci-check.ts similarity index 80% rename from src/api/routes/ci-check.ts rename to apps/api/src/app/routes/ci-check.ts index fc72744..491039f 100644 --- a/src/api/routes/ci-check.ts +++ b/apps/api/src/app/routes/ci-check.ts @@ -1,6 +1,5 @@ +import { ciCheckParamsSchema, shouldSkipCI } from "@pr-stack/core"; import { type Context, Hono } from "hono"; -import { shouldSkipCI } from "../../core/application/ci-check"; -import { ciCheckParamsSchema } from "../schemas/ci-check.schema"; const ci = new Hono(); diff --git a/src/api/routes/health.ts b/apps/api/src/app/routes/health.ts similarity index 100% rename from src/api/routes/health.ts rename to apps/api/src/app/routes/health.ts diff --git a/src/api/routes/webhook.ts b/apps/api/src/app/routes/webhook.ts similarity index 91% rename from src/api/routes/webhook.ts rename to apps/api/src/app/routes/webhook.ts index 716a4a4..d0ab97c 100644 --- a/src/api/routes/webhook.ts +++ b/apps/api/src/app/routes/webhook.ts @@ -1,5 +1,5 @@ +import { githubApp } from "@pr-stack/core"; import { type Context, Hono } from "hono"; -import { githubApp } from "../../core/github/app"; const webhook = new Hono(); diff --git a/src/server.ts b/apps/api/src/server.ts similarity index 76% rename from src/server.ts rename to apps/api/src/server.ts index 9045495..deda6fd 100644 --- a/src/server.ts +++ b/apps/api/src/server.ts @@ -1,5 +1,5 @@ import { serve } from "bun"; -import app from "./api/index"; +import app from "./app/index"; serve({ fetch: app.fetch, diff --git a/apps/api/tsconfig.json b/apps/api/tsconfig.json new file mode 100644 index 0000000..5b93620 --- /dev/null +++ b/apps/api/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "jsx": "react-jsx", + "jsxImportSource": "hono/jsx" + }, + "include": ["src"] +} diff --git a/bun.lock b/bun.lock index 6cec0ec..4d52d92 100644 --- a/bun.lock +++ b/bun.lock @@ -4,8 +4,28 @@ "workspaces": { "": { "name": "pr-stack", + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest", + }, + }, + "apps/api": { + "name": "@pr-stack/api", + "dependencies": { + "@pr-stack/core": "workspace:*", + "hono": "^4.11.10", + "typescript": "^5.9.3", + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest", + }, + }, + "packages/core": { + "name": "@pr-stack/core", "dependencies": { "@datastructures-js/deque": "^1.0.8", + "@octokit/plugin-retry": "^8.0.3", "hono": "^4.11.10", "octokit": "^5.0.5", "typescript": "^5.9.3", @@ -79,7 +99,7 @@ "@octokit/plugin-throttling": ["@octokit/plugin-throttling@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^7.0.0" } }, "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg=="], - "@octokit/request": ["@octokit/request@10.0.7", "", { "dependencies": { "@octokit/endpoint": "^11.0.2", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-v93h0i1yu4idj8qFPZwjehoJx4j3Ntn+JhXsdJrG9pYaX6j/XRz2RmasMUHtNgQD39nrv/VwTWSqK0RNXR8upA=="], + "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], @@ -91,21 +111,27 @@ "@octokit/webhooks-types": ["@octokit/webhooks-types@7.6.1", "", {}, "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw=="], - "@types/aws-lambda": ["@types/aws-lambda@8.10.160", "", {}, "sha512-uoO4QVQNWFPJMh26pXtmtrRfGshPUSpMZGUyUQY20FhfHEElEBOPKgVmFs1z+kbpyBsRs2JnoOPT7++Z4GA9pA=="], + "@pr-stack/api": ["@pr-stack/api@workspace:apps/api"], + + "@pr-stack/core": ["@pr-stack/core@workspace:packages/core"], - "@types/bun": ["@types/bun@1.3.9", "", { "dependencies": { "bun-types": "1.3.9" } }, "sha512-KQ571yULOdWJiMH+RIWIOZ7B2RXQGpL1YQrBtLIV3FqDcCu6FsbFUBwhdKUlCKUpS3PJDsHlJ1QKlpxoVR+xtw=="], + "@types/aws-lambda": ["@types/aws-lambda@8.10.161", "", {}, "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ=="], - "@types/node": ["@types/node@25.3.0", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-4K3bqJpXpqfg2XKGK9bpDTc6xO/xoUP/RBWS7AtRMug6zZFaRekiLzjVtAoZMquxoAbzBvy5nxQ7veS5eYzf8A=="], + "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + + "@types/node": ["@types/node@25.5.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg=="], "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], - "bun-types": ["bun-types@1.3.9", "", { "dependencies": { "@types/node": "*" } }, "sha512-+UBWWOakIP4Tswh0Bt0QD0alpTY8cb5hvgiYeWCMet9YukHbzuruIEeXC2D7nMJPB12kbh8C7XJykSexEqGKJg=="], + "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], - "hono": ["hono@4.11.10", "", {}, "sha512-kyWP5PAiMooEvGrA9jcD3IXF7ATu8+o7B3KCbPXid5se52NPqnOpM/r9qeW2heMnOekF4kqR1fXJqCYeCLKrZg=="], + "hono": ["hono@4.12.10", "", {}, "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w=="], + + "json-with-bigint": ["json-with-bigint@3.5.8", "", {}, "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw=="], "octokit": ["octokit@5.0.5", "", { "dependencies": { "@octokit/app": "^16.1.2", "@octokit/core": "^7.0.6", "@octokit/oauth-app": "^8.0.3", "@octokit/plugin-paginate-graphql": "^6.0.0", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/plugin-retry": "^8.0.3", "@octokit/plugin-throttling": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "@octokit/webhooks": "^14.0.0" } }, "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw=="], diff --git a/package.json b/package.json index def211e..16e37da 100644 --- a/package.json +++ b/package.json @@ -1,25 +1,23 @@ { "name": "pr-stack", "license": "MIT", + "type": "module", + "private": true, + "workspaces": [ + "apps/*", + "packages/*" + ], "scripts": { - "dev:api": "bun run --hot src/api/index.ts", - "build:api": "bun build src/api/index.ts --outdir=dist --target=bun", - "types:check": "tsc --noEmit --skipLibCheck", + "dev:api": "bun run --hot apps/api/src/app/index.ts", + "build:api": "bun build apps/api/src/app/index.ts --outdir=dist --target=bun", + "types:check": "env -C apps/api bunx tsc --noEmit --skipLibCheck && env -C packages/core bunx tsc --noEmit --skipLibCheck", "lint:check": "biome check .", "lint:fix": "biome check . --write", "prepare:lefthook": "lefthook install && bun -e \"const fs=require('node:fs'); fs.writeFileSync('node_modules/lefthook/bin/index.js', fs.readFileSync('node_modules/lefthook/bin/index.js', 'utf8').replace(/^#!\\/usr\\/bin\\/env\\s+node/gm, '#!\\/usr\\/bin\\/env bun'))\"", "postinstall": "bun prepare:lefthook" }, - "dependencies": { - "@datastructures-js/deque": "^1.0.8", - "hono": "^4.11.10", - "octokit": "^5.0.5", - "typescript": "^5.9.3", - "zod": "^4.3.6" - }, "devDependencies": { "@biomejs/biome": "2.4.2", - "@octokit/webhooks-types": "^7.6.1", "@types/bun": "latest" } } diff --git a/packages/core/package.json b/packages/core/package.json new file mode 100644 index 0000000..c7ccf00 --- /dev/null +++ b/packages/core/package.json @@ -0,0 +1,22 @@ +{ + "name": "@pr-stack/core", + "private": true, + "scripts": { + "types:check": "tsc --noEmit --skipLibCheck", + "lint:check": "biome check .", + "lint:fix": "biome check . --write" + }, + "dependencies": { + "@datastructures-js/deque": "^1.0.8", + "@octokit/plugin-retry": "^8.0.3", + "hono": "^4.11.10", + "octokit": "^5.0.5", + "typescript": "^5.9.3", + "zod": "^4.3.6" + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@octokit/webhooks-types": "^7.6.1", + "@types/bun": "latest" + } +} diff --git a/src/core/application/ci-check.ts b/packages/core/src/application/ci-check.ts similarity index 97% rename from src/core/application/ci-check.ts rename to packages/core/src/application/ci-check.ts index 0fa9a51..924cf15 100644 --- a/src/core/application/ci-check.ts +++ b/packages/core/src/application/ci-check.ts @@ -1,6 +1,6 @@ import { $ } from "bun"; -import type { CiCheckParams } from "../../api/schemas/ci-check.schema"; import { getInstallationArtifacts } from "../github/auth"; +import type { CiCheckParams } from "../schemas/ci-check.schema"; import { GitService } from "../services/git.service"; import { OctokitService } from "../services/octokit.service"; diff --git a/src/core/application/rebase.ts b/packages/core/src/application/rebase.ts similarity index 97% rename from src/core/application/rebase.ts rename to packages/core/src/application/rebase.ts index 6633c91..b2c1914 100644 --- a/src/core/application/rebase.ts +++ b/packages/core/src/application/rebase.ts @@ -1,14 +1,11 @@ import { Deque } from "@datastructures-js/deque"; import { $ } from "bun"; import type { Octokit } from "octokit"; -import type { - PullRequestData, - RepositoryData, -} from "../../api/schemas/shared.schema"; import { getInstallationArtifacts } from "../github/auth"; import type { PullRequest } from "../models/pull-request.model"; +import type { PullRequestData, RepositoryData } from "../schemas/shared.schema"; import { GitService } from "../services/git.service"; -import { OctokitService } from "./../services/octokit.service"; +import { OctokitService } from "../services/octokit.service"; const REBASE_OPT_IN_LABEL = "pr-stack:auto-rebase"; diff --git a/src/core/github/app.ts b/packages/core/src/github/app.ts similarity index 100% rename from src/core/github/app.ts rename to packages/core/src/github/app.ts diff --git a/src/core/github/auth.ts b/packages/core/src/github/auth.ts similarity index 100% rename from src/core/github/auth.ts rename to packages/core/src/github/auth.ts diff --git a/src/core/github/handlers/on-pr-merged.ts b/packages/core/src/github/handlers/on-pr-merged.ts similarity index 100% rename from src/core/github/handlers/on-pr-merged.ts rename to packages/core/src/github/handlers/on-pr-merged.ts diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts new file mode 100644 index 0000000..4007e65 --- /dev/null +++ b/packages/core/src/index.ts @@ -0,0 +1,8 @@ +// Register side-effect handlers +import "./github/handlers/on-pr-merged"; + +export * from "./application/ci-check"; +export * from "./application/rebase"; +export * from "./github/app"; +export * from "./schemas/ci-check.schema"; +export * from "./schemas/shared.schema"; diff --git a/src/core/models/commit.model.ts b/packages/core/src/models/commit.model.ts similarity index 100% rename from src/core/models/commit.model.ts rename to packages/core/src/models/commit.model.ts diff --git a/src/core/models/pull-request.model.ts b/packages/core/src/models/pull-request.model.ts similarity index 100% rename from src/core/models/pull-request.model.ts rename to packages/core/src/models/pull-request.model.ts diff --git a/src/api/schemas/ci-check.schema.ts b/packages/core/src/schemas/ci-check.schema.ts similarity index 100% rename from src/api/schemas/ci-check.schema.ts rename to packages/core/src/schemas/ci-check.schema.ts diff --git a/src/api/schemas/shared.schema.ts b/packages/core/src/schemas/shared.schema.ts similarity index 100% rename from src/api/schemas/shared.schema.ts rename to packages/core/src/schemas/shared.schema.ts diff --git a/src/core/services/git.service.ts b/packages/core/src/services/git.service.ts similarity index 100% rename from src/core/services/git.service.ts rename to packages/core/src/services/git.service.ts diff --git a/src/core/services/octokit.service.ts b/packages/core/src/services/octokit.service.ts similarity index 100% rename from src/core/services/octokit.service.ts rename to packages/core/src/services/octokit.service.ts diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json new file mode 100644 index 0000000..0c91d62 --- /dev/null +++ b/packages/core/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src"] +} diff --git a/tsconfig.json b/tsconfig.json index 4835d10..46b15b3 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -5,8 +5,6 @@ "target": "ESNext", "module": "Preserve", "moduleDetection": "force", - "jsx": "react-jsx", - "jsxImportSource": "hono/jsx", "allowJs": true, "types": ["bun"], @@ -26,6 +24,12 @@ // Some stricter flags (disabled by default) "noUnusedLocals": false, "noUnusedParameters": false, - "noPropertyAccessFromIndexSignature": false + "noPropertyAccessFromIndexSignature": false, + + // Monorepo aliases + "paths": { + "@pr-stack/core": ["./packages/core/src"], + "@pr-stack/api": ["./apps/api/src"] + } } } From a2f0d8b10599a14f301523ff28fe8250254a39d4 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 00:28:38 -1000 Subject: [PATCH 02/11] refactor(fly): move fly config and Dockerfile to apps/api directory --- .github/workflows/fly-deploy.yml | 2 +- Dockerfile => apps/api/Dockerfile | 0 fly.toml => apps/api/fly.toml | 0 3 files changed, 1 insertion(+), 1 deletion(-) rename Dockerfile => apps/api/Dockerfile (100%) rename fly.toml => apps/api/fly.toml (100%) diff --git a/.github/workflows/fly-deploy.yml b/.github/workflows/fly-deploy.yml index f783edf..e43d5a1 100644 --- a/.github/workflows/fly-deploy.yml +++ b/.github/workflows/fly-deploy.yml @@ -33,7 +33,7 @@ jobs: - name: Deploy to Fly.io run: | - flyctl deploy --remote-only --config fly.toml \ + flyctl deploy --remote-only --config apps/api/fly.toml \ --build-secret APP_ID="${{ vars.APP_ID }}" \ --build-secret PRIVATE_KEY="${{ secrets.PRIVATE_KEY }}" \ --build-secret WEBHOOK_SECRET="${{ secrets.WEBHOOK_SECRET }}" \ diff --git a/Dockerfile b/apps/api/Dockerfile similarity index 100% rename from Dockerfile rename to apps/api/Dockerfile diff --git a/fly.toml b/apps/api/fly.toml similarity index 100% rename from fly.toml rename to apps/api/fly.toml From db127089757f2addcd9e3b554b27185d57d85aa4 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 00:33:45 -1000 Subject: [PATCH 03/11] fix(api): use correct paths for dev and build commands --- apps/api/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index aba7137..fd7a813 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -2,8 +2,8 @@ "name": "@pr-stack/api", "private": true, "scripts": { - "dev": "bun run --hot src/index.ts", - "build": "bun build src/index.ts --outdir=dist --target=bun", + "dev": "bun run --hot src/app/index.ts", + "build": "bun build src/app/index.ts --outdir=dist --target=bun", "types:check": "tsc --noEmit --skipLibCheck", "lint:check": "biome check .", "lint:fix": "biome check . --write" From d80b853727bd18db02e55186df038b7f463774c3 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 00:49:28 -1000 Subject: [PATCH 04/11] feat: add and use turborepo --- .gitignore | 3 +++ bun.lock | 15 +++++++++++++++ package.json | 18 +++++++++++------- turbo.json | 20 ++++++++++++++++++++ 4 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 turbo.json diff --git a/.gitignore b/.gitignore index e7430ce..01ef283 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,6 @@ Thumbs.db # Misc .cache/ tmp/ + +# Turborepo +.turbo/ \ No newline at end of file diff --git a/bun.lock b/bun.lock index 4d52d92..6a14d22 100644 --- a/bun.lock +++ b/bun.lock @@ -7,6 +7,7 @@ "devDependencies": { "@biomejs/biome": "2.4.2", "@types/bun": "latest", + "turbo": "^2.9.3", }, }, "apps/api": { @@ -115,6 +116,18 @@ "@pr-stack/core": ["@pr-stack/core@workspace:packages/core"], + "@turbo/darwin-64": ["@turbo/darwin-64@2.9.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg=="], + + "@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.9.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q=="], + + "@turbo/linux-64": ["@turbo/linux-64@2.9.3", "", { "os": "linux", "cpu": "x64" }, "sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug=="], + + "@turbo/linux-arm64": ["@turbo/linux-arm64@2.9.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q=="], + + "@turbo/windows-64": ["@turbo/windows-64@2.9.3", "", { "os": "win32", "cpu": "x64" }, "sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w=="], + + "@turbo/windows-arm64": ["@turbo/windows-arm64@2.9.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ=="], + "@types/aws-lambda": ["@types/aws-lambda@8.10.161", "", {}, "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ=="], "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], @@ -137,6 +150,8 @@ "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], + "turbo": ["turbo@2.9.3", "", { "optionalDependencies": { "@turbo/darwin-64": "2.9.3", "@turbo/darwin-arm64": "2.9.3", "@turbo/linux-64": "2.9.3", "@turbo/linux-arm64": "2.9.3", "@turbo/windows-64": "2.9.3", "@turbo/windows-arm64": "2.9.3" }, "bin": { "turbo": "bin/turbo" } }, "sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ=="], + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], diff --git a/package.json b/package.json index 16e37da..a85cac3 100644 --- a/package.json +++ b/package.json @@ -8,16 +8,20 @@ "packages/*" ], "scripts": { - "dev:api": "bun run --hot apps/api/src/app/index.ts", - "build:api": "bun build apps/api/src/app/index.ts --outdir=dist --target=bun", - "types:check": "env -C apps/api bunx tsc --noEmit --skipLibCheck && env -C packages/core bunx tsc --noEmit --skipLibCheck", - "lint:check": "biome check .", - "lint:fix": "biome check . --write", + "dev": "turbo run dev", + "dev:api": "turbo run dev --filter=api", + "build": "turbo run build", + "build:api": "turbo run build --filter=api", + "types:check": "turbo run types:check", + "lint:check": "turbo run lint:check", + "lint:fix": "turbo run lint:fix", "prepare:lefthook": "lefthook install && bun -e \"const fs=require('node:fs'); fs.writeFileSync('node_modules/lefthook/bin/index.js', fs.readFileSync('node_modules/lefthook/bin/index.js', 'utf8').replace(/^#!\\/usr\\/bin\\/env\\s+node/gm, '#!\\/usr\\/bin\\/env bun'))\"", "postinstall": "bun prepare:lefthook" }, "devDependencies": { "@biomejs/biome": "2.4.2", - "@types/bun": "latest" - } + "@types/bun": "latest", + "turbo": "^2.9.3" + }, + "packageManager": "bun@1.3.9" } diff --git a/turbo.json b/turbo.json new file mode 100644 index 0000000..f2ee964 --- /dev/null +++ b/turbo.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://turborepo.dev/schema.json", + "tasks": { + "build": { + "dependsOn": ["^build"], + "outputs": ["dist/**"] + }, + "dev": { + "dependsOn": ["^build"], + "persistent": true, + "cache": false + }, + "types:check": { + "dependsOn": ["^types:check"] + }, + "lint:check": {}, + "lint:fix": {} + }, + "ui": "tui" +} From 51f4045aedf80edb5d4e14d5a3d2d0b5e8edd816 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 12:48:29 -1000 Subject: [PATCH 05/11] fix(api): rename package to "api" and remove tsconfig alias --- apps/api/package.json | 2 +- bun.lock | 779 +++++++++++++++++++++++++++++++++--------- tsconfig.json | 3 +- 3 files changed, 618 insertions(+), 166 deletions(-) diff --git a/apps/api/package.json b/apps/api/package.json index fd7a813..f875ab7 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -1,5 +1,5 @@ { - "name": "@pr-stack/api", + "name": "api", "private": true, "scripts": { "dev": "bun run --hot src/app/index.ts", diff --git a/bun.lock b/bun.lock index 6a14d22..5509c99 100644 --- a/bun.lock +++ b/bun.lock @@ -1,165 +1,618 @@ { - "lockfileVersion": 1, - "configVersion": 1, - "workspaces": { - "": { - "name": "pr-stack", - "devDependencies": { - "@biomejs/biome": "2.4.2", - "@types/bun": "latest", - "turbo": "^2.9.3", - }, - }, - "apps/api": { - "name": "@pr-stack/api", - "dependencies": { - "@pr-stack/core": "workspace:*", - "hono": "^4.11.10", - "typescript": "^5.9.3", - }, - "devDependencies": { - "@biomejs/biome": "2.4.2", - "@types/bun": "latest", - }, - }, - "packages/core": { - "name": "@pr-stack/core", - "dependencies": { - "@datastructures-js/deque": "^1.0.8", - "@octokit/plugin-retry": "^8.0.3", - "hono": "^4.11.10", - "octokit": "^5.0.5", - "typescript": "^5.9.3", - "zod": "^4.3.6", - }, - "devDependencies": { - "@biomejs/biome": "2.4.2", - "@octokit/webhooks-types": "^7.6.1", - "@types/bun": "latest", - }, - }, - }, - "packages": { - "@biomejs/biome": ["@biomejs/biome@2.4.2", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.2", "@biomejs/cli-darwin-x64": "2.4.2", "@biomejs/cli-linux-arm64": "2.4.2", "@biomejs/cli-linux-arm64-musl": "2.4.2", "@biomejs/cli-linux-x64": "2.4.2", "@biomejs/cli-linux-x64-musl": "2.4.2", "@biomejs/cli-win32-arm64": "2.4.2", "@biomejs/cli-win32-x64": "2.4.2" }, "bin": { "biome": "bin/biome" } }, "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w=="], - - "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA=="], - - "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg=="], - - "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ=="], - - "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA=="], - - "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.2", "", { "os": "linux", "cpu": "x64" }, "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA=="], - - "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.2", "", { "os": "linux", "cpu": "x64" }, "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ=="], - - "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw=="], - - "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.2", "", { "os": "win32", "cpu": "x64" }, "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ=="], - - "@datastructures-js/deque": ["@datastructures-js/deque@1.0.8", "", {}, "sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg=="], - - "@octokit/app": ["@octokit/app@16.1.2", "", { "dependencies": { "@octokit/auth-app": "^8.1.2", "@octokit/auth-unauthenticated": "^7.0.3", "@octokit/core": "^7.0.6", "@octokit/oauth-app": "^8.0.3", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/types": "^16.0.0", "@octokit/webhooks": "^14.0.0" } }, "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ=="], - - "@octokit/auth-app": ["@octokit/auth-app@8.2.0", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g=="], - - "@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@9.0.3", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg=="], - - "@octokit/auth-oauth-device": ["@octokit/auth-oauth-device@8.0.3", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw=="], - - "@octokit/auth-oauth-user": ["@octokit/auth-oauth-user@6.0.2", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A=="], - - "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], - - "@octokit/auth-unauthenticated": ["@octokit/auth-unauthenticated@7.0.3", "", { "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0" } }, "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g=="], - - "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], - - "@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], - - "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], - - "@octokit/oauth-app": ["@octokit/oauth-app@8.0.3", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.2", "@octokit/auth-oauth-user": "^6.0.1", "@octokit/auth-unauthenticated": "^7.0.2", "@octokit/core": "^7.0.5", "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/oauth-methods": "^6.0.1", "@types/aws-lambda": "^8.10.83", "universal-user-agent": "^7.0.0" } }, "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg=="], - - "@octokit/oauth-authorization-url": ["@octokit/oauth-authorization-url@8.0.0", "", {}, "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ=="], - - "@octokit/oauth-methods": ["@octokit/oauth-methods@6.0.2", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0" } }, "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng=="], - - "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], - - "@octokit/openapi-webhooks-types": ["@octokit/openapi-webhooks-types@12.1.0", "", {}, "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA=="], - - "@octokit/plugin-paginate-graphql": ["@octokit/plugin-paginate-graphql@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ=="], - - "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@14.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw=="], - - "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@17.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw=="], - - "@octokit/plugin-retry": ["@octokit/plugin-retry@8.1.0", "", { "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=7" } }, "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw=="], - - "@octokit/plugin-throttling": ["@octokit/plugin-throttling@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^7.0.0" } }, "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg=="], - - "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], - - "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], - - "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], - - "@octokit/webhooks": ["@octokit/webhooks@14.2.0", "", { "dependencies": { "@octokit/openapi-webhooks-types": "12.1.0", "@octokit/request-error": "^7.0.0", "@octokit/webhooks-methods": "^6.0.0" } }, "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw=="], - - "@octokit/webhooks-methods": ["@octokit/webhooks-methods@6.0.0", "", {}, "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ=="], - - "@octokit/webhooks-types": ["@octokit/webhooks-types@7.6.1", "", {}, "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw=="], - - "@pr-stack/api": ["@pr-stack/api@workspace:apps/api"], - - "@pr-stack/core": ["@pr-stack/core@workspace:packages/core"], - - "@turbo/darwin-64": ["@turbo/darwin-64@2.9.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg=="], - - "@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.9.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q=="], - - "@turbo/linux-64": ["@turbo/linux-64@2.9.3", "", { "os": "linux", "cpu": "x64" }, "sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug=="], - - "@turbo/linux-arm64": ["@turbo/linux-arm64@2.9.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q=="], - - "@turbo/windows-64": ["@turbo/windows-64@2.9.3", "", { "os": "win32", "cpu": "x64" }, "sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w=="], - - "@turbo/windows-arm64": ["@turbo/windows-arm64@2.9.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ=="], - - "@types/aws-lambda": ["@types/aws-lambda@8.10.161", "", {}, "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ=="], - - "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], - - "@types/node": ["@types/node@25.5.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg=="], - - "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], - - "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], - - "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], - - "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], - - "hono": ["hono@4.12.10", "", {}, "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w=="], - - "json-with-bigint": ["json-with-bigint@3.5.8", "", {}, "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw=="], - - "octokit": ["octokit@5.0.5", "", { "dependencies": { "@octokit/app": "^16.1.2", "@octokit/core": "^7.0.6", "@octokit/oauth-app": "^8.0.3", "@octokit/plugin-paginate-graphql": "^6.0.0", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/plugin-retry": "^8.0.3", "@octokit/plugin-throttling": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "@octokit/webhooks": "^14.0.0" } }, "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw=="], - - "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], - - "turbo": ["turbo@2.9.3", "", { "optionalDependencies": { "@turbo/darwin-64": "2.9.3", "@turbo/darwin-arm64": "2.9.3", "@turbo/linux-64": "2.9.3", "@turbo/linux-arm64": "2.9.3", "@turbo/windows-64": "2.9.3", "@turbo/windows-arm64": "2.9.3" }, "bin": { "turbo": "bin/turbo" } }, "sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ=="], - - "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], - - "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], - - "universal-github-app-jwt": ["universal-github-app-jwt@2.2.2", "", {}, "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw=="], - - "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], - - "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], - } + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "pr-stack", + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest", + "turbo": "^2.9.3" + } + }, + "apps/api": { + "name": "api", + "dependencies": { + "@pr-stack/core": "workspace:*", + "hono": "^4.11.10", + "typescript": "^5.9.3" + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest" + } + }, + "packages/core": { + "name": "@pr-stack/core", + "dependencies": { + "@datastructures-js/deque": "^1.0.8", + "@octokit/plugin-retry": "^8.0.3", + "hono": "^4.11.10", + "octokit": "^5.0.5", + "typescript": "^5.9.3", + "zod": "^4.3.6" + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@octokit/webhooks-types": "^7.6.1", + "@types/bun": "latest" + } + } + }, + "packages": { + "@biomejs/biome": [ + "@biomejs/biome@2.4.2", + "", + { + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "2.4.2", + "@biomejs/cli-darwin-x64": "2.4.2", + "@biomejs/cli-linux-arm64": "2.4.2", + "@biomejs/cli-linux-arm64-musl": "2.4.2", + "@biomejs/cli-linux-x64": "2.4.2", + "@biomejs/cli-linux-x64-musl": "2.4.2", + "@biomejs/cli-win32-arm64": "2.4.2", + "@biomejs/cli-win32-x64": "2.4.2" + }, + "bin": { "biome": "bin/biome" } + }, + "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==" + ], + + "@biomejs/cli-darwin-arm64": [ + "@biomejs/cli-darwin-arm64@2.4.2", + "", + { "os": "darwin", "cpu": "arm64" }, + "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==" + ], + + "@biomejs/cli-darwin-x64": [ + "@biomejs/cli-darwin-x64@2.4.2", + "", + { "os": "darwin", "cpu": "x64" }, + "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==" + ], + + "@biomejs/cli-linux-arm64": [ + "@biomejs/cli-linux-arm64@2.4.2", + "", + { "os": "linux", "cpu": "arm64" }, + "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==" + ], + + "@biomejs/cli-linux-arm64-musl": [ + "@biomejs/cli-linux-arm64-musl@2.4.2", + "", + { "os": "linux", "cpu": "arm64" }, + "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==" + ], + + "@biomejs/cli-linux-x64": [ + "@biomejs/cli-linux-x64@2.4.2", + "", + { "os": "linux", "cpu": "x64" }, + "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==" + ], + + "@biomejs/cli-linux-x64-musl": [ + "@biomejs/cli-linux-x64-musl@2.4.2", + "", + { "os": "linux", "cpu": "x64" }, + "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==" + ], + + "@biomejs/cli-win32-arm64": [ + "@biomejs/cli-win32-arm64@2.4.2", + "", + { "os": "win32", "cpu": "arm64" }, + "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==" + ], + + "@biomejs/cli-win32-x64": [ + "@biomejs/cli-win32-x64@2.4.2", + "", + { "os": "win32", "cpu": "x64" }, + "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==" + ], + + "@datastructures-js/deque": [ + "@datastructures-js/deque@1.0.8", + "", + {}, + "sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg==" + ], + + "@octokit/app": [ + "@octokit/app@16.1.2", + "", + { + "dependencies": { + "@octokit/auth-app": "^8.1.2", + "@octokit/auth-unauthenticated": "^7.0.3", + "@octokit/core": "^7.0.6", + "@octokit/oauth-app": "^8.0.3", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/types": "^16.0.0", + "@octokit/webhooks": "^14.0.0" + } + }, + "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==" + ], + + "@octokit/auth-app": [ + "@octokit/auth-app@8.2.0", + "", + { + "dependencies": { + "@octokit/auth-oauth-app": "^9.0.3", + "@octokit/auth-oauth-user": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "toad-cache": "^3.7.0", + "universal-github-app-jwt": "^2.2.0", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g==" + ], + + "@octokit/auth-oauth-app": [ + "@octokit/auth-oauth-app@9.0.3", + "", + { + "dependencies": { + "@octokit/auth-oauth-device": "^8.0.3", + "@octokit/auth-oauth-user": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==" + ], + + "@octokit/auth-oauth-device": [ + "@octokit/auth-oauth-device@8.0.3", + "", + { + "dependencies": { + "@octokit/oauth-methods": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==" + ], + + "@octokit/auth-oauth-user": [ + "@octokit/auth-oauth-user@6.0.2", + "", + { + "dependencies": { + "@octokit/auth-oauth-device": "^8.0.3", + "@octokit/oauth-methods": "^6.0.2", + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==" + ], + + "@octokit/auth-token": [ + "@octokit/auth-token@6.0.0", + "", + {}, + "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==" + ], + + "@octokit/auth-unauthenticated": [ + "@octokit/auth-unauthenticated@7.0.3", + "", + { + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0" + } + }, + "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==" + ], + + "@octokit/core": [ + "@octokit/core@7.0.6", + "", + { + "dependencies": { + "@octokit/auth-token": "^6.0.0", + "@octokit/graphql": "^9.0.3", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "before-after-hook": "^4.0.0", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==" + ], + + "@octokit/endpoint": [ + "@octokit/endpoint@11.0.3", + "", + { + "dependencies": { + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.2" + } + }, + "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==" + ], + + "@octokit/graphql": [ + "@octokit/graphql@9.0.3", + "", + { + "dependencies": { + "@octokit/request": "^10.0.6", + "@octokit/types": "^16.0.0", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==" + ], + + "@octokit/oauth-app": [ + "@octokit/oauth-app@8.0.3", + "", + { + "dependencies": { + "@octokit/auth-oauth-app": "^9.0.2", + "@octokit/auth-oauth-user": "^6.0.1", + "@octokit/auth-unauthenticated": "^7.0.2", + "@octokit/core": "^7.0.5", + "@octokit/oauth-authorization-url": "^8.0.0", + "@octokit/oauth-methods": "^6.0.1", + "@types/aws-lambda": "^8.10.83", + "universal-user-agent": "^7.0.0" + } + }, + "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==" + ], + + "@octokit/oauth-authorization-url": [ + "@octokit/oauth-authorization-url@8.0.0", + "", + {}, + "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==" + ], + + "@octokit/oauth-methods": [ + "@octokit/oauth-methods@6.0.2", + "", + { + "dependencies": { + "@octokit/oauth-authorization-url": "^8.0.0", + "@octokit/request": "^10.0.6", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0" + } + }, + "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==" + ], + + "@octokit/openapi-types": [ + "@octokit/openapi-types@27.0.0", + "", + {}, + "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==" + ], + + "@octokit/openapi-webhooks-types": [ + "@octokit/openapi-webhooks-types@12.1.0", + "", + {}, + "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA==" + ], + + "@octokit/plugin-paginate-graphql": [ + "@octokit/plugin-paginate-graphql@6.0.0", + "", + { "peerDependencies": { "@octokit/core": ">=6" } }, + "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==" + ], + + "@octokit/plugin-paginate-rest": [ + "@octokit/plugin-paginate-rest@14.0.0", + "", + { + "dependencies": { "@octokit/types": "^16.0.0" }, + "peerDependencies": { "@octokit/core": ">=6" } + }, + "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==" + ], + + "@octokit/plugin-rest-endpoint-methods": [ + "@octokit/plugin-rest-endpoint-methods@17.0.0", + "", + { + "dependencies": { "@octokit/types": "^16.0.0" }, + "peerDependencies": { "@octokit/core": ">=6" } + }, + "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==" + ], + + "@octokit/plugin-retry": [ + "@octokit/plugin-retry@8.1.0", + "", + { + "dependencies": { + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "peerDependencies": { "@octokit/core": ">=7" } + }, + "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==" + ], + + "@octokit/plugin-throttling": [ + "@octokit/plugin-throttling@11.0.3", + "", + { + "dependencies": { + "@octokit/types": "^16.0.0", + "bottleneck": "^2.15.3" + }, + "peerDependencies": { "@octokit/core": "^7.0.0" } + }, + "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==" + ], + + "@octokit/request": [ + "@octokit/request@10.0.8", + "", + { + "dependencies": { + "@octokit/endpoint": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "fast-content-type-parse": "^3.0.0", + "json-with-bigint": "^3.5.3", + "universal-user-agent": "^7.0.2" + } + }, + "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==" + ], + + "@octokit/request-error": [ + "@octokit/request-error@7.1.0", + "", + { "dependencies": { "@octokit/types": "^16.0.0" } }, + "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==" + ], + + "@octokit/types": [ + "@octokit/types@16.0.0", + "", + { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, + "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==" + ], + + "@octokit/webhooks": [ + "@octokit/webhooks@14.2.0", + "", + { + "dependencies": { + "@octokit/openapi-webhooks-types": "12.1.0", + "@octokit/request-error": "^7.0.0", + "@octokit/webhooks-methods": "^6.0.0" + } + }, + "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw==" + ], + + "@octokit/webhooks-methods": [ + "@octokit/webhooks-methods@6.0.0", + "", + {}, + "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==" + ], + + "@octokit/webhooks-types": [ + "@octokit/webhooks-types@7.6.1", + "", + {}, + "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==" + ], + + "@pr-stack/core": ["@pr-stack/core@workspace:packages/core"], + + "@turbo/darwin-64": [ + "@turbo/darwin-64@2.9.3", + "", + { "os": "darwin", "cpu": "x64" }, + "sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg==" + ], + + "@turbo/darwin-arm64": [ + "@turbo/darwin-arm64@2.9.3", + "", + { "os": "darwin", "cpu": "arm64" }, + "sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q==" + ], + + "@turbo/linux-64": [ + "@turbo/linux-64@2.9.3", + "", + { "os": "linux", "cpu": "x64" }, + "sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug==" + ], + + "@turbo/linux-arm64": [ + "@turbo/linux-arm64@2.9.3", + "", + { "os": "linux", "cpu": "arm64" }, + "sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q==" + ], + + "@turbo/windows-64": [ + "@turbo/windows-64@2.9.3", + "", + { "os": "win32", "cpu": "x64" }, + "sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w==" + ], + + "@turbo/windows-arm64": [ + "@turbo/windows-arm64@2.9.3", + "", + { "os": "win32", "cpu": "arm64" }, + "sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ==" + ], + + "@types/aws-lambda": [ + "@types/aws-lambda@8.10.161", + "", + {}, + "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ==" + ], + + "@types/bun": [ + "@types/bun@1.3.11", + "", + { "dependencies": { "bun-types": "1.3.11" } }, + "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg==" + ], + + "@types/node": [ + "@types/node@25.5.2", + "", + { "dependencies": { "undici-types": "~7.18.0" } }, + "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==" + ], + + "api": ["api@workspace:apps/api"], + + "before-after-hook": [ + "before-after-hook@4.0.0", + "", + {}, + "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==" + ], + + "bottleneck": [ + "bottleneck@2.19.5", + "", + {}, + "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" + ], + + "bun-types": [ + "bun-types@1.3.11", + "", + { "dependencies": { "@types/node": "*" } }, + "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg==" + ], + + "fast-content-type-parse": [ + "fast-content-type-parse@3.0.0", + "", + {}, + "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==" + ], + + "hono": [ + "hono@4.12.10", + "", + {}, + "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==" + ], + + "json-with-bigint": [ + "json-with-bigint@3.5.8", + "", + {}, + "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==" + ], + + "octokit": [ + "octokit@5.0.5", + "", + { + "dependencies": { + "@octokit/app": "^16.1.2", + "@octokit/core": "^7.0.6", + "@octokit/oauth-app": "^8.0.3", + "@octokit/plugin-paginate-graphql": "^6.0.0", + "@octokit/plugin-paginate-rest": "^14.0.0", + "@octokit/plugin-rest-endpoint-methods": "^17.0.0", + "@octokit/plugin-retry": "^8.0.3", + "@octokit/plugin-throttling": "^11.0.3", + "@octokit/request-error": "^7.0.2", + "@octokit/types": "^16.0.0", + "@octokit/webhooks": "^14.0.0" + } + }, + "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==" + ], + + "toad-cache": [ + "toad-cache@3.7.0", + "", + {}, + "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==" + ], + + "turbo": [ + "turbo@2.9.3", + "", + { + "optionalDependencies": { + "@turbo/darwin-64": "2.9.3", + "@turbo/darwin-arm64": "2.9.3", + "@turbo/linux-64": "2.9.3", + "@turbo/linux-arm64": "2.9.3", + "@turbo/windows-64": "2.9.3", + "@turbo/windows-arm64": "2.9.3" + }, + "bin": { "turbo": "bin/turbo" } + }, + "sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ==" + ], + + "typescript": [ + "typescript@5.9.3", + "", + { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, + "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==" + ], + + "undici-types": [ + "undici-types@7.18.2", + "", + {}, + "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==" + ], + + "universal-github-app-jwt": [ + "universal-github-app-jwt@2.2.2", + "", + {}, + "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==" + ], + + "universal-user-agent": [ + "universal-user-agent@7.0.3", + "", + {}, + "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==" + ], + + "zod": [ + "zod@4.3.6", + "", + {}, + "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==" + ] + } } diff --git a/tsconfig.json b/tsconfig.json index 46b15b3..ec77b6f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -28,8 +28,7 @@ // Monorepo aliases "paths": { - "@pr-stack/core": ["./packages/core/src"], - "@pr-stack/api": ["./apps/api/src"] + "@pr-stack/core": ["./packages/core/src"] } } } From a77362843d01c36ee7d87d192b80aa451a2aef52 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 12:48:34 -1000 Subject: [PATCH 06/11] fix(docker): update Dockerfile for monorepo workspace structure --- apps/api/Dockerfile | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/apps/api/Dockerfile b/apps/api/Dockerfile index ee6b9d1..8d88ecc 100644 --- a/apps/api/Dockerfile +++ b/apps/api/Dockerfile @@ -3,11 +3,16 @@ FROM oven/bun:1.3.9-alpine AS build WORKDIR /app COPY package.json bun.lock ./ +COPY apps/api/package.json ./apps/api/ +COPY packages/core/package.json ./packages/core/ + RUN bun install --frozen-lockfile --ignore-scripts COPY tsconfig.json ./ -COPY src/ ./src/ +COPY apps/api/ ./apps/api/ +COPY packages/core/ ./packages/core/ +WORKDIR /app/apps/api RUN bun build src/server.ts --outfile=dist/server.js --target=bun FROM oven/bun:1.3.9-alpine @@ -17,7 +22,7 @@ RUN apk add --no-cache git WORKDIR /app -COPY --from=build /app/dist/server.js ./server.js +COPY --from=build /app/apps/api/dist/server.js ./server.js EXPOSE 8080 From b041943c0a61670ef236a548f6ff631e9d93a312 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 12:48:36 -1000 Subject: [PATCH 07/11] fix(turbo): remove upstream build dependencies from tasks --- turbo.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/turbo.json b/turbo.json index f2ee964..b2e595b 100644 --- a/turbo.json +++ b/turbo.json @@ -2,11 +2,9 @@ "$schema": "https://turborepo.dev/schema.json", "tasks": { "build": { - "dependsOn": ["^build"], "outputs": ["dist/**"] }, "dev": { - "dependsOn": ["^build"], "persistent": true, "cache": false }, From 958d41ea49b30b636145359780b012fbb2fce441 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 12:48:39 -1000 Subject: [PATCH 08/11] chore: fix missing newline in .gitignore --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 01ef283..d4d987d 100644 --- a/.gitignore +++ b/.gitignore @@ -34,4 +34,4 @@ Thumbs.db tmp/ # Turborepo -.turbo/ \ No newline at end of file +.turbo/ From 472213d768a488d2eae29656ade3518ff6c24b86 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 14:20:01 -1000 Subject: [PATCH 09/11] feat(core): add build script for bun bundler --- packages/core/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core/package.json b/packages/core/package.json index c7ccf00..f6f8b8d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,6 +2,7 @@ "name": "@pr-stack/core", "private": true, "scripts": { + "build": "bun build src/index.ts --outdir=dist --target=bun", "types:check": "tsc --noEmit --skipLibCheck", "lint:check": "biome check .", "lint:fix": "biome check . --write" From ece77e5295270b56841bb28b7e67298a4213395c Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 14:34:50 -1000 Subject: [PATCH 10/11] chore(bun): update bun.lock --- bun.lock | 779 ++++++++++++------------------------------------------- 1 file changed, 163 insertions(+), 616 deletions(-) diff --git a/bun.lock b/bun.lock index 5509c99..b12eb87 100644 --- a/bun.lock +++ b/bun.lock @@ -1,618 +1,165 @@ { - "lockfileVersion": 1, - "configVersion": 1, - "workspaces": { - "": { - "name": "pr-stack", - "devDependencies": { - "@biomejs/biome": "2.4.2", - "@types/bun": "latest", - "turbo": "^2.9.3" - } - }, - "apps/api": { - "name": "api", - "dependencies": { - "@pr-stack/core": "workspace:*", - "hono": "^4.11.10", - "typescript": "^5.9.3" - }, - "devDependencies": { - "@biomejs/biome": "2.4.2", - "@types/bun": "latest" - } - }, - "packages/core": { - "name": "@pr-stack/core", - "dependencies": { - "@datastructures-js/deque": "^1.0.8", - "@octokit/plugin-retry": "^8.0.3", - "hono": "^4.11.10", - "octokit": "^5.0.5", - "typescript": "^5.9.3", - "zod": "^4.3.6" - }, - "devDependencies": { - "@biomejs/biome": "2.4.2", - "@octokit/webhooks-types": "^7.6.1", - "@types/bun": "latest" - } - } - }, - "packages": { - "@biomejs/biome": [ - "@biomejs/biome@2.4.2", - "", - { - "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.4.2", - "@biomejs/cli-darwin-x64": "2.4.2", - "@biomejs/cli-linux-arm64": "2.4.2", - "@biomejs/cli-linux-arm64-musl": "2.4.2", - "@biomejs/cli-linux-x64": "2.4.2", - "@biomejs/cli-linux-x64-musl": "2.4.2", - "@biomejs/cli-win32-arm64": "2.4.2", - "@biomejs/cli-win32-x64": "2.4.2" - }, - "bin": { "biome": "bin/biome" } - }, - "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w==" - ], - - "@biomejs/cli-darwin-arm64": [ - "@biomejs/cli-darwin-arm64@2.4.2", - "", - { "os": "darwin", "cpu": "arm64" }, - "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA==" - ], - - "@biomejs/cli-darwin-x64": [ - "@biomejs/cli-darwin-x64@2.4.2", - "", - { "os": "darwin", "cpu": "x64" }, - "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg==" - ], - - "@biomejs/cli-linux-arm64": [ - "@biomejs/cli-linux-arm64@2.4.2", - "", - { "os": "linux", "cpu": "arm64" }, - "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ==" - ], - - "@biomejs/cli-linux-arm64-musl": [ - "@biomejs/cli-linux-arm64-musl@2.4.2", - "", - { "os": "linux", "cpu": "arm64" }, - "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA==" - ], - - "@biomejs/cli-linux-x64": [ - "@biomejs/cli-linux-x64@2.4.2", - "", - { "os": "linux", "cpu": "x64" }, - "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA==" - ], - - "@biomejs/cli-linux-x64-musl": [ - "@biomejs/cli-linux-x64-musl@2.4.2", - "", - { "os": "linux", "cpu": "x64" }, - "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ==" - ], - - "@biomejs/cli-win32-arm64": [ - "@biomejs/cli-win32-arm64@2.4.2", - "", - { "os": "win32", "cpu": "arm64" }, - "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw==" - ], - - "@biomejs/cli-win32-x64": [ - "@biomejs/cli-win32-x64@2.4.2", - "", - { "os": "win32", "cpu": "x64" }, - "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ==" - ], - - "@datastructures-js/deque": [ - "@datastructures-js/deque@1.0.8", - "", - {}, - "sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg==" - ], - - "@octokit/app": [ - "@octokit/app@16.1.2", - "", - { - "dependencies": { - "@octokit/auth-app": "^8.1.2", - "@octokit/auth-unauthenticated": "^7.0.3", - "@octokit/core": "^7.0.6", - "@octokit/oauth-app": "^8.0.3", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/types": "^16.0.0", - "@octokit/webhooks": "^14.0.0" - } - }, - "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ==" - ], - - "@octokit/auth-app": [ - "@octokit/auth-app@8.2.0", - "", - { - "dependencies": { - "@octokit/auth-oauth-app": "^9.0.3", - "@octokit/auth-oauth-user": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "toad-cache": "^3.7.0", - "universal-github-app-jwt": "^2.2.0", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g==" - ], - - "@octokit/auth-oauth-app": [ - "@octokit/auth-oauth-app@9.0.3", - "", - { - "dependencies": { - "@octokit/auth-oauth-device": "^8.0.3", - "@octokit/auth-oauth-user": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg==" - ], - - "@octokit/auth-oauth-device": [ - "@octokit/auth-oauth-device@8.0.3", - "", - { - "dependencies": { - "@octokit/oauth-methods": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw==" - ], - - "@octokit/auth-oauth-user": [ - "@octokit/auth-oauth-user@6.0.2", - "", - { - "dependencies": { - "@octokit/auth-oauth-device": "^8.0.3", - "@octokit/oauth-methods": "^6.0.2", - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A==" - ], - - "@octokit/auth-token": [ - "@octokit/auth-token@6.0.0", - "", - {}, - "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w==" - ], - - "@octokit/auth-unauthenticated": [ - "@octokit/auth-unauthenticated@7.0.3", - "", - { - "dependencies": { - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0" - } - }, - "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g==" - ], - - "@octokit/core": [ - "@octokit/core@7.0.6", - "", - { - "dependencies": { - "@octokit/auth-token": "^6.0.0", - "@octokit/graphql": "^9.0.3", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "before-after-hook": "^4.0.0", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q==" - ], - - "@octokit/endpoint": [ - "@octokit/endpoint@11.0.3", - "", - { - "dependencies": { - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.2" - } - }, - "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag==" - ], - - "@octokit/graphql": [ - "@octokit/graphql@9.0.3", - "", - { - "dependencies": { - "@octokit/request": "^10.0.6", - "@octokit/types": "^16.0.0", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA==" - ], - - "@octokit/oauth-app": [ - "@octokit/oauth-app@8.0.3", - "", - { - "dependencies": { - "@octokit/auth-oauth-app": "^9.0.2", - "@octokit/auth-oauth-user": "^6.0.1", - "@octokit/auth-unauthenticated": "^7.0.2", - "@octokit/core": "^7.0.5", - "@octokit/oauth-authorization-url": "^8.0.0", - "@octokit/oauth-methods": "^6.0.1", - "@types/aws-lambda": "^8.10.83", - "universal-user-agent": "^7.0.0" - } - }, - "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg==" - ], - - "@octokit/oauth-authorization-url": [ - "@octokit/oauth-authorization-url@8.0.0", - "", - {}, - "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ==" - ], - - "@octokit/oauth-methods": [ - "@octokit/oauth-methods@6.0.2", - "", - { - "dependencies": { - "@octokit/oauth-authorization-url": "^8.0.0", - "@octokit/request": "^10.0.6", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0" - } - }, - "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng==" - ], - - "@octokit/openapi-types": [ - "@octokit/openapi-types@27.0.0", - "", - {}, - "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA==" - ], - - "@octokit/openapi-webhooks-types": [ - "@octokit/openapi-webhooks-types@12.1.0", - "", - {}, - "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA==" - ], - - "@octokit/plugin-paginate-graphql": [ - "@octokit/plugin-paginate-graphql@6.0.0", - "", - { "peerDependencies": { "@octokit/core": ">=6" } }, - "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ==" - ], - - "@octokit/plugin-paginate-rest": [ - "@octokit/plugin-paginate-rest@14.0.0", - "", - { - "dependencies": { "@octokit/types": "^16.0.0" }, - "peerDependencies": { "@octokit/core": ">=6" } - }, - "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw==" - ], - - "@octokit/plugin-rest-endpoint-methods": [ - "@octokit/plugin-rest-endpoint-methods@17.0.0", - "", - { - "dependencies": { "@octokit/types": "^16.0.0" }, - "peerDependencies": { "@octokit/core": ">=6" } - }, - "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw==" - ], - - "@octokit/plugin-retry": [ - "@octokit/plugin-retry@8.1.0", - "", - { - "dependencies": { - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, - "peerDependencies": { "@octokit/core": ">=7" } - }, - "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw==" - ], - - "@octokit/plugin-throttling": [ - "@octokit/plugin-throttling@11.0.3", - "", - { - "dependencies": { - "@octokit/types": "^16.0.0", - "bottleneck": "^2.15.3" - }, - "peerDependencies": { "@octokit/core": "^7.0.0" } - }, - "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg==" - ], - - "@octokit/request": [ - "@octokit/request@10.0.8", - "", - { - "dependencies": { - "@octokit/endpoint": "^11.0.3", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "fast-content-type-parse": "^3.0.0", - "json-with-bigint": "^3.5.3", - "universal-user-agent": "^7.0.2" - } - }, - "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw==" - ], - - "@octokit/request-error": [ - "@octokit/request-error@7.1.0", - "", - { "dependencies": { "@octokit/types": "^16.0.0" } }, - "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw==" - ], - - "@octokit/types": [ - "@octokit/types@16.0.0", - "", - { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, - "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg==" - ], - - "@octokit/webhooks": [ - "@octokit/webhooks@14.2.0", - "", - { - "dependencies": { - "@octokit/openapi-webhooks-types": "12.1.0", - "@octokit/request-error": "^7.0.0", - "@octokit/webhooks-methods": "^6.0.0" - } - }, - "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw==" - ], - - "@octokit/webhooks-methods": [ - "@octokit/webhooks-methods@6.0.0", - "", - {}, - "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ==" - ], - - "@octokit/webhooks-types": [ - "@octokit/webhooks-types@7.6.1", - "", - {}, - "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw==" - ], - - "@pr-stack/core": ["@pr-stack/core@workspace:packages/core"], - - "@turbo/darwin-64": [ - "@turbo/darwin-64@2.9.3", - "", - { "os": "darwin", "cpu": "x64" }, - "sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg==" - ], - - "@turbo/darwin-arm64": [ - "@turbo/darwin-arm64@2.9.3", - "", - { "os": "darwin", "cpu": "arm64" }, - "sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q==" - ], - - "@turbo/linux-64": [ - "@turbo/linux-64@2.9.3", - "", - { "os": "linux", "cpu": "x64" }, - "sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug==" - ], - - "@turbo/linux-arm64": [ - "@turbo/linux-arm64@2.9.3", - "", - { "os": "linux", "cpu": "arm64" }, - "sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q==" - ], - - "@turbo/windows-64": [ - "@turbo/windows-64@2.9.3", - "", - { "os": "win32", "cpu": "x64" }, - "sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w==" - ], - - "@turbo/windows-arm64": [ - "@turbo/windows-arm64@2.9.3", - "", - { "os": "win32", "cpu": "arm64" }, - "sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ==" - ], - - "@types/aws-lambda": [ - "@types/aws-lambda@8.10.161", - "", - {}, - "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ==" - ], - - "@types/bun": [ - "@types/bun@1.3.11", - "", - { "dependencies": { "bun-types": "1.3.11" } }, - "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg==" - ], - - "@types/node": [ - "@types/node@25.5.2", - "", - { "dependencies": { "undici-types": "~7.18.0" } }, - "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg==" - ], - - "api": ["api@workspace:apps/api"], - - "before-after-hook": [ - "before-after-hook@4.0.0", - "", - {}, - "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ==" - ], - - "bottleneck": [ - "bottleneck@2.19.5", - "", - {}, - "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" - ], - - "bun-types": [ - "bun-types@1.3.11", - "", - { "dependencies": { "@types/node": "*" } }, - "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg==" - ], - - "fast-content-type-parse": [ - "fast-content-type-parse@3.0.0", - "", - {}, - "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg==" - ], - - "hono": [ - "hono@4.12.10", - "", - {}, - "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w==" - ], - - "json-with-bigint": [ - "json-with-bigint@3.5.8", - "", - {}, - "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw==" - ], - - "octokit": [ - "octokit@5.0.5", - "", - { - "dependencies": { - "@octokit/app": "^16.1.2", - "@octokit/core": "^7.0.6", - "@octokit/oauth-app": "^8.0.3", - "@octokit/plugin-paginate-graphql": "^6.0.0", - "@octokit/plugin-paginate-rest": "^14.0.0", - "@octokit/plugin-rest-endpoint-methods": "^17.0.0", - "@octokit/plugin-retry": "^8.0.3", - "@octokit/plugin-throttling": "^11.0.3", - "@octokit/request-error": "^7.0.2", - "@octokit/types": "^16.0.0", - "@octokit/webhooks": "^14.0.0" - } - }, - "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw==" - ], - - "toad-cache": [ - "toad-cache@3.7.0", - "", - {}, - "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==" - ], - - "turbo": [ - "turbo@2.9.3", - "", - { - "optionalDependencies": { - "@turbo/darwin-64": "2.9.3", - "@turbo/darwin-arm64": "2.9.3", - "@turbo/linux-64": "2.9.3", - "@turbo/linux-arm64": "2.9.3", - "@turbo/windows-64": "2.9.3", - "@turbo/windows-arm64": "2.9.3" - }, - "bin": { "turbo": "bin/turbo" } - }, - "sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ==" - ], - - "typescript": [ - "typescript@5.9.3", - "", - { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, - "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==" - ], - - "undici-types": [ - "undici-types@7.18.2", - "", - {}, - "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==" - ], - - "universal-github-app-jwt": [ - "universal-github-app-jwt@2.2.2", - "", - {}, - "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw==" - ], - - "universal-user-agent": [ - "universal-user-agent@7.0.3", - "", - {}, - "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A==" - ], - - "zod": [ - "zod@4.3.6", - "", - {}, - "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==" - ] - } + "lockfileVersion": 1, + "configVersion": 1, + "workspaces": { + "": { + "name": "pr-stack", + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest", + "turbo": "^2.9.3", + }, + }, + "apps/api": { + "name": "api", + "dependencies": { + "@pr-stack/core": "workspace:*", + "hono": "^4.11.10", + "typescript": "^5.9.3", + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@types/bun": "latest", + }, + }, + "packages/core": { + "name": "@pr-stack/core", + "dependencies": { + "@datastructures-js/deque": "^1.0.8", + "@octokit/plugin-retry": "^8.0.3", + "hono": "^4.11.10", + "octokit": "^5.0.5", + "typescript": "^5.9.3", + "zod": "^4.3.6", + }, + "devDependencies": { + "@biomejs/biome": "2.4.2", + "@octokit/webhooks-types": "^7.6.1", + "@types/bun": "latest", + }, + }, + }, + "packages": { + "@biomejs/biome": ["@biomejs/biome@2.4.2", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.2", "@biomejs/cli-darwin-x64": "2.4.2", "@biomejs/cli-linux-arm64": "2.4.2", "@biomejs/cli-linux-arm64-musl": "2.4.2", "@biomejs/cli-linux-x64": "2.4.2", "@biomejs/cli-linux-x64-musl": "2.4.2", "@biomejs/cli-win32-arm64": "2.4.2", "@biomejs/cli-win32-x64": "2.4.2" }, "bin": { "biome": "bin/biome" } }, "sha512-vVE/FqLxNLbvYnFDYg3Xfrh1UdFhmPT5i+yPT9GE2nTUgI4rkqo5krw5wK19YHBd7aE7J6r91RRmb8RWwkjy6w=="], + + "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-3pEcKCP/1POKyaZZhXcxFl3+d9njmeAihZ17k8lL/1vk+6e0Cbf0yPzKItFiT+5Yh6TQA4uKvnlqe0oVZwRxCA=="], + + "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-P7hK1jLVny+0R9UwyGcECxO6sjETxfPyBm/1dmFjnDOHgdDPjPqozByunrwh4xPKld8sxOr5eAsSqal5uKgeBg=="], + + "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-DI3Mi7GT2zYNgUTDEbSjl3e1KhoP76OjQdm8JpvZYZWtVDRyLd3w8llSr2TWk1z+U3P44kUBWY3X7H9MD1/DGQ=="], + + "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-/x04YK9+7erw6tYEcJv9WXoBHcULI/wMOvNdAyE9S3JStZZ9yJyV67sWAI+90UHuDo/BDhq0d96LDqGlSVv7WA=="], + + "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.2", "", { "os": "linux", "cpu": "x64" }, "sha512-GK2ErnrKpWFigYP68cXiCHK4RTL4IUWhK92AFS3U28X/nuAL5+hTuy6hyobc8JZRSt+upXt1nXChK+tuHHx4mA=="], + + "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.2", "", { "os": "linux", "cpu": "x64" }, "sha512-wbBmTkeAoAYbOQ33f6sfKG7pcRSydQiF+dTYOBjJsnXO2mWEOQHllKlC2YVnedqZFERp2WZhFUoO7TNRwnwEHQ=="], + + "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-k2uqwLYrNNxnaoiW3RJxoMGnbKda8FuCmtYG3cOtVljs3CzWxaTR+AoXwKGHscC9thax9R4kOrtWqWN0+KdPTw=="], + + "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.2", "", { "os": "win32", "cpu": "x64" }, "sha512-9ma7C4g8Sq3cBlRJD2yrsHXB1mnnEBdpy7PhvFrylQWQb4PoyCmPucdX7frvsSBQuFtIiKCrolPl/8tCZrKvgQ=="], + + "@datastructures-js/deque": ["@datastructures-js/deque@1.0.8", "", {}, "sha512-PSBhJ2/SmeRPRHuBv7i/fHWIdSC3JTyq56qb+Rq0wjOagi0/fdV5/B/3Md5zFZus/W6OkSPMaxMKKMNMrSmubg=="], + + "@octokit/app": ["@octokit/app@16.1.2", "", { "dependencies": { "@octokit/auth-app": "^8.1.2", "@octokit/auth-unauthenticated": "^7.0.3", "@octokit/core": "^7.0.6", "@octokit/oauth-app": "^8.0.3", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/types": "^16.0.0", "@octokit/webhooks": "^14.0.0" } }, "sha512-8j7sEpUYVj18dxvh0KWj6W/l6uAiVRBl1JBDVRqH1VHKAO/G5eRVl4yEoYACjakWers1DjUkcCHyJNQK47JqyQ=="], + + "@octokit/auth-app": ["@octokit/auth-app@8.2.0", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "toad-cache": "^3.7.0", "universal-github-app-jwt": "^2.2.0", "universal-user-agent": "^7.0.0" } }, "sha512-vVjdtQQwomrZ4V46B9LaCsxsySxGoHsyw6IYBov/TqJVROrlYdyNgw5q6tQbB7KZt53v1l1W53RiqTvpzL907g=="], + + "@octokit/auth-oauth-app": ["@octokit/auth-oauth-app@9.0.3", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/auth-oauth-user": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-+yoFQquaF8OxJSxTb7rnytBIC2ZLbLqA/yb71I4ZXT9+Slw4TziV9j/kyGhUFRRTF2+7WlnIWsePZCWHs+OGjg=="], + + "@octokit/auth-oauth-device": ["@octokit/auth-oauth-device@8.0.3", "", { "dependencies": { "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-zh2W0mKKMh/VWZhSqlaCzY7qFyrgd9oTWmTmHaXnHNeQRCZr/CXy2jCgHo4e4dJVTiuxP5dLa0YM5p5QVhJHbw=="], + + "@octokit/auth-oauth-user": ["@octokit/auth-oauth-user@6.0.2", "", { "dependencies": { "@octokit/auth-oauth-device": "^8.0.3", "@octokit/oauth-methods": "^6.0.2", "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-qLoPPc6E6GJoz3XeDG/pnDhJpTkODTGG4kY0/Py154i/I003O9NazkrwJwRuzgCalhzyIeWQ+6MDvkUmKXjg/A=="], + + "@octokit/auth-token": ["@octokit/auth-token@6.0.0", "", {}, "sha512-P4YJBPdPSpWTQ1NU4XYdvHvXJJDxM6YwpS0FZHRgP7YFkdVxsWcpWGy/NVqlAA7PcPCnMacXlRm1y2PFZRWL/w=="], + + "@octokit/auth-unauthenticated": ["@octokit/auth-unauthenticated@7.0.3", "", { "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0" } }, "sha512-8Jb1mtUdmBHL7lGmop9mU9ArMRUTRhg8vp0T1VtZ4yd9vEm3zcLwmjQkhNEduKawOOORie61xhtYIhTDN+ZQ3g=="], + + "@octokit/core": ["@octokit/core@7.0.6", "", { "dependencies": { "@octokit/auth-token": "^6.0.0", "@octokit/graphql": "^9.0.3", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "before-after-hook": "^4.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-DhGl4xMVFGVIyMwswXeyzdL4uXD5OGILGX5N8Y+f6W7LhC1Ze2poSNrkF/fedpVDHEEZ+PHFW0vL14I+mm8K3Q=="], + + "@octokit/endpoint": ["@octokit/endpoint@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.2" } }, "sha512-FWFlNxghg4HrXkD3ifYbS/IdL/mDHjh9QcsNyhQjN8dplUoZbejsdpmuqdA76nxj2xoWPs7p8uX2SNr9rYu0Ag=="], + + "@octokit/graphql": ["@octokit/graphql@9.0.3", "", { "dependencies": { "@octokit/request": "^10.0.6", "@octokit/types": "^16.0.0", "universal-user-agent": "^7.0.0" } }, "sha512-grAEuupr/C1rALFnXTv6ZQhFuL1D8G5y8CN04RgrO4FIPMrtm+mcZzFG7dcBm+nq+1ppNixu+Jd78aeJOYxlGA=="], + + "@octokit/oauth-app": ["@octokit/oauth-app@8.0.3", "", { "dependencies": { "@octokit/auth-oauth-app": "^9.0.2", "@octokit/auth-oauth-user": "^6.0.1", "@octokit/auth-unauthenticated": "^7.0.2", "@octokit/core": "^7.0.5", "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/oauth-methods": "^6.0.1", "@types/aws-lambda": "^8.10.83", "universal-user-agent": "^7.0.0" } }, "sha512-jnAjvTsPepyUaMu9e69hYBuozEPgYqP4Z3UnpmvoIzHDpf8EXDGvTY1l1jK0RsZ194oRd+k6Hm13oRU8EoDFwg=="], + + "@octokit/oauth-authorization-url": ["@octokit/oauth-authorization-url@8.0.0", "", {}, "sha512-7QoLPRh/ssEA/HuHBHdVdSgF8xNLz/Bc5m9fZkArJE5bb6NmVkDm3anKxXPmN1zh6b5WKZPRr3697xKT/yM3qQ=="], + + "@octokit/oauth-methods": ["@octokit/oauth-methods@6.0.2", "", { "dependencies": { "@octokit/oauth-authorization-url": "^8.0.0", "@octokit/request": "^10.0.6", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0" } }, "sha512-HiNOO3MqLxlt5Da5bZbLV8Zarnphi4y9XehrbaFMkcoJ+FL7sMxH/UlUsCVxpddVu4qvNDrBdaTVE2o4ITK8ng=="], + + "@octokit/openapi-types": ["@octokit/openapi-types@27.0.0", "", {}, "sha512-whrdktVs1h6gtR+09+QsNk2+FO+49j6ga1c55YZudfEG+oKJVvJLQi3zkOm5JjiUXAagWK2tI2kTGKJ2Ys7MGA=="], + + "@octokit/openapi-webhooks-types": ["@octokit/openapi-webhooks-types@12.1.0", "", {}, "sha512-WiuzhOsiOvb7W3Pvmhf8d2C6qaLHXrWiLBP4nJ/4kydu+wpagV5Fkz9RfQwV2afYzv3PB+3xYgp4mAdNGjDprA=="], + + "@octokit/plugin-paginate-graphql": ["@octokit/plugin-paginate-graphql@6.0.0", "", { "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-crfpnIoFiBtRkvPqOyLOsw12XsveYuY2ieP6uYDosoUegBJpSVxGwut9sxUgFFcll3VTOTqpUf8yGd8x1OmAkQ=="], + + "@octokit/plugin-paginate-rest": ["@octokit/plugin-paginate-rest@14.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-fNVRE7ufJiAA3XUrha2omTA39M6IXIc6GIZLvlbsm8QOQCYvpq/LkMNGyFlB1d8hTDzsAXa3OKtybdMAYsV/fw=="], + + "@octokit/plugin-rest-endpoint-methods": ["@octokit/plugin-rest-endpoint-methods@17.0.0", "", { "dependencies": { "@octokit/types": "^16.0.0" }, "peerDependencies": { "@octokit/core": ">=6" } }, "sha512-B5yCyIlOJFPqUUeiD0cnBJwWJO8lkJs5d8+ze9QDP6SvfiXSz1BF+91+0MeI1d2yxgOhU/O+CvtiZ9jSkHhFAw=="], + + "@octokit/plugin-retry": ["@octokit/plugin-retry@8.1.0", "", { "dependencies": { "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": ">=7" } }, "sha512-O1FZgXeiGb2sowEr/hYTr6YunGdSAFWnr2fyW39Ah85H8O33ELASQxcvOFF5LE6Tjekcyu2ms4qAzJVhSaJxTw=="], + + "@octokit/plugin-throttling": ["@octokit/plugin-throttling@11.0.3", "", { "dependencies": { "@octokit/types": "^16.0.0", "bottleneck": "^2.15.3" }, "peerDependencies": { "@octokit/core": "^7.0.0" } }, "sha512-34eE0RkFCKycLl2D2kq7W+LovheM/ex3AwZCYN8udpi6bxsyjZidb2McXs69hZhLmJlDqTSP8cH+jSRpiaijBg=="], + + "@octokit/request": ["@octokit/request@10.0.8", "", { "dependencies": { "@octokit/endpoint": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "fast-content-type-parse": "^3.0.0", "json-with-bigint": "^3.5.3", "universal-user-agent": "^7.0.2" } }, "sha512-SJZNwY9pur9Agf7l87ywFi14W+Hd9Jg6Ifivsd33+/bGUQIjNujdFiXII2/qSlN2ybqUHfp5xpekMEjIBTjlSw=="], + + "@octokit/request-error": ["@octokit/request-error@7.1.0", "", { "dependencies": { "@octokit/types": "^16.0.0" } }, "sha512-KMQIfq5sOPpkQYajXHwnhjCC0slzCNScLHs9JafXc4RAJI+9f+jNDlBNaIMTvazOPLgb4BnlhGJOTbnN0wIjPw=="], + + "@octokit/types": ["@octokit/types@16.0.0", "", { "dependencies": { "@octokit/openapi-types": "^27.0.0" } }, "sha512-sKq+9r1Mm4efXW1FCk7hFSeJo4QKreL/tTbR0rz/qx/r1Oa2VV83LTA/H/MuCOX7uCIJmQVRKBcbmWoySjAnSg=="], + + "@octokit/webhooks": ["@octokit/webhooks@14.2.0", "", { "dependencies": { "@octokit/openapi-webhooks-types": "12.1.0", "@octokit/request-error": "^7.0.0", "@octokit/webhooks-methods": "^6.0.0" } }, "sha512-da6KbdNCV5sr1/txD896V+6W0iamFWrvVl8cHkBSPT+YlvmT3DwXa4jxZnQc+gnuTEqSWbBeoSZYTayXH9wXcw=="], + + "@octokit/webhooks-methods": ["@octokit/webhooks-methods@6.0.0", "", {}, "sha512-MFlzzoDJVw/GcbfzVC1RLR36QqkTLUf79vLVO3D+xn7r0QgxnFoLZgtrzxiQErAjFUOdH6fas2KeQJ1yr/qaXQ=="], + + "@octokit/webhooks-types": ["@octokit/webhooks-types@7.6.1", "", {}, "sha512-S8u2cJzklBC0FgTwWVLaM8tMrDuDMVE4xiTK4EYXM9GntyvrdbSoxqDQa+Fh57CCNApyIpyeqPhhFEmHPfrXgw=="], + + "@pr-stack/core": ["@pr-stack/core@workspace:packages/core"], + + "@turbo/darwin-64": ["@turbo/darwin-64@2.9.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-P8foouaP+y/p+hhEGBoZpzMbpVvUMwPjDpcy6wN7EYfvvyISD1USuV27qWkczecihwuPJzQ1lDBuL8ERcavTyg=="], + + "@turbo/darwin-arm64": ["@turbo/darwin-arm64@2.9.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SIzEkvtNdzdI50FJDaIQ6kQGqgSSdFPcdn0wqmmONN6iGKjy6hsT+EH99GP65FsfV7DLZTh2NmtTIRl2kdoz5Q=="], + + "@turbo/linux-64": ["@turbo/linux-64@2.9.3", "", { "os": "linux", "cpu": "x64" }, "sha512-pLRwFmcHHNBvsCySLS6OFabr/07kDT2pxEt/k6eBf/3asiVQZKJ7Rk88AafQx2aYA641qek4RsXvYO3JYpiBug=="], + + "@turbo/linux-arm64": ["@turbo/linux-arm64@2.9.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-gy6ApUroC2Nzv+qjGtE/uPNkhHAFU4c8God+zd5Aiv9L9uBgHlxVJpHT3XWl5xwlJZ2KWuMrlHTaS5kmNB+q1Q=="], + + "@turbo/windows-64": ["@turbo/windows-64@2.9.3", "", { "os": "win32", "cpu": "x64" }, "sha512-d0YelTX6hAsB7kIEtGB3PzIzSfAg3yDoUlHwuwJc3adBXUsyUIs0YLG+1NNtuhcDOUGnWQeKUoJ2pGWvbpRj7w=="], + + "@turbo/windows-arm64": ["@turbo/windows-arm64@2.9.3", "", { "os": "win32", "cpu": "arm64" }, "sha512-/08CwpKJl3oRY8nOlh2YgilZVJDHsr60XTNxRhuDeuFXONpUZ5X+Nv65izbG/xBew9qxcJFbDX9/sAmAX+ITcQ=="], + + "@types/aws-lambda": ["@types/aws-lambda@8.10.161", "", {}, "sha512-rUYdp+MQwSFocxIOcSsYSF3YYYC/uUpMbCY/mbO21vGqfrEYvNSoPyKYDj6RhXXpPfS0KstW9RwG3qXh9sL7FQ=="], + + "@types/bun": ["@types/bun@1.3.11", "", { "dependencies": { "bun-types": "1.3.11" } }, "sha512-5vPne5QvtpjGpsGYXiFyycfpDF2ECyPcTSsFBMa0fraoxiQyMJ3SmuQIGhzPg2WJuWxVBoxWJ2kClYTcw/4fAg=="], + + "@types/node": ["@types/node@25.5.2", "", { "dependencies": { "undici-types": "~7.18.0" } }, "sha512-tO4ZIRKNC+MDWV4qKVZe3Ql/woTnmHDr5JD8UI5hn2pwBrHEwOEMZK7WlNb5RKB6EoJ02gwmQS9OrjuFnZYdpg=="], + + "api": ["api@workspace:apps/api"], + + "before-after-hook": ["before-after-hook@4.0.0", "", {}, "sha512-q6tR3RPqIB1pMiTRMFcZwuG5T8vwp+vUvEG0vuI6B+Rikh5BfPp2fQ82c925FOs+b0lcFQ8CFrL+KbilfZFhOQ=="], + + "bottleneck": ["bottleneck@2.19.5", "", {}, "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw=="], + + "bun-types": ["bun-types@1.3.11", "", { "dependencies": { "@types/node": "*" } }, "sha512-1KGPpoxQWl9f6wcZh57LvrPIInQMn2TQ7jsgxqpRzg+l0QPOFvJVH7HmvHo/AiPgwXy+/Thf6Ov3EdVn1vOabg=="], + + "fast-content-type-parse": ["fast-content-type-parse@3.0.0", "", {}, "sha512-ZvLdcY8P+N8mGQJahJV5G4U88CSvT1rP8ApL6uETe88MBXrBHAkZlSEySdUlyztF7ccb+Znos3TFqaepHxdhBg=="], + + "hono": ["hono@4.12.10", "", {}, "sha512-mx/p18PLy5og9ufies2GOSUqep98Td9q4i/EF6X7yJgAiIopxqdfIO3jbqsi3jRgTgw88jMDEzVKi+V2EF+27w=="], + + "json-with-bigint": ["json-with-bigint@3.5.8", "", {}, "sha512-eq/4KP6K34kwa7TcFdtvnftvHCD9KvHOGGICWwMFc4dOOKF5t4iYqnfLK8otCRCRv06FXOzGGyqE8h8ElMvvdw=="], + + "octokit": ["octokit@5.0.5", "", { "dependencies": { "@octokit/app": "^16.1.2", "@octokit/core": "^7.0.6", "@octokit/oauth-app": "^8.0.3", "@octokit/plugin-paginate-graphql": "^6.0.0", "@octokit/plugin-paginate-rest": "^14.0.0", "@octokit/plugin-rest-endpoint-methods": "^17.0.0", "@octokit/plugin-retry": "^8.0.3", "@octokit/plugin-throttling": "^11.0.3", "@octokit/request-error": "^7.0.2", "@octokit/types": "^16.0.0", "@octokit/webhooks": "^14.0.0" } }, "sha512-4+/OFSqOjoyULo7eN7EA97DE0Xydj/PW5aIckxqQIoFjFwqXKuFCvXUJObyJfBF9Khu4RL/jlDRI9FPaMGfPnw=="], + + "toad-cache": ["toad-cache@3.7.0", "", {}, "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw=="], + + "turbo": ["turbo@2.9.3", "", { "optionalDependencies": { "@turbo/darwin-64": "2.9.3", "@turbo/darwin-arm64": "2.9.3", "@turbo/linux-64": "2.9.3", "@turbo/linux-arm64": "2.9.3", "@turbo/windows-64": "2.9.3", "@turbo/windows-arm64": "2.9.3" }, "bin": { "turbo": "bin/turbo" } }, "sha512-J/VUvsGRykPb9R8Kh8dHVBOqioDexLk9BhLCU/ZybRR+HN9UR3cURdazFvNgMDt9zPP8TF6K73Z+tplfmi0PqQ=="], + + "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], + + "undici-types": ["undici-types@7.18.2", "", {}, "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w=="], + + "universal-github-app-jwt": ["universal-github-app-jwt@2.2.2", "", {}, "sha512-dcmbeSrOdTnsjGjUfAlqNDJrhxXizjAz94ija9Qw8YkZ1uu0d+GoZzyH+Jb9tIIqvGsadUfwg+22k5aDqqwzbw=="], + + "universal-user-agent": ["universal-user-agent@7.0.3", "", {}, "sha512-TmnEAEAsBJVZM/AADELsK76llnwcf9vMKuPz8JflO1frO8Lchitr0fNaN9d+Ap0BjKtqWqd/J17qeDnXh8CL2A=="], + + "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], + } } From 930629273995d3882aade86d4c6968c4203bb746 Mon Sep 17 00:00:00 2001 From: mikais13 Date: Sat, 4 Apr 2026 23:55:15 -1000 Subject: [PATCH 11/11] fix(ci): add non-root node_modules directories to setup cache store --- .github/workflows/ci-pipeline.yaml | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci-pipeline.yaml b/.github/workflows/ci-pipeline.yaml index 3acf51b..a1582f6 100644 --- a/.github/workflows/ci-pipeline.yaml +++ b/.github/workflows/ci-pipeline.yaml @@ -35,7 +35,11 @@ jobs: id: cache-check uses: actions/cache@v4 with: - path: node_modules + path: | + node_modules + */node_modules + packages/*/node_modules + apps/*/node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('bun.lock') }} lookup-only: true @@ -51,7 +55,11 @@ jobs: if: steps.cache-check.outputs.cache-hit != 'true' uses: actions/cache/save@v4 with: - path: node_modules + path: | + node_modules + */node_modules + packages/*/node_modules + apps/*/node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('bun.lock') }} type-check: @@ -69,7 +77,11 @@ jobs: id: cache-check uses: actions/cache@v4 with: - path: node_modules + path: | + node_modules + */node_modules + packages/*/node_modules + apps/*/node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('bun.lock') }} restore-keys: ${{ runner.os }}-node_modules @@ -95,7 +107,11 @@ jobs: id: cache-check uses: actions/cache@v4 with: - path: node_modules + path: | + node_modules + */node_modules + packages/*/node_modules + apps/*/node_modules key: ${{ runner.os }}-node_modules-${{ hashFiles('bun.lock') }} restore-keys: ${{ runner.os }}-node_modules