@storepecker/storefront-core 2.5.2 → 2.5.3

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.
@@ -3,7 +3,7 @@ import { AxiosInstance, AxiosResponse } from 'axios';
3
3
  import { A as Address } from '../address-DwBZHzbI.cjs';
4
4
  import { U as User, C as Cart, d as CouponResponse, c as Coupon, b as Category } from '../cart-lJvJzaoH.cjs';
5
5
  import { d as Product, f as ProductDetail } from '../product-B8elBN21.cjs';
6
- import { O as Order } from '../orders--jclZ94W.cjs';
6
+ import { O as Order } from '../orders-CGwKT5L-.cjs';
7
7
  import { W as Wishlist } from '../wishlist-BdpIFX5_.cjs';
8
8
  import { C as CollectionResponse } from '../collections-fGX_D_Mi.cjs';
9
9
  import { R as Review, A as Analytics, B as Booking } from '../booking-Bpj3o6Av.cjs';
@@ -3,7 +3,7 @@ import { AxiosInstance, AxiosResponse } from 'axios';
3
3
  import { A as Address } from '../address-DwBZHzbI.js';
4
4
  import { U as User, C as Cart, d as CouponResponse, c as Coupon, b as Category } from '../cart-DV1HcSC6.js';
5
5
  import { d as Product, f as ProductDetail } from '../product-B8elBN21.js';
6
- import { O as Order } from '../orders-D1fVTlCj.js';
6
+ import { O as Order } from '../orders-BhmpycYJ.js';
7
7
  import { W as Wishlist } from '../wishlist-B-bvvOxv.js';
8
8
  import { C as CollectionResponse } from '../collections-kERS_kZw.js';
9
9
  import { R as Review, A as Analytics, B as Booking } from '../booking-cbb8kh2L.js';
@@ -1,6 +1,6 @@
1
1
  import * as Yup from 'yup';
2
2
  import { C as Cart, c as Coupon } from '../cart-lJvJzaoH.cjs';
3
- import { O as Order } from '../orders--jclZ94W.cjs';
3
+ import { O as Order } from '../orders-CGwKT5L-.cjs';
4
4
  import '../product-B8elBN21.cjs';
5
5
  import 'react-toastify';
6
6
 
@@ -1,6 +1,6 @@
1
1
  import * as Yup from 'yup';
2
2
  import { C as Cart, c as Coupon } from '../cart-DV1HcSC6.js';
3
- import { O as Order } from '../orders-D1fVTlCj.js';
3
+ import { O as Order } from '../orders-BhmpycYJ.js';
4
4
  import '../product-B8elBN21.js';
5
5
  import 'react-toastify';
6
6
 
@@ -1,4 +1,4 @@
1
- import { O as Order } from '../orders--jclZ94W.cjs';
1
+ import { O as Order } from '../orders-CGwKT5L-.cjs';
2
2
  import { f as ProductDetail } from '../product-B8elBN21.cjs';
3
3
  import 'react-toastify';
4
4
 
@@ -1,4 +1,4 @@
1
- import { O as Order } from '../orders-D1fVTlCj.js';
1
+ import { O as Order } from '../orders-BhmpycYJ.js';
2
2
  import { f as ProductDetail } from '../product-B8elBN21.js';
3
3
  import 'react-toastify';
4
4
 
@@ -11,7 +11,7 @@ import '../address-DwBZHzbI.cjs';
11
11
  import '../product-B8elBN21.cjs';
12
12
  import 'react-toastify';
13
13
  import 'react/jsx-runtime';
14
- import '../orders--jclZ94W.cjs';
15
- import '../pixelEvents-CdYQsgEH.cjs';
14
+ import '../orders-CGwKT5L-.cjs';
15
+ import '../pixelEvents-Do1wT3z_.cjs';
16
16
  import '../cart-lJvJzaoH.cjs';
17
17
  import '../collections-fGX_D_Mi.cjs';
@@ -11,7 +11,7 @@ import '../address-DwBZHzbI.js';
11
11
  import '../product-B8elBN21.js';
12
12
  import 'react-toastify';
13
13
  import 'react/jsx-runtime';
