Skip to content

feat(javascript): assert algoliasearch bundle #3991

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Oct 21, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -165,14 +165,15 @@ private void setDefaultGeneratorOptions() {
List<Map<String, Object>> packages = Helpers.getClientConfigList("javascript", "clients");
for (Map<String, Object> pkg : packages) {
String name = ((String) pkg.get("output")).replace("clients/algoliasearch-client-javascript/packages/", "");
if (name.contains("search")) {
if (name.contains("algoliasearch")) {
continue;
}

var dependency = new HashMap<String, Object>();
dependency.put("dependencyName", Helpers.createClientName((String) pkg.get("name"), "javascript"));
dependency.put("dependencyPackage", "@algolia/" + name);
dependency.put("dependencyVersion", Helpers.getPackageJsonVersion(name));
dependency.put("withInitMethod", !name.contains("search"));
dependency.put(
"dependencyHasRegionalHosts",
!name.contains("search") && !name.contains("recommend") && !name.contains("monitoring")
Expand All @@ -181,7 +182,6 @@ private void setDefaultGeneratorOptions() {
dependencies.add(dependency);
}
additionalProperties.put("dependencies", dependencies);
additionalProperties.put("searchVersion", Helpers.getPackageJsonVersion("client-search"));

// Files used to generate the `lite` client
clientName = "lite" + Helpers.API_SUFFIX;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,8 @@ public Map<String, Object> postProcessSupportingFileData(Map<String, Object> obj

// We can put whatever we want in the bundle, and it will be accessible in the template
bundle.put("mode", mode);
bundle.put("is" + Helpers.capitalize(client) + "Client", true);
bundle.put("isSearchClient", client.contains("search")); // just so algoliasearch is treated as a search client too
bundle.put("client", Helpers.createClientName(importClientName, language) + "Client");
bundle.put("clientPrefix", Helpers.createClientName(importClientName, language));
bundle.put("hasRegionalHost", hasRegionalHost);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
import com.algolia.codegen.AlgoliaJavascriptGenerator;
import com.algolia.codegen.exceptions.GeneratorException;
import com.algolia.codegen.utils.*;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.*;
import org.openapitools.codegen.SupportingFile;

Expand Down Expand Up @@ -45,27 +44,9 @@ public void addSnippetsSupportingFiles(List<SupportingFile> supportingFiles, Str
@Override
public void addDataToBundle(Map<String, Object> bundle) throws GeneratorException {
bundle.put("utilsPackageVersion", Helpers.getPackageJsonVersion("client-common"));

List<Map<String, String>> clients = new ArrayList<>();
String importName = "";

Iterator<JsonNode> clientIterator = Helpers.getClientConfig("javascript").get("clients").elements();
while (clientIterator.hasNext()) {
JsonNode c = clientIterator.next();
String output = c.get("output").asText();
String packageName = output.substring(output.lastIndexOf("/") + 1);
if (!packageName.equals("algoliasearch")) {
packageName = "@algolia/" + packageName;
}

clients.add(Map.of("packageName", packageName, "packagePath", "link:../../../" + output.replace("#{cwd}/", "")));

if (c.get("name").asText().equals(client)) {
importName = packageName.replace("algoliasearch", "algoliasearch/lite");
}
}

bundle.put("packageDependencies", clients);
bundle.put("import", importName);
bundle.put("algoliasearchVersion", Helpers.getPackageJsonVersion("algoliasearch"));
bundle.put("initMethod", "init" + Helpers.capitalize(Helpers.camelize(client)));
bundle.put("clientName", client.equals("algoliasearch") ? "liteClient" : "algoliasearch");
bundle.put("importPackage", client.equals("algoliasearch") ? "algoliasearch/lite" : "algoliasearch");
}
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
"build": "yarn build:eslint && yarn scripts:build",
"build:eslint": "yarn workspace eslint-plugin-automation-custom build && yarn install",
"clean": "rm -rf **/dist **/build **/.build **/node_modules **/.gradle **/vendor **/bin **/obj **/__pycache__ || true",
"cli": "yarn workspace scripts start",
"cli": "cd scripts && yarn build:cli && yarn start",
"docker:setup": "./scripts/docker/setup.sh",
"fix:json": "eslint --ext=json . --fix",
"fix:mustache": "eslint --ext=mustache templates/**/tests/ --fix",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
// {{{generationBanner}}}

import type { ClientOptions } from '@algolia/client-common';
import type { SearchClient } from '@algolia/client-search';
import { searchClient } from '@algolia/client-search';

{{#dependencies}}
import { {{{dependencyName}}}Client } from '{{{dependencyPackage}}}';
Expand All @@ -23,7 +21,9 @@ export * from './models';

export type Algoliasearch = SearchClient & {
{{#dependencies}}
init{{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}: (initOptions: InitClientOptions {{#dependencyHasRegionalHosts}}& {{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}}{{/dependencyHasRegionalHosts}}) => {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client;
{{#withInitMethod}}
init{{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}: (initOptions{{^dependencyHasRegionalHosts}}?{{/dependencyHasRegionalHosts}}: InitClientOptions {{#dependencyHasRegionalHosts}}& {{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}}{{/dependencyHasRegionalHosts}}) => {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client;
{{/withInitMethod}}
{{/dependencies}}
};

Expand All @@ -49,9 +49,11 @@ export function algoliasearch(appId: string, apiKey: string, options?: ClientOpt
},

{{#dependencies}}
init{{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}: (initOptions: InitClientOptions {{#dependencyHasRegionalHosts}}& {{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}}{{/dependencyHasRegionalHosts}}): {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client => {
{{#withInitMethod}}
init{{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}: (initOptions: InitClientOptions {{#dependencyHasRegionalHosts}}& {{#lambda.titlecase}}{{{dependencyName}}}RegionOptions{{/lambda.titlecase}}{{/dependencyHasRegionalHosts}}{{^dependencyHasRegionalHosts}}={}{{/dependencyHasRegionalHosts}}): {{#lambda.titlecase}}{{{dependencyName}}}{{/lambda.titlecase}}Client => {
return {{{dependencyName}}}Client(initOptions.appId || appId, initOptions.apiKey || apiKey, {{#dependencyHasRegionalHosts}}initOptions.region,{{/dependencyHasRegionalHosts}}initOptions.options);
},
{{/withInitMethod}}

{{/dependencies}}
}
Expand Down
1 change: 0 additions & 1 deletion templates/javascript/clients/package.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,6 @@
{{#dependencies}}
"{{{dependencyPackage}}}": "{{{dependencyVersion}}}",
{{/dependencies}}
"@algolia/client-search": "{{searchVersion}}",
"@algolia/client-common": "{{utilsPackageVersion}}",
"@algolia/requester-browser-xhr": "{{utilsPackageVersion}}",
"@algolia/requester-node-http": "{{utilsPackageVersion}}",
Expand Down
2 changes: 1 addition & 1 deletion templates/javascript/snippets/import.mustache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
import { {{client}} } from '{{{import}}}';
import { {{clientName}} } from '{{{importPackage}}}';
2 changes: 1 addition & 1 deletion templates/javascript/snippets/init.mustache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
const client = {{client}}("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY", {{#hasRegionalHost}}'{{defaultRegion}}', {{/hasRegionalHost}});
const client = {{{clientName}}}("ALGOLIA_APPLICATION_ID", "ALGOLIA_API_KEY"){{^isSearchClient}}.{{{initMethod}}}({{#hasRegionalHost}} {region: '{{defaultRegion}}'} {{/hasRegionalHost}}){{/isSearchClient}};
9 changes: 0 additions & 9 deletions templates/javascript/snippets/package.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,7 @@
"version": "1.0.0",
"dependencies": {
"typescript": "5.6.3",
"@algolia/client-abtesting": "link:../../../clients/algoliasearch-client-javascript/packages/client-abtesting",
"@algolia/client-analytics": "link:../../../clients/algoliasearch-client-javascript/packages/client-analytics",
"@algolia/client-common": "link:../../../clients/algoliasearch-client-javascript/packages/client-common",
"@algolia/client-insights": "link:../../../clients/algoliasearch-client-javascript/packages/client-insights",
"@algolia/client-personalization": "link:../../../clients/algoliasearch-client-javascript/packages/client-personalization",
"@algolia/client-query-suggestions": "link:../../../clients/algoliasearch-client-javascript/packages/client-query-suggestions",
"@algolia/client-search": "link:../../../clients/algoliasearch-client-javascript/packages/client-search",
"@algolia/ingestion": "link:../../../clients/algoliasearch-client-javascript/packages/ingestion",
"@algolia/monitoring": "link:../../../clients/algoliasearch-client-javascript/packages/monitoring",
"@algolia/recommend": "link:../../../clients/algoliasearch-client-javascript/packages/recommend",
"@algolia/requester-node-http": "link:../../../clients/algoliasearch-client-javascript/packages/requester-node-http",
"algoliasearch": "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch"
},
Expand Down
2 changes: 1 addition & 1 deletion templates/javascript/tests/client/benchmark.mustache
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// {{generationBanner}}
import { describe, test, expect } from 'vitest';

import { {{client}}, {{#lambda.titlecase}}{{client}}{{/lambda.titlecase}} } from '{{{import}}}';
import { {{{clientName}}} } from '{{{importPackage}}}';

{{#blocksBenchmark}}
{{> tests/client/tests}}
Expand Down
16 changes: 5 additions & 11 deletions templates/javascript/tests/client/client.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
// @ts-nocheck Failing tests will have type errors, but we cannot suppress them even with @ts-expect-error because it doesn't work for a block of lines.
import { describe, test, expect } from 'vitest';

import { {{client}}, {{#lambda.titlecase}}{{client}}{{/lambda.titlecase}} } from '{{{import}}}';
import { {{{clientName}}} } from '{{{importPackage}}}';
import { nodeEchoRequester } from '@algolia/requester-testing';
import type { EchoResponse } from '@algolia/requester-testing';

const appId = 'test-app-id';
const apiKey = 'test-api-key';

function createClient(): {{#lambda.titlecase}}{{client}}{{/lambda.titlecase}} {
return {{client}}(appId, apiKey, {{#hasRegionalHost}}'{{{defaultRegion}}}', {{/hasRegionalHost}}{ requester: nodeEchoRequester() });
function createClient() {
return {{{clientName}}}(appId, apiKey{{#isSearchClient}}, { requester: nodeEchoRequester() }{{/isSearchClient}}){{^isSearchClient}}.{{{initMethod}}}({ options: { requester: nodeEchoRequester() }, {{#hasRegionalHost}} region:'{{{defaultRegion}}}' {{/hasRegionalHost}} });{{/isSearchClient}};
}

{{#blocksClient}}
Expand All @@ -20,14 +20,8 @@ function createClient(): {{#lambda.titlecase}}{{client}}{{/lambda.titlecase}} {

describe('init', () => {
test('sets authMode', async () => {
const qpClient = {{client}}('foo', 'bar', {{#hasRegionalHost}}'us',{{/hasRegionalHost}}{
authMode: 'WithinQueryParameters',
requester: nodeEchoRequester(),
});
const headerClient = {{client}}('foo', 'bar', {{#hasRegionalHost}}'us',{{/hasRegionalHost}}{
authMode: 'WithinHeaders',
requester: nodeEchoRequester(),
});
const qpClient = {{{clientName}}}('foo', 'bar'{{#isSearchClient}}, { requester: nodeEchoRequester(), authMode: 'WithinQueryParameters' }{{/isSearchClient}}){{^isSearchClient}}.{{{initMethod}}}({ options: { requester: nodeEchoRequester(), authMode: 'WithinQueryParameters' }, {{#hasRegionalHost}} region:'{{{defaultRegion}}}' {{/hasRegionalHost}} });{{/isSearchClient}};
const headerClient = {{{clientName}}}('foo', 'bar'{{#isSearchClient}}, { requester: nodeEchoRequester(), authMode: 'WithinHeaders' }{{/isSearchClient}}){{^isSearchClient}}.{{{initMethod}}}({ options: { requester: nodeEchoRequester(), authMode: 'WithinHeaders' }, {{#hasRegionalHost}} region:'{{{defaultRegion}}}' {{/hasRegionalHost}} });{{/isSearchClient}};

const qpResult = (await qpClient.customGet({
path: '1/foo',
Expand Down
2 changes: 1 addition & 1 deletion templates/javascript/tests/client/createClient.mustache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{{^autoCreateClient}}const client = {{/autoCreateClient}}{{client}}('{{parametersWithDataTypeMap.appId.value}}','{{parametersWithDataTypeMap.apiKey.value}}',{{#hasRegionalHost}}'{{parametersWithDataTypeMap.region.value}}',{{/hasRegionalHost}}{ {{#useEchoRequester}}requester: nodeEchoRequester(),{{/useEchoRequester}}{{#hasCustomHosts}}hosts:[{{#customHosts}}{ url: 'localhost', port: {{port}}, accept: 'readWrite', protocol: 'http' },{{/customHosts}}]{{/hasCustomHosts}} });
{{^autoCreateClient}}const client = {{/autoCreateClient}}{{{clientName}}}('{{parametersWithDataTypeMap.appId.value}}', '{{parametersWithDataTypeMap.apiKey.value}}'{{#isSearchClient}}, { {{#useEchoRequester}}requester: nodeEchoRequester(),{{/useEchoRequester}}{{#hasCustomHosts}}hosts:[{{#customHosts}}{ url: 'localhost', port: {{port}}, accept: 'readWrite', protocol: 'http' },{{/customHosts}}]{{/hasCustomHosts}} }{{/isSearchClient}}){{^isSearchClient}}.{{{initMethod}}}({ options: { {{#useEchoRequester}}requester: nodeEchoRequester(),{{/useEchoRequester}} {{#hasCustomHosts}}hosts:[{{#customHosts}}{ url: 'localhost', port: {{port}}, accept: 'readWrite', protocol: 'http' },{{/customHosts}}]{{/hasCustomHosts}} }, {{#hasRegionalHost}} region:'{{{parametersWithDataTypeMap.region.value}}}' {{/hasRegionalHost}} }){{/isSearchClient}};
5 changes: 2 additions & 3 deletions templates/javascript/tests/e2e/e2e.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { union } from '../helpers';
import * as dotenv from 'dotenv';

dotenv.config({path:'../../.env'});
import { {{client}} } from '{{{import}}}';
import { {{{clientName}}} } from '{{{importPackage}}}';
import type { RequestOptions } from '@algolia/client-common';

if (!process.env.ALGOLIA_APPLICATION_ID) {
Expand All @@ -17,8 +17,7 @@ if (!process.env.{{e2eApiKey}}) {
throw new Error("please provide an `{{e2eApiKey}}` env var for e2e tests");
}

const client = {{client}}(process.env.ALGOLIA_APPLICATION_ID, process.env.{{e2eApiKey}}, {{#hasRegionalHost}}'{{{defaultRegion}}}'{{/hasRegionalHost}});

const client = {{{clientName}}}(process.env.ALGOLIA_APPLICATION_ID, process.env.{{e2eApiKey}}){{^isSearchClient}}.{{{initMethod}}}({{#hasRegionalHost}} {region:'{{{defaultRegion}}}'} {{/hasRegionalHost}}){{/isSearchClient}};

{{#blocksE2E}}
describe('{{operationId}}', () => {
Expand Down
4 changes: 1 addition & 3 deletions templates/javascript/tests/package.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
"test": "tsc --noEmit && vitest run"
},
"dependencies": {
{{#packageDependencies}}
"{{{packageName}}}": "{{{packagePath}}}",
{{/packageDependencies}}
"algoliasearch": "link:../../../clients/algoliasearch-client-javascript/packages/algoliasearch",
"@algolia/client-common": "link:../../../clients/algoliasearch-client-javascript/packages/client-common",
"@algolia/requester-testing": "link:../../../clients/algoliasearch-client-javascript/packages/requester-testing"
},
Expand Down
4 changes: 2 additions & 2 deletions templates/javascript/tests/requests/requests.mustache
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
// {{generationBanner}}
import { describe, test, expect } from 'vitest';

import { {{client}} } from '{{{import}}}';
import { {{{clientName}}} } from '{{{importPackage}}}';
import { nodeEchoRequester } from '@algolia/requester-testing';
import type { EchoResponse } from '@algolia/requester-testing';
import type { RequestOptions } from '@algolia/client-common';

const appId = process.env.ALGOLIA_APPLICATION_ID || 'test_app_id';
const apiKey = process.env.ALGOLIA_SEARCH_KEY || 'test_api_key';

const client = {{client}}(appId, apiKey, {{#hasRegionalHost}}'{{{defaultRegion}}}', {{/hasRegionalHost}}{ requester: nodeEchoRequester() });
const client = {{{clientName}}}(appId, apiKey{{#isSearchClient}}, { requester: nodeEchoRequester() }{{/isSearchClient}}){{^isSearchClient}}.{{{initMethod}}}({ options: { requester: nodeEchoRequester() }, {{#hasRegionalHost}} region:'{{{defaultRegion}}}' {{/hasRegionalHost}} });{{/isSearchClient}};

{{#blocksRequests}}
describe('{{operationId}}', () => {
Expand Down
Loading
Loading