diff --git a/clients/algoliasearch-client-javascript/package.json b/clients/algoliasearch-client-javascript/package.json index 6f7769164c3..53a3740c0b9 100644 --- a/clients/algoliasearch-client-javascript/package.json +++ b/clients/algoliasearch-client-javascript/package.json @@ -7,7 +7,7 @@ "packages/*" ], "scripts": { - "build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --scope '@algolia/advanced-personalization' --include-dependencies ", + "build": "lerna run build --skip-nx-cache --scope '@algolia/requester-testing' --scope '@algolia/logger-console' --scope 'algoliasearch' --scope '@algolia/client-composition' --scope '@algolia/composition' --scope '@algolia/advanced-personalization' --scope '@algolia/abtesting' --include-dependencies ", "clean": "lerna run clean", "release:publish": "tsc --project scripts/tsconfig.json && node scripts/dist/publish.js", "test": "lerna run test $*", diff --git a/clients/algoliasearch-client-javascript/packages/abtesting/package.json b/clients/algoliasearch-client-javascript/packages/abtesting/package.json new file mode 100644 index 00000000000..b59120c087a --- /dev/null +++ b/clients/algoliasearch-client-javascript/packages/abtesting/package.json @@ -0,0 +1,68 @@ +{ + "version": "0.0.1-alpha.1", + "repository": { + "type": "git", + "url": "git+https://github.com/algolia/algoliasearch-client-javascript.git" + }, + "homepage": "https://github.com/algolia/algoliasearch-client-javascript/packages/abtesting#readme", + "type": "module", + "license": "MIT", + "author": "Algolia", + "scripts": { + "build": "yarn clean && yarn tsup && yarn rollup -c rollup.config.js", + "clean": "rm -rf ./dist || true", + "test:bundle": "publint . && attw --pack ." + }, + "name": "@algolia/abtesting", + "description": "JavaScript client for abtesting", + "exports": { + ".": { + "node": { + "types": { + "import": "./dist/node.d.ts", + "module": "./dist/node.d.ts", + "require": "./dist/node.d.cts" + }, + "import": "./dist/builds/node.js", + "module": "./dist/builds/node.js", + "require": "./dist/builds/node.cjs" + }, + "worker": { + "types": "./dist/worker.d.ts", + "default": "./dist/builds/worker.js" + }, + "default": { + "types": "./dist/browser.d.ts", + "module": "./dist/builds/browser.js", + "import": "./dist/builds/browser.js", + "default": "./dist/builds/browser.umd.js" + } + }, + "./dist/builds/*": "./dist/builds/*.js" + }, + "jsdelivr": "./dist/builds/browser.umd.js", + "unpkg": "./dist/builds/browser.umd.js", + "react-native": "./dist/builds/browser.js", + "files": [ + "dist", + "index.js", + "index.d.ts" + ], + "dependencies": { + "@algolia/client-common": "5.23.4", + "@algolia/requester-browser-xhr": "5.23.4", + "@algolia/requester-node-http": "5.23.4", + "@algolia/requester-fetch": "5.23.4" + }, + "devDependencies": { + "@arethetypeswrong/cli": "0.17.4", + "@types/node": "22.14.1", + "publint": "0.3.12", + "rollup": "4.39.0", + "tsup": "8.4.0", + "typescript": "5.8.3" + }, + "engines": { + "node": ">= 14.0.0" + } +} diff --git a/clients/algoliasearch-client-javascript/yarn.lock b/clients/algoliasearch-client-javascript/yarn.lock index 669b56197a1..e8a11f9dd19 100644 --- a/clients/algoliasearch-client-javascript/yarn.lock +++ b/clients/algoliasearch-client-javascript/yarn.lock @@ -5,6 +5,23 @@ __metadata: version: 8 cacheKey: 10 +"@algolia/abtesting@workspace:packages/abtesting": + version: 0.0.0-use.local + resolution: "@algolia/abtesting@workspace:packages/abtesting" + dependencies: + "@algolia/client-common": "npm:5.30.0" + "@algolia/requester-browser-xhr": "npm:5.30.0" + "@algolia/requester-fetch": "npm:5.30.0" + "@algolia/requester-node-http": "npm:5.30.0" + "@arethetypeswrong/cli": "npm:0.18.2" + "@types/node": "npm:22.16.0" + publint: "npm:0.3.12" + rollup: "npm:4.41.0" + tsup: "npm:8.5.0" + typescript: "npm:5.8.3" + languageName: unknown + linkType: soft + "@algolia/advanced-personalization@workspace:packages/advanced-personalization": version: 0.0.0-use.local resolution: "@algolia/advanced-personalization@workspace:packages/advanced-personalization" diff --git a/config/clients.config.json b/config/clients.config.json index 907c4594291..4f1736985a1 100644 --- a/config/clients.config.json +++ b/config/clients.config.json @@ -138,6 +138,12 @@ "name": "abtesting", "output": "clients/algoliasearch-client-javascript/packages/client-abtesting" }, + { + "name": "abtesting-v3", + "output": "clients/algoliasearch-client-javascript/packages/abtesting", + "isStandaloneClient": true, + "clientName": "abtesting" + }, { "name": "analytics", "output": "clients/algoliasearch-client-javascript/packages/client-analytics" @@ -145,7 +151,8 @@ { "name": "composition", "output": "clients/algoliasearch-client-javascript/packages/composition", - "isStandaloneClient": true + "isStandaloneClient": true, + "clientName": "composition" }, { "name": "ingestion", diff --git a/config/clients.schema.json b/config/clients.schema.json index 610793663e9..801b6b1da58 100644 --- a/config/clients.schema.json +++ b/config/clients.schema.json @@ -35,6 +35,7 @@ "enum": [ "algoliasearch", "abtesting", + "abtesting-v3", "analytics", "composition", "composition-full", diff --git a/docker-compose.yml b/docker-compose.yml index aa0c74ce177..51082815d63 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,9 +13,9 @@ services: - PHP_VERSION=${PHP_VERSION} - PYTHON_VERSION=${PYTHON_VERSION} command: tail -f /dev/null - volumes: [ ./:/app ] -# ports: -# - "5009:5009" # So we can debug the OpenAPI Generator process + volumes: [./:/app] + # ports: + # - "5009:5009" # So we can debug the OpenAPI Generator process ruby: container_name: apic_ruby @@ -27,7 +27,7 @@ services: - NODE_VERSION=${NODE_VERSION} - RUBY_VERSION=${RUBY_VERSION} command: tail -f /dev/null - volumes: [ ./:/app ] + volumes: [./:/app] swift: container_name: apic_swift @@ -39,4 +39,4 @@ services: - NODE_VERSION=${NODE_VERSION} - SWIFT_VERSION=${SWIFT_VERSION} command: tail -f /dev/null - volumes: [ ./:/app ] + volumes: [./:/app] diff --git a/eslint/src/rules/refCommon.ts b/eslint/src/rules/refCommon.ts index f42cad0d952..b375fe99814 100644 --- a/eslint/src/rules/refCommon.ts +++ b/eslint/src/rules/refCommon.ts @@ -3,18 +3,7 @@ import { createRule } from 'eslint-plugin-yml/lib/utils'; import { isPairWithKey, isScalar } from '../utils.js'; -const allSpecs = [ - 'abtesting', - 'analytics', - 'crawler', - 'ingestion', - 'insights', - 'monitoring', - 'personalization', - 'query-suggestions', - 'recommend', - 'search', -]; +import clientsConfig from '../../../config/clients.config.json' with { type: 'json' }; export const refCommon = createRule('refCommon', { meta: { @@ -58,7 +47,13 @@ export const refCommon = createRule('refCommon', { while (ref.startsWith('../')) { ref = ref.slice(3); } - if (allSpecs.filter((s) => s !== spec).every((s) => !ref.startsWith(s))) { + + if (clientsConfig.javascript.clients.filter((s) => s.name !== spec).every((s) => !ref.startsWith(s.name))) { + return; + } + + // it's expected for composition to import the full version + if (spec === 'composition' && ref.includes('composition-full')) { return; } diff --git a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java index a400b4786c0..700c106f0f5 100644 --- a/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/AlgoliaJavascriptGenerator.java @@ -28,7 +28,7 @@ public String getName() { public void processOpts() { super.processOpts(); - CLIENT = Helpers.camelize((String) additionalProperties.get("client")); + CLIENT = Helpers.camelize(Helpers.getClientConfigClientName((String) additionalProperties.get("client"))); isAlgoliasearchClient = CLIENT.equals("algoliasearch"); // generator specific options @@ -152,8 +152,7 @@ private void setDefaultGeneratorOptions() { String packageName = getPackageName((String) additionalProperties.get("client")); additionalProperties.put("apiName", CLIENT); - // Just so the full client doesn't have the weird Full naming - additionalProperties.put("clientName", CLIENT.contains("composition") ? "composition" + Helpers.API_SUFFIX : clientName); + additionalProperties.put("clientName", clientName); additionalProperties.put("algoliaAgent", Helpers.capitalize(CLIENT)); additionalProperties.put("is" + Helpers.capitalize(Helpers.camelize((String) additionalProperties.get("client"))) + "Client", true); additionalProperties.put("isSearchClient", CLIENT.equals("search") || isAlgoliasearchClient); diff --git a/generators/src/main/java/com/algolia/codegen/cts/tests/TestsGenerator.java b/generators/src/main/java/com/algolia/codegen/cts/tests/TestsGenerator.java index eee67de83ca..3522621f6a9 100644 --- a/generators/src/main/java/com/algolia/codegen/cts/tests/TestsGenerator.java +++ b/generators/src/main/java/com/algolia/codegen/cts/tests/TestsGenerator.java @@ -102,7 +102,7 @@ private String injectVariables(String json) { .replace("${{language}}", language) .replace("${{languageCased}}", ctsManager.getLanguageCased()) .replace("${{languageVersion}}", ctsManager.getVersion()) - .replace("${{clientPascalCase}}", Helpers.capitalize(Helpers.camelize(client))) + .replace("${{clientPascalCase}}", Helpers.capitalize(Helpers.camelize(Helpers.getClientConfigClientName(client)))) .replace("\"${{nowRounded}}\"", String.valueOf(Math.round(System.currentTimeMillis() / threeDays) * threeDays)); } diff --git a/generators/src/main/java/com/algolia/codegen/utils/Helpers.java b/generators/src/main/java/com/algolia/codegen/utils/Helpers.java index 8afbdde1303..a607cc0c6a0 100644 --- a/generators/src/main/java/com/algolia/codegen/utils/Helpers.java +++ b/generators/src/main/java/com/algolia/codegen/utils/Helpers.java @@ -10,6 +10,7 @@ import java.net.URL; import java.nio.file.Files; import java.util.*; +import java.util.stream.StreamSupport; import org.apache.commons.lang3.StringUtils; import org.openapitools.codegen.CodegenOperation; import org.openapitools.codegen.CodegenServer; @@ -199,6 +200,29 @@ public static String getPackageJsonVersion(String client) throws ConfigException } } + // Get the clientName from the clients.config.json + public static String getClientConfigClientName(String client) throws ConfigException { + JsonNode clientField = StreamSupport.stream( + Spliterators.spliteratorUnknownSize(Helpers.getClientConfig("javascript").get("clients").elements(), Spliterator.ORDERED), + false + ) + .filter(node -> node.get("name").asText().equals(client)) + .findFirst() + .orElse(null); + + if (clientField == null) { + return client; + } + + JsonNode clientName = clientField.get("clientName"); + + if (clientName == null) { + return client; + } + + return clientName.asText(); + } + /** Get the `field` value in the `config/clients.config.json` file for the given language */ public static String getClientConfigField(String language, String... fields) throws ConfigException { if (fields.length == 0) { diff --git a/playground/javascript/node/abtestingV3.ts b/playground/javascript/node/abtestingV3.ts new file mode 100644 index 00000000000..cd214db0dad --- /dev/null +++ b/playground/javascript/node/abtestingV3.ts @@ -0,0 +1,38 @@ +import { abtestingClient } from '@algolia/abtesting'; +import { ApiError } from '@algolia/client-common'; + +const appId = process.env.ALGOLIA_APPLICATION_ID || '**** APP_ID *****'; +const apiKey = process.env.ALGOLIA_ANALYTICS_KEY || '**** ANALYTICS_API_KEY *****'; + +// Init client with appId and apiKey +const client = abtestingClient(appId, apiKey, 'de'); + +async function testABTesting() { + try { + const res = await client.addABTests({ + endAt: '2022-02-01', + name: 'testing', + metrics: [], + variants: [ + { + index: 'test1', + trafficPercentage: 30, + }, + { + index: 'test2', + trafficPercentage: 50, + }, + ], + }); + + console.log(`[OK]`, res); + } catch (e) { + if (e instanceof ApiError) { + return console.log(`[${e.status}] ${e.message}`, e.stackTrace, e); + } + + console.log('[ERROR]', e); + } +} + +testABTesting(); diff --git a/playground/javascript/node/package.json b/playground/javascript/node/package.json index 2e7989146c6..9c2eb37f5ea 100644 --- a/playground/javascript/node/package.json +++ b/playground/javascript/node/package.json @@ -7,6 +7,7 @@ "start": "tsc && node --env-file=../../.env dist/$0.js" }, "dependencies": { + "@algolia/abtesting": "link:../../../clients/algoliasearch-client-javascript/packages/abtesting", "@algolia/advanced-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/advanced-personalization", "@algolia/client-abtesting": "link:../../../clients/algoliasearch-client-javascript/packages/client-abtesting", "@algolia/client-analytics": "link:../../../clients/algoliasearch-client-javascript/packages/client-analytics", diff --git a/scripts/common.ts b/scripts/common.ts index ff4b7549bb4..58cc7e20b41 100644 --- a/scripts/common.ts +++ b/scripts/common.ts @@ -73,7 +73,7 @@ export const LANGUAGES = [...new Set(Object.values(GENERATORS).map((gen) => gen. // `crawler` is manually added so we can still bundled and validate the specs // the entry can be removed once at least one client is generated -export const CLIENTS = [...new Set(Object.values(GENERATORS).map((gen) => gen.client)), 'crawler', 'abtesting-v3']; +export const CLIENTS = [...new Set(Object.values(GENERATORS).map((gen) => gen.client)), 'crawler']; export async function run(command: string, { errorMessage, cwd, language }: RunOptions = {}): Promise { const realCwd = path.resolve(ROOT_DIR, cwd ?? '.'); diff --git a/templates/javascript/clients/client/builds/definition.mustache b/templates/javascript/clients/client/builds/definition.mustache index 6750f1a7cd6..4897c68c0e2 100644 --- a/templates/javascript/clients/client/builds/definition.mustache +++ b/templates/javascript/clients/client/builds/definition.mustache @@ -15,7 +15,7 @@ import { import type { RequestOptions, ClientOptions } from '@algolia/client-common'; -import { create{{#lambda.titlecase}}{{clientName}}{{/lambda.titlecase}}, apiClientVersion } from '../src/{{#isCompositionFullClient}}compositionFullClient{{/isCompositionFullClient}}{{^isCompositionFullClient}}{{clientName}}{{/isCompositionFullClient}}'; +import { create{{#lambda.titlecase}}{{clientName}}{{/lambda.titlecase}}, apiClientVersion } from '../src/{{clientName}}'; {{#hasRegionalHost}} import { REGIONS } from '../src/{{clientName}}'; @@ -32,7 +32,7 @@ export { isScheduleTrigger, isSubscriptionTrigger, {{/isIngestionClient}} -} from '../src/{{#isCompositionFullClient}}compositionFullClient{{/isCompositionFullClient}}{{^isCompositionFullClient}}{{clientName}}{{/isCompositionFullClient}}'; +} from '../src/{{clientName}}'; export * from '../model'; diff --git a/tests/CTS/client/abtesting-v3/parameters.json b/tests/CTS/client/abtesting-v3/parameters.json new file mode 100644 index 00000000000..25666f75b3c --- /dev/null +++ b/tests/CTS/client/abtesting-v3/parameters.json @@ -0,0 +1,44 @@ +[ + { + "testName": "uses the correct region", + "autoCreateClient": false, + "steps": [ + { + "type": "createClient", + "parameters": { + "appId": "my-app-id", + "apiKey": "my-api-key", + "region": "us" + } + }, + { + "type": "method", + "method": "getABTest", + "parameters": { + "id": 123 + }, + "expected": { + "type": "host", + "match": "analytics.us.algolia.com" + } + } + ] + }, + { + "testName": "throws when incorrect region is given", + "autoCreateClient": false, + "steps": [ + { + "type": "createClient", + "parameters": { + "appId": "my-app-id", + "apiKey": "my-api-key", + "region": "not_a_region" + }, + "expected": { + "error": "`region` must be one of the following: de, us" + } + } + ] + } +] diff --git a/tests/CTS/requests/abtesting-v3/addABTests.json b/tests/CTS/requests/abtesting-v3/addABTests.json new file mode 100644 index 00000000000..388d8341f84 --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/addABTests.json @@ -0,0 +1,39 @@ +[ + { + "testName": "addABTests with minimal parameters", + "parameters": { + "endAt": "2022-12-31T00:00:00.000Z", + "name": "myABTest", + "metrics": [{"name": "myMetric"}], + "variants": [ + { + "index": "AB_TEST_1", + "trafficPercentage": 30 + }, + { + "index": "AB_TEST_2", + "trafficPercentage": 50 + } + ] + }, + "request": { + "path": "/3/abtests", + "method": "POST", + "body": { + "endAt": "2022-12-31T00:00:00.000Z", + "name": "myABTest", + "metrics": [{"name": "myMetric"}], + "variants": [ + { + "index": "AB_TEST_1", + "trafficPercentage": 30 + }, + { + "index": "AB_TEST_2", + "trafficPercentage": 50 + } + ] + } + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/deleteABTest.json b/tests/CTS/requests/abtesting-v3/deleteABTest.json new file mode 100644 index 00000000000..5a47a0b0dfd --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/deleteABTest.json @@ -0,0 +1,12 @@ +[ + { + "testName": "deleteABTest", + "parameters": { + "id": 42 + }, + "request": { + "path": "/3/abtests/42", + "method": "DELETE" + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/estimateABTest.json b/tests/CTS/requests/abtesting-v3/estimateABTest.json new file mode 100644 index 00000000000..ccad9bc1531 --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/estimateABTest.json @@ -0,0 +1,45 @@ +[ + { + "testName": "estimate AB Test sample size", + "parameters": { + "configuration": { + "minimumDetectableEffect": { + "size": 0.03, + "metric": "conversionRate" + } + }, + "variants": [ + { + "index": "AB_TEST_1", + "trafficPercentage": 50 + }, + { + "index": "AB_TEST_2", + "trafficPercentage": 50 + } + ] + }, + "request": { + "path": "/3/abtests/estimate", + "method": "POST", + "body": { + "configuration": { + "minimumDetectableEffect": { + "size": 0.03, + "metric": "conversionRate" + } + }, + "variants": [ + { + "index": "AB_TEST_1", + "trafficPercentage": 50 + }, + { + "index": "AB_TEST_2", + "trafficPercentage": 50 + } + ] + } + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/getABTest.json b/tests/CTS/requests/abtesting-v3/getABTest.json new file mode 100644 index 00000000000..10f9884b351 --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/getABTest.json @@ -0,0 +1,12 @@ +[ + { + "testName": "getABTest", + "parameters": { + "id": 42 + }, + "request": { + "path": "/3/abtests/42", + "method": "GET" + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/getTimeseries.json b/tests/CTS/requests/abtesting-v3/getTimeseries.json new file mode 100644 index 00000000000..0fe605355a6 --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/getTimeseries.json @@ -0,0 +1,11 @@ +[ + { + "parameters": { + "id": 42 + }, + "request": { + "path": "/3/abtests/42/timeseries", + "method": "GET" + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/listABTests.json b/tests/CTS/requests/abtesting-v3/listABTests.json new file mode 100644 index 00000000000..ff27cfeb87b --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/listABTests.json @@ -0,0 +1,29 @@ +[ + { + "testName": "listABTests with minimal parameters", + "parameters": {}, + "request": { + "path": "/3/abtests", + "method": "GET" + } + }, + { + "testName": "listABTests with parameters", + "parameters": { + "offset": 0, + "limit": 21, + "indexPrefix": "cts_e2e ab", + "indexSuffix": "t" + }, + "request": { + "path": "/3/abtests", + "method": "GET", + "queryParameters": { + "offset": "0", + "limit": "21", + "indexPrefix": "cts_e2e%20ab", + "indexSuffix": "t" + } + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/scheduleABTest.json b/tests/CTS/requests/abtesting-v3/scheduleABTest.json new file mode 100644 index 00000000000..2a6df45bcb5 --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/scheduleABTest.json @@ -0,0 +1,41 @@ +[ + { + "testName": "scheduleABTest with minimal parameters", + "parameters": { + "endAt": "2022-12-31T00:00:00.000Z", + "scheduledAt": "2022-11-31T00:00:00.000Z", + "name": "myABTest", + "metrics": [{"name": "myMetric"}], + "variants": [ + { + "index": "AB_TEST_1", + "trafficPercentage": 30 + }, + { + "index": "AB_TEST_2", + "trafficPercentage": 50 + } + ] + }, + "request": { + "path": "/3/abtests/schedule", + "method": "POST", + "body": { + "endAt": "2022-12-31T00:00:00.000Z", + "scheduledAt": "2022-11-31T00:00:00.000Z", + "name": "myABTest", + "metrics": [{"name": "myMetric"}], + "variants": [ + { + "index": "AB_TEST_1", + "trafficPercentage": 30 + }, + { + "index": "AB_TEST_2", + "trafficPercentage": 50 + } + ] + } + } + } +] diff --git a/tests/CTS/requests/abtesting-v3/stopABTest.json b/tests/CTS/requests/abtesting-v3/stopABTest.json new file mode 100644 index 00000000000..3d349d1e62f --- /dev/null +++ b/tests/CTS/requests/abtesting-v3/stopABTest.json @@ -0,0 +1,12 @@ +[ + { + "testName": "stopABTest", + "parameters": { + "id": 42 + }, + "request": { + "path": "/3/abtests/42/stop", + "method": "POST" + } + } +] diff --git a/tests/output/javascript/yarn.lock b/tests/output/javascript/yarn.lock index 400a3e78337..f3aef57e07c 100644 --- a/tests/output/javascript/yarn.lock +++ b/tests/output/javascript/yarn.lock @@ -427,33 +427,33 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:22.15.30": - version: 22.15.30 - resolution: "@types/node@npm:22.15.30" +"@types/node@npm:22.16.0": + version: 22.16.0 + resolution: "@types/node@npm:22.16.0" dependencies: undici-types: "npm:~6.21.0" - checksum: 10/16d03f30df7851eea4f31d9a2470a53b24dc7d3909ed1782e2538e3aafe398451da17b83d6f730dfdcd0a843ccdbe841176ecfbde6bdb51963e8d11f58a10ade + checksum: 10/26ebbbd24749caa4a692664290c53cdca63ec717ca250cd2babf3d3da796e9d3d0b6b9814d160693261b5e881796bf0f3c1887fef355b19e9a78fe27cd5e2ce2 languageName: node linkType: hard -"@vitest/expect@npm:3.2.3": - version: 3.2.3 - resolution: "@vitest/expect@npm:3.2.3" +"@vitest/expect@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/expect@npm:3.2.4" dependencies: "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:3.2.3" - "@vitest/utils": "npm:3.2.3" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" chai: "npm:^5.2.0" tinyrainbow: "npm:^2.0.0" - checksum: 10/c67318892c2441a53fd6386232a3392fd86faf3a17528ce70fa2b6ede7778b9d7e3142b463f722d0fb5516fb671f422549d34e674f4fe8721209101c5b69805d + checksum: 10/dc69ce886c13714dfbbff78f2d2cb7eb536017e82301a73c42d573a9e9d2bf91005ac7abd9b977adf0a3bd431209f45a8ac2418029b68b0a377e092607c843ce languageName: node linkType: hard -"@vitest/mocker@npm:3.2.3": - version: 3.2.3 - resolution: "@vitest/mocker@npm:3.2.3" +"@vitest/mocker@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/mocker@npm:3.2.4" dependencies: - "@vitest/spy": "npm:3.2.3" + "@vitest/spy": "npm:3.2.4" estree-walker: "npm:^3.0.3" magic-string: "npm:^0.30.17" peerDependencies: @@ -464,58 +464,58 @@ __metadata: optional: true vite: optional: true - checksum: 10/984203df788f9822d9d8ae0a85abc204f08770c63191d1300b6e05172021309b90321fddb5962101c268e66cc9f920982c0ccf768ee67a3d4c5cb44fb27b2934 + checksum: 10/5e92431b6ed9fc1679060e4caef3e4623f4750542a5d7cd944774f8217c4d231e273202e8aea00bab33260a5a9222ecb7005d80da0348c3c829bd37d123071a8 languageName: node linkType: hard -"@vitest/pretty-format@npm:3.2.3, @vitest/pretty-format@npm:^3.2.3": - version: 3.2.3 - resolution: "@vitest/pretty-format@npm:3.2.3" +"@vitest/pretty-format@npm:3.2.4, @vitest/pretty-format@npm:^3.2.4": + version: 3.2.4 + resolution: "@vitest/pretty-format@npm:3.2.4" dependencies: tinyrainbow: "npm:^2.0.0" - checksum: 10/fd39fa90f5ec486215c962ee05d80c31dc8bff84f4c29c4390a129757ac4cbbae09b4aa669982a7888fea5de1bb2c3532aefe6c13b7d28d45295f00793aea306 + checksum: 10/8dd30cbf956e01fbab042fe651fb5175d9f0cd00b7b569a46cd98df89c4fec47dab12916201ad6e09a4f25f2a2ec8927a4bfdc61118593097f759c90b18a51d4 languageName: node linkType: hard -"@vitest/runner@npm:3.2.3": - version: 3.2.3 - resolution: "@vitest/runner@npm:3.2.3" +"@vitest/runner@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/runner@npm:3.2.4" dependencies: - "@vitest/utils": "npm:3.2.3" + "@vitest/utils": "npm:3.2.4" pathe: "npm:^2.0.3" strip-literal: "npm:^3.0.0" - checksum: 10/4c4bdef49c646c47ef91683bf30797d48e2d1c2a615dc1adb730232578b7c4b00642204d2d15b6f73e70ecfda548da9a3c7883b50655d2801db19088f7769860 + checksum: 10/197bd55def519ef202f990b7c1618c212380831827c116240871033e4973decb780503c705ba9245a12bd8121f3ac4086ffcb3e302148b62d9bd77fd18dd1deb languageName: node linkType: hard -"@vitest/snapshot@npm:3.2.3": - version: 3.2.3 - resolution: "@vitest/snapshot@npm:3.2.3" +"@vitest/snapshot@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/snapshot@npm:3.2.4" dependencies: - "@vitest/pretty-format": "npm:3.2.3" + "@vitest/pretty-format": "npm:3.2.4" magic-string: "npm:^0.30.17" pathe: "npm:^2.0.3" - checksum: 10/64b085246172d5f1c3c9815062270988757f8f00244a678b81ad00cb7ffbb8df84767a508eac00ee9bf26485b8c4f600d19e3c76618f746270337cd1a7f82136 + checksum: 10/acfb682491b9ca9345bf9fed02c2779dec43e0455a380c1966b0aad8dd81c79960902cf34621ab48fe80a0eaf8c61cc42dec186a1321dc3c9897ef2ebd5f1bc4 languageName: node linkType: hard -"@vitest/spy@npm:3.2.3": - version: 3.2.3 - resolution: "@vitest/spy@npm:3.2.3" +"@vitest/spy@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/spy@npm:3.2.4" dependencies: tinyspy: "npm:^4.0.3" - checksum: 10/cff3d764c461f544cec692ff110c7dc0ee74dc5e1b6e228eba0e04b35819faf27c46321f1697f3a69010cdb609a87b7a32e852f0d07da9e510238c92006372c1 + checksum: 10/7d38c299f42a8c7e5e41652b203af98ca54e63df69c3b072d0e401d5a57fbbba3e39d8538ac1b3022c26718a6388d0bcc222bc2f07faab75942543b9247c007d languageName: node linkType: hard -"@vitest/utils@npm:3.2.3": - version: 3.2.3 - resolution: "@vitest/utils@npm:3.2.3" +"@vitest/utils@npm:3.2.4": + version: 3.2.4 + resolution: "@vitest/utils@npm:3.2.4" dependencies: - "@vitest/pretty-format": "npm:3.2.3" - loupe: "npm:^3.1.3" + "@vitest/pretty-format": "npm:3.2.4" + loupe: "npm:^3.1.4" tinyrainbow: "npm:^2.0.0" - checksum: 10/ac69c88082f2590c6793b600726b25edcb27a483b12a5aae6ce88b8fff64890aa4243ea14786659961be261303dcf312b2676674f8216d57e4f63ddf5a24aa28 + checksum: 10/7f12ef63bd8ee13957744d1f336b0405f164ade4358bf9dfa531f75bbb58ffac02bf61aba65724311ddbc50b12ba54853a169e59c6b837c16086173b9a480710 languageName: node linkType: hard @@ -692,10 +692,10 @@ __metadata: languageName: node linkType: hard -"dotenv@npm:16.5.0": - version: 16.5.0 - resolution: "dotenv@npm:16.5.0" - checksum: 10/e68a16834f1a41cc2dfb01563bc150668ad675e6cd09191211467b5c0806b6ecd6ec438e021aa8e01cd0e72d2b70ef4302bec7cc0fe15b6955f85230b62dc8a9 +"dotenv@npm:17.0.1": + version: 17.0.1 + resolution: "dotenv@npm:17.0.1" + checksum: 10/050987c31eff3089a09358390c95cfb0fb2d66bb85b8e868d8aac3551d2dd81f963719dcb9103f7af5ea84c4aff446b39ebaa812d7fd03d9adf2402535877cd7 languageName: node linkType: hard @@ -1026,11 +1026,11 @@ __metadata: "@algolia/client-composition": "link:../../../clients/algoliasearch-client-javascript/packages/client-composition" "@algolia/composition": "link:../../../clients/algoliasearch-client-javascript/packages/composition" "@algolia/requester-testing": "link:../../../clients/algoliasearch-client-javascript/packages/requester-testing" - "@types/node": "npm:22.15.30" + "@types/node": "npm:22.16.0" algoliasearch: "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch" - dotenv: "npm:16.5.0" + dotenv: "npm:17.0.1" typescript: "npm:5.8.3" - vitest: "npm:3.2.3" + vitest: "npm:3.2.4" languageName: unknown linkType: soft @@ -1048,13 +1048,20 @@ __metadata: languageName: node linkType: hard -"loupe@npm:^3.1.0, loupe@npm:^3.1.3": +"loupe@npm:^3.1.0": version: 3.1.3 resolution: "loupe@npm:3.1.3" checksum: 10/9e98c34daf0eba48ccc603595e51f2ae002110982d84879cf78c51de2c632f0c571dfe82ce4210af60c32203d06b443465c269bda925076fe6d9b612cc65c321 languageName: node linkType: hard +"loupe@npm:^3.1.4": + version: 3.1.4 + resolution: "loupe@npm:3.1.4" + checksum: 10/06ab1893731f167f2ce71f464a8a68372dc4cb807ecae20f9b844660c93813a298ca76bcd747ba6568b057af725ea63f0034ba3140c8f1d1fbb482d797e593ef + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.4.3 resolution: "lru-cache@npm:10.4.3" @@ -1605,10 +1612,10 @@ __metadata: languageName: node linkType: hard -"tinypool@npm:^1.1.0": - version: 1.1.0 - resolution: "tinypool@npm:1.1.0" - checksum: 10/2e99e76f01699bb3244463a4b1b473fb9a166473d417b5ce373bbd12ef4626c221100533540d90f6bddbc83149ebf97e7ce052c0d1c5ae1a5066c5690cfee538 +"tinypool@npm:^1.1.1": + version: 1.1.1 + resolution: "tinypool@npm:1.1.1" + checksum: 10/0d54139e9dbc6ef33349768fa78890a4d708d16a7ab68e4e4ef3bb740609ddf0f9fd13292c2f413fbba756166c97051a657181c8f7ae92ade690604f183cc01d languageName: node linkType: hard @@ -1671,9 +1678,9 @@ __metadata: languageName: node linkType: hard -"vite-node@npm:3.2.3": - version: 3.2.3 - resolution: "vite-node@npm:3.2.3" +"vite-node@npm:3.2.4": + version: 3.2.4 + resolution: "vite-node@npm:3.2.4" dependencies: cac: "npm:^6.7.14" debug: "npm:^4.4.1" @@ -1682,7 +1689,7 @@ __metadata: vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" bin: vite-node: vite-node.mjs - checksum: 10/0dacd6b70cae010dadb560cf38afe33cef956a7cdf99fd099294891ae664b4c8bff7d217d7d85de8a042efcb0ac2d1cd9cea4901e8f48adf4356625c01b0a2aa + checksum: 10/343244ecabbab3b6e1a3065dabaeefa269965a7a7c54652d4b7a7207ee82185e887af97268c61755dcb2dd6a6ce5d9e114400cbd694229f38523e935703cc62f languageName: node linkType: hard @@ -1741,18 +1748,18 @@ __metadata: languageName: node linkType: hard -"vitest@npm:3.2.3": - version: 3.2.3 - resolution: "vitest@npm:3.2.3" +"vitest@npm:3.2.4": + version: 3.2.4 + resolution: "vitest@npm:3.2.4" dependencies: "@types/chai": "npm:^5.2.2" - "@vitest/expect": "npm:3.2.3" - "@vitest/mocker": "npm:3.2.3" - "@vitest/pretty-format": "npm:^3.2.3" - "@vitest/runner": "npm:3.2.3" - "@vitest/snapshot": "npm:3.2.3" - "@vitest/spy": "npm:3.2.3" - "@vitest/utils": "npm:3.2.3" + "@vitest/expect": "npm:3.2.4" + "@vitest/mocker": "npm:3.2.4" + "@vitest/pretty-format": "npm:^3.2.4" + "@vitest/runner": "npm:3.2.4" + "@vitest/snapshot": "npm:3.2.4" + "@vitest/spy": "npm:3.2.4" + "@vitest/utils": "npm:3.2.4" chai: "npm:^5.2.0" debug: "npm:^4.4.1" expect-type: "npm:^1.2.1" @@ -1763,17 +1770,17 @@ __metadata: tinybench: "npm:^2.9.0" tinyexec: "npm:^0.3.2" tinyglobby: "npm:^0.2.14" - tinypool: "npm:^1.1.0" + tinypool: "npm:^1.1.1" tinyrainbow: "npm:^2.0.0" vite: "npm:^5.0.0 || ^6.0.0 || ^7.0.0-0" - vite-node: "npm:3.2.3" + vite-node: "npm:3.2.4" why-is-node-running: "npm:^2.3.0" peerDependencies: "@edge-runtime/vm": "*" "@types/debug": ^4.1.12 "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 - "@vitest/browser": 3.2.3 - "@vitest/ui": 3.2.3 + "@vitest/browser": 3.2.4 + "@vitest/ui": 3.2.4 happy-dom: "*" jsdom: "*" peerDependenciesMeta: @@ -1793,7 +1800,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 10/7412aaa6f4c5d259b7329a7aba5466b3fd1fa67f4af0ee1ea14474c48f0c5f1b230fba2a5418a6c21df19c9b8268ba0d133f9d7aac553727914fa56664344b4a + checksum: 10/f10bbce093ecab310ecbe484536ef4496fb9151510b2be0c5907c65f6d31482d9c851f3182531d1d27d558054aa78e8efd9d4702ba6c82058657e8b6a52507ee languageName: node linkType: hard