@nuskin/contentstack-lib 2.1.0-pa-1117.5 → 2.1.0-pa-1117.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.eslintrc.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "SharedArrayBuffer": "readonly"
12
12
  },
13
13
  "parserOptions": {
14
- "ecmaVersion": 2018,
14
+ "ecmaVersion": 2020,
15
15
  "sourceType": "module"
16
16
  },
17
17
  "extends": [
@@ -157,9 +157,9 @@ describe("ContentstackApi", () => {
157
157
  global.window = Object.create(window);
158
158
  global.window.location = { hostname };
159
159
  const {getStack} = require('../src/api');
160
- getStack(env[index]);
160
+ getStack();
161
161
  expect(mockStack).toHaveBeenCalledWith({api_key: csCfg.apiKey, delivery_token: csCfg.deliveryToken, environment: csCfg.environment});
162
- })
162
+ });
163
163
  });
164
164
 
165
165
  test('extractAddressFormFields maps address form field entries', () => {
@@ -204,6 +204,12 @@ describe("ContentstackApi", () => {
204
204
  ]);
205
205
  });
206
206
 
207
+ test('extractAddressFormFields returns an empty list when no entries are provided', () => {
208
+ const {getStack} = require('../src/api');
209
+ const Stack = getStack('dev');
210
+ expect(Stack.extractAddressFormFields()).toStrictEqual([]);
211
+ });
212
+
207
213
  test('getAddressForms maps address_elements', async () => {
208
214
  mockPromiseResult.mockResolvedValueOnce([[
209
215
  {
@@ -277,19 +283,49 @@ describe("ContentstackApi", () => {
277
283
  ]);
278
284
  });
279
285
 
286
+ test('getAddressForms returns an empty list when no forms are found', async () => {
287
+ mockPromiseResult.mockResolvedValueOnce([undefined]);
288
+ const {getStack} = require('../src/api');
289
+ const Stack = getStack('dev');
290
+ await expect(Stack.getAddressForms(['Unknown'])).resolves.toStrictEqual([]);
291
+ });
292
+
293
+ test('getSingletonEntries maps language code in to id', async () => {
294
+ mockSinglePromiseResult.mockResolvedValueOnce(singleCheckoutAdrStrings);
295
+ const {getStack} = require('../src/api');
296
+ const Stack = getStack('dev');
297
+ await Stack.getSingletonEntries({contentTypeUIDs: ['checkout_adr_strings'], language: 'in'});
298
+ expect(mockSinglePromiseResult).toHaveBeenCalled();
299
+ });
300
+
280
301
  test('getShippingAddressForms maps nested address form fields', async () => {
281
302
  mockPromiseResult.mockResolvedValueOnce([[
282
303
  {
283
304
  title: 'United States',
284
- countries: ['United States'],
305
+ countries: [
306
+ {
307
+ countries: [
308
+ {
309
+ country_code: 'US',
310
+ country_name: 'United States'
311
+ },
312
+ {
313
+ country_code: 'CA',
314
+ country_name: 'Canada'
315
+ }
316
+ ]
317
+ }
318
+ ],
285
319
  pre_address_fields: [addressFormFieldEntries[0]],
286
- address_form: {
287
- title: 'default',
288
- address_elements: addressFormFieldEntries,
289
- postal_code_regex: '^[0-9]{5}(?:-[0-9]{4})?$',
290
- verify_after_autocomplete: true,
291
- wrap_address1_to_address2: false
292
- },
320
+ address_form: [
321
+ {
322
+ title: 'default',
323
+ address_elements: addressFormFieldEntries,
324
+ postal_code_regex: '^[0-9]{5}(?:-[0-9]{4})?$',
325
+ verify_after_autocomplete: true,
326
+ wrap_address1_to_address2: false
327
+ }
328
+ ],
293
329
  post_address_fields: [addressFormFieldEntries[1]]
294
330
  }
295
331
  ]]);
@@ -297,7 +333,16 @@ describe("ContentstackApi", () => {
297
333
  const Stack = getStack('dev');
298
334
  await expect(Stack.getShippingAddressForms(['United States'])).resolves.toStrictEqual([
299
335
  {
300
- countries: ['United States'],
336
+ countries: [
337
+ {
338
+ code: 'US',
339
+ name: 'United States'
340
+ },
341
+ {
342
+ code: 'CA',
343
+ name: 'Canada'
344
+ }
345
+ ],
301
346
  pre_address_fields: [
302
347
  {
303
348
  field: 'address1',
@@ -345,15 +390,30 @@ describe("ContentstackApi", () => {
345
390
  mockPromiseResult.mockResolvedValueOnce([[
346
391
  {
347
392
  title: 'United States',
348
- countries: ['United States'],
393
+ countries: [
394
+ {
395
+ countries: [
396
+ {
397
+ country_code: 'US',
398
+ country_name: 'United States'
399
+ },
400
+ {
401
+ country_code: 'CA',
402
+ country_name: 'Canada'
403
+ }
404
+ ]
405
+ }
406
+ ],
349
407
  pre_address_fields: [addressFormFieldEntries[0]],
350
- address_form: {
351
- title: 'default',
352
- address_elements: addressFormFieldEntries,
353
- postal_code_regex: '^[0-9]{5}(?:-[0-9]{4})?$',
354
- verify_after_autocomplete: true,
355
- wrap_address1_to_address2: false
356
- },
408
+ address_form: [
409
+ {
410
+ title: 'default',
411
+ address_elements: addressFormFieldEntries,
412
+ postal_code_regex: '^[0-9]{5}(?:-[0-9]{4})?$',
413
+ verify_after_autocomplete: true,
414
+ wrap_address1_to_address2: false
415
+ }
416
+ ],
357
417
  post_address_fields: [addressFormFieldEntries[1]]
358
418
  }
359
419
  ]]);
@@ -361,7 +421,16 @@ describe("ContentstackApi", () => {
361
421
  const Stack = getStack('dev');
362
422
  await expect(Stack.getShippingAddressForms(['United States'], true)).resolves.toStrictEqual([
363
423
  {
364
- countries: ['United States'],
424
+ countries: [
425
+ {
426
+ code: 'US',
427
+ name: 'United States'
428
+ },
429
+ {
430
+ code: 'CA',
431
+ name: 'Canada'
432
+ }
433
+ ],
365
434
  preAddressFields: [
366
435
  {
367
436
  field: 'address1',
@@ -404,4 +473,25 @@ describe("ContentstackApi", () => {
404
473
  }
405
474
  ]);
406
475
  });
476
+
477
+ test('getShippingAddressForms returns empty nested data when optional references are missing', async () => {
478
+ mockPromiseResult.mockResolvedValueOnce([[
479
+ {
480
+ countries: [],
481
+ pre_address_fields: undefined,
482
+ address_form: [],
483
+ post_address_fields: undefined
484
+ }
485
+ ]]);
486
+ const {getStack} = require('../src/api');
487
+ const Stack = getStack('dev');
488
+ await expect(Stack.getShippingAddressForms(['Unknown'])).resolves.toStrictEqual([
489
+ {
490
+ countries: [],
491
+ pre_address_fields: [],
492
+ address_form: undefined,
493
+ post_address_fields: []
494
+ }
495
+ ]);
496
+ });
407
497
  });
package/docs/CHANGELOG.md CHANGED
@@ -1 +1 @@
1
- # [2.1.0-pa-1117.5](https://code.tls.nuskin.io/ns-am/utility/npm/contentstack-lib/compare/v2.1.0-pa-1117.4...v2.1.0-pa-1117.5) (2026-04-08)
1
+ # [2.1.0-pa-1117.7](https://code.tls.nuskin.io/ns-am/utility/npm/contentstack-lib/compare/v2.1.0-pa-1117.6...v2.1.0-pa-1117.7) (2026-04-08)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nuskin/contentstack-lib",
3
- "version": "2.1.0-pa-1117.5",
3
+ "version": "2.1.0-pa-1117.7",
4
4
  "description": "This project contains configuration and api code to access Contentstack, to be shared between the backend (AWS Lambda) and frontend (Vue, etc).",
5
5
  "main": "src/index.js",
6
6
  "scripts": {
@@ -19,7 +19,7 @@
19
19
  "license": "ISC",
20
20
  "homepage": "https://code.tls.nuskin.io/ns-am/utility/npm/contentstack-lib/blob/master/README.md",
21
21
  "devDependencies": {
22
- "eslint": "5.16.0",
22
+ "eslint": "7.32.0",
23
23
  "eslint-config-google": "0.14.0",
24
24
  "eslint-config-prettier": "4.1.0",
25
25
  "eslint-plugin-json": "2.1.1",
package/src/api.js CHANGED
@@ -184,7 +184,7 @@ const _getMultiEntries = async (contentType, includeRefs, values) => {
184
184
  const [results] = await Stack
185
185
  .ContentType(contentType)
186
186
  .Query()
187
- .containedIn('country', values)
187
+ .containedIn('title', values)
188
188
  .includeReference(includeRefs)
189
189
  .toJSON()
190
190
  .find();
@@ -228,16 +228,25 @@ const _extractAddressForm = (addressForm, camelcase = false) => {
228
228
  return camelcase ? _snakeObjectToCamel(mappedForm) : mappedForm;
229
229
  }
230
230
 
231
+ const _extractShippingCountries = (countries = []) => {
232
+ const shippingCountries = countries[0]?.countries ?? [];
233
+
234
+ return shippingCountries.map(({country_code, country_name}) => ({
235
+ code: country_code,
236
+ name: country_name
237
+ }));
238
+ }
239
+
231
240
  const getShippingAddressForms = async (countries, camelcase = false) => {
232
241
  const results = await _getMultiEntries(
233
242
  'shipping_address_form',
234
- ['shipping_country_list', 'pre_address_fields', 'address_form', 'address_form.address_elements', 'post_address_fields'],
243
+ ['countries', 'pre_address_fields', 'address_form', 'address_form.address_elements', 'post_address_fields'],
235
244
  countries
236
245
  );
237
246
  const mappedResults = (results || []).map((result) => ({
238
- countries: result.countries,
247
+ countries: _extractShippingCountries(result.countries),
239
248
  pre_address_fields: _extractAddressFormFields(result.pre_address_fields, camelcase),
240
- address_form: _extractAddressForm(result.address_form, camelcase),
249
+ address_form: _extractAddressForm(result.address_form[0], camelcase),
241
250
  post_address_fields: _extractAddressFormFields(result.post_address_fields, camelcase)
242
251
  }));
243
252