From 6b8bae55daf385d6cc9040d33c63ac2b878bb328 Mon Sep 17 00:00:00 2001 From: Morten Olsen Date: Tue, 9 Sep 2025 18:37:38 +0200 Subject: [PATCH] add dedupe action --- packages/core/package.json | 1 + packages/core/src/services/documents/documents.ts | 14 +++++++++++++- pnpm-lock.yaml | 3 +++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 872db92..57f354f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -28,6 +28,7 @@ "version": "1.0.0", "dependencies": { "eventemitter3": "^5.0.1", + "fast-deep-equal": "^3.1.3", "knex": "^3.1.0", "knex-pglite": "^0.12.0", "pg": "^8.16.3", diff --git a/packages/core/src/services/documents/documents.ts b/packages/core/src/services/documents/documents.ts index f6e485f..33cd623 100644 --- a/packages/core/src/services/documents/documents.ts +++ b/packages/core/src/services/documents/documents.ts @@ -1,8 +1,15 @@ import { EventEmitter } from 'eventemitter3'; +import deepEqual from 'fast-deep-equal'; import { DatabaseService, tableNames, type TableRow } from '../database/database.ts'; -import type { Document, DocumentSearchOptions, DocumentUpsert, DocumentUpsertEvent } from './documents.schemas.ts'; +import { + documentUpsertEventSchema, + type Document, + type DocumentSearchOptions, + type DocumentUpsert, + type DocumentUpsertEvent, +} from './documents.schemas.ts'; import { buildMetaCondition } from './documents.query.ts'; import type { Services } from '#root/utils/services.ts'; @@ -34,6 +41,11 @@ class DocumentsService extends EventEmitter { updatedAt: new Date().toISOString(), deletedAt: null, }; + const currentUpsert = documentUpsertEventSchema.parse(current); + const toInsertUpsert = documentUpsertEventSchema.parse(toInsert); + if (deepEqual(currentUpsert, toInsertUpsert)) { + return; + } await db(tableNames.documents).update(toInsert).where({ uri: document.uri, type: document.type, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 33caabd..0dca87a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -55,6 +55,9 @@ importers: eventemitter3: specifier: ^5.0.1 version: 5.0.1 + fast-deep-equal: + specifier: ^3.1.3 + version: 3.1.3 knex: specifier: ^3.1.0 version: 3.1.0(pg@8.16.3)