From eeae5c9f754f9c6529441fb7a83e0dde9625d9e2 Mon Sep 17 00:00:00 2001 From: Aditya Choudhari <48932219+adityachoudhari26@users.noreply.github.com> Date: Wed, 20 Nov 2024 10:11:34 -0800 Subject: [PATCH] fix: Move events to job dispatch and use deleteResources utility function everywhere (#222) --- apps/jobs/Dockerfile | 1 - apps/jobs/package.json | 1 - apps/jobs/src/expired-env-checker/index.ts | 5 +- apps/pty-proxy/src/controller/sockets.ts | 9 ++- apps/webservice/Dockerfile | 1 - .../[deploymentSlug]/hooks/EditHookDialog.tsx | 3 +- packages/api/package.json | 1 - packages/api/src/router/deployment.ts | 5 +- packages/api/src/router/environment.ts | 7 +- packages/api/src/router/resources.ts | 21 ++---- packages/api/src/router/runbook.ts | 35 ++-------- packages/db/src/schema/event.ts | 4 +- packages/events/eslint.config.js | 10 --- packages/events/package.json | 38 ----------- packages/events/src/handlers/index.ts | 1 - packages/events/tsconfig.json | 9 --- .../job-dispatch/src/events/handlers/index.ts | 1 + .../src/events/handlers/resource-removed.ts} | 3 +- .../src => job-dispatch/src/events}/index.ts | 0 .../events}/triggers/deployment-deleted.ts | 0 .../events}/triggers/environment-deleted.ts | 0 .../src/events}/triggers/index.ts | 2 +- .../src/events/triggers/resource-deleted.ts} | 0 packages/job-dispatch/src/index.ts | 1 + packages/job-dispatch/src/resource.ts | 14 ++-- pnpm-lock.yaml | 68 ++++--------------- 26 files changed, 60 insertions(+), 180 deletions(-) delete mode 100644 packages/events/eslint.config.js delete mode 100644 packages/events/package.json delete mode 100644 packages/events/src/handlers/index.ts delete mode 100644 packages/events/tsconfig.json create mode 100644 packages/job-dispatch/src/events/handlers/index.ts rename packages/{events/src/handlers/target-removed.ts => job-dispatch/src/events/handlers/resource-removed.ts} (94%) rename packages/{events/src => job-dispatch/src/events}/index.ts (100%) rename packages/{events/src => job-dispatch/src/events}/triggers/deployment-deleted.ts (100%) rename packages/{events/src => job-dispatch/src/events}/triggers/environment-deleted.ts (100%) rename packages/{events/src => job-dispatch/src/events}/triggers/index.ts (68%) rename packages/{events/src/triggers/target-deleted.ts => job-dispatch/src/events/triggers/resource-deleted.ts} (100%) diff --git a/apps/jobs/Dockerfile b/apps/jobs/Dockerfile index 79f5017b3..7482f35a4 100644 --- a/apps/jobs/Dockerfile +++ b/apps/jobs/Dockerfile @@ -27,7 +27,6 @@ COPY packages/validators/package.json ./packages/validators/package.json COPY packages/logger/package.json ./packages/logger/package.json COPY packages/job-dispatch/package.json ./packages/job-dispatch/package.json COPY packages/secrets/package.json ./packages/secrets/package.json -COPY packages/events/package.json ./packages/events/package.json COPY apps/jobs/package.json ./apps/jobs/package.json diff --git a/apps/jobs/package.json b/apps/jobs/package.json index edabe68e3..be1097f91 100644 --- a/apps/jobs/package.json +++ b/apps/jobs/package.json @@ -14,7 +14,6 @@ }, "dependencies": { "@ctrlplane/db": "workspace:*", - "@ctrlplane/events": "workspace:*", "@ctrlplane/job-dispatch": "workspace:*", "@ctrlplane/logger": "workspace:*", "@ctrlplane/validators": "workspace:*", diff --git a/apps/jobs/src/expired-env-checker/index.ts b/apps/jobs/src/expired-env-checker/index.ts index 65f6138e0..36c7199cb 100644 --- a/apps/jobs/src/expired-env-checker/index.ts +++ b/apps/jobs/src/expired-env-checker/index.ts @@ -1,7 +1,10 @@ import { inArray, lte } from "@ctrlplane/db"; import { db } from "@ctrlplane/db/client"; import * as SCHEMA from "@ctrlplane/db/schema"; -import { getEventsForEnvironmentDeleted, handleEvent } from "@ctrlplane/events"; +import { + getEventsForEnvironmentDeleted, + handleEvent, +} from "@ctrlplane/job-dispatch"; export const run = async () => { const expiredEnvironments = await db diff --git a/apps/pty-proxy/src/controller/sockets.ts b/apps/pty-proxy/src/controller/sockets.ts index 05522dc0b..da2beda4a 100644 --- a/apps/pty-proxy/src/controller/sockets.ts +++ b/apps/pty-proxy/src/controller/sockets.ts @@ -1,6 +1,8 @@ import ms from "ms"; +import { eq } from "@ctrlplane/db"; import { db } from "@ctrlplane/db/client"; +import * as SCHEMA from "@ctrlplane/db/schema"; import { deleteResources } from "@ctrlplane/job-dispatch"; import { logger } from "@ctrlplane/logger"; @@ -26,9 +28,10 @@ setInterval(() => { agent.socket.close(1000, "Agent connection timed out"); agents.delete(agentId); - deleteResources(db, [agentId]).then(() => { - logger.info("Deleted stale agent resource", { agentId }); - }); + db.query.resource + .findFirst({ where: eq(SCHEMA.resource.id, agentId) }) + .then((resource) => resource && deleteResources(db, [resource])) + .then(() => logger.info("Deleted stale agent resource", { agentId })); } } }, ms("1m")); diff --git a/apps/webservice/Dockerfile b/apps/webservice/Dockerfile index 2b9c20149..817d83ad2 100644 --- a/apps/webservice/Dockerfile +++ b/apps/webservice/Dockerfile @@ -36,7 +36,6 @@ COPY packages/job-dispatch/package.json ./packages/job-dispatch/package.json COPY packages/ui/package.json ./packages/ui/package.json COPY packages/logger/package.json ./packages/logger/package.json COPY packages/secrets/package.json ./packages/secrets/package.json -COPY packages/events/package.json ./packages/events/package.json COPY apps/webservice/package.json ./apps/webservice/package.json diff --git a/apps/webservice/src/app/[workspaceSlug]/(app)/systems/[systemSlug]/deployments/[deploymentSlug]/hooks/EditHookDialog.tsx b/apps/webservice/src/app/[workspaceSlug]/(app)/systems/[systemSlug]/deployments/[deploymentSlug]/hooks/EditHookDialog.tsx index e2d0e4514..9425ae31d 100644 --- a/apps/webservice/src/app/[workspaceSlug]/(app)/systems/[systemSlug]/deployments/[deploymentSlug]/hooks/EditHookDialog.tsx +++ b/apps/webservice/src/app/[workspaceSlug]/(app)/systems/[systemSlug]/deployments/[deploymentSlug]/hooks/EditHookDialog.tsx @@ -76,6 +76,7 @@ export const EditHookDialog: React.FC = ({ const defaultValues = { ...hook, + action: hook.action as HookAction, jobAgentId: hook.runhook?.runbook.jobAgentId ?? null, jobAgentConfig: hook.runhook?.runbook.jobAgentConfig ?? null, }; @@ -144,7 +145,7 @@ export const EditHookDialog: React.FC = ({ className="items-center justify-start gap-2 px-2" > - {value === "" ? "Select action..." : value} + {value} diff --git a/packages/api/package.json b/packages/api/package.json index e94ca757b..9973b0f58 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -21,7 +21,6 @@ "dependencies": { "@ctrlplane/auth": "workspace:*", "@ctrlplane/db": "workspace:*", - "@ctrlplane/events": "workspace:*", "@ctrlplane/job-dispatch": "workspace:*", "@ctrlplane/logger": "workspace:*", "@ctrlplane/secrets": "workspace:*", diff --git a/packages/api/src/router/deployment.ts b/packages/api/src/router/deployment.ts index 0fcb49116..d01b19423 100644 --- a/packages/api/src/router/deployment.ts +++ b/packages/api/src/router/deployment.ts @@ -37,7 +37,10 @@ import { updateReleaseChannel, workspace, } from "@ctrlplane/db/schema"; -import { getEventsForDeploymentDeleted, handleEvent } from "@ctrlplane/events"; +import { + getEventsForDeploymentDeleted, + handleEvent, +} from "@ctrlplane/job-dispatch"; import { Permission } from "@ctrlplane/validators/auth"; import { JobStatus } from "@ctrlplane/validators/jobs"; diff --git a/packages/api/src/router/environment.ts b/packages/api/src/router/environment.ts index d45fc27b9..b27e5ea76 100644 --- a/packages/api/src/router/environment.ts +++ b/packages/api/src/router/environment.ts @@ -26,8 +26,11 @@ import { system, updateEnvironment, } from "@ctrlplane/db/schema"; -import { getEventsForEnvironmentDeleted, handleEvent } from "@ctrlplane/events"; -import { dispatchJobsForNewResources } from "@ctrlplane/job-dispatch"; +import { + dispatchJobsForNewResources, + getEventsForEnvironmentDeleted, + handleEvent, +} from "@ctrlplane/job-dispatch"; import { Permission } from "@ctrlplane/validators/auth"; import { ComparisonOperator, diff --git a/packages/api/src/router/resources.ts b/packages/api/src/router/resources.ts index c63dfb898..9954d16fe 100644 --- a/packages/api/src/router/resources.ts +++ b/packages/api/src/router/resources.ts @@ -17,11 +17,11 @@ import { takeFirstOrNull, } from "@ctrlplane/db"; import * as schema from "@ctrlplane/db/schema"; -import { getEventsForResourceDeleted, handleEvent } from "@ctrlplane/events"; import { cancelOldReleaseJobTriggersOnJobDispatch, createJobApprovals, createReleaseJobTriggers, + deleteResources, dispatchReleaseJobTriggers, isPassingAllPoliciesExceptNewerThanLastActive, isPassingNoPendingJobsPolicy, @@ -577,20 +577,11 @@ export const resourceRouter = createTRPCRouter({ ), }) .input(z.array(z.string().uuid())) - .mutation(async ({ ctx, input }) => { - const resources = await ctx.db.query.resource.findMany({ - where: inArray(schema.resource.id, input), - }); - const events = ( - await Promise.allSettled(resources.map(getEventsForResourceDeleted)) - ).flatMap((r) => (r.status === "fulfilled" ? r.value : [])); - await Promise.allSettled(events.map(handleEvent)); - - return ctx.db - .delete(schema.resource) - .where(inArray(schema.resource.id, input)) - .returning(); - }), + .mutation(async ({ ctx, input }) => + ctx.db.query.resource + .findMany({ where: inArray(schema.resource.id, input) }) + .then((resources) => deleteResources(ctx.db, resources)), + ), metadataKeys: protectedProcedure .meta({ diff --git a/packages/api/src/router/runbook.ts b/packages/api/src/router/runbook.ts index 08505d09c..f7c3b7719 100644 --- a/packages/api/src/router/runbook.ts +++ b/packages/api/src/router/runbook.ts @@ -35,43 +35,16 @@ export const runbookRouter = createTRPCRouter({ .on({ type: "system", id: input }), }) .input(z.string().uuid()) - .query(({ ctx, input }) => { - return ctx.db.query.runbook.findMany({ + .query(({ ctx, input }) => + ctx.db.query.runbook.findMany({ where: eq(SCHEMA.runbook.systemId, input), with: { runhooks: { with: { hook: true } }, jobAgent: true, variables: true, }, - }); - // return ctx.db - // .select() - // .from(SCHEMA.runbook) - // .leftJoin( - // SCHEMA.runbookVariable, - // eq(SCHEMA.runbookVariable.runbookId, SCHEMA.runbook.id), - // ) - // .leftJoin( - // SCHEMA.jobAgent, - // eq(SCHEMA.runbook.jobAgentId, SCHEMA.jobAgent.id), - // ) - // .leftJoin( - // SCHEMA.runbookJobTrigger, - // eq(SCHEMA.runbook.id, SCHEMA.runbookJobTrigger.runbookId), - // ) - // .leftJoin(SCHEMA.job, eq(SCHEMA.runbookJobTrigger.jobId, SCHEMA.job.id)) - // .where(eq(SCHEMA.runbook.systemId, input)) - // .then((rbs) => - // _.chain(rbs) - // .groupBy((rb) => rb.runbook.id) - // .map((rb) => ({ - // ...rb[0]!.runbook, - // variables: rb.map((v) => v.runbook_variable).filter(isPresent), - // jobAgent: rb[0]!.job_agent, - // })) - // .value(), - // ); - }), + }), + ), create: protectedProcedure .meta({ diff --git a/packages/db/src/schema/event.ts b/packages/db/src/schema/event.ts index cc1cd12b5..ed9d01668 100644 --- a/packages/db/src/schema/event.ts +++ b/packages/db/src/schema/event.ts @@ -56,9 +56,7 @@ export const runhook = pgTable( .notNull() .references(() => runbook.id, { onDelete: "cascade" }), }, - (t) => ({ - uniq: uniqueIndex().on(t.hookId, t.runbookId), - }), + (t) => ({ uniq: uniqueIndex().on(t.hookId, t.runbookId) }), ); export const runhookRelations = relations(runhook, ({ one }) => ({ diff --git a/packages/events/eslint.config.js b/packages/events/eslint.config.js deleted file mode 100644 index 6c56c279f..000000000 --- a/packages/events/eslint.config.js +++ /dev/null @@ -1,10 +0,0 @@ -import baseConfig, { requireJsSuffix } from "@ctrlplane/eslint-config/base"; - -/** @type {import('typescript-eslint').Config} */ -export default [ - { - ignores: ["dist/**"], - }, - ...requireJsSuffix, - ...baseConfig, -]; diff --git a/packages/events/package.json b/packages/events/package.json deleted file mode 100644 index 535fb59f6..000000000 --- a/packages/events/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "@ctrlplane/events", - "private": true, - "version": "0.1.0", - "type": "module", - "exports": { - ".": { - "types": "./src/index.ts", - "default": "./dist/index.js" - } - }, - "license": "MIT", - "scripts": { - "build": "tsc", - "dev": "tsc --watch", - "clean": "rm -rf .turbo node_modules", - "format": "prettier --check . --ignore-path ../../.gitignore", - "lint": "eslint", - "typecheck": "tsc --noEmit --emitDeclarationOnly false" - }, - "dependencies": { - "@ctrlplane/db": "workspace:*", - "@ctrlplane/job-dispatch": "workspace:*", - "@ctrlplane/validators": "workspace:*", - "ts-is-present": "^1.2.2", - "zod": "catalog:" - }, - "devDependencies": { - "@ctrlplane/eslint-config": "workspace:*", - "@ctrlplane/prettier-config": "workspace:*", - "@ctrlplane/tsconfig": "workspace:*", - "@types/node": "catalog:node20", - "eslint": "catalog:", - "prettier": "catalog:", - "typescript": "catalog:" - }, - "prettier": "@ctrlplane/prettier-config" -} diff --git a/packages/events/src/handlers/index.ts b/packages/events/src/handlers/index.ts deleted file mode 100644 index 05c4b3e62..000000000 --- a/packages/events/src/handlers/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./target-removed.js"; diff --git a/packages/events/tsconfig.json b/packages/events/tsconfig.json deleted file mode 100644 index 940c2393a..000000000 --- a/packages/events/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "@ctrlplane/tsconfig/internal-package.json", - "compilerOptions": { - "outDir": "dist", - "baseUrl": "." - }, - "include": ["*.ts", "src"], - "exclude": ["node_modules"] -} diff --git a/packages/job-dispatch/src/events/handlers/index.ts b/packages/job-dispatch/src/events/handlers/index.ts new file mode 100644 index 000000000..2261f2437 --- /dev/null +++ b/packages/job-dispatch/src/events/handlers/index.ts @@ -0,0 +1 @@ +export * from "./resource-removed.js"; diff --git a/packages/events/src/handlers/target-removed.ts b/packages/job-dispatch/src/events/handlers/resource-removed.ts similarity index 94% rename from packages/events/src/handlers/target-removed.ts rename to packages/job-dispatch/src/events/handlers/resource-removed.ts index 7902af3e8..64eebae0c 100644 --- a/packages/events/src/handlers/target-removed.ts +++ b/packages/job-dispatch/src/events/handlers/resource-removed.ts @@ -3,7 +3,8 @@ import type { ResourceRemoved } from "@ctrlplane/validators/events"; import { and, eq } from "@ctrlplane/db"; import { db } from "@ctrlplane/db/client"; import * as SCHEMA from "@ctrlplane/db/schema"; -import { dispatchRunbook } from "@ctrlplane/job-dispatch"; + +import { dispatchRunbook } from "../../job-dispatch.js"; export const handleResourceRemoved = async (event: ResourceRemoved) => { const { resource, deployment } = event.payload; diff --git a/packages/events/src/index.ts b/packages/job-dispatch/src/events/index.ts similarity index 100% rename from packages/events/src/index.ts rename to packages/job-dispatch/src/events/index.ts diff --git a/packages/events/src/triggers/deployment-deleted.ts b/packages/job-dispatch/src/events/triggers/deployment-deleted.ts similarity index 100% rename from packages/events/src/triggers/deployment-deleted.ts rename to packages/job-dispatch/src/events/triggers/deployment-deleted.ts diff --git a/packages/events/src/triggers/environment-deleted.ts b/packages/job-dispatch/src/events/triggers/environment-deleted.ts similarity index 100% rename from packages/events/src/triggers/environment-deleted.ts rename to packages/job-dispatch/src/events/triggers/environment-deleted.ts diff --git a/packages/events/src/triggers/index.ts b/packages/job-dispatch/src/events/triggers/index.ts similarity index 68% rename from packages/events/src/triggers/index.ts rename to packages/job-dispatch/src/events/triggers/index.ts index 3ae530f51..3fdb0840e 100644 --- a/packages/events/src/triggers/index.ts +++ b/packages/job-dispatch/src/events/triggers/index.ts @@ -1,3 +1,3 @@ export * from "./environment-deleted.js"; export * from "./deployment-deleted.js"; -export * from "./target-deleted.js"; +export * from "./resource-deleted.js"; diff --git a/packages/events/src/triggers/target-deleted.ts b/packages/job-dispatch/src/events/triggers/resource-deleted.ts similarity index 100% rename from packages/events/src/triggers/target-deleted.ts rename to packages/job-dispatch/src/events/triggers/resource-deleted.ts diff --git a/packages/job-dispatch/src/index.ts b/packages/job-dispatch/src/index.ts index 92d1b6af3..f6cfd1e2f 100644 --- a/packages/job-dispatch/src/index.ts +++ b/packages/job-dispatch/src/index.ts @@ -23,3 +23,4 @@ export * from "./policies/concurrency-policy.js"; export * from "./policies/release-window.js"; export * from "./environment-creation.js"; export * from "./pending-job-checker.js"; +export * from "./events/index.js"; diff --git a/packages/job-dispatch/src/resource.ts b/packages/job-dispatch/src/resource.ts index 3126f40bd..390a134ef 100644 --- a/packages/job-dispatch/src/resource.ts +++ b/packages/job-dispatch/src/resource.ts @@ -22,6 +22,7 @@ import { import { logger } from "@ctrlplane/logger"; import { variablesAES256 } from "@ctrlplane/secrets"; +import { getEventsForResourceDeleted, handleEvent } from "./events/index.js"; import { dispatchJobsForNewResources } from "./new-resource.js"; const log = logger.child({ label: "upsert-resources" }); @@ -320,10 +321,7 @@ export const upsertResources = async ( ); if (resourcesToDelete.length > 0) { - await deleteResources( - tx, - resourcesToDelete.map((r) => r.id), - ).catch((err) => { + await deleteResources(tx, resourcesToDelete).catch((err) => { log.error("Error deleting resources", { error: err }); throw err; }); @@ -346,6 +344,12 @@ export const upsertResources = async ( * @param tx - The transaction to use. * @param resourceIds - The ids of the resources to delete. */ -export const deleteResources = async (tx: Tx, resourceIds: string[]) => { +export const deleteResources = async (tx: Tx, resources: Resource[]) => { + const eventsPromises = Promise.all( + resources.map(getEventsForResourceDeleted), + ); + const events = await eventsPromises.then((res) => res.flat()); + await Promise.all(events.map(handleEvent)); + const resourceIds = resources.map((r) => r.id); await tx.delete(resource).where(inArray(resource.id, resourceIds)); }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b896e52bf..2986cd02f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -149,7 +149,7 @@ importers: version: 9.14.0(jiti@2.3.3) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(jiti@2.3.3)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.0) + version: 6.0.1(jiti@2.3.3)(postcss@8.4.47)(tsx@4.19.2)(yaml@2.6.0) prettier: specifier: 'catalog:' version: 3.3.3 @@ -295,9 +295,6 @@ importers: '@ctrlplane/db': specifier: workspace:* version: link:../../packages/db - '@ctrlplane/events': - specifier: workspace:* - version: link:../../packages/events '@ctrlplane/job-dispatch': specifier: workspace:* version: link:../../packages/job-dispatch @@ -956,9 +953,6 @@ importers: '@ctrlplane/db': specifier: workspace:* version: link:../db - '@ctrlplane/events': - specifier: workspace:* - version: link:../events '@ctrlplane/job-dispatch': specifier: workspace:* version: link:../job-dispatch @@ -1179,46 +1173,6 @@ importers: specifier: 'catalog:' version: 5.6.3 - packages/events: - dependencies: - '@ctrlplane/db': - specifier: workspace:* - version: link:../db - '@ctrlplane/job-dispatch': - specifier: workspace:* - version: link:../job-dispatch - '@ctrlplane/validators': - specifier: workspace:* - version: link:../validators - ts-is-present: - specifier: ^1.2.2 - version: 1.2.2 - zod: - specifier: 'catalog:' - version: 3.23.8 - devDependencies: - '@ctrlplane/eslint-config': - specifier: workspace:* - version: link:../../tooling/eslint - '@ctrlplane/prettier-config': - specifier: workspace:* - version: link:../../tooling/prettier - '@ctrlplane/tsconfig': - specifier: workspace:* - version: link:../../tooling/typescript - '@types/node': - specifier: catalog:node20 - version: 20.16.10 - eslint: - specifier: 'catalog:' - version: 9.14.0(jiti@2.3.3) - prettier: - specifier: 'catalog:' - version: 3.3.3 - typescript: - specifier: 'catalog:' - version: 5.6.3 - packages/job-dispatch: dependencies: '@ctrlplane/db': @@ -1641,7 +1595,7 @@ importers: version: 1.13.4(eslint@9.14.0(jiti@2.3.3)) eslint-plugin-import: specifier: ^2.29.1 - version: 2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)) + version: 2.31.0(eslint@9.14.0(jiti@2.3.3)) eslint-plugin-jsx-a11y: specifier: ^6.9.0 version: 6.10.2(eslint@9.14.0(jiti@2.3.3)) @@ -19922,17 +19876,16 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.3.3)): + eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.3.3)): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) eslint: 9.14.0(jiti@2.3.3) eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint@9.14.0(jiti@2.3.3)): + eslint-plugin-import@2.31.0(eslint@9.14.0(jiti@2.3.3)): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -19943,7 +19896,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.14.0(jiti@2.3.3) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.3.3)) + eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@9.14.0(jiti@2.3.3)) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -19954,8 +19907,6 @@ snapshots: semver: 6.3.1 string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 - optionalDependencies: - '@typescript-eslint/parser': 8.13.0(eslint@9.14.0(jiti@2.3.3))(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -23438,6 +23389,15 @@ snapshots: postcss: 8.4.47 ts-node: 10.9.2(@types/node@22.8.1)(typescript@5.6.3) + postcss-load-config@6.0.1(jiti@2.3.3)(postcss@8.4.47)(tsx@4.19.2)(yaml@2.6.0): + dependencies: + lilconfig: 3.1.2 + optionalDependencies: + jiti: 2.3.3 + postcss: 8.4.47 + tsx: 4.19.2 + yaml: 2.6.0 + postcss-load-config@6.0.1(jiti@2.3.3)(postcss@8.4.49)(tsx@4.19.2)(yaml@2.6.0): dependencies: lilconfig: 3.1.2