14
- import '../orders-D1fVTlCj.js';
15
- import '../pixelEvents-BhKaV1r5.js';
14
+ import '../orders-BhmpycYJ.js';
15
+ import '../pixelEvents-CA14Tvrs.js';
16
16
  import '../cart-DV1HcSC6.js';
17
17
  import '../collections-kERS_kZw.js';
@@ -1,9 +1,9 @@
1
- import { P as PageHeaderProps } from '../pixelEvents-CdYQsgEH.cjs';
1
+ import { P as PageHeaderProps } from '../pixelEvents-Do1wT3z_.cjs';
2
2
  import '../cart-lJvJzaoH.cjs';
3
3
  import '../product-B8elBN21.cjs';
4
4
  import 'react-toastify';
5
5
  import '../collections-fGX_D_Mi.cjs';
6
- import '../orders--jclZ94W.cjs';
6
+ import '../orders-CGwKT5L-.cjs';
7
7
 
8
8
  declare function ThemeDataInitializer({ themeData, }: {
9
9
  themeData: PageHeaderProps;
@@ -1,9 +1,9 @@
1
- import { P as PageHeaderProps } from '../pixelEvents-BhKaV1r5.js';
1
+ import { P as PageHeaderProps } from '../pixelEvents-CA14Tvrs.js';
2
2
  import '../cart-DV1HcSC6.js';
3
3
  import '../product-B8elBN21.js';
4
4
  import 'react-toastify';
5
5
  import '../collections-kERS_kZw.js';
6
- import '../orders-D1fVTlCj.js';
6
+ import '../orders-BhmpycYJ.js';
7
7
 
8
8
  declare function ThemeDataInitializer({ themeData, }: {
9
9
  themeData: PageHeaderProps;
@@ -52,10 +52,10 @@ var useCart = (addressId) => {
52
52
  const [error, setError] = react.useState(null);
53
53
  const [isLoading, setIsLoading] = react.useState(true);
54
54
  const fetchData = react.useCallback(
55
- async (addrId) => {
55
+ async (addrId, shippingId) => {
56
56
  try {
57
57
  setIsLoading(true);
58
- const result = await chunkPARH5TBK_cjs.getCart("/customer/cart/", addrId ?? addressId);
58
+ const result = await chunkPARH5TBK_cjs.getCart("/customer/cart/", addrId ?? addressId, shippingId);
59
59
  setData(result);
60
60
  setError(null);
61
61
  } catch (err) {
@@ -70,8 +70,8 @@ var useCart = (addressId) => {
70
70
  fetchData();
71
71
  }, [fetchData]);
72
72
  const refetchWithParams = react.useCallback(
73
- (newAddressId) => {
74
- fetchData(newAddressId);
73
+ (newAddressId, shippingId) => {
74
+ fetchData(newAddressId, shippingId);
75
75
  },
76
76
  [fetchData]
77
77
  );
@@ -1,7 +1,7 @@
1
1
  import { A as Address } from '../address-DwBZHzbI.cjs';
2
2
  import * as React from 'react';
3
3
  import { C as Cart, b as Category, U as User, c as Coupon } from '../cart-lJvJzaoH.cjs';
4
- import { O as Order } from '../orders--jclZ94W.cjs';
4
+ import { O as Order } from '../orders-CGwKT5L-.cjs';
5
5
  import { d as Product, f as ProductDetail, e as ProductAttribute, A as Attributes } from '../product-B8elBN21.cjs';
6
6
  import { W as Wishlist } from '../wishlist-BdpIFX5_.cjs';
7
7
  export { U as UseAddressFormOptions, a as UseAddressFormReturn, u as useAddressForm } from '../useAddressForm-DGbEn91-.cjs';
@@ -19,8 +19,8 @@ declare const useCart: (addressId?: number) => {
19
19
  data: Cart.Root | undefined;
20
20
  error: unknown;
21
21
  isLoading: boolean;
22
- mutate: (addrId?: number) => Promise<void>;
23
- refetchWithParams: (newAddressId?: number) => void;
22
+ mutate: (addrId?: number, shippingId?: number) => Promise<void>;
23
+ refetchWithParams: (newAddressId?: number, shippingId?: number) => void;
24
24
  setData: React.Dispatch<React.SetStateAction<Cart.Root | undefined>>;
25
25
  };
26
26
 
@@ -1,7 +1,7 @@
1
1
  import { A as Address } from '../address-DwBZHzbI.js';
2
2
  import * as React from 'react';
3
3
  import { C as Cart, b as Category, U as User, c as Coupon } from '../cart-DV1HcSC6.js';
4
- import { O as Order } from '../orders-D1fVTlCj.js';
4
+ import { O as Order } from '../orders-BhmpycYJ.js';
5
5
  import { d as Product, f as ProductDetail, e as ProductAttribute, A as Attributes } from '../product-B8elBN21.js';
6
6
  import { W as Wishlist } from '../wishlist-B-bvvOxv.js';
7
7
  export { U as UseAddressFormOptions, a as UseAddressFormReturn, u as useAddressForm } from '../useAddressForm-cO3Au33k.js';
@@ -19,8 +19,8 @@ declare const useCart: (addressId?: number) => {
19
19
  data: Cart.Root | undefined;
20
20
  error: unknown;
21
21
  isLoading: boolean;
22
- mutate: (addrId?: number) => Promise<void>;
23
- refetchWithParams: (newAddressId?: number) => void;
22
+ mutate: (addrId?: number, shippingId?: number) => Promise<void>;
23
+ refetchWithParams: (newAddressId?: number, shippingId?: number) => void;
24
24
  setData: React.Dispatch<React.SetStateAction<Cart.Root | undefined>>;
25
25
  };
26
26
 
@@ -50,10 +50,10 @@ var useCart = (addressId) => {
50
50
  const [error, setError] = useState(null);
51
51
  const [isLoading, setIsLoading] = useState(true);
52
52
  const fetchData = useCallback(
53
- async (addrId) => {
53
+ async (addrId, shippingId) => {
54
54
  try {
55
55
  setIsLoading(true);
56
- const result = await getCart("/customer/cart/", addrId ?? addressId);
56
+ const result = await getCart("/customer/cart/", addrId ?? addressId, shippingId);
57
57
  setData(result);
58
58
  setError(null);
59
59
  } catch (err) {
@@ -68,8 +68,8 @@ var useCart = (addressId) => {
68
68
  fetchData();
69
69
  }, [fetchData]);
70
70
  const refetchWithParams = useCallback(
71
- (newAddressId) => {
72
- fetchData(newAddressId);
71
+ (newAddressId, shippingId) => {
72
+ fetchData(newAddressId, shippingId);
73
73
  },
74
74
  [fetchData]
75
75
  );
@@ -2,7 +2,7 @@ export { A as Address } from '../address-DwBZHzbI.cjs';
2
2
  export { A as Analytics, B as Booking, a as BookingDetails, R as Review } from '../booking-Bpj3o6Av.cjs';
3
3
  export { A as ApplicableTarget, C as Cart, a as CartState, b as Category, c as Coupon, d as CouponResponse, e as CouponStatus, f as Coupons, D as DiscountType, U as User, V as ValueType } from '../cart-lJvJzaoH.cjs';
4
4
  export { A as CollectionAttributes, C as CollectionResponse, s as singleCollection } from '../collections-fGX_D_Mi.cjs';
5
- export { O as Order } from '../orders--jclZ94W.cjs';
5
+ export { O as Order } from '../orders-CGwKT5L-.cjs';
6
6
  export { D as Data, P as PaymentInstrument, a as PhonePe } from '../phonepe-dWMLZel6.cjs';
7
7
  export { A as Attributes, B as BaseProduct, a as BookingService, b as BookingServiceDate, c as Brand, C as CustomField, O as OperatingHours, P as Photos, d as Product, e as ProductAttribute, f as ProductDetail, S as SpecialHours, T as TimeSlot, W as WishlistState } from '../product-B8elBN21.cjs';
8
8
  export { W as Wishlist } from '../wishlist-BdpIFX5_.cjs';
@@ -2,7 +2,7 @@ export { A as Address } from '../address-DwBZHzbI.js';
2
2
  export { A as Analytics, B as Booking, a as BookingDetails, R as Review } from '../booking-cbb8kh2L.js';
3
3
  export { A as ApplicableTarget, C as Cart, a as CartState, b as Category, c as Coupon, d as CouponResponse, e as CouponStatus, f as Coupons, D as DiscountType, U as User, V as ValueType } from '../cart-DV1HcSC6.js';
4
4
  export { A as CollectionAttributes, C as CollectionResponse, s as singleCollection } from '../collections-kERS_kZw.js';
5
- export { O as Order } from '../orders-D1fVTlCj.js';
5
+ export { O as Order } from '../orders-BhmpycYJ.js';
6
6
  export { D as Data, P as PaymentInstrument, a as PhonePe } from '../phonepe-dWMLZel6.js';
7
7
  export { A as Attributes, B as BaseProduct, a as BookingService, b as BookingServiceDate, c as Brand, C as CustomField, O as OperatingHours, P as Photos, d as Product, e as ProductAttribute, f as ProductDetail, S as SpecialHours, T as TimeSlot, W as WishlistState } from '../product-B8elBN21.js';
8
8
  export { W as Wishlist } from '../wishlist-B-bvvOxv.js';
@@ -11,6 +11,7 @@ declare namespace Order {
11
11
  purchased_products: PurchasedProduct[];
12
12
  order_status: OrderStatus;
13
13
  order_number: number;
14
+ order_ref: string;
14
15
  payment_method: string | null;
15
16
  shipping_address: string;
16
17
  shipping_city: string;
@@ -34,6 +35,8 @@ declare namespace Order {
34
35
  total_amount: number;
35
36
  }[];
36
37
  is_preorder: boolean;
38
+ selected_shipping_option_name: string;
39
+ shipping_amount: number;
37
40
  }
38
41
  interface OrderResponse {
39
42
  currentPage: number;
@@ -69,6 +72,7 @@ declare namespace Order {
69
72
  purchased_products: PurchasedProduct[];
70
73
  order_status: string;
71
74
  order_number: number;
75
+ order_ref: string;
72
76
  payment_method: string | null;
73
77
  shipping_address: string;
74
78
  shipping_city: string;
@@ -11,6 +11,7 @@ declare namespace Order {
11
11
  purchased_products: PurchasedProduct[];
12
12
  order_status: OrderStatus;
13
13
  order_number: number;
14
+ order_ref: string;
14
15
  payment_method: string | null;
15
16
  shipping_address: string;
16
17
  shipping_city: string;
@@ -34,6 +35,8 @@ declare namespace Order {
34
35
  total_amount: number;
35
36
  }[];
36
37
  is_preorder: boolean;
38
+ selected_shipping_option_name: string;
39
+ shipping_amount: number;
37
40
  }
38
41
  interface OrderResponse {
39
42
  currentPage: number;
@@ -69,6 +72,7 @@ declare namespace Order {
69
72
  purchased_products: PurchasedProduct[];
70
73
  order_status: string;
71
74
  order_number: number;
75
+ order_ref: string;
72
76
  payment_method: string | null;
73
77
  shipping_address: string;
74
78
  shipping_city: string;
@@ -1,6 +1,6 @@
1
1
  import { b as Category$1, C as Cart } from './cart-DV1HcSC6.js';
2
2
  import { C as CollectionResponse } from './collections-kERS_kZw.js';
3
- import { O as Order } from './orders-D1fVTlCj.js';
3
+ import { O as Order } from './orders-BhmpycYJ.js';
4
4
  import { f as ProductDetail, d as Product } from './product-B8elBN21.js';
5
5
 
6
6
  interface PageProps {
@@ -1,6 +1,6 @@
1
1
  import { b as Category$1, C as Cart } from './cart-lJvJzaoH.cjs';
2
2
  import { C as CollectionResponse } from './collections-fGX_D_Mi.cjs';
3
- import { O as Order } from './orders--jclZ94W.cjs';
3
+ import { O as Order } from './orders-CGwKT5L-.cjs';
4
4
  import { f as ProductDetail, d as Product } from './product-B8elBN21.cjs';
5
5
 
6
6
  interface PageProps {
@@ -2,10 +2,10 @@ import * as zustand from 'zustand';
2
2
  import { a as CartState, C as Cart, U as User } from '../cart-lJvJzaoH.cjs';
3
3
  import { W as Wishlist } from '../wishlist-BdpIFX5_.cjs';
4
4
  import { d as Product } from '../product-B8elBN21.cjs';
5
- import { P as PageHeaderProps } from '../pixelEvents-CdYQsgEH.cjs';
5
+ import { P as PageHeaderProps } from '../pixelEvents-Do1wT3z_.cjs';
6
6
  import 'react-toastify';
7
7
  import '../collections-fGX_D_Mi.cjs';
8
- import '../orders--jclZ94W.cjs';
8
+ import '../orders-CGwKT5L-.cjs';
9
9
 
10
10
  interface CartStore extends CartState {
11
11
  setCart: (cart: Cart.Root) => void;
@@ -2,10 +2,10 @@ import * as zustand from 'zustand';
2
2
  import { a as CartState, C as Cart, U as User } from '../cart-DV1HcSC6.js';
3
3
  import { W as Wishlist } from '../wishlist-B-bvvOxv.js';
4
4
  import { d as Product } from '../product-B8elBN21.js';
5
- import { P as PageHeaderProps } from '../pixelEvents-BhKaV1r5.js';
5
+ import { P as PageHeaderProps } from '../pixelEvents-CA14Tvrs.js';
6
6
  import 'react-toastify';
7
7
  import '../collections-kERS_kZw.js';
8
- import '../orders-D1fVTlCj.js';
8
+ import '../orders-BhmpycYJ.js';
9
9
 
10
10
  interface CartStore extends CartState {
11
11
  setCart: (cart: Cart.Root) => void;
@@ -2,13 +2,13 @@ import { f as ProductDetail, O as OperatingHours, T as TimeSlot, A as Attributes
2
2
  export { h as ADDRESS_FORM_SESSION_KEY, i as ALLOWED_COUNTRIES, D as DEFAULT_TOAST_CONFIG, j as PRODUCT_STATUSES, g as SLICE_STATUS, U as USER_CART, k as USER_CREDENTIALS, l as USER_CRED_REFRESH_TOKEN, m as USER_CRED_TOKEN, p as pathNameMap } from '../product-B8elBN21.cjs';
3
3
  import { C as Cart } from '../cart-lJvJzaoH.cjs';
4
4
  export { S as SnapstoreConfig, g as getApiEndpoint, a as getCloudFront, b as getConfig, c as getPhonePeApiEndpoint, d as getPublicApiEndpoint, e as getSecretKey, f as getStoreId, i as initConfig } from '../index-DTyIuLuI.cjs';
5
- import { S as SectionFilters } from '../pixelEvents-CdYQsgEH.cjs';
6
- export { A as AvailableFilter, B as Banner, C as Category, a as CategoryHighlights, b as Collections, c as ColorScheme, F as FilterOption, d as FilterType, e as Footer, H as HeaderCategory, f as Hero, g as HomePageContents, I as ImageWithText, L as LocationData, h as Logo, M as Menuitem, N as NavBar, i as NavElement, j as NavElementOld, P as PageHeaderProps, k as PageMeta, l as PageProps, m as PagePropsFull, n as PreFooter, o as ProductCollection, p as ProductHighlight, R as RibbonBar, q as RibbonMessage, r as Section, s as SectionType, t as SliderSettings, u as SocialLinks, v as SocialMedia, w as StoreReview, x as SubCategory, y as SubCategorySection, T as TemplateTheme, z as Theme, V as ValueHighlights, D as pixelEvents, E as preFooterContent } from '../pixelEvents-CdYQsgEH.cjs';
5
+ import { S as SectionFilters } from '../pixelEvents-Do1wT3z_.cjs';
6
+ export { A as AvailableFilter, B as Banner, C as Category, a as CategoryHighlights, b as Collections, c as ColorScheme, F as FilterOption, d as FilterType, e as Footer, H as HeaderCategory, f as Hero, g as HomePageContents, I as ImageWithText, L as LocationData, h as Logo, M as Menuitem, N as NavBar, i as NavElement, j as NavElementOld, P as PageHeaderProps, k as PageMeta, l as PageProps, m as PagePropsFull, n as PreFooter, o as ProductCollection, p as ProductHighlight, R as RibbonBar, q as RibbonMessage, r as Section, s as SectionType, t as SliderSettings, u as SocialLinks, v as SocialMedia, w as StoreReview, x as SubCategory, y as SubCategorySection, T as TemplateTheme, z as Theme, V as ValueHighlights, D as pixelEvents, E as preFooterContent } from '../pixelEvents-Do1wT3z_.cjs';
7
7
  import { AxiosResponse } from 'axios';
8
8
  import { a as PhonePe } from '../phonepe-dWMLZel6.cjs';
9
9
  import 'react-toastify';
10
10
  import '../collections-fGX_D_Mi.cjs';
11
- import '../orders--jclZ94W.cjs';
11
+ import '../orders-CGwKT5L-.cjs';
12
12
 
13
13
  declare function setAuthTokenChangeCallback(callback: (token: string | undefined) => void): void;
14
14
  declare const Auth: {
@@ -2,13 +2,13 @@ import { f as ProductDetail, O as OperatingHours, T as TimeSlot, A as Attributes
2
2
  export { h as ADDRESS_FORM_SESSION_KEY, i as ALLOWED_COUNTRIES, D as DEFAULT_TOAST_CONFIG, j as PRODUCT_STATUSES, g as SLICE_STATUS, U as USER_CART, k as USER_CREDENTIALS, l as USER_CRED_REFRESH_TOKEN, m as USER_CRED_TOKEN, p as pathNameMap } from '../product-B8elBN21.js';
3
3
  import { C as Cart } from '../cart-DV1HcSC6.js';
4
4
  export { S as SnapstoreConfig, g as getApiEndpoint, a as getCloudFront, b as getConfig, c as getPhonePeApiEndpoint, d as getPublicApiEndpoint, e as getSecretKey, f as getStoreId, i as initConfig } from '../index-DTyIuLuI.js';
5
- import { S as SectionFilters } from '../pixelEvents-BhKaV1r5.js';
6
- export { A as AvailableFilter, B as Banner, C as Category, a as CategoryHighlights, b as Collections, c as ColorScheme, F as FilterOption, d as FilterType, e as Footer, H as HeaderCategory, f as Hero, g as HomePageContents, I as ImageWithText, L as LocationData, h as Logo, M as Menuitem, N as NavBar, i as NavElement, j as NavElementOld, P as PageHeaderProps, k as PageMeta, l as PageProps, m as PagePropsFull, n as PreFooter, o as ProductCollection, p as ProductHighlight, R as RibbonBar, q as RibbonMessage, r as Section, s as SectionType, t as SliderSettings, u as SocialLinks, v as SocialMedia, w as StoreReview, x as SubCategory, y as SubCategorySection, T as TemplateTheme, z as Theme, V as ValueHighlights, D as pixelEvents, E as preFooterContent } from '../pixelEvents-BhKaV1r5.js';
5
+ import { S as SectionFilters } from '../pixelEvents-CA14Tvrs.js';
6
+ export { A as AvailableFilter, B as Banner, C as Category, a as CategoryHighlights, b as Collections, c as ColorScheme, F as FilterOption, d as FilterType, e as Footer, H as HeaderCategory, f as Hero, g as HomePageContents, I as ImageWithText, L as LocationData, h as Logo, M as Menuitem, N as NavBar, i as NavElement, j as NavElementOld, P as PageHeaderProps, k as PageMeta, l as PageProps, m as PagePropsFull, n as PreFooter, o as ProductCollection, p as ProductHighlight, R as RibbonBar, q as RibbonMessage, r as Section, s as SectionType, t as SliderSettings, u as SocialLinks, v as SocialMedia, w as StoreReview, x as SubCategory, y as SubCategorySection, T as TemplateTheme, z as Theme, V as ValueHighlights, D as pixelEvents, E as preFooterContent } from '../pixelEvents-CA14Tvrs.js';
7
7
  import { AxiosResponse } from 'axios';
8
8
  import { a as PhonePe } from '../phonepe-dWMLZel6.js';
9
9
  import 'react-toastify';
10
10
  import '../collections-kERS_kZw.js';
11
- import '../orders-D1fVTlCj.js';
11
+ import '../orders-BhmpycYJ.js';
12
12
 
13
13
  declare function setAuthTokenChangeCallback(callback: (token: string | undefined) => void): void;
14
14
  declare const Auth: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storepecker/storefront-core",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "Shared logic and utilities for Snapstore themes",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",