@astralweb/nova-recently-viewed 0.0.1
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/LICENSE +23 -0
- package/README.md +311 -0
- package/dist/api/extendMiddleware.d.ts +16 -0
- package/dist/api/extendMiddleware.d.ts.map +1 -0
- package/dist/api/index.d.ts +4 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/queryFields.d.ts +3 -0
- package/dist/api/queryFields.d.ts.map +1 -0
- package/dist/api/web.d.ts +27 -0
- package/dist/api/web.d.ts.map +1 -0
- package/dist/api.cjs +46 -0
- package/dist/api.js +2201 -0
- package/dist/chunks/useRecentlyViewed-BMqCM4G9.js +1 -0
- package/dist/chunks/useRecentlyViewed-DmIwibiG.js +96 -0
- package/dist/chunks/web-DMlcd6E0.js +1 -0
- package/dist/chunks/web-WoqqfD6L.js +26 -0
- package/dist/composables/index.d.ts +2 -0
- package/dist/composables/index.d.ts.map +1 -0
- package/dist/composables/useRecentlyViewed.d.ts +7 -0
- package/dist/composables/useRecentlyViewed.d.ts.map +1 -0
- package/dist/composables.cjs +1 -0
- package/dist/composables.js +4 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/types/api.d.ts +9 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/composables.d.ts +19 -0
- package/dist/types/composables.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types.cjs +1 -0
- package/dist/types.js +1 -0
- package/package.json +95 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Proprietary License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Astral Web
|
|
4
|
+
|
|
5
|
+
This software and associated documentation files (the "Software") are proprietary
|
|
6
|
+
to Astral Web and are intended for internal use only.
|
|
7
|
+
|
|
8
|
+
RESTRICTIONS:
|
|
9
|
+
- This Software is for internal use by Astral Web employees and authorized personnel only.
|
|
10
|
+
- No part of this Software may be reproduced, distributed, or transmitted in any form
|
|
11
|
+
or by any means, including photocopying, recording, or other electronic or mechanical
|
|
12
|
+
methods, without the prior written permission of Astral Web.
|
|
13
|
+
- This Software may not be used outside of Astral Web's business operations.
|
|
14
|
+
- Reverse engineering, decompilation, or disassembly of this Software is prohibited.
|
|
15
|
+
|
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
17
|
+
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
|
|
18
|
+
PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ASTRAL WEB BE LIABLE FOR
|
|
19
|
+
ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
|
20
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
21
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
|
22
|
+
|
|
23
|
+
For permissions beyond the scope of this license, please contact Astral Web.
|
package/README.md
ADDED
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
# Recently Viewed 套件使用指南
|
|
2
|
+
|
|
3
|
+
> ⚠️ **內部使用套件** - 此套件僅供 Astral Web 內部使用,未經授權不得用於其他用途。
|
|
4
|
+
|
|
5
|
+
## 概覽
|
|
6
|
+
|
|
7
|
+
Recently Viewed 套件採用 Composable 模式設計,提供完整的最近瀏覽商品功能。支援本地儲存管理、後端同步、訪客與會員資料合併,以及靈活的配置選項。
|
|
8
|
+
|
|
9
|
+
## 安裝與設定
|
|
10
|
+
|
|
11
|
+
### 1. 安裝套件
|
|
12
|
+
|
|
13
|
+
#### 在 apps/web 和 apps/server 安裝
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
yarn add @astralweb/nova-recently-viewed
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### 2. middleware 擴充
|
|
20
|
+
```typescript
|
|
21
|
+
// apps/server/extendApiMethods/index.ts
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
recentlyViewedProducts,
|
|
25
|
+
addRecentlyViewedProducts,
|
|
26
|
+
} from '@astralweb/nova-recently-viewed/api';
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 3. SDK 設定
|
|
30
|
+
```typescript
|
|
31
|
+
// apps/web/plugins/sdk.client.ts
|
|
32
|
+
import { setSdk } from '@astralweb/nova-recently-viewed/api';
|
|
33
|
+
|
|
34
|
+
export default defineNuxtPlugin(() => {
|
|
35
|
+
// 設定 SDK 實例
|
|
36
|
+
setSdk(sdkInstance);
|
|
37
|
+
});
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 4. 新增 nuxt.config.ts 設定
|
|
41
|
+
```typescript
|
|
42
|
+
export default defineNuxtConfig({
|
|
43
|
+
vite: {
|
|
44
|
+
ssr: {
|
|
45
|
+
noExternal: ['@astralweb/nova-recently-viewed'],
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
})
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 組件基本使用
|
|
52
|
+
|
|
53
|
+
### 在商品頁面中使用
|
|
54
|
+
|
|
55
|
+
```vue
|
|
56
|
+
<template>
|
|
57
|
+
<div>
|
|
58
|
+
<!-- 商品內容 -->
|
|
59
|
+
<ProductDetails :product="product" />
|
|
60
|
+
|
|
61
|
+
<!-- 最近瀏覽商品區塊 -->
|
|
62
|
+
<section v-if="recentlyViewedSkus && recentlyViewedSkus.length > 0" class="mb-10">
|
|
63
|
+
<ProductSlider
|
|
64
|
+
:title="t('product.section.recentlyViewed')"
|
|
65
|
+
:products-sku="recentlyViewedSkus"
|
|
66
|
+
maintain-order
|
|
67
|
+
/>
|
|
68
|
+
</section>
|
|
69
|
+
</div>
|
|
70
|
+
</template>
|
|
71
|
+
|
|
72
|
+
<script setup lang="ts">
|
|
73
|
+
import { useRecentlyViewed } from '@astralweb/nova-recently-viewed';
|
|
74
|
+
|
|
75
|
+
const route = useRoute();
|
|
76
|
+
const { t } = useI18n();
|
|
77
|
+
|
|
78
|
+
// 獲取當前商品資料
|
|
79
|
+
const { data: product } = await useAsyncData('product', () =>
|
|
80
|
+
fetchProduct(route.params.slug)
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
// 使用最近瀏覽功能
|
|
84
|
+
const {
|
|
85
|
+
addRecentlyViewed,
|
|
86
|
+
getRecentlyViewedSkus,
|
|
87
|
+
mergeGuestToCustomer,
|
|
88
|
+
isLoggedIn
|
|
89
|
+
} = useRecentlyViewed();
|
|
90
|
+
|
|
91
|
+
const recentlyViewedSkus = ref<string[]>([]);
|
|
92
|
+
|
|
93
|
+
// 初始化最近瀏覽商品
|
|
94
|
+
const initializeRecentlyViewed = async (currentSku: string) => {
|
|
95
|
+
if (!currentSku) return;
|
|
96
|
+
|
|
97
|
+
if (isLoggedIn.value) {
|
|
98
|
+
// 登入用戶:先合併資料 > 再添加當前商品 > 最後獲取列表
|
|
99
|
+
await mergeGuestToCustomer();
|
|
100
|
+
await addRecentlyViewed(currentSku);
|
|
101
|
+
recentlyViewedSkus.value = await getRecentlyViewedSkus(currentSku);
|
|
102
|
+
} else {
|
|
103
|
+
// 訪客用戶:先顯示現有資料 > 再添加當前商品
|
|
104
|
+
recentlyViewedSkus.value = await getRecentlyViewedSkus(currentSku);
|
|
105
|
+
await addRecentlyViewed(currentSku);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
// 在商品頁面掛載時調用
|
|
110
|
+
onMounted(() => {
|
|
111
|
+
if (product.value?.sku) {
|
|
112
|
+
initializeRecentlyViewed(product.value.sku);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
</script>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 登入狀態處理
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
<script setup lang="ts">
|
|
122
|
+
import { useRecentlyViewed } from '@astralweb/nova-recently-viewed';
|
|
123
|
+
|
|
124
|
+
const { mergeGuestToCustomer, isLoggedIn } = useRecentlyViewed();
|
|
125
|
+
|
|
126
|
+
// 監聽登入狀態變化
|
|
127
|
+
watch(isLoggedIn, async (newValue, oldValue) => {
|
|
128
|
+
// 當用戶從未登入變為登入狀態時,合併訪客資料
|
|
129
|
+
if (!oldValue && newValue) {
|
|
130
|
+
await mergeGuestToCustomer();
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
</script>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## API 參考
|
|
137
|
+
|
|
138
|
+
### Composables
|
|
139
|
+
|
|
140
|
+
#### useRecentlyViewed
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
const {
|
|
144
|
+
addRecentlyViewed,
|
|
145
|
+
getRecentlyViewedSkus,
|
|
146
|
+
clearAllRecentlyViewed,
|
|
147
|
+
mergeGuestToCustomer,
|
|
148
|
+
isLoggedIn
|
|
149
|
+
} = useRecentlyViewed(
|
|
150
|
+
config?: RecentlyViewedConfig,
|
|
151
|
+
isLoggedIn?: ComputedRef<boolean>
|
|
152
|
+
): UseRecentlyViewedReturn;
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
##### 參數
|
|
156
|
+
|
|
157
|
+
| 參數 | 類型 | 預設值 | 說明 |
|
|
158
|
+
|------|------|--------|------|
|
|
159
|
+
| `config` | `RecentlyViewedConfig` | `{}` | 可選的配置選項 |
|
|
160
|
+
| `isLoggedIn` | `ComputedRef<boolean>` | `computed(() => false)` | 可選的登入狀態 |
|
|
161
|
+
|
|
162
|
+
##### 配置選項 (RecentlyViewedConfig)
|
|
163
|
+
|
|
164
|
+
| 屬性 | 類型 | 預設值 | 說明 |
|
|
165
|
+
|------|------|--------|------|
|
|
166
|
+
| `maxItems` | `number` | `20` | 最大儲存商品數量 |
|
|
167
|
+
| `guestStorageKey` | `string` | `'recently_viewed_products_guest'` | 訪客本地儲存鍵 |
|
|
168
|
+
| `customerStorageKey` | `string` | `'recently_viewed_products_customer'` | 會員本地儲存鍵 |
|
|
169
|
+
| `enableServerSync` | `boolean` | `true` | 是否啟用後端同步 |
|
|
170
|
+
|
|
171
|
+
##### 返回值 (UseRecentlyViewedReturn)
|
|
172
|
+
|
|
173
|
+
| 方法 | 類型 | 說明 |
|
|
174
|
+
|------|------|------|
|
|
175
|
+
| `addRecentlyViewed` | `(sku: string) => Promise<void>` | 添加商品到最近瀏覽 |
|
|
176
|
+
| `getRecentlyViewedSkus` | `(excludeSku?: string) => Promise<string[]>` | 獲取最近瀏覽商品 SKU 列表 |
|
|
177
|
+
| `clearAllRecentlyViewed` | `() => Promise<void>` | 清除所有最近瀏覽記錄 |
|
|
178
|
+
| `mergeGuestToCustomer` | `() => Promise<void>` | 合併訪客資料到會員帳戶 |
|
|
179
|
+
| `isLoggedIn` | `ComputedRef<boolean>` | 登入狀態響應式引用 |
|
|
180
|
+
|
|
181
|
+
### API Functions
|
|
182
|
+
|
|
183
|
+
#### Web 客戶端 API
|
|
184
|
+
|
|
185
|
+
```typescript
|
|
186
|
+
import {
|
|
187
|
+
fetchRecentlyViewedWeb,
|
|
188
|
+
addRecentlyViewedWeb,
|
|
189
|
+
setSdk,
|
|
190
|
+
getSdk
|
|
191
|
+
} from '@astralweb/nova-recently-viewed/api';
|
|
192
|
+
|
|
193
|
+
// 設定 SDK
|
|
194
|
+
setSdk(sdkInstance);
|
|
195
|
+
|
|
196
|
+
// 獲取最近瀏覽商品
|
|
197
|
+
const products = await fetchRecentlyViewedWeb();
|
|
198
|
+
|
|
199
|
+
// 添加最近瀏覽商品
|
|
200
|
+
const result = await addRecentlyViewedWeb([
|
|
201
|
+
{ product_sku: 'SKU001', viewed_at: 1234567890 }
|
|
202
|
+
]);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
#### Middleware API
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
import {
|
|
209
|
+
recentlyViewedProducts,
|
|
210
|
+
addRecentlyViewedProducts
|
|
211
|
+
} from '@astralweb/nova-recently-viewed/api';
|
|
212
|
+
|
|
213
|
+
// 在 middleware 中使用
|
|
214
|
+
export const customRecentlyViewedProducts = async (context, variables) => {
|
|
215
|
+
return await recentlyViewedProducts(context, variables);
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export const customAddRecentlyViewedProducts = async (context, variables) => {
|
|
219
|
+
return await addRecentlyViewedProducts(context, variables);
|
|
220
|
+
};
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
### 類型定義
|
|
224
|
+
|
|
225
|
+
#### 核心類型
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
// 最近瀏覽商品項目
|
|
229
|
+
interface RecentlyViewedItem {
|
|
230
|
+
sku: string;
|
|
231
|
+
viewedAt: number; // JavaScript timestamp (毫秒)
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// API 輸入類型
|
|
235
|
+
interface AddRecentlyViewedInputItem {
|
|
236
|
+
product_sku: string;
|
|
237
|
+
viewed_at: number; // Unix timestamp (秒)
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// API 回應類型
|
|
241
|
+
interface AddRecentlyViewedResponse {
|
|
242
|
+
success: boolean;
|
|
243
|
+
message?: string;
|
|
244
|
+
}
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## 故障排除
|
|
248
|
+
|
|
249
|
+
### 常見問題
|
|
250
|
+
|
|
251
|
+
#### 1. 最近瀏覽商品不顯示
|
|
252
|
+
|
|
253
|
+
**問題**:調用 `getRecentlyViewedSkus()` 返回空陣列
|
|
254
|
+
|
|
255
|
+
**解決方案**:
|
|
256
|
+
- 檢查是否正確調用了 `addRecentlyViewed()`
|
|
257
|
+
- 確認 localStorage 是否可用
|
|
258
|
+
- 檢查是否有 JavaScript 錯誤
|
|
259
|
+
|
|
260
|
+
```typescript
|
|
261
|
+
// 調試用的詳細日誌
|
|
262
|
+
const debugRecentlyViewed = async () => {
|
|
263
|
+
console.log('Browser check:', typeof window !== 'undefined');
|
|
264
|
+
console.log('LocalStorage check:', typeof localStorage !== 'undefined');
|
|
265
|
+
|
|
266
|
+
const skus = await getRecentlyViewedSkus();
|
|
267
|
+
console.log('Recently viewed SKUs:', skus);
|
|
268
|
+
};
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
#### 2. 後端同步失敗
|
|
272
|
+
|
|
273
|
+
**問題**:商品添加到本地但不同步到後端
|
|
274
|
+
|
|
275
|
+
**解決方案**:
|
|
276
|
+
- 檢查 SDK 是否正確設定
|
|
277
|
+
- 確認 middleware 是否正確導出
|
|
278
|
+
- 檢查網路連接和 API 權限
|
|
279
|
+
|
|
280
|
+
```typescript
|
|
281
|
+
// 檢查 SDK 設定
|
|
282
|
+
try {
|
|
283
|
+
const sdk = getSdk();
|
|
284
|
+
console.log('SDK configured:', !!sdk);
|
|
285
|
+
} catch (error) {
|
|
286
|
+
console.error('SDK not configured:', error);
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
#### 3. 訪客資料合併問題
|
|
291
|
+
|
|
292
|
+
**問題**:登入後訪客資料沒有合併
|
|
293
|
+
|
|
294
|
+
**解決方案**:
|
|
295
|
+
- 確認 `mergeGuestToCustomer()` 在適當時機被調用
|
|
296
|
+
- 檢查登入狀態監聽是否正確設定
|
|
297
|
+
|
|
298
|
+
```typescript
|
|
299
|
+
// 確保合併在登入後執行
|
|
300
|
+
const handleLogin = async () => {
|
|
301
|
+
// 執行登入邏輯
|
|
302
|
+
await loginUser();
|
|
303
|
+
|
|
304
|
+
// 登入成功後合併資料
|
|
305
|
+
await mergeGuestToCustomer();
|
|
306
|
+
};
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
## 授權聲明
|
|
310
|
+
|
|
311
|
+
此套件僅供 Astral Web 內部使用,未經授權不得用於其他用途。
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ApolloQueryResult } from '@apollo/client/core';
|
|
2
|
+
import { Context, TObject } from '@vue-storefront/middleware';
|
|
3
|
+
import { AddRecentlyViewedInputItem, AddRecentlyViewedResponse } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* 查詢最近瀏覽商品
|
|
6
|
+
*/
|
|
7
|
+
export declare const recentlyViewedProducts: (context: Context, variables: TObject) => Promise<ApolloQueryResult<{
|
|
8
|
+
recentlyViewedProducts: AddRecentlyViewedInputItem[];
|
|
9
|
+
}>>;
|
|
10
|
+
/**
|
|
11
|
+
* 添加商品到最近瀏覽列表
|
|
12
|
+
*/
|
|
13
|
+
export declare const addRecentlyViewedProducts: (context: Context, variables: TObject) => Promise<ApolloQueryResult<{
|
|
14
|
+
addRecentlyViewedProducts: AddRecentlyViewedResponse;
|
|
15
|
+
}>>;
|
|
16
|
+
//# sourceMappingURL=extendMiddleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extendMiddleware.d.ts","sourceRoot":"","sources":["../../src/api/extendMiddleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAe,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAEnE,OAAO,KAAK,EACV,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,SAAS,CAAC;AAYjB;;GAEG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,OAAO,EAChB,WAAW,OAAO,KACjB,OAAO,CAAC,iBAAiB,CAAC;IAAE,sBAAsB,EAAE,0BAA0B,EAAE,CAAC;CAAE,CAAC,CAoBtF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,SAAS,OAAO,EAChB,WAAW,OAAO,KACjB,OAAO,CAAC,iBAAiB,CAAC;IAAE,yBAAyB,EAAE,yBAAyB,CAAC;CAAE,CAAC,CAoBtF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,OAAO,CAAC;AACtB,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export declare const recentlyViewedProductsFields = "\n recently_viewed_products {\n product_sku\n viewed_at\n }\n";
|
|
2
|
+
export declare const addRecentlyViewedProductsFields = "\n add_recently_viewed_products(input: $input) {\n success\n message\n }\n";
|
|
3
|
+
//# sourceMappingURL=queryFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryFields.d.ts","sourceRoot":"","sources":["../../src/api/queryFields.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,4BAA4B,0EAKxC,CAAC;AAEF,eAAO,MAAM,+BAA+B,uFAK3C,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { WithoutContext } from '@vue-storefront/middleware';
|
|
2
|
+
import { AddRecentlyViewedInputItem, AddRecentlyViewedResponse } from '../types';
|
|
3
|
+
import type * as extensionApiMethods from '../api/extendMiddleware';
|
|
4
|
+
type ExtensionEndpoints = WithoutContext<typeof extensionApiMethods>;
|
|
5
|
+
export interface SdkInstance {
|
|
6
|
+
magento: ExtensionEndpoints;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 設定 SDK
|
|
10
|
+
* @param sdk SDK 實例
|
|
11
|
+
*/
|
|
12
|
+
export declare function setSdk(sdk: SdkInstance): void;
|
|
13
|
+
/**
|
|
14
|
+
* 獲取 SDK
|
|
15
|
+
* @returns SDK 實例
|
|
16
|
+
*/
|
|
17
|
+
export declare function getSdk(): SdkInstance;
|
|
18
|
+
/**
|
|
19
|
+
* 獲取最近瀏覽商品列表
|
|
20
|
+
*/
|
|
21
|
+
export declare const fetchRecentlyViewedWeb: () => Promise<AddRecentlyViewedInputItem[]>;
|
|
22
|
+
/**
|
|
23
|
+
* 添加商品到最近瀏覽列表
|
|
24
|
+
*/
|
|
25
|
+
export declare const addRecentlyViewedWeb: (input: AddRecentlyViewedInputItem[]) => Promise<AddRecentlyViewedResponse>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/api/web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,KAAK,KAAK,mBAAmB,MAAM,yBAAyB,CAAC;AACpE,OAAO,KAAK,EACV,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,UAAU,CAAC;AAElB,KAAK,kBAAkB,GAAG,cAAc,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,kBAAkB,CAAC;CAC7B;AAID;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAE7C;AAED;;;GAGG;AACH,wBAAgB,MAAM,IAAI,WAAW,CAKpC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,QAAa,OAAO,CAAC,0BAA0B,EAAE,CAQnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,0BAA0B,EAAE,KAClC,OAAO,CAAC,yBAAyB,CAQnC,CAAC"}
|
package/dist/api.cjs
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const C=require("./chunks/web-DMlcd6E0.js"),ne=`
|
|
2
|
+
recently_viewed_products {
|
|
3
|
+
product_sku
|
|
4
|
+
viewed_at
|
|
5
|
+
}
|
|
6
|
+
`,ie=`
|
|
7
|
+
add_recently_viewed_products(input: $input) {
|
|
8
|
+
success
|
|
9
|
+
message
|
|
10
|
+
}
|
|
11
|
+
`;var k=function(){return k=Object.assign||function(t){for(var n,s=1,i=arguments.length;s<i;s++){n=arguments[s];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},k.apply(this,arguments)};function F(e,t){if(!!!e)throw new Error(t)}function se(e){return typeof e=="object"&&e!==null}function re(e,t){if(!!!e)throw new Error("Unexpected invariant triggered.")}const oe=/\r\n|[\n\r]/g;function P(e,t){let n=0,s=1;for(const i of e.body.matchAll(oe)){if(typeof i.index=="number"||re(!1),i.index>=t)break;n=i.index+i[0].length,s+=1}return{line:s,column:t+1-n}}function ae(e){return G(e.source,P(e.source,e.start))}function G(e,t){const n=e.locationOffset.column-1,s="".padStart(n)+e.body,i=t.line-1,r=e.locationOffset.line-1,a=t.line+r,u=t.line===1?n:0,l=t.column+u,E=`${e.name}:${a}:${l}
|
|
12
|
+
`,h=s.split(/\r\n|[\n\r]/g),N=h[i];if(N.length>120){const m=Math.floor(l/80),L=l%80,f=[];for(let x=0;x<N.length;x+=80)f.push(N.slice(x,x+80));return E+B([[`${a} |`,f[0]],...f.slice(1,m+1).map(x=>["|",x]),["|","^".padStart(L)],["|",f[m+1]]])}return E+B([[`${a-1} |`,h[i-1]],[`${a} |`,N],["|","^".padStart(l)],[`${a+1} |`,h[i+1]]])}function B(e){const t=e.filter(([s,i])=>i!==void 0),n=Math.max(...t.map(([s])=>s.length));return t.map(([s,i])=>s.padStart(n)+(i?" "+i:"")).join(`
|
|
13
|
+
`)}function ce(e){const t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}class U extends Error{constructor(t,...n){var s,i,r;const{nodes:a,source:u,positions:l,path:E,originalError:h,extensions:N}=ce(n);super(t),this.name="GraphQLError",this.path=E??void 0,this.originalError=h??void 0,this.nodes=j(Array.isArray(a)?a:a?[a]:void 0);const m=j((s=this.nodes)===null||s===void 0?void 0:s.map(f=>f.loc).filter(f=>f!=null));this.source=u??(m==null||(i=m[0])===null||i===void 0?void 0:i.source),this.positions=l??m?.map(f=>f.start),this.locations=l&&u?l.map(f=>P(u,f)):m?.map(f=>P(f.source,f.start));const L=se(h?.extensions)?h?.extensions:void 0;this.extensions=(r=N??L)!==null&&r!==void 0?r:Object.create(null),Object.defineProperties(this,{message:{writable:!0,enumerable:!0},name:{enumerable:!1},nodes:{enumerable:!1},source:{enumerable:!1},positions:{enumerable:!1},originalError:{enumerable:!1}}),h!=null&&h.stack?Object.defineProperty(this,"stack",{value:h.stack,writable:!0,configurable:!0}):Error.captureStackTrace?Error.captureStackTrace(this,U):Object.defineProperty(this,"stack",{value:Error().stack,writable:!0,configurable:!0})}get[Symbol.toStringTag](){return"GraphQLError"}toString(){let t=this.message;if(this.nodes)for(const n of this.nodes)n.loc&&(t+=`
|
|
14
|
+
|
|
15
|
+
`+ae(n.loc));else if(this.source&&this.locations)for(const n of this.locations)t+=`
|
|
16
|
+
|
|
17
|
+
`+G(this.source,n);return t}toJSON(){const t={message:this.message};return this.locations!=null&&(t.locations=this.locations),this.path!=null&&(t.path=this.path),this.extensions!=null&&Object.keys(this.extensions).length>0&&(t.extensions=this.extensions),t}}function j(e){return e===void 0||e.length===0?void 0:e}function d(e,t,n){return new U(`Syntax Error: ${n}`,{source:e,positions:[t]})}class ue{constructor(t,n,s){this.start=t.start,this.end=n.end,this.startToken=t,this.endToken=n,this.source=s}get[Symbol.toStringTag](){return"Location"}toJSON(){return{start:this.start,end:this.end}}}class Y{constructor(t,n,s,i,r,a){this.kind=t,this.start=n,this.end=s,this.line=i,this.column=r,this.value=a,this.prev=null,this.next=null}get[Symbol.toStringTag](){return"Token"}toJSON(){return{kind:this.kind,value:this.value,line:this.line,column:this.column}}}const le={Name:[],Document:["definitions"],OperationDefinition:["name","variableDefinitions","directives","selectionSet"],VariableDefinition:["variable","type","defaultValue","directives"],Variable:["name"],SelectionSet:["selections"],Field:["alias","name","arguments","directives","selectionSet"],Argument:["name","value"],FragmentSpread:["name","directives"],InlineFragment:["typeCondition","directives","selectionSet"],FragmentDefinition:["name","variableDefinitions","typeCondition","directives","selectionSet"],IntValue:[],FloatValue:[],StringValue:[],BooleanValue:[],NullValue:[],EnumValue:[],ListValue:["values"],ObjectValue:["fields"],ObjectField:["name","value"],Directive:["name","arguments"],NamedType:["name"],ListType:["type"],NonNullType:["type"],SchemaDefinition:["description","directives","operationTypes"],OperationTypeDefinition:["type"],ScalarTypeDefinition:["description","name","directives"],ObjectTypeDefinition:["description","name","interfaces","directives","fields"],FieldDefinition:["description","name","arguments","type","directives"],InputValueDefinition:["description","name","type","defaultValue","directives"],InterfaceTypeDefinition:["description","name","interfaces","directives","fields"],UnionTypeDefinition:["description","name","directives","types"],EnumTypeDefinition:["description","name","directives","values"],EnumValueDefinition:["description","name","directives"],InputObjectTypeDefinition:["description","name","directives","fields"],DirectiveDefinition:["description","name","arguments","locations"],SchemaExtension:["directives","operationTypes"],ScalarTypeExtension:["name","directives"],ObjectTypeExtension:["name","interfaces","directives","fields"],InterfaceTypeExtension:["name","interfaces","directives","fields"],UnionTypeExtension:["name","directives","types"],EnumTypeExtension:["name","directives","values"],InputObjectTypeExtension:["name","directives","fields"]};new Set(Object.keys(le));var y;(function(e){e.QUERY="query",e.MUTATION="mutation",e.SUBSCRIPTION="subscription"})(y||(y={}));var V;(function(e){e.QUERY="QUERY",e.MUTATION="MUTATION",e.SUBSCRIPTION="SUBSCRIPTION",e.FIELD="FIELD",e.FRAGMENT_DEFINITION="FRAGMENT_DEFINITION",e.FRAGMENT_SPREAD="FRAGMENT_SPREAD",e.INLINE_FRAGMENT="INLINE_FRAGMENT",e.VARIABLE_DEFINITION="VARIABLE_DEFINITION",e.SCHEMA="SCHEMA",e.SCALAR="SCALAR",e.OBJECT="OBJECT",e.FIELD_DEFINITION="FIELD_DEFINITION",e.ARGUMENT_DEFINITION="ARGUMENT_DEFINITION",e.INTERFACE="INTERFACE",e.UNION="UNION",e.ENUM="ENUM",e.ENUM_VALUE="ENUM_VALUE",e.INPUT_OBJECT="INPUT_OBJECT",e.INPUT_FIELD_DEFINITION="INPUT_FIELD_DEFINITION"})(V||(V={}));var c;(function(e){e.NAME="Name",e.DOCUMENT="Document",e.OPERATION_DEFINITION="OperationDefinition",e.VARIABLE_DEFINITION="VariableDefinition",e.SELECTION_SET="SelectionSet",e.FIELD="Field",e.ARGUMENT="Argument",e.FRAGMENT_SPREAD="FragmentSpread",e.INLINE_FRAGMENT="InlineFragment",e.FRAGMENT_DEFINITION="FragmentDefinition",e.VARIABLE="Variable",e.INT="IntValue",e.FLOAT="FloatValue",e.STRING="StringValue",e.BOOLEAN="BooleanValue",e.NULL="NullValue",e.ENUM="EnumValue",e.LIST="ListValue",e.OBJECT="ObjectValue",e.OBJECT_FIELD="ObjectField",e.DIRECTIVE="Directive",e.NAMED_TYPE="NamedType",e.LIST_TYPE="ListType",e.NON_NULL_TYPE="NonNullType",e.SCHEMA_DEFINITION="SchemaDefinition",e.OPERATION_TYPE_DEFINITION="OperationTypeDefinition",e.SCALAR_TYPE_DEFINITION="ScalarTypeDefinition",e.OBJECT_TYPE_DEFINITION="ObjectTypeDefinition",e.FIELD_DEFINITION="FieldDefinition",e.INPUT_VALUE_DEFINITION="InputValueDefinition",e.INTERFACE_TYPE_DEFINITION="InterfaceTypeDefinition",e.UNION_TYPE_DEFINITION="UnionTypeDefinition",e.ENUM_TYPE_DEFINITION="EnumTypeDefinition",e.ENUM_VALUE_DEFINITION="EnumValueDefinition",e.INPUT_OBJECT_TYPE_DEFINITION="InputObjectTypeDefinition",e.DIRECTIVE_DEFINITION="DirectiveDefinition",e.SCHEMA_EXTENSION="SchemaExtension",e.SCALAR_TYPE_EXTENSION="ScalarTypeExtension",e.OBJECT_TYPE_EXTENSION="ObjectTypeExtension",e.INTERFACE_TYPE_EXTENSION="InterfaceTypeExtension",e.UNION_TYPE_EXTENSION="UnionTypeExtension",e.ENUM_TYPE_EXTENSION="EnumTypeExtension",e.INPUT_OBJECT_TYPE_EXTENSION="InputObjectTypeExtension"})(c||(c={}));function pe(e){return e===9||e===32}function g(e){return e>=48&&e<=57}function J(e){return e>=97&&e<=122||e>=65&&e<=90}function q(e){return J(e)||e===95}function he(e){return J(e)||g(e)||e===95}function de(e){var t;let n=Number.MAX_SAFE_INTEGER,s=null,i=-1;for(let a=0;a<e.length;++a){var r;const u=e[a],l=fe(u);l!==u.length&&(s=(r=s)!==null&&r!==void 0?r:a,i=a,a!==0&&l<n&&(n=l))}return e.map((a,u)=>u===0?a:a.slice(n)).slice((t=s)!==null&&t!==void 0?t:0,i+1)}function fe(e){let t=0;for(;t<e.length&&pe(e.charCodeAt(t));)++t;return t}var o;(function(e){e.SOF="<SOF>",e.EOF="<EOF>",e.BANG="!",e.DOLLAR="$",e.AMP="&",e.PAREN_L="(",e.PAREN_R=")",e.SPREAD="...",e.COLON=":",e.EQUALS="=",e.AT="@",e.BRACKET_L="[",e.BRACKET_R="]",e.BRACE_L="{",e.PIPE="|",e.BRACE_R="}",e.NAME="Name",e.INT="Int",e.FLOAT="Float",e.STRING="String",e.BLOCK_STRING="BlockString",e.COMMENT="Comment"})(o||(o={}));class Ee{constructor(t){const n=new Y(o.SOF,0,0,0,0);this.source=t,this.lastToken=n,this.token=n,this.line=1,this.lineStart=0}get[Symbol.toStringTag](){return"Lexer"}advance(){return this.lastToken=this.token,this.token=this.lookahead()}lookahead(){let t=this.token;if(t.kind!==o.EOF)do if(t.next)t=t.next;else{const n=Ne(this,t.end);t.next=n,n.prev=t,t=n}while(t.kind===o.COMMENT);return t}}function me(e){return e===o.BANG||e===o.DOLLAR||e===o.AMP||e===o.PAREN_L||e===o.PAREN_R||e===o.SPREAD||e===o.COLON||e===o.EQUALS||e===o.AT||e===o.BRACKET_L||e===o.BRACKET_R||e===o.BRACE_L||e===o.PIPE||e===o.BRACE_R}function O(e){return e>=0&&e<=55295||e>=57344&&e<=1114111}function b(e,t){return X(e.charCodeAt(t))&&Q(e.charCodeAt(t+1))}function X(e){return e>=55296&&e<=56319}function Q(e){return e>=56320&&e<=57343}function T(e,t){const n=e.source.body.codePointAt(t);if(n===void 0)return o.EOF;if(n>=32&&n<=126){const s=String.fromCodePoint(n);return s==='"'?`'"'`:`"${s}"`}return"U+"+n.toString(16).toUpperCase().padStart(4,"0")}function p(e,t,n,s,i){const r=e.line,a=1+n-e.lineStart;return new Y(t,n,s,r,a,i)}function Ne(e,t){const n=e.source.body,s=n.length;let i=t;for(;i<s;){const r=n.charCodeAt(i);switch(r){case 65279:case 9:case 32:case 44:++i;continue;case 10:++i,++e.line,e.lineStart=i;continue;case 13:n.charCodeAt(i+1)===10?i+=2:++i,++e.line,e.lineStart=i;continue;case 35:return Te(e,i);case 33:return p(e,o.BANG,i,i+1);case 36:return p(e,o.DOLLAR,i,i+1);case 38:return p(e,o.AMP,i,i+1);case 40:return p(e,o.PAREN_L,i,i+1);case 41:return p(e,o.PAREN_R,i,i+1);case 46:if(n.charCodeAt(i+1)===46&&n.charCodeAt(i+2)===46)return p(e,o.SPREAD,i,i+3);break;case 58:return p(e,o.COLON,i,i+1);case 61:return p(e,o.EQUALS,i,i+1);case 64:return p(e,o.AT,i,i+1);case 91:return p(e,o.BRACKET_L,i,i+1);case 93:return p(e,o.BRACKET_R,i,i+1);case 123:return p(e,o.BRACE_L,i,i+1);case 124:return p(e,o.PIPE,i,i+1);case 125:return p(e,o.BRACE_R,i,i+1);case 34:return n.charCodeAt(i+1)===34&&n.charCodeAt(i+2)===34?Ae(e,i):xe(e,i)}if(g(r)||r===45)return Ie(e,i,r);if(q(r))return ge(e,i);throw d(e.source,i,r===39?`Unexpected single quote character ('), did you mean to use a double quote (")?`:O(r)||b(n,i)?`Unexpected character: ${T(e,i)}.`:`Invalid character: ${T(e,i)}.`)}return p(e,o.EOF,s,s)}function Te(e,t){const n=e.source.body,s=n.length;let i=t+1;for(;i<s;){const r=n.charCodeAt(i);if(r===10||r===13)break;if(O(r))++i;else if(b(n,i))i+=2;else break}return p(e,o.COMMENT,t,i,n.slice(t+1,i))}function Ie(e,t,n){const s=e.source.body;let i=t,r=n,a=!1;if(r===45&&(r=s.charCodeAt(++i)),r===48){if(r=s.charCodeAt(++i),g(r))throw d(e.source,i,`Invalid number, unexpected digit after 0: ${T(e,i)}.`)}else i=w(e,i,r),r=s.charCodeAt(i);if(r===46&&(a=!0,r=s.charCodeAt(++i),i=w(e,i,r),r=s.charCodeAt(i)),(r===69||r===101)&&(a=!0,r=s.charCodeAt(++i),(r===43||r===45)&&(r=s.charCodeAt(++i)),i=w(e,i,r),r=s.charCodeAt(i)),r===46||q(r))throw d(e.source,i,`Invalid number, expected digit but got: ${T(e,i)}.`);return p(e,a?o.FLOAT:o.INT,t,i,s.slice(t,i))}function w(e,t,n){if(!g(n))throw d(e.source,t,`Invalid number, expected digit but got: ${T(e,t)}.`);const s=e.source.body;let i=t+1;for(;g(s.charCodeAt(i));)++i;return i}function xe(e,t){const n=e.source.body,s=n.length;let i=t+1,r=i,a="";for(;i<s;){const u=n.charCodeAt(i);if(u===34)return a+=n.slice(r,i),p(e,o.STRING,t,i+1,a);if(u===92){a+=n.slice(r,i);const l=n.charCodeAt(i+1)===117?n.charCodeAt(i+2)===123?ye(e,i):Oe(e,i):_e(e,i);a+=l.value,i+=l.size,r=i;continue}if(u===10||u===13)break;if(O(u))++i;else if(b(n,i))i+=2;else throw d(e.source,i,`Invalid character within String: ${T(e,i)}.`)}throw d(e.source,i,"Unterminated string.")}function ye(e,t){const n=e.source.body;let s=0,i=3;for(;i<12;){const r=n.charCodeAt(t+i++);if(r===125){if(i<5||!O(s))break;return{value:String.fromCodePoint(s),size:i}}if(s=s<<4|A(r),s<0)break}throw d(e.source,t,`Invalid Unicode escape sequence: "${n.slice(t,t+i)}".`)}function Oe(e,t){const n=e.source.body,s=$(n,t+2);if(O(s))return{value:String.fromCodePoint(s),size:6};if(X(s)&&n.charCodeAt(t+6)===92&&n.charCodeAt(t+7)===117){const i=$(n,t+8);if(Q(i))return{value:String.fromCodePoint(s,i),size:12}}throw d(e.source,t,`Invalid Unicode escape sequence: "${n.slice(t,t+6)}".`)}function $(e,t){return A(e.charCodeAt(t))<<12|A(e.charCodeAt(t+1))<<8|A(e.charCodeAt(t+2))<<4|A(e.charCodeAt(t+3))}function A(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:-1}function _e(e,t){const n=e.source.body;switch(n.charCodeAt(t+1)){case 34:return{value:'"',size:2};case 92:return{value:"\\",size:2};case 47:return{value:"/",size:2};case 98:return{value:"\b",size:2};case 102:return{value:"\f",size:2};case 110:return{value:`
|
|
18
|
+
`,size:2};case 114:return{value:"\r",size:2};case 116:return{value:" ",size:2}}throw d(e.source,t,`Invalid character escape sequence: "${n.slice(t,t+2)}".`)}function Ae(e,t){const n=e.source.body,s=n.length;let i=e.lineStart,r=t+3,a=r,u="";const l=[];for(;r<s;){const E=n.charCodeAt(r);if(E===34&&n.charCodeAt(r+1)===34&&n.charCodeAt(r+2)===34){u+=n.slice(a,r),l.push(u);const h=p(e,o.BLOCK_STRING,t,r+3,de(l).join(`
|
|
19
|
+
`));return e.line+=l.length-1,e.lineStart=i,h}if(E===92&&n.charCodeAt(r+1)===34&&n.charCodeAt(r+2)===34&&n.charCodeAt(r+3)===34){u+=n.slice(a,r),a=r+1,r+=4;continue}if(E===10||E===13){u+=n.slice(a,r),l.push(u),E===13&&n.charCodeAt(r+1)===10?r+=2:++r,u="",a=r,i=r;continue}if(O(E))++r;else if(b(n,r))r+=2;else throw d(e.source,r,`Invalid character within String: ${T(e,r)}.`)}throw d(e.source,r,"Unterminated string.")}function ge(e,t){const n=e.source.body,s=n.length;let i=t+1;for(;i<s;){const r=n.charCodeAt(i);if(he(r))++i;else break}return p(e,o.NAME,t,i,n.slice(t,i))}const ve=10,z=2;function W(e){return R(e,[])}function R(e,t){switch(typeof e){case"string":return JSON.stringify(e);case"function":return e.name?`[function ${e.name}]`:"[function]";case"object":return De(e,t);default:return String(e)}}function De(e,t){if(e===null)return"null";if(t.includes(e))return"[Circular]";const n=[...t,e];if(ke(e)){const s=e.toJSON();if(s!==e)return typeof s=="string"?s:R(s,n)}else if(Array.isArray(e))return Ce(e,n);return Se(e,n)}function ke(e){return typeof e.toJSON=="function"}function Se(e,t){const n=Object.entries(e);return n.length===0?"{}":t.length>z?"["+be(e)+"]":"{ "+n.map(([i,r])=>i+": "+R(r,t)).join(", ")+" }"}function Ce(e,t){if(e.length===0)return"[]";if(t.length>z)return"[Array]";const n=Math.min(ve,e.length),s=e.length-n,i=[];for(let r=0;r<n;++r)i.push(R(e[r],t));return s===1?i.push("... 1 more item"):s>1&&i.push(`... ${s} more items`),"["+i.join(", ")+"]"}function be(e){const t=Object.prototype.toString.call(e).replace(/^\[object /,"").replace(/]$/,"");if(t==="Object"&&typeof e.constructor=="function"){const n=e.constructor.name;if(typeof n=="string"&&n!=="")return n}return t}const Re=globalThis.process&&process.env.NODE_ENV==="production",Le=Re?function(t,n){return t instanceof n}:function(t,n){if(t instanceof n)return!0;if(typeof t=="object"&&t!==null){var s;const i=n.prototype[Symbol.toStringTag],r=Symbol.toStringTag in t?t[Symbol.toStringTag]:(s=t.constructor)===null||s===void 0?void 0:s.name;if(i===r){const a=W(t);throw new Error(`Cannot use ${i} "${a}" from another module or realm.
|
|
20
|
+
|
|
21
|
+
Ensure that there is only one instance of "graphql" in the node_modules
|
|
22
|
+
directory. If different versions of "graphql" are the dependencies of other
|
|
23
|
+
relied on modules, use "resolutions" to ensure only one version is installed.
|
|
24
|
+
|
|
25
|
+
https://yarnpkg.com/en/docs/selective-version-resolutions
|
|
26
|
+
|
|
27
|
+
Duplicate "graphql" modules cannot be used at the same time since different
|
|
28
|
+
versions may have different capabilities and behavior. The data from one
|
|
29
|
+
version used in the function from another could produce confusing and
|
|
30
|
+
spurious results.`)}}return!1};class H{constructor(t,n="GraphQL request",s={line:1,column:1}){typeof t=="string"||F(!1,`Body must be a string. Received: ${W(t)}.`),this.body=t,this.name=n,this.locationOffset=s,this.locationOffset.line>0||F(!1,"line in locationOffset is 1-indexed and must be positive."),this.locationOffset.column>0||F(!1,"column in locationOffset is 1-indexed and must be positive.")}get[Symbol.toStringTag](){return"Source"}}function Fe(e){return Le(e,H)}function we(e,t){const n=new Pe(e,t),s=n.parseDocument();return Object.defineProperty(s,"tokenCount",{enumerable:!1,value:n.tokenCount}),s}class Pe{constructor(t,n={}){const s=Fe(t)?t:new H(t);this._lexer=new Ee(s),this._options=n,this._tokenCounter=0}get tokenCount(){return this._tokenCounter}parseName(){const t=this.expectToken(o.NAME);return this.node(t,{kind:c.NAME,value:t.value})}parseDocument(){return this.node(this._lexer.token,{kind:c.DOCUMENT,definitions:this.many(o.SOF,this.parseDefinition,o.EOF)})}parseDefinition(){if(this.peek(o.BRACE_L))return this.parseOperationDefinition();const t=this.peekDescription(),n=t?this._lexer.lookahead():this._lexer.token;if(n.kind===o.NAME){switch(n.value){case"schema":return this.parseSchemaDefinition();case"scalar":return this.parseScalarTypeDefinition();case"type":return this.parseObjectTypeDefinition();case"interface":return this.parseInterfaceTypeDefinition();case"union":return this.parseUnionTypeDefinition();case"enum":return this.parseEnumTypeDefinition();case"input":return this.parseInputObjectTypeDefinition();case"directive":return this.parseDirectiveDefinition()}if(t)throw d(this._lexer.source,this._lexer.token.start,"Unexpected description, descriptions are supported only on type definitions.");switch(n.value){case"query":case"mutation":case"subscription":return this.parseOperationDefinition();case"fragment":return this.parseFragmentDefinition();case"extend":return this.parseTypeSystemExtension()}}throw this.unexpected(n)}parseOperationDefinition(){const t=this._lexer.token;if(this.peek(o.BRACE_L))return this.node(t,{kind:c.OPERATION_DEFINITION,operation:y.QUERY,name:void 0,variableDefinitions:[],directives:[],selectionSet:this.parseSelectionSet()});const n=this.parseOperationType();let s;return this.peek(o.NAME)&&(s=this.parseName()),this.node(t,{kind:c.OPERATION_DEFINITION,operation:n,name:s,variableDefinitions:this.parseVariableDefinitions(),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseOperationType(){const t=this.expectToken(o.NAME);switch(t.value){case"query":return y.QUERY;case"mutation":return y.MUTATION;case"subscription":return y.SUBSCRIPTION}throw this.unexpected(t)}parseVariableDefinitions(){return this.optionalMany(o.PAREN_L,this.parseVariableDefinition,o.PAREN_R)}parseVariableDefinition(){return this.node(this._lexer.token,{kind:c.VARIABLE_DEFINITION,variable:this.parseVariable(),type:(this.expectToken(o.COLON),this.parseTypeReference()),defaultValue:this.expectOptionalToken(o.EQUALS)?this.parseConstValueLiteral():void 0,directives:this.parseConstDirectives()})}parseVariable(){const t=this._lexer.token;return this.expectToken(o.DOLLAR),this.node(t,{kind:c.VARIABLE,name:this.parseName()})}parseSelectionSet(){return this.node(this._lexer.token,{kind:c.SELECTION_SET,selections:this.many(o.BRACE_L,this.parseSelection,o.BRACE_R)})}parseSelection(){return this.peek(o.SPREAD)?this.parseFragment():this.parseField()}parseField(){const t=this._lexer.token,n=this.parseName();let s,i;return this.expectOptionalToken(o.COLON)?(s=n,i=this.parseName()):i=n,this.node(t,{kind:c.FIELD,alias:s,name:i,arguments:this.parseArguments(!1),directives:this.parseDirectives(!1),selectionSet:this.peek(o.BRACE_L)?this.parseSelectionSet():void 0})}parseArguments(t){const n=t?this.parseConstArgument:this.parseArgument;return this.optionalMany(o.PAREN_L,n,o.PAREN_R)}parseArgument(t=!1){const n=this._lexer.token,s=this.parseName();return this.expectToken(o.COLON),this.node(n,{kind:c.ARGUMENT,name:s,value:this.parseValueLiteral(t)})}parseConstArgument(){return this.parseArgument(!0)}parseFragment(){const t=this._lexer.token;this.expectToken(o.SPREAD);const n=this.expectOptionalKeyword("on");return!n&&this.peek(o.NAME)?this.node(t,{kind:c.FRAGMENT_SPREAD,name:this.parseFragmentName(),directives:this.parseDirectives(!1)}):this.node(t,{kind:c.INLINE_FRAGMENT,typeCondition:n?this.parseNamedType():void 0,directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentDefinition(){const t=this._lexer.token;return this.expectKeyword("fragment"),this._options.allowLegacyFragmentVariables===!0?this.node(t,{kind:c.FRAGMENT_DEFINITION,name:this.parseFragmentName(),variableDefinitions:this.parseVariableDefinitions(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()}):this.node(t,{kind:c.FRAGMENT_DEFINITION,name:this.parseFragmentName(),typeCondition:(this.expectKeyword("on"),this.parseNamedType()),directives:this.parseDirectives(!1),selectionSet:this.parseSelectionSet()})}parseFragmentName(){if(this._lexer.token.value==="on")throw this.unexpected();return this.parseName()}parseValueLiteral(t){const n=this._lexer.token;switch(n.kind){case o.BRACKET_L:return this.parseList(t);case o.BRACE_L:return this.parseObject(t);case o.INT:return this.advanceLexer(),this.node(n,{kind:c.INT,value:n.value});case o.FLOAT:return this.advanceLexer(),this.node(n,{kind:c.FLOAT,value:n.value});case o.STRING:case o.BLOCK_STRING:return this.parseStringLiteral();case o.NAME:switch(this.advanceLexer(),n.value){case"true":return this.node(n,{kind:c.BOOLEAN,value:!0});case"false":return this.node(n,{kind:c.BOOLEAN,value:!1});case"null":return this.node(n,{kind:c.NULL});default:return this.node(n,{kind:c.ENUM,value:n.value})}case o.DOLLAR:if(t)if(this.expectToken(o.DOLLAR),this._lexer.token.kind===o.NAME){const s=this._lexer.token.value;throw d(this._lexer.source,n.start,`Unexpected variable "$${s}" in constant value.`)}else throw this.unexpected(n);return this.parseVariable();default:throw this.unexpected()}}parseConstValueLiteral(){return this.parseValueLiteral(!0)}parseStringLiteral(){const t=this._lexer.token;return this.advanceLexer(),this.node(t,{kind:c.STRING,value:t.value,block:t.kind===o.BLOCK_STRING})}parseList(t){const n=()=>this.parseValueLiteral(t);return this.node(this._lexer.token,{kind:c.LIST,values:this.any(o.BRACKET_L,n,o.BRACKET_R)})}parseObject(t){const n=()=>this.parseObjectField(t);return this.node(this._lexer.token,{kind:c.OBJECT,fields:this.any(o.BRACE_L,n,o.BRACE_R)})}parseObjectField(t){const n=this._lexer.token,s=this.parseName();return this.expectToken(o.COLON),this.node(n,{kind:c.OBJECT_FIELD,name:s,value:this.parseValueLiteral(t)})}parseDirectives(t){const n=[];for(;this.peek(o.AT);)n.push(this.parseDirective(t));return n}parseConstDirectives(){return this.parseDirectives(!0)}parseDirective(t){const n=this._lexer.token;return this.expectToken(o.AT),this.node(n,{kind:c.DIRECTIVE,name:this.parseName(),arguments:this.parseArguments(t)})}parseTypeReference(){const t=this._lexer.token;let n;if(this.expectOptionalToken(o.BRACKET_L)){const s=this.parseTypeReference();this.expectToken(o.BRACKET_R),n=this.node(t,{kind:c.LIST_TYPE,type:s})}else n=this.parseNamedType();return this.expectOptionalToken(o.BANG)?this.node(t,{kind:c.NON_NULL_TYPE,type:n}):n}parseNamedType(){return this.node(this._lexer.token,{kind:c.NAMED_TYPE,name:this.parseName()})}peekDescription(){return this.peek(o.STRING)||this.peek(o.BLOCK_STRING)}parseDescription(){if(this.peekDescription())return this.parseStringLiteral()}parseSchemaDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("schema");const s=this.parseConstDirectives(),i=this.many(o.BRACE_L,this.parseOperationTypeDefinition,o.BRACE_R);return this.node(t,{kind:c.SCHEMA_DEFINITION,description:n,directives:s,operationTypes:i})}parseOperationTypeDefinition(){const t=this._lexer.token,n=this.parseOperationType();this.expectToken(o.COLON);const s=this.parseNamedType();return this.node(t,{kind:c.OPERATION_TYPE_DEFINITION,operation:n,type:s})}parseScalarTypeDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("scalar");const s=this.parseName(),i=this.parseConstDirectives();return this.node(t,{kind:c.SCALAR_TYPE_DEFINITION,description:n,name:s,directives:i})}parseObjectTypeDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("type");const s=this.parseName(),i=this.parseImplementsInterfaces(),r=this.parseConstDirectives(),a=this.parseFieldsDefinition();return this.node(t,{kind:c.OBJECT_TYPE_DEFINITION,description:n,name:s,interfaces:i,directives:r,fields:a})}parseImplementsInterfaces(){return this.expectOptionalKeyword("implements")?this.delimitedMany(o.AMP,this.parseNamedType):[]}parseFieldsDefinition(){return this.optionalMany(o.BRACE_L,this.parseFieldDefinition,o.BRACE_R)}parseFieldDefinition(){const t=this._lexer.token,n=this.parseDescription(),s=this.parseName(),i=this.parseArgumentDefs();this.expectToken(o.COLON);const r=this.parseTypeReference(),a=this.parseConstDirectives();return this.node(t,{kind:c.FIELD_DEFINITION,description:n,name:s,arguments:i,type:r,directives:a})}parseArgumentDefs(){return this.optionalMany(o.PAREN_L,this.parseInputValueDef,o.PAREN_R)}parseInputValueDef(){const t=this._lexer.token,n=this.parseDescription(),s=this.parseName();this.expectToken(o.COLON);const i=this.parseTypeReference();let r;this.expectOptionalToken(o.EQUALS)&&(r=this.parseConstValueLiteral());const a=this.parseConstDirectives();return this.node(t,{kind:c.INPUT_VALUE_DEFINITION,description:n,name:s,type:i,defaultValue:r,directives:a})}parseInterfaceTypeDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("interface");const s=this.parseName(),i=this.parseImplementsInterfaces(),r=this.parseConstDirectives(),a=this.parseFieldsDefinition();return this.node(t,{kind:c.INTERFACE_TYPE_DEFINITION,description:n,name:s,interfaces:i,directives:r,fields:a})}parseUnionTypeDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("union");const s=this.parseName(),i=this.parseConstDirectives(),r=this.parseUnionMemberTypes();return this.node(t,{kind:c.UNION_TYPE_DEFINITION,description:n,name:s,directives:i,types:r})}parseUnionMemberTypes(){return this.expectOptionalToken(o.EQUALS)?this.delimitedMany(o.PIPE,this.parseNamedType):[]}parseEnumTypeDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("enum");const s=this.parseName(),i=this.parseConstDirectives(),r=this.parseEnumValuesDefinition();return this.node(t,{kind:c.ENUM_TYPE_DEFINITION,description:n,name:s,directives:i,values:r})}parseEnumValuesDefinition(){return this.optionalMany(o.BRACE_L,this.parseEnumValueDefinition,o.BRACE_R)}parseEnumValueDefinition(){const t=this._lexer.token,n=this.parseDescription(),s=this.parseEnumValueName(),i=this.parseConstDirectives();return this.node(t,{kind:c.ENUM_VALUE_DEFINITION,description:n,name:s,directives:i})}parseEnumValueName(){if(this._lexer.token.value==="true"||this._lexer.token.value==="false"||this._lexer.token.value==="null")throw d(this._lexer.source,this._lexer.token.start,`${v(this._lexer.token)} is reserved and cannot be used for an enum value.`);return this.parseName()}parseInputObjectTypeDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("input");const s=this.parseName(),i=this.parseConstDirectives(),r=this.parseInputFieldsDefinition();return this.node(t,{kind:c.INPUT_OBJECT_TYPE_DEFINITION,description:n,name:s,directives:i,fields:r})}parseInputFieldsDefinition(){return this.optionalMany(o.BRACE_L,this.parseInputValueDef,o.BRACE_R)}parseTypeSystemExtension(){const t=this._lexer.lookahead();if(t.kind===o.NAME)switch(t.value){case"schema":return this.parseSchemaExtension();case"scalar":return this.parseScalarTypeExtension();case"type":return this.parseObjectTypeExtension();case"interface":return this.parseInterfaceTypeExtension();case"union":return this.parseUnionTypeExtension();case"enum":return this.parseEnumTypeExtension();case"input":return this.parseInputObjectTypeExtension()}throw this.unexpected(t)}parseSchemaExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("schema");const n=this.parseConstDirectives(),s=this.optionalMany(o.BRACE_L,this.parseOperationTypeDefinition,o.BRACE_R);if(n.length===0&&s.length===0)throw this.unexpected();return this.node(t,{kind:c.SCHEMA_EXTENSION,directives:n,operationTypes:s})}parseScalarTypeExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("scalar");const n=this.parseName(),s=this.parseConstDirectives();if(s.length===0)throw this.unexpected();return this.node(t,{kind:c.SCALAR_TYPE_EXTENSION,name:n,directives:s})}parseObjectTypeExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("type");const n=this.parseName(),s=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),r=this.parseFieldsDefinition();if(s.length===0&&i.length===0&&r.length===0)throw this.unexpected();return this.node(t,{kind:c.OBJECT_TYPE_EXTENSION,name:n,interfaces:s,directives:i,fields:r})}parseInterfaceTypeExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("interface");const n=this.parseName(),s=this.parseImplementsInterfaces(),i=this.parseConstDirectives(),r=this.parseFieldsDefinition();if(s.length===0&&i.length===0&&r.length===0)throw this.unexpected();return this.node(t,{kind:c.INTERFACE_TYPE_EXTENSION,name:n,interfaces:s,directives:i,fields:r})}parseUnionTypeExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("union");const n=this.parseName(),s=this.parseConstDirectives(),i=this.parseUnionMemberTypes();if(s.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:c.UNION_TYPE_EXTENSION,name:n,directives:s,types:i})}parseEnumTypeExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("enum");const n=this.parseName(),s=this.parseConstDirectives(),i=this.parseEnumValuesDefinition();if(s.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:c.ENUM_TYPE_EXTENSION,name:n,directives:s,values:i})}parseInputObjectTypeExtension(){const t=this._lexer.token;this.expectKeyword("extend"),this.expectKeyword("input");const n=this.parseName(),s=this.parseConstDirectives(),i=this.parseInputFieldsDefinition();if(s.length===0&&i.length===0)throw this.unexpected();return this.node(t,{kind:c.INPUT_OBJECT_TYPE_EXTENSION,name:n,directives:s,fields:i})}parseDirectiveDefinition(){const t=this._lexer.token,n=this.parseDescription();this.expectKeyword("directive"),this.expectToken(o.AT);const s=this.parseName(),i=this.parseArgumentDefs(),r=this.expectOptionalKeyword("repeatable");this.expectKeyword("on");const a=this.parseDirectiveLocations();return this.node(t,{kind:c.DIRECTIVE_DEFINITION,description:n,name:s,arguments:i,repeatable:r,locations:a})}parseDirectiveLocations(){return this.delimitedMany(o.PIPE,this.parseDirectiveLocation)}parseDirectiveLocation(){const t=this._lexer.token,n=this.parseName();if(Object.prototype.hasOwnProperty.call(V,n.value))return n;throw this.unexpected(t)}node(t,n){return this._options.noLocation!==!0&&(n.loc=new ue(t,this._lexer.lastToken,this._lexer.source)),n}peek(t){return this._lexer.token.kind===t}expectToken(t){const n=this._lexer.token;if(n.kind===t)return this.advanceLexer(),n;throw d(this._lexer.source,n.start,`Expected ${Z(t)}, found ${v(n)}.`)}expectOptionalToken(t){return this._lexer.token.kind===t?(this.advanceLexer(),!0):!1}expectKeyword(t){const n=this._lexer.token;if(n.kind===o.NAME&&n.value===t)this.advanceLexer();else throw d(this._lexer.source,n.start,`Expected "${t}", found ${v(n)}.`)}expectOptionalKeyword(t){const n=this._lexer.token;return n.kind===o.NAME&&n.value===t?(this.advanceLexer(),!0):!1}unexpected(t){const n=t??this._lexer.token;return d(this._lexer.source,n.start,`Unexpected ${v(n)}.`)}any(t,n,s){this.expectToken(t);const i=[];for(;!this.expectOptionalToken(s);)i.push(n.call(this));return i}optionalMany(t,n,s){if(this.expectOptionalToken(t)){const i=[];do i.push(n.call(this));while(!this.expectOptionalToken(s));return i}return[]}many(t,n,s){this.expectToken(t);const i=[];do i.push(n.call(this));while(!this.expectOptionalToken(s));return i}delimitedMany(t,n){this.expectOptionalToken(t);const s=[];do s.push(n.call(this));while(this.expectOptionalToken(t));return s}advanceLexer(){const{maxTokens:t}=this._options,n=this._lexer.advance();if(n.kind!==o.EOF&&(++this._tokenCounter,t!==void 0&&this._tokenCounter>t))throw d(this._lexer.source,n.start,`Document contains more that ${t} tokens. Parsing aborted.`)}}function v(e){const t=e.value;return Z(e.kind)+(t!=null?` "${t}"`:"")}function Z(e){return me(e)?`"${e}"`:e}var D=new Map,M=new Map,K=!0,S=!1;function ee(e){return e.replace(/[\s,]+/g," ").trim()}function Ve(e){return ee(e.source.body.substring(e.start,e.end))}function Me(e){var t=new Set,n=[];return e.definitions.forEach(function(s){if(s.kind==="FragmentDefinition"){var i=s.name.value,r=Ve(s.loc),a=M.get(i);a&&!a.has(r)?K&&console.warn("Warning: fragment with name "+i+` already exists.
|
|
31
|
+
graphql-tag enforces all fragment names across your application to be unique; read more about
|
|
32
|
+
this in the docs: http://dev.apollodata.com/core/fragments.html#unique-names`):a||M.set(i,a=new Set),a.add(r),t.has(r)||(t.add(r),n.push(s))}else n.push(s)}),k(k({},e),{definitions:n})}function Ue(e){var t=new Set(e.definitions);t.forEach(function(s){s.loc&&delete s.loc,Object.keys(s).forEach(function(i){var r=s[i];r&&typeof r=="object"&&t.add(r)})});var n=e.loc;return n&&(delete n.startToken,delete n.endToken),e}function Be(e){var t=ee(e);if(!D.has(t)){var n=we(e,{experimentalFragmentVariables:S,allowLegacyFragmentVariables:S});if(!n||n.kind!=="Document")throw new Error("Not a valid GraphQL document.");D.set(t,Ue(Me(n)))}return D.get(t)}function I(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];typeof e=="string"&&(e=[e]);var s=e[0];return t.forEach(function(i,r){i&&i.kind==="Document"?s+=i.loc.source.body:s+=i,s+=e[r+1]}),Be(s)}function je(){D.clear(),M.clear()}function $e(){K=!1}function Ge(){S=!0}function Ye(){S=!1}var _={gql:I,resetCaches:je,disableFragmentWarnings:$e,enableExperimentalFragmentVariables:Ge,disableExperimentalFragmentVariables:Ye};(function(e){e.gql=_.gql,e.resetCaches=_.resetCaches,e.disableFragmentWarnings=_.disableFragmentWarnings,e.enableExperimentalFragmentVariables=_.enableExperimentalFragmentVariables,e.disableExperimentalFragmentVariables=_.disableExperimentalFragmentVariables})(I||(I={}));I.default=I;const te=(e,t={})=>{const{getCustomerToken:n,getStore:s,getCurrency:i}=e.config.state;return{...n()&&{Authorization:`Bearer ${n()}`},...s()&&{store:s()},...i()&&{"Content-Currency":i()},...t}},Je=async(e,t)=>{const{client:n}=e;try{return await n.query({query:I`
|
|
33
|
+
query recentlyViewedProducts {
|
|
34
|
+
recentlyViewedProducts {
|
|
35
|
+
product_sku
|
|
36
|
+
viewed_at
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
`,variables:t,context:{headers:te(e)}})}catch(s){throw s}},qe=async(e,t)=>{const{client:n}=e;try{return await n.mutate({mutation:I`
|
|
40
|
+
mutation addRecentlyViewedProducts($input: [RecentlyViewedProductInput!]!) {
|
|
41
|
+
addRecentlyViewedProducts(input: $input) {
|
|
42
|
+
success
|
|
43
|
+
message
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
`,variables:t,context:{headers:te(e)}})}catch(s){throw s}};exports.addRecentlyViewedWeb=C.addRecentlyViewedWeb;exports.fetchRecentlyViewedWeb=C.fetchRecentlyViewedWeb;exports.getSdk=C.getSdk;exports.setSdk=C.setSdk;exports.addRecentlyViewedProducts=qe;exports.addRecentlyViewedProductsFields=ie;exports.recentlyViewedProducts=Je;exports.recentlyViewedProductsFields=ne;
|