From dfe08c3478fc4f43a584a0329b1633c0b0847dcd Mon Sep 17 00:00:00 2001 From: Xavier Saliniere Date: Tue, 16 Sep 2025 14:44:32 -0400 Subject: [PATCH] chore: address lint errors --- biome.json | 5 +- src/commands/sessions.ts | 6 +- src/core/ProcessingPipeline.ts | 5 +- src/core/types.ts | 6 +- src/tests/commands/crawl.test.ts | 8 ++- src/tests/commands/sessions.test.ts | 2 +- .../extractors/BrowserFieldExtractor.test.ts | 28 ++++---- .../BrowserFieldExtractor.whitespace.test.ts | 4 +- .../ConcurrentContentExtractor.test.ts | 14 ++-- .../extractors/ContentPageExtractor.test.ts | 2 +- .../extractors/ListingPageExtractor.test.ts | 2 +- .../crawlers/handlers/BrowserHandler.test.ts | 72 ++++++++++++------- .../PaginationHandler.buttons.test.ts | 4 +- .../handlers/PaginationHandler.retry.test.ts | 4 +- src/tests/server/pagination.test.ts | 1 - src/tests/server/publications.test.ts | 11 +-- src/tests/ui/formatter.test.ts | 33 ++++----- src/tests/utils/date.relative-dates.test.ts | 16 ++--- 18 files changed, 122 insertions(+), 101 deletions(-) diff --git a/biome.json b/biome.json index cde774c..5298685 100644 --- a/biome.json +++ b/biome.json @@ -1,7 +1,8 @@ { - "$schema": "https://biomejs.dev/schemas/2.0.6/schema.json", + "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", "files": { - "ignoreUnknown": true + "ignoreUnknown": true, + "includes": ["**", "!**/src/tests/__fixtures__"] }, "vcs": { "enabled": true, diff --git a/src/commands/sessions.ts b/src/commands/sessions.ts index e2eee28..57cb6df 100644 --- a/src/commands/sessions.ts +++ b/src/commands/sessions.ts @@ -3,6 +3,8 @@ import type { ProcessingSummaryResult, } from "@/core/ProcessingPipeline"; import type { CrawlMetadata, FieldExtractionStats } from "@/core/types"; +import type { ContentFieldName } from "@/crawlers/extractors/ContentPageExtractor"; +import type { ListingFieldName } from "@/crawlers/extractors/ListingPageExtractor"; import type { ContentMetadata, CrawlSession, @@ -206,7 +208,7 @@ function calculateFieldStats( ): FieldExtractionStats[] { if (contents.length === 0) return []; - const fields = [ + const fields: Array<{ name: ListingFieldName; isOptional: boolean }> = [ { name: "title", isOptional: false }, { name: "url", isOptional: false }, { name: "author", isOptional: true }, @@ -251,7 +253,7 @@ function calculateContentFieldStats( return [ { - fieldName: "content", + fieldName: "content" as ContentFieldName, successCount, totalAttempts: contents.length, isOptional: false, diff --git a/src/core/ProcessingPipeline.ts b/src/core/ProcessingPipeline.ts index 83f5813..9d15eb4 100644 --- a/src/core/ProcessingPipeline.ts +++ b/src/core/ProcessingPipeline.ts @@ -1,4 +1,5 @@ import type { + ContentSessionLinker, CrawledData, CrawlerRegistry, CrawlOptions, @@ -38,7 +39,7 @@ export interface ProcessingPipeline { async function handleItemStorage( data: CrawledData, contentStore: ContentStore, - metadataTracker?: any, + metadataTracker?: ContentSessionLinker, ): Promise { try { const storageResult = await contentStore.store(data); @@ -79,7 +80,7 @@ async function handleItemStorage( async function processPageItems( items: CrawledData[], contentStore: ContentStore, - metadataTracker?: any, + metadataTracker?: ContentSessionLinker, ): Promise { const processedData: ProcessedData[] = []; diff --git a/src/core/types.ts b/src/core/types.ts index ee662a2..3525b93 100644 --- a/src/core/types.ts +++ b/src/core/types.ts @@ -164,11 +164,7 @@ export interface CrawlMetadata { contentFieldStats: FieldExtractionStats[]; listingErrors: string[]; contentErrors: string[]; - stoppedReason?: - | "max_pages" - | "no_next_button" - | "all_duplicates" - | "process_interrupted"; + stoppedReason?: StoppedReason; } // Interface for junction table linking diff --git a/src/tests/commands/crawl.test.ts b/src/tests/commands/crawl.test.ts index 970afa7..29e0069 100644 --- a/src/tests/commands/crawl.test.ts +++ b/src/tests/commands/crawl.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it, vi } from "vitest"; import { crawlWithOptions } from "@/commands/crawl"; import { sources } from "@/config/sources/index.js"; +import type { ProcessingPipeline } from "@/core/ProcessingPipeline"; import { ERROR_MESSAGES } from "@/ui/constants"; import { displaySources } from "@/ui/formatter"; import { validatePositiveIntegerOrEmpty } from "@/ui/utils"; @@ -96,8 +97,11 @@ describe("Crawl Command Validation", () => { describe("crawlWithOptions", () => { it("should display available sources when source not found", async () => { // Mock pipeline - const mockPipeline = { + const mockPipeline: ProcessingPipeline = { processSummary: vi.fn(), + process: vi.fn(), + getMetadataStore: vi.fn(), + getContentStore: vi.fn(), }; // Mock console.log @@ -106,7 +110,7 @@ describe("crawlWithOptions", () => { // Call crawlWithOptions with non-existent source const result = await crawlWithOptions( { source: "non-existent-source" }, - mockPipeline as any, + mockPipeline, ); // Verify the error message and available sources are displayed diff --git a/src/tests/commands/sessions.test.ts b/src/tests/commands/sessions.test.ts index 30d7203..eb2fda3 100644 --- a/src/tests/commands/sessions.test.ts +++ b/src/tests/commands/sessions.test.ts @@ -1,7 +1,7 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; import { handleSessions } from "@/commands/sessions"; import type { ProcessingPipeline } from "@/core/ProcessingPipeline"; -import type { CrawlSession, MetadataStore } from "@/storage/index"; +import type { CrawlSession, MetadataStore } from "@/storage/MetadataStore"; // Mock inquirer const mockPrompt = vi.fn(); diff --git a/src/tests/crawlers/extractors/BrowserFieldExtractor.test.ts b/src/tests/crawlers/extractors/BrowserFieldExtractor.test.ts index b178bb2..4691127 100644 --- a/src/tests/crawlers/extractors/BrowserFieldExtractor.test.ts +++ b/src/tests/crawlers/extractors/BrowserFieldExtractor.test.ts @@ -26,7 +26,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -71,13 +71,13 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; global.window = { location: { href: "https://example.com/page", }, - } as any; + } as unknown as typeof window; const result = extractionFunction({ container_selector: ".container", @@ -98,10 +98,10 @@ describe("BrowserFieldExtractor", () => { // Mock browser context - container not found global.document = { - querySelector: vi.fn().mockImplementation((selector: string) => { + querySelector: vi.fn().mockImplementation((_selector: string) => { return null; // Always return null to simulate missing container }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".nonexistent", @@ -124,7 +124,7 @@ describe("BrowserFieldExtractor", () => { // Mock browser context - container exists but field element doesn't const mockContainer = { - querySelector: vi.fn().mockImplementation((selector: string) => { + querySelector: vi.fn().mockImplementation((_selector: string) => { return null; // Always return null for field elements }), }; @@ -136,7 +136,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -170,7 +170,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -203,7 +203,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -249,13 +249,13 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; global.window = { location: { href: "https://example.com/page", }, - } as any; + } as unknown as typeof window; const result = extractionFunction({ container_selector: ".container", @@ -296,7 +296,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -342,7 +342,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -392,7 +392,7 @@ describe("BrowserFieldExtractor", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", diff --git a/src/tests/crawlers/extractors/BrowserFieldExtractor.whitespace.test.ts b/src/tests/crawlers/extractors/BrowserFieldExtractor.whitespace.test.ts index aa06d02..c5e3ccd 100644 --- a/src/tests/crawlers/extractors/BrowserFieldExtractor.whitespace.test.ts +++ b/src/tests/crawlers/extractors/BrowserFieldExtractor.whitespace.test.ts @@ -23,7 +23,7 @@ describe("BrowserFieldExtractor - Whitespace handling", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", @@ -74,7 +74,7 @@ describe("BrowserFieldExtractor - Whitespace handling", () => { } return null; }), - } as any; + } as unknown as Document; const result = extractionFunction({ container_selector: ".container", diff --git a/src/tests/crawlers/extractors/ConcurrentContentExtractor.test.ts b/src/tests/crawlers/extractors/ConcurrentContentExtractor.test.ts index cac920c..2eb7fbf 100644 --- a/src/tests/crawlers/extractors/ConcurrentContentExtractor.test.ts +++ b/src/tests/crawlers/extractors/ConcurrentContentExtractor.test.ts @@ -1,4 +1,3 @@ -import type { Page } from "puppeteer"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { CrawledData, @@ -14,7 +13,6 @@ describe("ConcurrentContentExtractor", () => { let mockBrowserHandler: BrowserHandler; let mockExtractContentForSingleItem: ReturnType; let concurrentExtractor: ReturnType; - let mockPage: Page; let mockMetadataStore: MetadataStore; const mockConfig: SourceConfig = { @@ -68,19 +66,19 @@ describe("ConcurrentContentExtractor", () => { setupNewPage: mockNewPage, } as unknown as BrowserHandler; - mockPage = { - browser: () => mockBrowserHandler, - } as unknown as Page; - // Create mock metadata store mockMetadataStore = { getExistingUrls: vi.fn().mockReturnValue(new Set()), } as unknown as MetadataStore; // Create concurrent extractor with proper dependencies - concurrentExtractor = createConcurrentContentExtractor(mockBrowserHandler, { + const extractorDependencies = { extractContentForSingleItem: mockExtractContentForSingleItem, - }); + }; + concurrentExtractor = createConcurrentContentExtractor( + mockBrowserHandler, + extractorDependencies, + ); }); describe("extractConcurrently", () => { diff --git a/src/tests/crawlers/extractors/ContentPageExtractor.test.ts b/src/tests/crawlers/extractors/ContentPageExtractor.test.ts index 03fa655..941a3e6 100644 --- a/src/tests/crawlers/extractors/ContentPageExtractor.test.ts +++ b/src/tests/crawlers/extractors/ContentPageExtractor.test.ts @@ -457,7 +457,7 @@ describe("ContentPageExtractor", () => { it("should handle missing URL gracefully", async () => { const mockItem: CrawledData = { - url: undefined as any, // Intentionally missing URL + url: undefined as unknown as string, // Intentionally missing URL title: "Article 1", content: "Content 1", crawledAt: new Date(), diff --git a/src/tests/crawlers/extractors/ListingPageExtractor.test.ts b/src/tests/crawlers/extractors/ListingPageExtractor.test.ts index 65eb843..61c9f38 100644 --- a/src/tests/crawlers/extractors/ListingPageExtractor.test.ts +++ b/src/tests/crawlers/extractors/ListingPageExtractor.test.ts @@ -386,7 +386,7 @@ describe("ListingPageExtractor", () => { ...mockConfig, listing: { ...mockConfig.listing, - shouldExcludeItem: vi.fn().mockImplementation((html, values) => { + shouldExcludeItem: vi.fn().mockImplementation((_html, values) => { return values?.title === "Excluded Article"; }), }, diff --git a/src/tests/crawlers/handlers/BrowserHandler.test.ts b/src/tests/crawlers/handlers/BrowserHandler.test.ts index 36df6f5..c6243e9 100644 --- a/src/tests/crawlers/handlers/BrowserHandler.test.ts +++ b/src/tests/crawlers/handlers/BrowserHandler.test.ts @@ -75,7 +75,9 @@ describe("BrowserHandler", () => { it("should create a browser handler with correct methods", async () => { const mockBrowser = createMockBrowser(); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const handler = await createBrowserHandler(mockConfig); @@ -89,7 +91,9 @@ describe("BrowserHandler", () => { it("should launch browser with correct configuration", async () => { const mockBrowser = createMockBrowser(); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); await createBrowserHandler(mockConfig); @@ -104,7 +108,7 @@ describe("BrowserHandler", () => { const mockBrowser1 = createMockBrowser({ close: vi.fn() }); const mockBrowser2 = createMockBrowser(); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any) + (puppeteer.default.launch as unknown as ReturnType) .mockResolvedValueOnce(mockBrowser1) .mockResolvedValueOnce(mockBrowser2); @@ -127,7 +131,9 @@ describe("BrowserHandler", () => { newPage: vi.fn().mockResolvedValue(mockPage), }); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const handler = await createBrowserHandler(mockConfig); const page = await handler.setupNewPage(); @@ -149,7 +155,9 @@ describe("BrowserHandler", () => { newPage: vi.fn().mockResolvedValue(mockPage), }); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const configWithDisabledJS: SourceConfig = { ...mockConfig, @@ -170,9 +178,13 @@ describe("BrowserHandler", () => { newPage: vi.fn().mockResolvedValue(mockPage), }); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const mockAbsoluteUrl = "https://example.com/test-page"; - (urlUtils.resolveAbsoluteUrl as any).mockReturnValue(mockAbsoluteUrl); + ( + urlUtils.resolveAbsoluteUrl as unknown as ReturnType + ).mockReturnValue(mockAbsoluteUrl); const handler = await createBrowserHandler(mockConfig); const url = "/test-page"; @@ -194,16 +206,19 @@ describe("BrowserHandler", () => { newPage: vi.fn().mockResolvedValue(mockPage), }); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const handler = await createBrowserHandler(mockConfig); await handler.setupNewPage(); // Get the request event handler calls - const onCalls = (mockPage.on as any).mock.calls; - const requestEventHandler = onCalls.find( - (call: any) => call[0] === "request", - )[1]; + const onCalls = (mockPage.on as unknown as ReturnType).mock + .calls; + const requestEventHandler = onCalls?.find( + (call) => call[0] === "request", + )?.[1]; // Test aborting media requests const mockMediaRequest = { @@ -255,16 +270,17 @@ describe("BrowserHandler", () => { newPage: vi.fn().mockResolvedValue(mockPage), }); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const handler = await createBrowserHandler(mockConfig); await handler.setupNewPage(); // Get the error event handler calls - const onCalls = (mockPage.on as any).mock.calls; - const errorEventHandler = onCalls.find( - (call: any) => call[0] === "error", - )[1]; + const onCalls = (mockPage.on as unknown as ReturnType).mock + .calls; + const errorEventHandler = onCalls?.find((call) => call[0] === "error")?.[1]; // Test error handling const mockError = new Error("Test browser error"); @@ -283,9 +299,13 @@ describe("BrowserHandler", () => { }); const mockBrowser = createMockBrowser(); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const mockAbsoluteUrl = "https://example.com/test-page"; - (urlUtils.resolveAbsoluteUrl as any).mockReturnValue(mockAbsoluteUrl); + ( + urlUtils.resolveAbsoluteUrl as unknown as ReturnType + ).mockReturnValue(mockAbsoluteUrl); const handler = await createBrowserHandler(mockConfig); const url = "/test-page"; @@ -307,10 +327,12 @@ describe("BrowserHandler", () => { }); const mockBrowser = createMockBrowser(); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); - (urlUtils.resolveAbsoluteUrl as any).mockReturnValue( - "https://example.com/test-page", - ); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); + ( + urlUtils.resolveAbsoluteUrl as unknown as ReturnType + ).mockReturnValue("https://example.com/test-page"); const handler = await createBrowserHandler(mockConfig); const url = "/test-page"; @@ -322,7 +344,9 @@ describe("BrowserHandler", () => { it("should close the browser", async () => { const mockBrowser = createMockBrowser({ close: vi.fn() }); const puppeteer = await import("puppeteer"); - (puppeteer.default.launch as any).mockResolvedValue(mockBrowser); + ( + puppeteer.default.launch as unknown as ReturnType + ).mockResolvedValue(mockBrowser); const handler = await createBrowserHandler(mockConfig); await handler.close(); diff --git a/src/tests/crawlers/handlers/PaginationHandler.buttons.test.ts b/src/tests/crawlers/handlers/PaginationHandler.buttons.test.ts index 48dc004..f66377d 100644 --- a/src/tests/crawlers/handlers/PaginationHandler.buttons.test.ts +++ b/src/tests/crawlers/handlers/PaginationHandler.buttons.test.ts @@ -65,7 +65,7 @@ describe("PaginationHandler - Button Detection", () => { const mockButton = { click: vi.fn(), isVisible: true }; const mockPage = createMockPage({ $: vi.fn().mockResolvedValue(mockButton), - evaluate: vi.fn().mockImplementation((fn, selector) => { + evaluate: vi.fn().mockImplementation((_fn, selector) => { // Simulate the disabled detection logic if (selector === ".next-page") { return true; // Button is disabled @@ -88,7 +88,7 @@ describe("PaginationHandler - Button Detection", () => { // Test the evaluate function that checks for disabled states const mockPage = createMockPage({ $: vi.fn().mockResolvedValue(mockButton), - evaluate: vi.fn().mockImplementation((fn, selector) => { + evaluate: vi.fn().mockImplementation((_fn, selector) => { // Simulate the disabled detection logic // This should match the implementation in PaginationHandler.ts if (selector === ".next-page") { diff --git a/src/tests/crawlers/handlers/PaginationHandler.retry.test.ts b/src/tests/crawlers/handlers/PaginationHandler.retry.test.ts index 0359cb7..8657f0d 100644 --- a/src/tests/crawlers/handlers/PaginationHandler.retry.test.ts +++ b/src/tests/crawlers/handlers/PaginationHandler.retry.test.ts @@ -82,7 +82,7 @@ describe("PaginationHandler - Retry Logic", () => { }; // Track states for different attempts - let navigationAttempt = 0; + let _navigationAttempt = 0; let selectorAttempt = 0; let urlState = "https://example.com/page/1"; // Initial URL @@ -90,7 +90,7 @@ describe("PaginationHandler - Retry Logic", () => { $: vi.fn().mockResolvedValue(mockButton), evaluate: vi.fn().mockResolvedValue(false), // Button not disabled waitForNavigation: vi.fn().mockImplementation(() => { - navigationAttempt++; + _navigationAttempt++; // After navigation, URL should change urlState = "https://example.com/page/2"; return Promise.resolve(); diff --git a/src/tests/server/pagination.test.ts b/src/tests/server/pagination.test.ts index 78c2498..5be6b8d 100644 --- a/src/tests/server/pagination.test.ts +++ b/src/tests/server/pagination.test.ts @@ -4,7 +4,6 @@ import { getPaginationDefaults, parseQueryParams, validateLimit, - validatePage, } from "@/server/utils/pagination.js"; describe("Pagination Utils", () => { diff --git a/src/tests/server/publications.test.ts b/src/tests/server/publications.test.ts index 7710117..7f23109 100644 --- a/src/tests/server/publications.test.ts +++ b/src/tests/server/publications.test.ts @@ -1,3 +1,4 @@ +import type { Request, Response } from "express"; import { beforeEach, describe, expect, it, vi } from "vitest"; import { ApiError } from "@/server/middleware/error.js"; import { @@ -47,17 +48,19 @@ const mockContentStore = { }; describe("Content Handlers", () => { - let mockReq: any; - let mockRes: any; + let mockReq: Request; + let mockRes: Response; beforeEach(() => { mockReq = { query: {}, params: {}, - }; + } as unknown as Request; mockRes = { json: vi.fn(), - }; + status: vi.fn().mockReturnThis(), + send: vi.fn(), + } as unknown as Response; vi.clearAllMocks(); }); diff --git a/src/tests/ui/formatter.test.ts b/src/tests/ui/formatter.test.ts index aa7031f..dfbfcf4 100644 --- a/src/tests/ui/formatter.test.ts +++ b/src/tests/ui/formatter.test.ts @@ -1,5 +1,6 @@ import { describe, expect, it } from "vitest"; import type { CrawlSummary, ProcessedData, SourceConfig } from "@/core/types"; +import { CrawlerType } from "@/core/types"; import { displaySources, formatDataForViewing } from "@/ui/formatter"; describe("Data Formatter", () => { @@ -112,13 +113,11 @@ describe("displaySources", () => { { id: "source1", name: "Source One", - type: "listing", + type: CrawlerType.Listing, listing: { url: "https://example.com", - items: { - container_selector: ".item", - fields: {}, - }, + container_selector: ".item", + fields: {}, }, content: { container_selector: ".content", @@ -128,13 +127,11 @@ describe("displaySources", () => { { id: "source2", name: "Source Two", - type: "listing", + type: CrawlerType.Listing, listing: { url: "https://example.com", - items: { - container_selector: ".item", - fields: {}, - }, + container_selector: ".item", + fields: {}, }, content: { container_selector: ".content", @@ -144,13 +141,11 @@ describe("displaySources", () => { { id: "source3", name: "Source Three", - type: "listing", + type: CrawlerType.Listing, listing: { url: "https://example.com", - items: { - container_selector: ".item", - fields: {}, - }, + container_selector: ".item", + fields: {}, }, content: { container_selector: ".content", @@ -176,13 +171,11 @@ describe("displaySources", () => { { id: "single-source", name: "Single Source", - type: "listing", + type: CrawlerType.Listing, listing: { url: "https://example.com", - items: { - container_selector: ".item", - fields: {}, - }, + container_selector: ".item", + fields: {}, }, content: { container_selector: ".content", diff --git a/src/tests/utils/date.relative-dates.test.ts b/src/tests/utils/date.relative-dates.test.ts index 81ac470..1a4aaf4 100644 --- a/src/tests/utils/date.relative-dates.test.ts +++ b/src/tests/utils/date.relative-dates.test.ts @@ -11,7 +11,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to the current date (within a few seconds) const now = new Date(); @@ -27,7 +27,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to yesterday (within a few seconds) const yesterday = new Date(); @@ -44,7 +44,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to the current date (within a few seconds) const now = new Date(); @@ -60,7 +60,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to yesterday (within a few seconds) const yesterday = new Date(); @@ -77,7 +77,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to the current date (within a few seconds) const now = new Date(); @@ -93,7 +93,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to yesterday (within a few seconds) const yesterday = new Date(); @@ -110,7 +110,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to the current date (within a few seconds) const now = new Date(); @@ -126,7 +126,7 @@ describe("Date parsing utilities - Relative dates", () => { // Check that it's a valid date expect(resultDate).toBeInstanceOf(Date); - expect(isNaN(resultDate.getTime())).toBe(false); + expect(Number.isNaN(resultDate.getTime())).toBe(false); // Check that it's close to yesterday (within a few seconds) const yesterday = new Date();