diff --git a/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts b/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts index a58034355..2138c21a6 100644 --- a/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts +++ b/packages/algoliasearch/__tests__/algoliasearch.browser.test.ts @@ -1,10 +1,14 @@ -import { test, expect } from 'vitest'; +/* eslint no-console: 0 */ -import { algoliasearch, apiClientVersion } from '../builds/browser'; +import { vi, test, expect } from 'vitest'; -const client = algoliasearch('APP_ID', 'API_KEY'); +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch, apiClientVersion } from '../builds/browser'; test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); + expect(client.transporter.algoliaAgent).toEqual({ add: expect.any(Function), value: expect.stringContaining( @@ -12,3 +16,20 @@ test('sets the ua', () => { ), }); }); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.common.test.ts b/packages/algoliasearch/__tests__/algoliasearch.common.test.ts index 9b0e59df7..44b813c00 100644 --- a/packages/algoliasearch/__tests__/algoliasearch.common.test.ts +++ b/packages/algoliasearch/__tests__/algoliasearch.common.test.ts @@ -103,6 +103,11 @@ describe('api', () => { url: 'APP_ID-2.algolianet.com', }, ]), + logger: { + debug: expect.any(Function), + error: expect.any(Function), + info: expect.any(Function), + }, hostsCache: { clear: expect.any(Function), delete: expect.any(Function), diff --git a/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts b/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts index f729b9419..42336433b 100644 --- a/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts +++ b/packages/algoliasearch/__tests__/algoliasearch.fetch.test.ts @@ -1,10 +1,13 @@ -import { test, expect } from 'vitest'; +/* eslint no-console: 0 */ -import { algoliasearch, apiClientVersion } from '../builds/fetch'; +import { vi, test, expect } from 'vitest'; -const client = algoliasearch('APP_ID', 'API_KEY'); +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch, apiClientVersion } from '../builds/fetch'; test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); expect(client.transporter.algoliaAgent).toEqual({ add: expect.any(Function), value: expect.stringContaining(`Algolia for JavaScript (${apiClientVersion}); Search (${apiClientVersion}); Fetch`), @@ -12,6 +15,7 @@ test('sets the ua', () => { }); test('forwards node search helpers', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); expect(client.generateSecuredApiKey).not.toBeUndefined(); expect(client.getSecuredApiKeyRemainingValidity).not.toBeUndefined(); expect(() => { @@ -19,3 +23,20 @@ test('forwards node search helpers', () => { client.getSecuredApiKeyRemainingValidity({ securedApiKey: resp }); }).not.toThrow(); }); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/__tests__/algoliasearch.node.test.ts b/packages/algoliasearch/__tests__/algoliasearch.node.test.ts index 05532d839..0aa0ae8d1 100644 --- a/packages/algoliasearch/__tests__/algoliasearch.node.test.ts +++ b/packages/algoliasearch/__tests__/algoliasearch.node.test.ts @@ -1,10 +1,13 @@ -import { test, expect } from 'vitest'; +/* eslint no-console: 0 */ -import { algoliasearch, apiClientVersion } from '../builds/node'; +import { vi, test, expect } from 'vitest'; -const client = algoliasearch('APP_ID', 'API_KEY'); +import { LogLevelEnum } from '../../client-common/src/types'; +import { createConsoleLogger } from '../../logger-console/src/logger'; +import { algoliasearch, apiClientVersion } from '../builds/node'; test('sets the ua', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); expect(client.transporter.algoliaAgent).toEqual({ add: expect.any(Function), value: expect.stringContaining( @@ -14,6 +17,7 @@ test('sets the ua', () => { }); test('forwards node search helpers', () => { + const client = algoliasearch('APP_ID', 'API_KEY'); expect(client.generateSecuredApiKey).not.toBeUndefined(); expect(client.getSecuredApiKeyRemainingValidity).not.toBeUndefined(); expect(() => { @@ -21,3 +25,20 @@ test('forwards node search helpers', () => { client.getSecuredApiKeyRemainingValidity({ securedApiKey: resp }); }).not.toThrow(); }); + +test('with logger', () => { + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const client = algoliasearch('APP_ID', 'API_KEY', { + logger: createConsoleLogger(LogLevelEnum.Debug), + }); + + expect(async () => { + await client.setSettings({ indexName: 'foo', indexSettings: {} }); + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }).not.toThrow(); +}); diff --git a/packages/algoliasearch/lite/builds/browser.ts b/packages/algoliasearch/lite/builds/browser.ts index 4e97da690..fdaafd583 100644 --- a/packages/algoliasearch/lite/builds/browser.ts +++ b/packages/algoliasearch/lite/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -35,6 +36,7 @@ export function liteClient(appId: string, apiKey: string, options?: ClientOption read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/algoliasearch/lite/builds/node.ts b/packages/algoliasearch/lite/builds/node.ts index 4fe0c3f12..9e5a672a0 100644 --- a/packages/algoliasearch/lite/builds/node.ts +++ b/packages/algoliasearch/lite/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -34,6 +35,7 @@ export function liteClient(appId: string, apiKey: string, options?: ClientOption read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/client-abtesting/builds/browser.ts b/packages/client-abtesting/builds/browser.ts index 5f56756ac..47d47df6c 100644 --- a/packages/client-abtesting/builds/browser.ts +++ b/packages/client-abtesting/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -46,6 +47,7 @@ export function abtestingClient( read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/client-abtesting/builds/fetch.ts b/packages/client-abtesting/builds/fetch.ts index df785d0ea..371d3e928 100644 --- a/packages/client-abtesting/builds/fetch.ts +++ b/packages/client-abtesting/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function abtestingClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/client-abtesting/builds/node.ts b/packages/client-abtesting/builds/node.ts index 44e7253c5..f06bd217e 100644 --- a/packages/client-abtesting/builds/node.ts +++ b/packages/client-abtesting/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function abtestingClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/client-abtesting/src/abtestingClient.ts b/packages/client-abtesting/src/abtestingClient.ts index 6525a71e9..2700180af 100644 --- a/packages/client-abtesting/src/abtestingClient.ts +++ b/packages/client-abtesting/src/abtestingClient.ts @@ -351,14 +351,13 @@ export function createAbtestingClient({ const requestPath = '/2/abtests'; const headers: Headers = {}; const queryParameters: QueryParameters = {}; - if (offset !== undefined) { queryParameters.offset = offset.toString(); } + if (limit !== undefined) { queryParameters.limit = limit.toString(); } - if (indexPrefix !== undefined) { queryParameters.indexPrefix = indexPrefix.toString(); } diff --git a/packages/client-analytics/builds/browser.ts b/packages/client-analytics/builds/browser.ts index 9d2218e5e..d69cd0640 100644 --- a/packages/client-analytics/builds/browser.ts +++ b/packages/client-analytics/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -46,6 +47,7 @@ export function analyticsClient( read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/client-analytics/builds/fetch.ts b/packages/client-analytics/builds/fetch.ts index d76478589..4d6749ee5 100644 --- a/packages/client-analytics/builds/fetch.ts +++ b/packages/client-analytics/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function analyticsClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/client-analytics/builds/node.ts b/packages/client-analytics/builds/node.ts index 2a09abb42..17a8abc44 100644 --- a/packages/client-analytics/builds/node.ts +++ b/packages/client-analytics/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function analyticsClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/client-analytics/src/analyticsClient.ts b/packages/client-analytics/src/analyticsClient.ts index 70074c55a..e11822e20 100644 --- a/packages/client-analytics/src/analyticsClient.ts +++ b/packages/client-analytics/src/analyticsClient.ts @@ -339,9 +339,11 @@ export function createAnalyticsClient({ if (index !== undefined) { queryParameters.index = index.toString(); } + if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } + if (endDate !== undefined) { queryParameters.endDate = endDate.toString(); } @@ -392,6 +394,7 @@ export function createAnalyticsClient({ if (endDate !== undefined) { queryParameters.endDate = endDate.toString(); } + if (tags !== undefined) { queryParameters.tags = tags.toString(); } @@ -430,6 +433,7 @@ export function createAnalyticsClient({ const requestPath = '/2/clicks/clickThroughRate'; const headers: Headers = {}; const queryParameters: QueryParameters = {}; + if (index !== undefined) { queryParameters.index = index.toString(); } @@ -531,7 +535,6 @@ export function createAnalyticsClient({ if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } - if (endDate !== undefined) { queryParameters.endDate = endDate.toString(); } @@ -583,7 +586,6 @@ export function createAnalyticsClient({ if (endDate !== undefined) { queryParameters.endDate = endDate.toString(); } - if (tags !== undefined) { queryParameters.tags = tags.toString(); } @@ -622,10 +624,10 @@ export function createAnalyticsClient({ const requestPath = '/2/conversions/purchaseRate'; const headers: Headers = {}; const queryParameters: QueryParameters = {}; - if (index !== undefined) { queryParameters.index = index.toString(); } + if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } @@ -673,7 +675,6 @@ export function createAnalyticsClient({ if (index !== undefined) { queryParameters.index = index.toString(); } - if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } @@ -725,7 +726,6 @@ export function createAnalyticsClient({ if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } - if (endDate !== undefined) { queryParameters.endDate = endDate.toString(); } diff --git a/packages/client-common/index.ts b/packages/client-common/index.ts index f4de2e466..b31869ed2 100644 --- a/packages/client-common/index.ts +++ b/packages/client-common/index.ts @@ -1,8 +1,9 @@ -export * from './src/createAuth'; -export * from './src/createIterablePromise'; export * from './src/cache'; -export * from './src/transporter'; +export * from './src/constants'; export * from './src/createAlgoliaAgent'; +export * from './src/createAuth'; +export * from './src/createIterablePromise'; export * from './src/getAlgoliaAgent'; +export * from './src/logger'; +export * from './src/transporter'; export * from './src/types'; -export * from './src/constants'; diff --git a/packages/client-common/src/__tests__/logger/null-logger.test.ts b/packages/client-common/src/__tests__/logger/null-logger.test.ts new file mode 100644 index 000000000..072469dab --- /dev/null +++ b/packages/client-common/src/__tests__/logger/null-logger.test.ts @@ -0,0 +1,24 @@ +/* eslint no-console: 0 */ + +import { vi, describe, test, expect } from 'vitest'; + +import { createNullLogger } from '../../logger'; + +describe('null logger', () => { + test('has a null behavior', async () => { + vi.resetAllMocks(); + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + + const logger = createNullLogger(); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(0); + expect(console.info).toHaveBeenCalledTimes(0); + expect(console.error).toHaveBeenCalledTimes(0); + }); +}); diff --git a/packages/client-common/src/logger/createNullLogger.ts b/packages/client-common/src/logger/createNullLogger.ts new file mode 100644 index 000000000..68c5f3d76 --- /dev/null +++ b/packages/client-common/src/logger/createNullLogger.ts @@ -0,0 +1,15 @@ +import type { Logger } from '../types/logger'; + +export function createNullLogger(): Logger { + return { + debug(_message: string, _args?: any): Promise { + return Promise.resolve(); + }, + info(_message: string, _args?: any): Promise { + return Promise.resolve(); + }, + error(_message: string, _args?: any): Promise { + return Promise.resolve(); + }, + }; +} diff --git a/packages/client-common/src/logger/index.ts b/packages/client-common/src/logger/index.ts new file mode 100644 index 000000000..d0926d332 --- /dev/null +++ b/packages/client-common/src/logger/index.ts @@ -0,0 +1 @@ +export * from './createNullLogger'; diff --git a/packages/client-common/src/transporter/createTransporter.ts b/packages/client-common/src/transporter/createTransporter.ts index 1c4d6db28..9c163e8ab 100644 --- a/packages/client-common/src/transporter/createTransporter.ts +++ b/packages/client-common/src/transporter/createTransporter.ts @@ -25,6 +25,7 @@ export function createTransporter({ hosts, hostsCache, baseHeaders, + logger, baseQueryParameters, algoliaAgent, timeouts, @@ -174,8 +175,7 @@ export function createTransporter({ * the end user to debug / store stack frames even * when a retry error does not happen. */ - // eslint-disable-next-line no-console -- this will be fixed by exposing a `logger` to the transporter - console.log('Retryable failure', stackFrameWithoutCredentials(stackFrame)); + logger.info('Retryable failure', stackFrameWithoutCredentials(stackFrame)); /** * We also store the state of the host in failure cases. If the host, is @@ -304,6 +304,7 @@ export function createTransporter({ hostsCache, requester, timeouts, + logger, algoliaAgent, baseHeaders, baseQueryParameters, diff --git a/packages/client-common/src/types/index.ts b/packages/client-common/src/types/index.ts index f298482f4..8873a101c 100644 --- a/packages/client-common/src/types/index.ts +++ b/packages/client-common/src/types/index.ts @@ -2,5 +2,6 @@ export * from './cache'; export * from './createClient'; export * from './createIterablePromise'; export * from './host'; +export * from './logger'; export * from './requester'; export * from './transporter'; diff --git a/packages/client-common/src/types/logger.ts b/packages/client-common/src/types/logger.ts new file mode 100644 index 000000000..77e866392 --- /dev/null +++ b/packages/client-common/src/types/logger.ts @@ -0,0 +1,24 @@ +export const LogLevelEnum: Readonly> = { + Debug: 1, + Info: 2, + Error: 3, +}; + +export type LogLevelType = 1 | 2 | 3; + +export type Logger = { + /** + * Logs debug messages. + */ + debug: (message: string, args?: any) => Promise; + + /** + * Logs info messages. + */ + info: (message: string, args?: any) => Promise; + + /** + * Logs error messages. + */ + error: (message: string, args?: any) => Promise; +}; diff --git a/packages/client-common/src/types/transporter.ts b/packages/client-common/src/types/transporter.ts index 85fd06ac5..f7a09efe8 100644 --- a/packages/client-common/src/types/transporter.ts +++ b/packages/client-common/src/types/transporter.ts @@ -1,5 +1,6 @@ import type { Cache } from './cache'; import type { Host } from './host'; +import type { Logger } from './logger'; import type { Request, Requester, EndRequest, Response } from './requester'; export type Headers = Record; @@ -87,6 +88,11 @@ export type TransporterOptions = { */ hostsCache: Cache; + /** + * The logger instance to send events of the transporter. + */ + logger: Logger; + /** * The underlying requester used. Should differ * depending of the environment where the client diff --git a/packages/client-common/vitest.workspace.ts b/packages/client-common/vitest.workspace.ts index 6dd88d6b8..f77957ae9 100644 --- a/packages/client-common/vitest.workspace.ts +++ b/packages/client-common/vitest.workspace.ts @@ -8,6 +8,7 @@ export default defineWorkspace([ 'src/__tests__/cache/null-cache.test.ts', 'src/__tests__/cache/memory-cache.test.ts', 'src/__tests__/create-iterable-promise.test.ts', + 'src/__tests__/logger/null-logger.test.ts', ], name: 'node', environment: 'node', @@ -20,6 +21,7 @@ export default defineWorkspace([ 'src/__tests__/cache/fallbackable-cache.test.ts', 'src/__tests__/cache/null-cache.test.ts', 'src/__tests__/create-iterable-promise.test.ts', + 'src/__tests__/logger/null-logger.test.ts', ], name: 'jsdom', environment: 'jsdom', diff --git a/packages/client-insights/builds/browser.ts b/packages/client-insights/builds/browser.ts index 3a73accbb..63f7c0d0e 100644 --- a/packages/client-insights/builds/browser.ts +++ b/packages/client-insights/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -46,6 +47,7 @@ export function insightsClient( read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/client-insights/builds/fetch.ts b/packages/client-insights/builds/fetch.ts index 1f02e5264..17c54a883 100644 --- a/packages/client-insights/builds/fetch.ts +++ b/packages/client-insights/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function insightsClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/client-insights/builds/node.ts b/packages/client-insights/builds/node.ts index 23acbbbec..0b06b86b2 100644 --- a/packages/client-insights/builds/node.ts +++ b/packages/client-insights/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function insightsClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/client-personalization/builds/browser.ts b/packages/client-personalization/builds/browser.ts index 5d0535fbd..2f0ff9db2 100644 --- a/packages/client-personalization/builds/browser.ts +++ b/packages/client-personalization/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -46,6 +47,7 @@ export function personalizationClient( read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/client-personalization/builds/fetch.ts b/packages/client-personalization/builds/fetch.ts index 89dc9de55..785937597 100644 --- a/packages/client-personalization/builds/fetch.ts +++ b/packages/client-personalization/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function personalizationClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/client-personalization/builds/node.ts b/packages/client-personalization/builds/node.ts index f6498a447..6572c9be6 100644 --- a/packages/client-personalization/builds/node.ts +++ b/packages/client-personalization/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function personalizationClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/client-query-suggestions/builds/browser.ts b/packages/client-query-suggestions/builds/browser.ts index ec264e0a3..36314777b 100644 --- a/packages/client-query-suggestions/builds/browser.ts +++ b/packages/client-query-suggestions/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -46,6 +47,7 @@ export function querySuggestionsClient( read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/client-query-suggestions/builds/fetch.ts b/packages/client-query-suggestions/builds/fetch.ts index 4fa00deb1..123713db2 100644 --- a/packages/client-query-suggestions/builds/fetch.ts +++ b/packages/client-query-suggestions/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function querySuggestionsClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/client-query-suggestions/builds/node.ts b/packages/client-query-suggestions/builds/node.ts index efcefbd23..73718e8d3 100644 --- a/packages/client-query-suggestions/builds/node.ts +++ b/packages/client-query-suggestions/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -46,6 +47,7 @@ export function querySuggestionsClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/client-search/builds/browser.ts b/packages/client-search/builds/browser.ts index b9cb8f887..b46fa31d7 100644 --- a/packages/client-search/builds/browser.ts +++ b/packages/client-search/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -35,6 +36,7 @@ export function searchClient(appId: string, apiKey: string, options?: ClientOpti read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/client-search/builds/fetch.ts b/packages/client-search/builds/fetch.ts index 1fb9acb5d..b3babdcd9 100644 --- a/packages/client-search/builds/fetch.ts +++ b/packages/client-search/builds/fetch.ts @@ -4,6 +4,7 @@ import { createHmac } from 'node:crypto'; import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, serializeQueryParameters, @@ -43,6 +44,7 @@ export function searchClient(appId: string, apiKey: string, options?: ClientOpti read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/client-search/builds/node.ts b/packages/client-search/builds/node.ts index 9362dd187..04598988b 100644 --- a/packages/client-search/builds/node.ts +++ b/packages/client-search/builds/node.ts @@ -4,6 +4,7 @@ import { createHmac } from 'node:crypto'; import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, serializeQueryParameters, @@ -43,6 +44,7 @@ export function searchClient(appId: string, apiKey: string, options?: ClientOpti read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/ingestion/builds/browser.ts b/packages/ingestion/builds/browser.ts index 5a0f5e685..5e923d2d7 100644 --- a/packages/ingestion/builds/browser.ts +++ b/packages/ingestion/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -52,6 +53,7 @@ export function ingestionClient( read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/ingestion/builds/fetch.ts b/packages/ingestion/builds/fetch.ts index d682af64a..6ae8cb88f 100644 --- a/packages/ingestion/builds/fetch.ts +++ b/packages/ingestion/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -52,6 +53,7 @@ export function ingestionClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/ingestion/builds/node.ts b/packages/ingestion/builds/node.ts index f11600894..def35574f 100644 --- a/packages/ingestion/builds/node.ts +++ b/packages/ingestion/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -52,6 +53,7 @@ export function ingestionClient( read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/ingestion/src/ingestionClient.ts b/packages/ingestion/src/ingestionClient.ts index 81f81ee41..89b0b0684 100644 --- a/packages/ingestion/src/ingestionClient.ts +++ b/packages/ingestion/src/ingestionClient.ts @@ -1185,6 +1185,7 @@ export function createIngestionClient({ const requestPath = '/1/authentications'; const headers: Headers = {}; const queryParameters: QueryParameters = {}; + if (itemsPerPage !== undefined) { queryParameters.itemsPerPage = itemsPerPage.toString(); } @@ -1254,7 +1255,6 @@ export function createIngestionClient({ if (sort !== undefined) { queryParameters.sort = sort.toString(); } - if (order !== undefined) { queryParameters.order = order.toString(); } @@ -1300,10 +1300,10 @@ export function createIngestionClient({ const requestPath = '/1/runs/{runID}/events'.replace('{runID}', encodeURIComponent(runID)); const headers: Headers = {}; const queryParameters: QueryParameters = {}; - if (itemsPerPage !== undefined) { queryParameters.itemsPerPage = itemsPerPage.toString(); } + if (page !== undefined) { queryParameters.page = page.toString(); } @@ -1322,7 +1322,6 @@ export function createIngestionClient({ if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } - if (endDate !== undefined) { queryParameters.endDate = endDate.toString(); } @@ -1380,14 +1379,13 @@ export function createIngestionClient({ if (taskID !== undefined) { queryParameters.taskID = taskID.toString(); } - if (sort !== undefined) { queryParameters.sort = sort.toString(); } + if (order !== undefined) { queryParameters.order = order.toString(); } - if (startDate !== undefined) { queryParameters.startDate = startDate.toString(); } @@ -1432,14 +1430,13 @@ export function createIngestionClient({ if (itemsPerPage !== undefined) { queryParameters.itemsPerPage = itemsPerPage.toString(); } - if (page !== undefined) { queryParameters.page = page.toString(); } + if (type !== undefined) { queryParameters.type = type.toString(); } - if (authenticationID !== undefined) { queryParameters.authenticationID = authenticationID.toString(); } @@ -1493,14 +1490,13 @@ export function createIngestionClient({ if (page !== undefined) { queryParameters.page = page.toString(); } - if (action !== undefined) { queryParameters.action = action.toString(); } + if (enabled !== undefined) { queryParameters.enabled = enabled.toString(); } - if (sourceID !== undefined) { queryParameters.sourceID = sourceID.toString(); } @@ -1554,6 +1550,7 @@ export function createIngestionClient({ const requestPath = '/1/tasks'; const headers: Headers = {}; const queryParameters: QueryParameters = {}; + if (itemsPerPage !== undefined) { queryParameters.itemsPerPage = itemsPerPage.toString(); } @@ -1576,10 +1573,10 @@ export function createIngestionClient({ if (triggerType !== undefined) { queryParameters.triggerType = triggerType.toString(); } - if (sort !== undefined) { queryParameters.sort = sort.toString(); } + if (order !== undefined) { queryParameters.order = order.toString(); } diff --git a/packages/logger-console/index.ts b/packages/logger-console/index.ts new file mode 100644 index 000000000..054acc918 --- /dev/null +++ b/packages/logger-console/index.ts @@ -0,0 +1 @@ +export * from './src/logger'; diff --git a/packages/logger-console/package.json b/packages/logger-console/package.json new file mode 100644 index 000000000..31ac484e0 --- /dev/null +++ b/packages/logger-console/package.json @@ -0,0 +1,52 @@ +{ + "name": "@algolia/logger-console", + "version": "5.5.3", + "description": "Promise-based log library using console log.", + "repository": { + "type": "git", + "url": "git://github.com/algolia/algoliasearch-client-javascript.git" + }, + "license": "MIT", + "author": "Algolia", + "type": "module", + "files": [ + "dist", + "src", + "index.ts" + ], + "exports": { + ".": { + "types": { + "import": "./dist/logger.d.ts", + "module": "./dist/logger.d.ts", + "require": "./dist/logger.d.cts" + }, + "import": "./dist/logger.js", + "module": "./dist/logger.js", + "require": "./dist/logger.cjs" + }, + "./src/*": "./src/*.ts" + }, + "scripts": { + "build": "yarn clean && yarn tsup", + "clean": "rm -rf ./dist || true", + "test": "vitest --run", + "test:bundle": "publint . && attw --pack ." + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.16.4", + "@types/node": "22.5.5", + "jsdom": "25.0.0", + "publint": "0.2.11", + "ts-node": "10.9.2", + "tsup": "8.3.0", + "typescript": "5.6.2", + "vitest": "2.1.1" + }, + "dependencies": { + "@algolia/client-common": "5.5.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/packages/logger-console/src/__tests__/logger-console.test.ts b/packages/logger-console/src/__tests__/logger-console.test.ts new file mode 100644 index 000000000..37b8a3ce8 --- /dev/null +++ b/packages/logger-console/src/__tests__/logger-console.test.ts @@ -0,0 +1,51 @@ +/* eslint no-console: 0 */ + +import { LogLevelEnum } from '@algolia/client-common'; +import { vi, beforeEach, describe, test, expect } from 'vitest'; + +import { createConsoleLogger } from '../logger'; + +describe('console logger', () => { + beforeEach(() => { + vi.resetAllMocks(); + vi.spyOn(console, 'debug'); + vi.spyOn(console, 'info'); + vi.spyOn(console, 'error'); + }); + + test('respects log level type debug', async () => { + const logger = createConsoleLogger(LogLevelEnum.Debug); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(1); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }); + + test('respects log level type info', async () => { + const logger = createConsoleLogger(LogLevelEnum.Info); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(0); + expect(console.info).toHaveBeenCalledTimes(1); + expect(console.error).toHaveBeenCalledTimes(1); + }); + + test('respects log level type error', async () => { + const logger = createConsoleLogger(LogLevelEnum.Error); + + await logger.debug('foo', {}); + await logger.info('foo', {}); + await logger.error('foo', {}); + + expect(console.debug).toHaveBeenCalledTimes(0); + expect(console.info).toHaveBeenCalledTimes(0); + expect(console.error).toHaveBeenCalledTimes(1); + }); +}); diff --git a/packages/logger-console/src/logger.ts b/packages/logger-console/src/logger.ts new file mode 100644 index 000000000..3f7cce28b --- /dev/null +++ b/packages/logger-console/src/logger.ts @@ -0,0 +1,30 @@ +/* eslint no-console: 0 */ + +import type { Logger, LogLevelType } from '@algolia/client-common'; +import { LogLevelEnum } from '@algolia/client-common'; + +export function createConsoleLogger(logLevel: LogLevelType): Logger { + return { + debug(message: string, args?: any): Readonly> { + if (LogLevelEnum.Debug >= logLevel) { + console.debug(message, args); + } + + return Promise.resolve(); + }, + + info(message: string, args?: any): Readonly> { + if (LogLevelEnum.Info >= logLevel) { + console.info(message, args); + } + + return Promise.resolve(); + }, + + error(message: string, args?: any): Readonly> { + console.error(message, args); + + return Promise.resolve(); + }, + }; +} diff --git a/packages/logger-console/tsconfig.json b/packages/logger-console/tsconfig.json new file mode 100644 index 000000000..ff374efa6 --- /dev/null +++ b/packages/logger-console/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node", "vitest/globals"], + "outDir": "dist" + }, + "include": ["src", "index.ts"], + "exclude": ["dist", "node_modules", "src/__tests__"] +} diff --git a/packages/logger-console/tsup.config.ts b/packages/logger-console/tsup.config.ts new file mode 100644 index 000000000..4e8487019 --- /dev/null +++ b/packages/logger-console/tsup.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from 'tsup'; + +import { getBaseNodeOptions } from '../../base.tsup.config'; + +import pkg from './package.json' with { type: 'json' }; + +export default defineConfig([ + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'cjs', + dts: { entry: { logger: 'index.ts' } }, + entry: { logger: 'index.ts' }, + }, + { + ...getBaseNodeOptions(pkg, __dirname), + format: 'esm', + dts: { entry: { logger: 'index.ts' } }, + entry: { logger: 'index.ts' }, + }, +]); diff --git a/packages/logger-console/vitest.workspace.ts b/packages/logger-console/vitest.workspace.ts new file mode 100644 index 000000000..97c6c5d18 --- /dev/null +++ b/packages/logger-console/vitest.workspace.ts @@ -0,0 +1,19 @@ +// eslint-disable-next-line import/no-unresolved +import { defineWorkspace } from 'vitest/config'; + +export default defineWorkspace([ + { + test: { + include: ['src/__tests__/logger-console.test.ts'], + name: 'node', + environment: 'node', + }, + }, + { + test: { + include: ['src/__tests__/logger-console.test.ts'], + name: 'jsdom', + environment: 'jsdom', + }, + }, +]); diff --git a/packages/monitoring/builds/browser.ts b/packages/monitoring/builds/browser.ts index 99197be7e..8b83fbf3d 100644 --- a/packages/monitoring/builds/browser.ts +++ b/packages/monitoring/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -35,6 +36,7 @@ export function monitoringClient(appId: string, apiKey: string, options?: Client read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/monitoring/builds/fetch.ts b/packages/monitoring/builds/fetch.ts index e655bd75c..d9992f97a 100644 --- a/packages/monitoring/builds/fetch.ts +++ b/packages/monitoring/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -35,6 +36,7 @@ export function monitoringClient(appId: string, apiKey: string, options?: Client read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/monitoring/builds/node.ts b/packages/monitoring/builds/node.ts index 6b27f4c47..5cb2581b0 100644 --- a/packages/monitoring/builds/node.ts +++ b/packages/monitoring/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -35,6 +36,7 @@ export function monitoringClient(appId: string, apiKey: string, options?: Client read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/packages/recommend/builds/browser.ts b/packages/recommend/builds/browser.ts index 346814107..45494f303 100644 --- a/packages/recommend/builds/browser.ts +++ b/packages/recommend/builds/browser.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createFallbackableCache, createBrowserLocalStorageCache, @@ -35,6 +36,7 @@ export function recommendClient(appId: string, apiKey: string, options?: ClientO read: DEFAULT_READ_TIMEOUT_BROWSER, write: DEFAULT_WRITE_TIMEOUT_BROWSER, }, + logger: createNullLogger(), requester: createXhrRequester(), algoliaAgents: [{ segment: 'Browser' }], authMode: 'WithinQueryParameters', diff --git a/packages/recommend/builds/fetch.ts b/packages/recommend/builds/fetch.ts index c2d9ea132..4d8a359f2 100644 --- a/packages/recommend/builds/fetch.ts +++ b/packages/recommend/builds/fetch.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -35,6 +36,7 @@ export function recommendClient(appId: string, apiKey: string, options?: ClientO read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), algoliaAgents: [{ segment: 'Fetch' }], requester: createFetchRequester(), responsesCache: createNullCache(), diff --git a/packages/recommend/builds/node.ts b/packages/recommend/builds/node.ts index 725216a7f..89362a6df 100644 --- a/packages/recommend/builds/node.ts +++ b/packages/recommend/builds/node.ts @@ -2,6 +2,7 @@ import type { ClientOptions } from '@algolia/client-common'; import { + createNullLogger, createMemoryCache, createNullCache, DEFAULT_CONNECT_TIMEOUT_NODE, @@ -35,6 +36,7 @@ export function recommendClient(appId: string, apiKey: string, options?: ClientO read: DEFAULT_READ_TIMEOUT_NODE, write: DEFAULT_WRITE_TIMEOUT_NODE, }, + logger: createNullLogger(), requester: createHttpRequester(), algoliaAgents: [{ segment: 'Node.js', version: process.versions.node }], responsesCache: createNullCache(), diff --git a/yarn.lock b/yarn.lock index 7e8230409..8cd2fa90b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -139,6 +139,22 @@ __metadata: languageName: unknown linkType: soft +"@algolia/logger-console@workspace:packages/logger-console": + version: 0.0.0-use.local + resolution: "@algolia/logger-console@workspace:packages/logger-console" + dependencies: + "@algolia/client-common": "npm:5.5.3" + "@arethetypeswrong/cli": "npm:0.16.4" + "@types/node": "npm:22.5.5" + jsdom: "npm:25.0.0" + publint: "npm:0.2.11" + ts-node: "npm:10.9.2" + tsup: "npm:8.3.0" + typescript: "npm:5.6.2" + vitest: "npm:2.1.1" + languageName: unknown + linkType: soft + "@algolia/monitoring@workspace:packages/monitoring": version: 0.0.0-use.local resolution: "@algolia/monitoring@workspace:packages/monitoring" @@ -3220,7 +3236,7 @@ __metadata: languageName: node linkType: hard -"cssstyle@npm:^4.1.0": +"cssstyle@npm:^4.0.1, cssstyle@npm:^4.1.0": version: 4.1.0 resolution: "cssstyle@npm:4.1.0" dependencies: @@ -5094,6 +5110,40 @@ __metadata: languageName: node linkType: hard +"jsdom@npm:25.0.0": + version: 25.0.0 + resolution: "jsdom@npm:25.0.0" + dependencies: + cssstyle: "npm:^4.0.1" + data-urls: "npm:^5.0.0" + decimal.js: "npm:^10.4.3" + form-data: "npm:^4.0.0" + html-encoding-sniffer: "npm:^4.0.0" + http-proxy-agent: "npm:^7.0.2" + https-proxy-agent: "npm:^7.0.5" + is-potential-custom-element-name: "npm:^1.0.1" + nwsapi: "npm:^2.2.12" + parse5: "npm:^7.1.2" + rrweb-cssom: "npm:^0.7.1" + saxes: "npm:^6.0.0" + symbol-tree: "npm:^3.2.4" + tough-cookie: "npm:^4.1.4" + w3c-xmlserializer: "npm:^5.0.0" + webidl-conversions: "npm:^7.0.0" + whatwg-encoding: "npm:^3.1.1" + whatwg-mimetype: "npm:^4.0.0" + whatwg-url: "npm:^14.0.0" + ws: "npm:^8.18.0" + xml-name-validator: "npm:^5.0.0" + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + checksum: 10/f07271fe3922458885540b4dd9fb6170a11059f3128ec3cec2688c5c10fde5ca2e8ddcc207fff540e21dfaf592fae6a791c3359038ba4d116250dd3258fbd8cb + languageName: node + linkType: hard + "jsdom@npm:25.0.1": version: 25.0.1 resolution: "jsdom@npm:25.0.1" @@ -7033,6 +7083,13 @@ __metadata: languageName: node linkType: hard +"psl@npm:^1.1.33": + version: 1.9.0 + resolution: "psl@npm:1.9.0" + checksum: 10/d07879d4bfd0ac74796306a8e5a36a93cfb9c4f4e8ee8e63fbb909066c192fe1008cd8f12abd8ba2f62ca28247949a20c8fb32e1d18831d9e71285a1569720f9 + languageName: node + linkType: hard + "publint@npm:0.2.11": version: 0.2.11 resolution: "publint@npm:0.2.11" @@ -7063,7 +7120,7 @@ __metadata: languageName: node linkType: hard -"punycode@npm:^2.1.0, punycode@npm:^2.3.1": +"punycode@npm:^2.1.0, punycode@npm:^2.1.1, punycode@npm:^2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10/febdc4362bead22f9e2608ff0171713230b57aff9dddc1c273aa2a651fbd366f94b7d6a71d78342a7c0819906750351ca7f2edd26ea41b626d87d6a13d1bd059 @@ -7079,6 +7136,13 @@ __metadata: languageName: node linkType: hard +"querystringify@npm:^2.1.1": + version: 2.2.0 + resolution: "querystringify@npm:2.2.0" + checksum: 10/46ab16f252fd892fc29d6af60966d338cdfeea68a231e9457631ffd22d67cec1e00141e0a5236a2eb16c0d7d74175d9ec1d6f963660c6f2b1c2fc85b194c5680 + languageName: node + linkType: hard + "queue-microtask@npm:^1.2.2": version: 1.2.3 resolution: "queue-microtask@npm:1.2.3" @@ -7236,6 +7300,13 @@ __metadata: languageName: node linkType: hard +"requires-port@npm:^1.0.0": + version: 1.0.0 + resolution: "requires-port@npm:1.0.0" + checksum: 10/878880ee78ccdce372784f62f52a272048e2d0827c29ae31e7f99da18b62a2b9463ea03a75f277352f4697c100183debb0532371ad515a2d49d4bfe596dd4c20 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -8219,6 +8290,18 @@ __metadata: languageName: node linkType: hard +"tough-cookie@npm:^4.1.4": + version: 4.1.4 + resolution: "tough-cookie@npm:4.1.4" + dependencies: + psl: "npm:^1.1.33" + punycode: "npm:^2.1.1" + universalify: "npm:^0.2.0" + url-parse: "npm:^1.5.3" + checksum: 10/75663f4e2cd085f16af0b217e4218772adf0617fb3227171102618a54ce0187a164e505d61f773ed7d65988f8ff8a8f935d381f87da981752c1171b076b4afac + languageName: node + linkType: hard + "tough-cookie@npm:^5.0.0": version: 5.0.0 resolution: "tough-cookie@npm:5.0.0" @@ -8555,6 +8638,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.2.0": + version: 0.2.0 + resolution: "universalify@npm:0.2.0" + checksum: 10/e86134cb12919d177c2353196a4cc09981524ee87abf621f7bc8d249dbbbebaec5e7d1314b96061497981350df786e4c5128dbf442eba104d6e765bc260678b5 + languageName: node + linkType: hard + "universalify@npm:^2.0.0": version: 2.0.1 resolution: "universalify@npm:2.0.1" @@ -8569,6 +8659,16 @@ __metadata: languageName: node linkType: hard +"url-parse@npm:^1.5.3": + version: 1.5.10 + resolution: "url-parse@npm:1.5.10" + dependencies: + querystringify: "npm:^2.1.1" + requires-port: "npm:^1.0.0" + checksum: 10/c9e96bc8c5b34e9f05ddfeffc12f6aadecbb0d971b3cc26015b58d5b44676a99f50d5aeb1e5c9e61fa4d49961ae3ab1ae997369ed44da51b2f5ac010d188e6ad + languageName: node + linkType: hard + "url@npm:^0.11.0": version: 0.11.4 resolution: "url@npm:0.11.4"