From b590a27e1e6beb5680d89953bb43a2b43ef2a87b Mon Sep 17 00:00:00 2001 From: unandyala Date: Fri, 23 May 2025 22:01:43 -0400 Subject: [PATCH 01/10] fix font --- templatesOas/apis.mustache | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index b3063fab..b27c1e08 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -408,9 +408,9 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came Object.keys(optionParams).forEach((key) => { if(key.startsWith('c_') && optionParams[key as keyof typeof optionParams] !== undefined) { queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams] - } else if(!queryParams.hasOwnProperty(key) && !pathParams.hasOwnProperty(key)) { + } }) const url = new TemplateURL( From 353d1c97438c85aa494fa38c01f0a394e795c515 Mon Sep 17 00:00:00 2001 From: unandyala Date: Wed, 28 May 2025 22:51:12 -0400 Subject: [PATCH 02/10] allow all query params --- templatesOas/apis.mustache | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index b27c1e08..3fd4f51f 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -217,7 +217,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key in `c_${string}`]: any }, ConfigParameters> + } & { [key: string]: any }, ConfigParameters> headers?: { [key: string]: string }, {{#hasBodyParam}} {{#bodyParam}} @@ -282,7 +282,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key in `c_${string}`]: any }, ConfigParameters> + } & { [key: string]: any }, ConfigParameters> headers?: { [key: string]: string }, {{#hasBodyParam}} {{#bodyParam}} @@ -348,7 +348,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key in `c_${string}`]: any }, ConfigParameters>, + } & { [key: string]: any }, ConfigParameters>, headers?: { [key: string]: string }, {{#hasBodyParam}} {{#bodyParam}} @@ -390,7 +390,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/required}} {{/pathParams}} - const queryParams: {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}QueryParameters & { [key in `c_${string}`]: any } = {}; + const queryParams: {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}QueryParameters & { [key: string]: any } = {}; {{#queryParams}} if (optionParams["{{paramName}}"] !== undefined) { @@ -406,11 +406,15 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/queryParams}} Object.keys(optionParams).forEach((key) => { - if(key.startsWith('c_') && optionParams[key as keyof typeof optionParams] !== undefined) { - queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams] - } + if(optionParams[key as keyof typeof optionParams] !== undefined) { + if(key.startsWith('c_')) { + // add all custom params as query params + queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams] + } else if(!(key in queryParams) && !(key in pathParams)) { + console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`) + queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams] + } + } }) const url = new TemplateURL( From c600f08b19ee16cb6b62dece5084961b3b861e24 Mon Sep 17 00:00:00 2001 From: unandyala Date: Thu, 29 May 2025 11:12:26 -0400 Subject: [PATCH 03/10] allow all query params --- src/test/parameters.test.ts | 22 +++++++++++++++++++--- templatesOas/apis.mustache | 19 +++++++++++-------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/test/parameters.test.ts b/src/test/parameters.test.ts index cee85baa..94767e1c 100644 --- a/src/test/parameters.test.ts +++ b/src/test/parameters.test.ts @@ -178,7 +178,7 @@ describe('Parameters', () => { expect(response).toEqual(MOCK_RESPONSE); }); - it('warns user when an invalid parameter is passed', async () => { + it('warns user when an unknown parameter is passed', async () => { const searchClient = new ShopperSearch({ parameters: { // shortCode is a base URI parameter, not path/query, so it *must* be in the config @@ -191,17 +191,33 @@ describe('Parameters', () => { const options = { parameters: { - invalidParameter: 'this should prompt a warning', + unknownParam1: 'param1', + unknownParam2: 'param2', }, body: {type: 'guest'}, }; + nock.cleanAll(); + nock(`https://${SHORT_CODE}.api.commercecloud.salesforce.com`) + .get( + `/search/shopper-search/v1/organizations/${ORGANIZATION_ID}/product-search` + ) + .query({ + siteId: SITE_ID, + unknownParam1: 'param1', + unknownParam2: 'param2', + }) + .reply(200, MOCK_RESPONSE); + const warnSpy = jest.spyOn(console, 'warn'); const response = await searchClient.productSearch(options); expect(response).toEqual(MOCK_RESPONSE); expect(warnSpy).toHaveBeenCalledWith( - 'Invalid Parameter for productSearch: invalidParameter' + 'Found unknown parameter for productSearch: unknownParam1, adding as query parameter anyway' + ); + expect(warnSpy).toHaveBeenCalledWith( + 'Found unknown parameter for productSearch: unknownParam2, adding as query parameter anyway' ); }); }); diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index 3fd4f51f..551ce4e7 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -406,15 +406,18 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/queryParams}} Object.keys(optionParams).forEach((key) => { - if(optionParams[key as keyof typeof optionParams] !== undefined) { - if(key.startsWith('c_')) { - // add all custom params as query params - queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams] - } else if(!(key in queryParams) && !(key in pathParams)) { - console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`) - queryParams[key as keyof typeof queryParams] = optionParams[key as keyof typeof optionParams] - } + const paramValue = optionParams[key as keyof typeof optionParams]; + if(paramValue === undefined) { + return; } + const isCustomParam = key.startsWith('c_') + if(!isCustomParam && ((key in queryParams) || (key in pathParams))) { + return; + } + if (!isCustomParam) { + console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`); + } + queryParams[key as keyof typeof queryParams] = paramValue; }) const url = new TemplateURL( From 1c6d7daab8f41d9a42a5e09c51318e8b1b123aa6 Mon Sep 17 00:00:00 2001 From: unandyala Date: Thu, 29 May 2025 11:30:34 -0400 Subject: [PATCH 04/10] style fixes --- src/static/version.ts | 4 ++-- src/test/parameters.test.ts | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/static/version.ts b/src/static/version.ts index 2d1edb70..a9e52a84 100644 --- a/src/static/version.ts +++ b/src/static/version.ts @@ -4,5 +4,5 @@ * SPDX-License-Identifier: BSD-3-Clause * For full license text, see the LICENSE file in the repo root or https://opensource.org/licenses/BSD-3-Clause */ -export const USER_AGENT_HEADER = "user-agent"; -export const USER_AGENT_VALUE = "commerce-sdk-isomorphic@3.3.0"; +export const USER_AGENT_HEADER = 'user-agent'; +export const USER_AGENT_VALUE = 'commerce-sdk-isomorphic@3.3.0'; diff --git a/src/test/parameters.test.ts b/src/test/parameters.test.ts index 94767e1c..6a012ee0 100644 --- a/src/test/parameters.test.ts +++ b/src/test/parameters.test.ts @@ -199,15 +199,15 @@ describe('Parameters', () => { nock.cleanAll(); nock(`https://${SHORT_CODE}.api.commercecloud.salesforce.com`) - .get( - `/search/shopper-search/v1/organizations/${ORGANIZATION_ID}/product-search` - ) - .query({ - siteId: SITE_ID, - unknownParam1: 'param1', - unknownParam2: 'param2', - }) - .reply(200, MOCK_RESPONSE); + .get( + `/search/shopper-search/v1/organizations/${ORGANIZATION_ID}/product-search` + ) + .query({ + siteId: SITE_ID, + unknownParam1: 'param1', + unknownParam2: 'param2', + }) + .reply(200, MOCK_RESPONSE); const warnSpy = jest.spyOn(console, 'warn'); const response = await searchClient.productSearch(options); @@ -217,7 +217,7 @@ describe('Parameters', () => { 'Found unknown parameter for productSearch: unknownParam1, adding as query parameter anyway' ); expect(warnSpy).toHaveBeenCalledWith( - 'Found unknown parameter for productSearch: unknownParam2, adding as query parameter anyway' + 'Found unknown parameter for productSearch: unknownParam2, adding as query parameter anyway' ); }); }); From 2fc66c17595d73ee97415b45adddc44884d76619 Mon Sep 17 00:00:00 2001 From: unandyala Date: Thu, 29 May 2025 11:34:03 -0400 Subject: [PATCH 05/10] style fixes --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index ab32356c..48fd67a3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5749,9 +5749,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001328, caniuse-lite@^1.0.30001366: - version "1.0.30001366" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001366.tgz#c73352c83830a9eaf2dea0ff71fb4b9a4bbaa89c" - integrity sha512-yy7XLWCubDobokgzudpkKux8e0UOOnLHE6mlNJBzT3lZJz6s5atSEzjoL+fsCPkI0G8MP5uVdDx1ur/fXEWkZA== + version "1.0.30001720" + resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz" + integrity sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g== canonicalize@^1.0.1: version "1.0.8" From b3cbc66976ee5c83359fe289af4f96e163fbb131 Mon Sep 17 00:00:00 2001 From: unandyala Date: Thu, 29 May 2025 11:36:32 -0400 Subject: [PATCH 06/10] style fixes --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 48fd67a3..ab32356c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5749,9 +5749,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125, caniuse-lite@^1.0.30001317, caniuse-lite@^1.0.30001328, caniuse-lite@^1.0.30001366: - version "1.0.30001720" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001720.tgz" - integrity sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g== + version "1.0.30001366" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001366.tgz#c73352c83830a9eaf2dea0ff71fb4b9a4bbaa89c" + integrity sha512-yy7XLWCubDobokgzudpkKux8e0UOOnLHE6mlNJBzT3lZJz6s5atSEzjoL+fsCPkI0G8MP5uVdDx1ur/fXEWkZA== canonicalize@^1.0.1: version "1.0.8" From f1d97b5ccc34588a43a567623caa719f1f6336a0 Mon Sep 17 00:00:00 2001 From: unandyala Date: Fri, 30 May 2025 14:52:30 -0400 Subject: [PATCH 07/10] use type --- templatesOas/apis.mustache | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index 551ce4e7..06dde33b 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -10,6 +10,7 @@ import type { } from "../../../static/helpers/types"; import TemplateURL from "../../../static/templateUrl"; import { USER_AGENT_HEADER, USER_AGENT_VALUE } from "../../../static/version"; +import { QueryParameters } from "../../helpers/types"; import type { {{#imports}} @@ -217,7 +218,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key: string]: any }, ConfigParameters> + } & QueryParameters, ConfigParameters> headers?: { [key: string]: string }, {{#hasBodyParam}} {{#bodyParam}} @@ -282,7 +283,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key: string]: any }, ConfigParameters> + } & QueryParameters, ConfigParameters> headers?: { [key: string]: string }, {{#hasBodyParam}} {{#bodyParam}} @@ -348,7 +349,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/isHeaderParam}} {{/isBodyParam}} {{/allParams}} - } & { [key: string]: any }, ConfigParameters>, + } & QueryParameters, ConfigParameters>, headers?: { [key: string]: string }, {{#hasBodyParam}} {{#bodyParam}} @@ -390,7 +391,7 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came {{/required}} {{/pathParams}} - const queryParams: {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}QueryParameters & { [key: string]: any } = {}; + const queryParams: {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.camelcase}}{{/lambda.titlecase}}QueryParameters & QueryParameters = {}; {{#queryParams}} if (optionParams["{{paramName}}"] !== undefined) { From 9c602821a4ee6b12600ddab716de80e28d6e108f Mon Sep 17 00:00:00 2001 From: unandyala Date: Mon, 2 Jun 2025 11:05:24 -0400 Subject: [PATCH 08/10] minor refactor --- templatesOas/apis.mustache | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index 06dde33b..6b7ad06e 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -408,17 +408,15 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came Object.keys(optionParams).forEach((key) => { const paramValue = optionParams[key as keyof typeof optionParams]; - if(paramValue === undefined) { - return; + if(paramValue !== undefined) { + if(key.startsWith('c_')) { + queryParams[key as keyof typeof queryParams] = paramValue; + } + else if(!((key in queryParams) || (key in pathParams))) { + console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`); + queryParams[key as keyof typeof queryParams] = paramValue; + } } - const isCustomParam = key.startsWith('c_') - if(!isCustomParam && ((key in queryParams) || (key in pathParams))) { - return; - } - if (!isCustomParam) { - console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`); - } - queryParams[key as keyof typeof queryParams] = paramValue; }) const url = new TemplateURL( From 296a64edc70b1b5047ee7a1d8d26fb0290211576 Mon Sep 17 00:00:00 2001 From: unandyala Date: Mon, 2 Jun 2025 23:10:31 -0400 Subject: [PATCH 09/10] minor refactor --- templatesOas/apis.mustache | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index 6b7ad06e..013ab438 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -408,14 +408,11 @@ export class {{#lambda.titlecase}}{{#lambda.camelcase}}{{appName}}{{/lambda.came Object.keys(optionParams).forEach((key) => { const paramValue = optionParams[key as keyof typeof optionParams]; - if(paramValue !== undefined) { - if(key.startsWith('c_')) { - queryParams[key as keyof typeof queryParams] = paramValue; - } - else if(!((key in queryParams) || (key in pathParams))) { + if(paramValue !== undefined && (key.startsWith('c_') || !((key in queryParams) || (key in pathParams)))) { + if(!key.startsWith('c_')) { console.warn(`Found unknown parameter for {{{nickname}}}: ${key}, adding as query parameter anyway`); - queryParams[key as keyof typeof queryParams] = paramValue; } + queryParams[key as keyof typeof queryParams] = paramValue; } }) From f26cb4fc16c446ea9d1d27e77108a0ed91ed9810 Mon Sep 17 00:00:00 2001 From: unandyala Date: Mon, 2 Jun 2025 23:32:10 -0400 Subject: [PATCH 10/10] organize imports --- templatesOas/apis.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templatesOas/apis.mustache b/templatesOas/apis.mustache index f7f9e254..86ba7cf4 100644 --- a/templatesOas/apis.mustache +++ b/templatesOas/apis.mustache @@ -6,8 +6,8 @@ import { doFetch } from "../../helpers/fetchHelper"; import type { BaseUriParameters, CompositeParameters, + QueryParameters, RequireParametersUnlessAllAreOptional, - QueryParameters } from "../../helpers/types"; import TemplateURL from "../../templateUrl"; import { USER_AGENT_HEADER, USER_AGENT_VALUE } from "../../version";