@scayle/storefront-nuxt 8.9.0 → 8.9.2
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/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,156 @@
|
|
|
1
1
|
# @scayle/storefront-nuxt
|
|
2
2
|
|
|
3
|
+
## 8.9.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Deprecate `key`, `packages`, `shippingDates`, `isEmpty`, `countWithoutSoldOutItems`, `removeItem`, `contains`, `findItem`, `products`, `generateBasketKey` and `mergeBaskets` from `useBasket`.
|
|
8
|
+
|
|
9
|
+
Required updates:
|
|
10
|
+
|
|
11
|
+
- `key`:
|
|
12
|
+
|
|
13
|
+
```TypeScript
|
|
14
|
+
const { key } = useBasket()
|
|
15
|
+
|
|
16
|
+
// will become
|
|
17
|
+
|
|
18
|
+
const { data } = useBasket()
|
|
19
|
+
const key = computed(() => data.value.key)
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- `packages`:
|
|
23
|
+
|
|
24
|
+
```TypeScript
|
|
25
|
+
const { packages } = useBasket()
|
|
26
|
+
|
|
27
|
+
// will become
|
|
28
|
+
|
|
29
|
+
const { data } = useBasket()
|
|
30
|
+
const packages = computed(() => data.value.packages)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
- `shippingDates`:
|
|
34
|
+
|
|
35
|
+
```TypeScript
|
|
36
|
+
const { shippingDates } = useBasket()
|
|
37
|
+
|
|
38
|
+
// will become
|
|
39
|
+
import { getShippingDates } from '@scayle/storefront-nuxt'
|
|
40
|
+
const { data } = useBasket()
|
|
41
|
+
const shippingDates = computed(() => shippingDates(data.value.packages))
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
- `isEmpty`:
|
|
45
|
+
|
|
46
|
+
```TypeScript
|
|
47
|
+
const { isEmpty } = useBasket()
|
|
48
|
+
|
|
49
|
+
// will become
|
|
50
|
+
|
|
51
|
+
const { count } = useBasket()
|
|
52
|
+
const isEmpty = computed(() => count.value === 0)
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
- `countWithoutSoldOutItems`:
|
|
56
|
+
|
|
57
|
+
```TypeScript
|
|
58
|
+
const { countWithoutSoldOutItems } = useBasket()
|
|
59
|
+
|
|
60
|
+
// will become
|
|
61
|
+
|
|
62
|
+
import { countAvailableBasketItems } from '#storefront-basket'
|
|
63
|
+
const { items } = useBasket()
|
|
64
|
+
const isEmpty = computed(() => countAvailableBasketItems(items.value ?? []))
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- `products`:
|
|
68
|
+
|
|
69
|
+
```TypeScript
|
|
70
|
+
const { products } = useBasket()
|
|
71
|
+
|
|
72
|
+
// will become
|
|
73
|
+
|
|
74
|
+
import { findItem } from '#storefront-basket'
|
|
75
|
+
const { items } = useBasket()
|
|
76
|
+
const products = computed(() => items.value?.map((item) => item.product))
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
- `removeItem`:
|
|
80
|
+
|
|
81
|
+
```TypeScript
|
|
82
|
+
const { removeItem, items } = useBasket()
|
|
83
|
+
removeItem({ variantId: items.value[0].variant.id })
|
|
84
|
+
|
|
85
|
+
// will become
|
|
86
|
+
|
|
87
|
+
const { removeItemByKey, items } = useBasket()
|
|
88
|
+
removeItemByKey(items.value[0].key)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
- `contains`:
|
|
92
|
+
|
|
93
|
+
```TypeScript
|
|
94
|
+
const { contains } = useBasket()
|
|
95
|
+
const isInBasket = contains({ variantId: 1 })
|
|
96
|
+
|
|
97
|
+
// will become
|
|
98
|
+
|
|
99
|
+
import { contains } from '#storefront-basket'
|
|
100
|
+
const { items } = useBasket()
|
|
101
|
+
const isInBasket = contains({ variantId: 1 }, items.value ?? [])
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
- `findItem`:
|
|
105
|
+
|
|
106
|
+
```TypeScript
|
|
107
|
+
const { findItem } = useBasket()
|
|
108
|
+
const basketItem = findItem({ variantId: 1 })
|
|
109
|
+
|
|
110
|
+
// will become
|
|
111
|
+
|
|
112
|
+
import { findItem } from '#storefront-basket'
|
|
113
|
+
const { items } = useBasket()
|
|
114
|
+
const basketItem = findItem({ variantId: 1 }, items.value ?? [])
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
- `generateBasketKey`:
|
|
118
|
+
|
|
119
|
+
```TypeScript
|
|
120
|
+
const { generateBasketKey } = useBasket()
|
|
121
|
+
|
|
122
|
+
// will become
|
|
123
|
+
|
|
124
|
+
import { generateBasketKey } from '@scayle/storefront-core/dist/utils/keys'
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
- `generateBasketKey`:
|
|
128
|
+
|
|
129
|
+
```TypeScript
|
|
130
|
+
const { mergeBaskets } = useBasket()
|
|
131
|
+
mergeBaskets('oldKey', 'newKey')
|
|
132
|
+
// will become
|
|
133
|
+
|
|
134
|
+
const mergeBasket = useRpcCall('mergeBaskets')
|
|
135
|
+
mergeBaskets('oldKey', 'newKey')
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
- Improve bootstrap performance by avoiding object merge and reflection
|
|
139
|
+
|
|
140
|
+
**Dependencies**
|
|
141
|
+
|
|
142
|
+
- Updated dependency to @scayle/storefront-core@8.7.0
|
|
143
|
+
|
|
144
|
+
## 8.9.1
|
|
145
|
+
|
|
146
|
+
### Patch Changes
|
|
147
|
+
|
|
148
|
+
- Updated dependency `@vueuse/core@12.5.0` to `@vueuse/core@12.6.1`
|
|
149
|
+
|
|
150
|
+
**Dependencies**
|
|
151
|
+
|
|
152
|
+
- Updated dependency to @scayle/storefront-core@8.6.1
|
|
153
|
+
|
|
3
154
|
## 8.9.0
|
|
4
155
|
|
|
5
156
|
### Minor Changes
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { generateBasketKey } from '@scayle/storefront-core/dist/utils/keys';
|
|
1
2
|
import type { AddOrUpdateItemType, RpcMethodParameters, RpcMethodReturnType, BasketItem, Product, BasketTotalPrice } from '@scayle/storefront-core';
|
|
2
3
|
import { ExistingItemHandling } from '@scayle/storefront-core';
|
|
3
4
|
import { type NormalizedRpcResponse, type UseRpcReturn } from '../core/useRpc.js';
|
|
@@ -15,34 +16,46 @@ type UseBasketBaseReturn = Omit<Awaited<UseRpcReturn<'getBasket'>>, 'data'> & {
|
|
|
15
16
|
existingItemHandling?: ExistingItemHandling;
|
|
16
17
|
}) => Promise<void>;
|
|
17
18
|
addItems: (items: AddOrUpdateItemType[], existingItemHandling?: typeof ExistingItemHandling.ADD_QUANTITY_TO_EXISTING) => Promise<void>;
|
|
19
|
+
removeItemByKey: (itemKey: string) => Promise<void>;
|
|
20
|
+
updateItem: (basketItemKey: string, update: BasketItemUpdateData) => Promise<void>;
|
|
21
|
+
clear: () => Promise<void>;
|
|
22
|
+
items: ComputedRef<BasketItem[] | undefined>;
|
|
23
|
+
cost: ComputedRef<BasketTotalPrice | undefined>;
|
|
24
|
+
count: ComputedRef<number | undefined>;
|
|
25
|
+
/** @deprecated In a future release `mergeBaskets` will be removed. Consider using `useRpcCall('mergeBaskets')` instead.*/
|
|
18
26
|
mergeBaskets: (args: {
|
|
19
27
|
fromBasketKey: string;
|
|
20
28
|
toBasketKey: string;
|
|
21
29
|
}) => RpcMethodReturnType<'mergeBaskets'>;
|
|
30
|
+
/** @deprecated In a future release `findItem` will be removed. Consider using `findItem` from `@scayle/storefront-basket` */
|
|
22
31
|
findItem: (item: {
|
|
23
32
|
variantId: number;
|
|
24
33
|
} | {
|
|
25
34
|
productId: number;
|
|
26
35
|
}) => BasketItem | undefined;
|
|
36
|
+
/** @deprecated In a future release `contains` will be removed. Consider using `contains` from `@scayle/storefront-basket` */
|
|
27
37
|
contains: (item: {
|
|
28
38
|
variantId: number;
|
|
29
39
|
} | {
|
|
30
40
|
productId: number;
|
|
31
41
|
}) => boolean;
|
|
42
|
+
/** @deprecated In a future release `removeItem` will be removed. Consider using {@link UseBasketBaseReturn.removeItemByKey | removeItemByKey } instead*/
|
|
32
43
|
removeItem: (item: {
|
|
33
44
|
variantId: number;
|
|
34
45
|
}) => Promise<void>;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
46
|
+
/** @deprecated In a future release `generateBasketKey` will be removed. Consider using {@link generateBasketKey} instead.*/
|
|
47
|
+
generateBasketKey: typeof generateBasketKey;
|
|
48
|
+
/** @deprecated In a future release `key` will be removed. Consider using {@link UseBasketBaseReturn.items | `items`} instead. */
|
|
38
49
|
products: ComputedRef<Product[]>;
|
|
39
|
-
|
|
50
|
+
/** @deprecated In a future removeItem `countWithoutSoldOutItems` will be removed. Consider using `countAvailableBasketItems` from `@scayle/storefront-basket` */
|
|
40
51
|
countWithoutSoldOutItems: ComputedRef<number | undefined>;
|
|
41
|
-
|
|
42
|
-
cost: ComputedRef<BasketTotalPrice | undefined>;
|
|
52
|
+
/** @deprecated In a future release `key` will be removed. Consider using `data.value.key` instead. */
|
|
43
53
|
key: ComputedRef<BasketKey | undefined>;
|
|
54
|
+
/** @deprecated In a future release `key` will be removed. Consider checking {@link UseBasketBaseReturn.count | count} instead. */
|
|
44
55
|
isEmpty: ComputedRef<boolean>;
|
|
56
|
+
/** @deprecated In a future release `packages` will be removed. Consider using `data.value.packages` instead. */
|
|
45
57
|
packages: ComputedRef<BasketPackageInformation[] | undefined>;
|
|
58
|
+
/** @deprecated In a future release `shippingDates` will be removed. Consider using {@link getShippingDates} instead. */
|
|
46
59
|
shippingDates: ComputedRef<(string | null)[] | undefined>;
|
|
47
60
|
};
|
|
48
61
|
export declare function useBasket({ params, }?: UseBasketOptions, key?: string): UseBasketBaseReturn & Promise<UseBasketBaseReturn>;
|
|
@@ -207,26 +207,26 @@ export function useBasket({
|
|
|
207
207
|
return extendPromise(asyncData, {
|
|
208
208
|
data,
|
|
209
209
|
items,
|
|
210
|
+
count,
|
|
210
211
|
cost,
|
|
211
|
-
key: basketKey,
|
|
212
|
-
packages,
|
|
213
|
-
shippingDates,
|
|
214
|
-
isEmpty,
|
|
215
212
|
refresh,
|
|
216
|
-
|
|
217
|
-
|
|
213
|
+
error,
|
|
214
|
+
status,
|
|
218
215
|
addItem,
|
|
219
216
|
addItems,
|
|
220
|
-
removeItem,
|
|
221
217
|
removeItemByKey,
|
|
222
218
|
updateItem,
|
|
223
219
|
clear,
|
|
220
|
+
key: basketKey,
|
|
221
|
+
packages,
|
|
222
|
+
shippingDates,
|
|
223
|
+
isEmpty,
|
|
224
|
+
countWithoutSoldOutItems,
|
|
225
|
+
removeItem,
|
|
224
226
|
contains,
|
|
225
227
|
products,
|
|
226
228
|
findItem,
|
|
227
229
|
generateBasketKey,
|
|
228
|
-
mergeBaskets
|
|
229
|
-
error,
|
|
230
|
-
status
|
|
230
|
+
mergeBaskets
|
|
231
231
|
});
|
|
232
232
|
}
|
package/dist/runtime/context.js
CHANGED
|
@@ -28,58 +28,8 @@ async function getBasketKey(appKeys, session, $log, $shopConfig) {
|
|
|
28
28
|
log: $log
|
|
29
29
|
}) : session?.id;
|
|
30
30
|
}
|
|
31
|
-
async function sessionProperties(context) {
|
|
32
|
-
const { $shopConfig, $storefront, $log, session } = context;
|
|
33
|
-
const appKeys = $shopConfig.appKeys ?? $storefront.appKeys;
|
|
34
|
-
if (session) {
|
|
35
|
-
return {
|
|
36
|
-
wishlistKey: await getWishlistKey(appKeys, session, $log, $shopConfig),
|
|
37
|
-
basketKey: await getBasketKey(appKeys, session, $log, $shopConfig),
|
|
38
|
-
sessionId: session.id,
|
|
39
|
-
get user() {
|
|
40
|
-
return session.data?.user ?? void 0;
|
|
41
|
-
},
|
|
42
|
-
get accessToken() {
|
|
43
|
-
return session.data?.accessToken ?? void 0;
|
|
44
|
-
},
|
|
45
|
-
get refreshToken() {
|
|
46
|
-
return session.data?.refreshToken ?? void 0;
|
|
47
|
-
},
|
|
48
|
-
destroySession: async () => {
|
|
49
|
-
await session.destroy();
|
|
50
|
-
},
|
|
51
|
-
createUserBoundSession: async () => {
|
|
52
|
-
$log.debug("creating user bound session");
|
|
53
|
-
const data = session.data;
|
|
54
|
-
await session.regenerate();
|
|
55
|
-
session.data = data;
|
|
56
|
-
await session.save();
|
|
57
|
-
},
|
|
58
|
-
updateUser: async (user) => {
|
|
59
|
-
session.data.user = user;
|
|
60
|
-
await session.save();
|
|
61
|
-
},
|
|
62
|
-
updateTokens: async (tokens) => {
|
|
63
|
-
Object.assign(session.data, tokens);
|
|
64
|
-
await session.save();
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
return {
|
|
69
|
-
wishlistKey: void 0,
|
|
70
|
-
basketKey: void 0,
|
|
71
|
-
sessionId: void 0,
|
|
72
|
-
user: void 0,
|
|
73
|
-
accessToken: void 0,
|
|
74
|
-
refreshToken: void 0,
|
|
75
|
-
destroySession: void 0,
|
|
76
|
-
createUserBoundSession: void 0,
|
|
77
|
-
updateUser: void 0,
|
|
78
|
-
updateTokens: void 0
|
|
79
|
-
};
|
|
80
|
-
}
|
|
81
31
|
export const buildContext = async (context) => {
|
|
82
|
-
const { $cache, $shopConfig, $storefront, $log, config, event } = context;
|
|
32
|
+
const { $cache, $shopConfig, $storefront, $log, config, event, session } = context;
|
|
83
33
|
const sapiConfig = $shopConfig.sapi ?? $storefront.sapi;
|
|
84
34
|
const appKeys = $shopConfig.appKeys ?? $storefront.appKeys;
|
|
85
35
|
const idpConfig = $shopConfig.idp ?? $storefront.idp;
|
|
@@ -100,7 +50,7 @@ export const buildContext = async (context) => {
|
|
|
100
50
|
$storefront.cache?.enabled
|
|
101
51
|
);
|
|
102
52
|
const { hooks } = useNitroApp();
|
|
103
|
-
const
|
|
53
|
+
const rpcContext = {
|
|
104
54
|
cached,
|
|
105
55
|
sapiClient,
|
|
106
56
|
auth: {
|
|
@@ -110,11 +60,11 @@ export const buildContext = async (context) => {
|
|
|
110
60
|
url: $shopConfig.checkout.host,
|
|
111
61
|
secret: $shopConfig.checkout.secret,
|
|
112
62
|
token: $shopConfig.checkout.token,
|
|
113
|
-
user: $shopConfig.checkout.user,
|
|
63
|
+
user: String($shopConfig.checkout.user),
|
|
114
64
|
cbdExpiration: $shopConfig.checkout.cbdExpiration
|
|
115
65
|
},
|
|
116
66
|
oauth: {
|
|
117
|
-
clientId: $storefront.oauth.clientId,
|
|
67
|
+
clientId: String($storefront.oauth.clientId),
|
|
118
68
|
clientSecret: $storefront.oauth.clientSecret,
|
|
119
69
|
apiHost: $storefront.oauth.apiHost
|
|
120
70
|
},
|
|
@@ -146,17 +96,47 @@ export const buildContext = async (context) => {
|
|
|
146
96
|
$log
|
|
147
97
|
),
|
|
148
98
|
runtimeConfiguration: config,
|
|
149
|
-
ip
|
|
150
|
-
|
|
99
|
+
get ip() {
|
|
100
|
+
return getRequestIP(event, { xForwardedFor: true });
|
|
101
|
+
},
|
|
102
|
+
get headers() {
|
|
103
|
+
return createAndPurifyHeaders(getRequestHeaders(event));
|
|
104
|
+
},
|
|
151
105
|
internalAccessHeader: $storefront.internalAccessHeader,
|
|
152
106
|
callHook: hooks.callHook,
|
|
153
107
|
callHookParallel: hooks.callHookParallel,
|
|
154
|
-
callHookWith: hooks.callHookWith
|
|
108
|
+
callHookWith: hooks.callHookWith,
|
|
109
|
+
wishlistKey: session ? await getWishlistKey(appKeys, session, $log, $shopConfig) : void 0,
|
|
110
|
+
basketKey: session ? await getBasketKey(appKeys, session, $log, $shopConfig) : void 0,
|
|
111
|
+
sessionId: session?.id,
|
|
112
|
+
get user() {
|
|
113
|
+
return session?.data?.user ?? void 0;
|
|
114
|
+
},
|
|
115
|
+
get accessToken() {
|
|
116
|
+
return session?.data?.accessToken ?? void 0;
|
|
117
|
+
},
|
|
118
|
+
get refreshToken() {
|
|
119
|
+
return session?.data?.refreshToken ?? void 0;
|
|
120
|
+
},
|
|
121
|
+
destroySession: session ? async () => {
|
|
122
|
+
await session.destroy();
|
|
123
|
+
} : void 0,
|
|
124
|
+
createUserBoundSession: session ? async () => {
|
|
125
|
+
$log.debug("creating user bound session");
|
|
126
|
+
const data = session.data;
|
|
127
|
+
await session.regenerate();
|
|
128
|
+
session.data = data;
|
|
129
|
+
await session.save();
|
|
130
|
+
} : void 0,
|
|
131
|
+
updateUser: session ? async (user) => {
|
|
132
|
+
session.data.user = user;
|
|
133
|
+
await session.save();
|
|
134
|
+
} : void 0,
|
|
135
|
+
updateTokens: session ? async (tokens) => {
|
|
136
|
+
Object.assign(session.data, tokens);
|
|
137
|
+
await session.save();
|
|
138
|
+
} : void 0
|
|
155
139
|
};
|
|
156
|
-
const rpcContext = Object.defineProperties({}, {
|
|
157
|
-
...Object.getOwnPropertyDescriptors(baseContext),
|
|
158
|
-
...Object.getOwnPropertyDescriptors(await sessionProperties(context))
|
|
159
|
-
});
|
|
160
140
|
await hooks?.callHook("storefront:context:created", rpcContext);
|
|
161
141
|
return rpcContext;
|
|
162
142
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scayle/storefront-nuxt",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "8.9.
|
|
4
|
+
"version": "8.9.2",
|
|
5
5
|
"description": "Nuxt integration for the SCAYLE Commerce Engine and Storefront API",
|
|
6
6
|
"author": "SCAYLE Commerce Engine",
|
|
7
7
|
"license": "MIT",
|
|
@@ -72,9 +72,9 @@
|
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@opentelemetry/api": "^1.9.0",
|
|
74
74
|
"@scayle/h3-session": "0.6.0",
|
|
75
|
-
"@scayle/storefront-core": "8.
|
|
75
|
+
"@scayle/storefront-core": "8.7.0",
|
|
76
76
|
"@scayle/unstorage-compression-driver": "^0.2.3",
|
|
77
|
-
"@vueuse/core": "12.
|
|
77
|
+
"@vueuse/core": "12.6.1",
|
|
78
78
|
"consola": "^3.2.3",
|
|
79
79
|
"core-js": "^3.37.1",
|
|
80
80
|
"defu": "^6.1.4",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"@nuxt/test-utils": "3.15.4",
|
|
98
98
|
"@scayle/eslint-config-storefront": "4.4.1",
|
|
99
99
|
"@scayle/eslint-plugin-vue-composable": "0.2.1",
|
|
100
|
-
"@types/node": "22.13.
|
|
100
|
+
"@types/node": "22.13.4",
|
|
101
101
|
"dprint": "0.49.0",
|
|
102
102
|
"eslint": "9.20.1",
|
|
103
103
|
"eslint-formatter-gitlab": "5.1.0",
|