@netless/window-manager 1.0.0-canary.6 → 1.0.0-canary.61
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/README.md +30 -6
- package/dist/index.js +13539 -0
- package/dist/index.mjs +13536 -0
- package/dist/index.umd.js +13534 -46
- package/dist/{App → src/App}/AppContext.d.ts +16 -14
- package/dist/{App → src/App}/AppPageStateImpl.d.ts +0 -0
- package/dist/{App → src/App}/AppProxy.d.ts +30 -11
- package/dist/{App → src/App}/MagixEvent/index.d.ts +0 -0
- package/dist/src/App/WhiteboardView.d.ts +27 -0
- package/dist/{App → src/App}/index.d.ts +1 -0
- package/dist/src/App/type.d.ts +21 -0
- package/dist/{AppListener.d.ts → src/AppListener.d.ts} +2 -2
- package/dist/{AppManager.d.ts → src/AppManager.d.ts} +11 -6
- package/dist/{AttributesDelegate.d.ts → src/AttributesDelegate.d.ts} +5 -2
- package/dist/{BoxEmitter.d.ts → src/BoxEmitter.d.ts} +0 -0
- package/dist/{BoxManager.d.ts → src/BoxManager.d.ts} +12 -6
- package/dist/{BuiltinApps.d.ts → src/BuiltinApps.d.ts} +3 -0
- package/dist/{Cursor → src/Cursor}/Cursor.d.ts +0 -0
- package/dist/{Cursor → src/Cursor}/icons.d.ts +0 -0
- package/dist/{Cursor → src/Cursor}/index.d.ts +4 -3
- package/dist/{Helper.d.ts → src/Helper.d.ts} +4 -8
- package/dist/{InternalEmitter.d.ts → src/InternalEmitter.d.ts} +1 -4
- package/dist/{Page → src/Page}/PageController.d.ts +2 -1
- package/dist/{Page → src/Page}/index.d.ts +0 -0
- package/dist/{PageState.d.ts → src/PageState.d.ts} +0 -0
- package/dist/{ReconnectRefresher.d.ts → src/ReconnectRefresher.d.ts} +0 -0
- package/dist/{RedoUndo.d.ts → src/RedoUndo.d.ts} +0 -0
- package/dist/{Register → src/Register}/index.d.ts +4 -2
- package/dist/{Register → src/Register}/loader.d.ts +1 -1
- package/dist/src/Register/storage.d.ts +11 -0
- package/dist/{Utils → src/Utils}/AppCreateQueue.d.ts +0 -0
- package/dist/{Utils → src/Utils}/Common.d.ts +0 -0
- package/dist/{Utils → src/Utils}/Reactive.d.ts +1 -1
- package/dist/{Utils → src/Utils}/RoomHacker.d.ts +0 -0
- package/dist/{Utils → src/Utils}/error.d.ts +1 -1
- package/dist/{Utils → src/Utils}/log.d.ts +0 -0
- package/dist/src/View/CameraSynchronizer.d.ts +20 -0
- package/dist/{View → src/View}/MainView.d.ts +18 -7
- package/dist/src/View/ScrollMode.d.ts +32 -0
- package/dist/{View → src/View}/ViewManager.d.ts +0 -0
- package/dist/src/View/ViewSync.d.ts +32 -0
- package/dist/{callback.d.ts → src/callback.d.ts} +13 -1
- package/dist/{constants.d.ts → src/constants.d.ts} +12 -5
- package/dist/src/image.d.ts +19 -0
- package/dist/{index.d.ts → src/index.d.ts} +66 -17
- package/dist/src/shim.d.ts +11 -0
- package/dist/src/storage.d.ts +7 -0
- package/dist/{typings.d.ts → src/typings.d.ts} +18 -8
- package/dist/style.css +810 -1
- package/docs/api.md +10 -0
- package/docs/app-context.md +155 -27
- package/docs/mirgrate-to-1.0.md +68 -0
- package/package.json +27 -22
- package/playwright.config.ts +29 -0
- package/pnpm-lock.yaml +3141 -4483
- package/src/App/AppContext.ts +81 -46
- package/src/App/AppProxy.ts +249 -139
- package/src/App/WhiteboardView.ts +38 -14
- package/src/App/index.ts +1 -0
- package/src/App/type.ts +22 -0
- package/src/AppListener.ts +21 -21
- package/src/AppManager.ts +84 -43
- package/src/AttributesDelegate.ts +6 -3
- package/src/BoxManager.ts +76 -38
- package/src/BuiltinApps.ts +9 -8
- package/src/Cursor/Cursor.svelte +6 -2
- package/src/Cursor/Cursor.ts +16 -5
- package/src/Cursor/icons.ts +6 -0
- package/src/Cursor/index.ts +13 -10
- package/src/Helper.ts +25 -7
- package/src/InternalEmitter.ts +1 -4
- package/src/Page/PageController.ts +2 -1
- package/src/PageState.ts +1 -1
- package/src/ReconnectRefresher.ts +6 -2
- package/src/Register/index.ts +36 -14
- package/src/Register/loader.ts +20 -9
- package/src/Register/storage.ts +26 -5
- package/src/Utils/Common.ts +3 -0
- package/src/Utils/Reactive.ts +29 -27
- package/src/Utils/RoomHacker.ts +3 -0
- package/src/Utils/error.ts +2 -2
- package/src/View/CameraSynchronizer.ts +52 -37
- package/src/View/MainView.ts +118 -76
- package/src/View/ScrollMode.ts +239 -0
- package/src/View/ViewSync.ts +139 -6
- package/src/callback.ts +9 -1
- package/src/constants.ts +11 -3
- package/src/image/pencil-eraser-1.svg +3 -0
- package/src/image/pencil-eraser-2.svg +3 -0
- package/src/image/pencil-eraser-3.svg +3 -0
- package/src/index.ts +202 -58
- package/src/storage.ts +15 -0
- package/src/style.css +18 -47
- package/src/typings.ts +21 -7
- package/vite.config.js +12 -7
- package/dist/App/AppViewSync.d.ts +0 -11
- package/dist/App/Storage/StorageEvent.d.ts +0 -8
- package/dist/App/Storage/index.d.ts +0 -39
- package/dist/App/Storage/typings.d.ts +0 -22
- package/dist/App/Storage/utils.d.ts +0 -5
- package/dist/App/WhiteboardView.d.ts +0 -21
- package/dist/Register/storage.d.ts +0 -8
- package/dist/View/CameraSynchronizer.d.ts +0 -17
- package/dist/View/ViewSync.d.ts +0 -7
- package/dist/index.cjs.js +0 -46
- package/dist/index.es.js +0 -16159
- package/src/App/AppViewSync.ts +0 -68
- package/src/App/Storage/StorageEvent.ts +0 -21
- package/src/App/Storage/index.ts +0 -295
- package/src/App/Storage/typings.ts +0 -23
- package/src/App/Storage/utils.ts +0 -17
package/docs/api.md
CHANGED
@@ -283,6 +283,8 @@ manager.callbacks.on(events, listener)
|
|
283
283
|
| ready | undefined | | 当所有 APP 创建完毕时触发 |
|
284
284
|
| sceneStateChange | SceneState | | 当 sceneState 修改时触发 |
|
285
285
|
| pageStateChange | PageState | | |
|
286
|
+
| scrollStateChange | ScrollState | | 当在 `ScrollState` 变化时触发 |
|
287
|
+
| userScroll | void | | 当用户主动滚动时触发 |
|
286
288
|
|
287
289
|
```ts
|
288
290
|
type LoadAppEvent = {
|
@@ -297,4 +299,12 @@ type PageState = {
|
|
297
299
|
index: number;
|
298
300
|
length: number;
|
299
301
|
}
|
302
|
+
```
|
303
|
+
|
304
|
+
```ts
|
305
|
+
type ScrollState = {
|
306
|
+
scrollTop: number;
|
307
|
+
page: number;
|
308
|
+
maxScrollPage: number;
|
309
|
+
};
|
300
310
|
```
|
package/docs/app-context.md
CHANGED
@@ -4,8 +4,9 @@
|
|
4
4
|
- [view](#view)
|
5
5
|
- [page](#page)
|
6
6
|
- [storage](#storage)
|
7
|
-
- [
|
7
|
+
- [实例属性](#attributes)
|
8
8
|
- [box](#box)
|
9
|
+
- [events](#events)
|
9
10
|
- [Advanced](#Advanced)
|
10
11
|
|
11
12
|
<h2 id="api">API</h2>
|
@@ -75,7 +76,7 @@
|
|
75
76
|
```
|
76
77
|
|
77
78
|
```ts
|
78
|
-
const view = context.createWhiteBoardView(10); // 生成带有 10 页的白板
|
79
|
+
const view = context.createWhiteBoardView({ size: 10 }); // 生成带有 10 页的白板
|
79
80
|
```
|
80
81
|
|
81
82
|
- **WhiteBoardView**
|
@@ -148,6 +149,18 @@
|
|
148
149
|
console.log("pageStateChange", pageState)
|
149
150
|
})
|
150
151
|
```
|
152
|
+
- **setRect**
|
153
|
+
|
154
|
+
设置白板的显示的宽高\
|
155
|
+
在不同分辨率下会保证所有打开的窗口都能完整显示这个区域
|
156
|
+
|
157
|
+
```ts
|
158
|
+
const view = context.createWhiteBoardView();
|
159
|
+
// 此方法建议只在插入时设置一次
|
160
|
+
if (context.isAddApp) {
|
161
|
+
view.setRect({ width: 500, height: 500 })
|
162
|
+
}
|
163
|
+
```
|
151
164
|
|
152
165
|
<h3 id="storage">storage</h3>
|
153
166
|
|
@@ -253,53 +266,88 @@
|
|
253
266
|
context.dispatchMagixEvent("click", { data: "data" });
|
254
267
|
```
|
255
268
|
|
256
|
-
<h2 id="
|
269
|
+
<h2 id="attributes">属性</h2>
|
257
270
|
|
258
|
-
- **
|
271
|
+
- **destroyed**
|
259
272
|
|
260
|
-
|
273
|
+
当前应用是否已经被销毁
|
274
|
+
|
275
|
+
类型: `boolean`
|
261
276
|
|
262
277
|
```ts
|
263
|
-
|
264
|
-
// release your listeners
|
265
|
-
});
|
278
|
+
contest.destroyed
|
266
279
|
```
|
267
280
|
|
268
|
-
- **
|
281
|
+
- **members**
|
282
|
+
|
283
|
+
当前房间的所有用户
|
269
284
|
|
270
|
-
|
285
|
+
类型: `Member[]`
|
271
286
|
|
272
287
|
```ts
|
273
|
-
|
274
|
-
|
275
|
-
|
288
|
+
type Member = {
|
289
|
+
uid: string;
|
290
|
+
memberId: number;
|
291
|
+
memberState: MemberState;
|
292
|
+
session: string;
|
293
|
+
payload?: UserPayload;
|
294
|
+
}
|
276
295
|
```
|
277
296
|
|
278
|
-
- **
|
297
|
+
- **currentMember**
|
279
298
|
|
280
|
-
|
299
|
+
当前用户
|
300
|
+
|
301
|
+
类型: `Member`
|
281
302
|
|
282
303
|
```ts
|
283
|
-
context.
|
284
|
-
//
|
285
|
-
});
|
304
|
+
context.currentMember
|
286
305
|
```
|
287
306
|
|
288
|
-
<h2 id="Advanced">Advanced</h2>
|
289
307
|
|
290
|
-
|
308
|
+
<h2 id="box">box</h2>
|
291
309
|
|
292
|
-
|
310
|
+
`box` 为应用窗口本身
|
311
|
+
|
312
|
+
类型: `ReadonlyTeleBox`
|
313
|
+
|
314
|
+
- **mountStyles()**
|
315
|
+
|
316
|
+
挂载样式到 `box` 上
|
317
|
+
|
318
|
+
参数: `string | HTMLStyleElement`
|
293
319
|
|
294
320
|
```ts
|
295
|
-
|
321
|
+
box.mountStyles(`
|
322
|
+
.hello-world-app span {
|
323
|
+
color: red;
|
324
|
+
}
|
325
|
+
`);
|
296
326
|
```
|
297
327
|
|
298
|
-
|
328
|
+
- **mountContent()**
|
299
329
|
|
300
|
-
`box`
|
330
|
+
挂载元素到 `box` 中\
|
331
|
+
推荐使用 `mountStage` 方法挂载元素到 `stage` 中
|
301
332
|
|
302
|
-
|
333
|
+
参数: `HTMLElement`
|
334
|
+
|
335
|
+
```ts
|
336
|
+
const app = document.createElement("div");
|
337
|
+
box.mountContent(app);
|
338
|
+
```
|
339
|
+
|
340
|
+
- **mountStage()**
|
341
|
+
|
342
|
+
挂载元素到 `box` 的 `contentStage` 中\
|
343
|
+
如无特殊情况, 推荐把所有内容挂载到 `stage` 中
|
344
|
+
|
345
|
+
参数: `HTMLElement`
|
346
|
+
|
347
|
+
```ts
|
348
|
+
const app = document.createElement("div");
|
349
|
+
box.mountStage(app);
|
350
|
+
```
|
303
351
|
|
304
352
|
- **contentStageRect**
|
305
353
|
|
@@ -324,7 +372,87 @@
|
|
324
372
|
订阅 `contextStateRect` 的变化
|
325
373
|
|
326
374
|
```ts
|
327
|
-
box.
|
375
|
+
box.onValChanged("contentStageRect", rect => {
|
328
376
|
console.log("contentStageRect changed", rect);
|
329
377
|
});
|
330
|
-
```
|
378
|
+
```
|
379
|
+
|
380
|
+
- **highlightStage**
|
381
|
+
|
382
|
+
是否高亮 `stage` 区域\
|
383
|
+
默认为 `true`
|
384
|
+
|
385
|
+
类型: `boolean`
|
386
|
+
|
387
|
+
- **setHighlightStage()**
|
388
|
+
|
389
|
+
参数: `boolean`
|
390
|
+
|
391
|
+
|
392
|
+
- **$content**
|
393
|
+
|
394
|
+
应用窗口的内容区域
|
395
|
+
|
396
|
+
类型: `HTMLElement`
|
397
|
+
|
398
|
+
- **$footer**
|
399
|
+
|
400
|
+
应用窗口的底部区域
|
401
|
+
|
402
|
+
类型: `HTMLElement`
|
403
|
+
|
404
|
+
- **resizable**
|
405
|
+
|
406
|
+
是否可以改变窗口大小
|
407
|
+
|
408
|
+
类型: `boolean`
|
409
|
+
|
410
|
+
- **draggable**
|
411
|
+
|
412
|
+
窗口是否可以拖动
|
413
|
+
|
414
|
+
类型: `boolean`
|
415
|
+
|
416
|
+
|
417
|
+
<h2 id="events">events</h2>
|
418
|
+
|
419
|
+
- **destroy**
|
420
|
+
|
421
|
+
app 被关闭时发送
|
422
|
+
|
423
|
+
```ts
|
424
|
+
context.emitter.on("destroy", () => {
|
425
|
+
// release your listeners
|
426
|
+
});
|
427
|
+
```
|
428
|
+
|
429
|
+
- **writableChange**
|
430
|
+
|
431
|
+
白板可写状态切换时触发
|
432
|
+
|
433
|
+
```ts
|
434
|
+
context.emitter.on("writableChange", isWritable => {
|
435
|
+
//
|
436
|
+
});
|
437
|
+
```
|
438
|
+
|
439
|
+
- **focus**
|
440
|
+
|
441
|
+
当前 app 获得焦点或者失去焦点时触发
|
442
|
+
|
443
|
+
```ts
|
444
|
+
context.emitter.on("focus", focus => {
|
445
|
+
//
|
446
|
+
});
|
447
|
+
```
|
448
|
+
|
449
|
+
|
450
|
+
<h2 id="Advanced">Advanced</h2>
|
451
|
+
|
452
|
+
- **context.getView()**
|
453
|
+
|
454
|
+
获取 `view` 实例
|
455
|
+
|
456
|
+
```ts
|
457
|
+
const view = context.view;
|
458
|
+
```
|
@@ -0,0 +1,68 @@
|
|
1
|
+
## 迁移至 `@netless/window-manager@1.0`
|
2
|
+
|
3
|
+
### 样式
|
4
|
+
|
5
|
+
1.0 之前
|
6
|
+
|
7
|
+
```html
|
8
|
+
<div class="netless-window-manager-playground">
|
9
|
+
<div class="netless-window-manager-sizer">
|
10
|
+
<div class="netless-window-manager-wrapper">
|
11
|
+
<div class="netless-window-manager-main-view"></div>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
</div>
|
15
|
+
```
|
16
|
+
|
17
|
+
1.0 之后
|
18
|
+
|
19
|
+
```html
|
20
|
+
<div class="netless-window-manager-playground">
|
21
|
+
<div class="telebox-manager-container">
|
22
|
+
<div class="telebox-manager-stage">
|
23
|
+
<div class="netless-window-manager-main-view"></div>
|
24
|
+
</div>
|
25
|
+
</div>
|
26
|
+
</div>
|
27
|
+
```
|
28
|
+
|
29
|
+
|
30
|
+
### `WindowManager.mount()` 迁移
|
31
|
+
|
32
|
+
废弃: `chessboard` 属性
|
33
|
+
|
34
|
+
- 添加: `containerStyle` 配置
|
35
|
+
- 配置 `telebox-manager-container` 的样式
|
36
|
+
- 添加: `stageStyle` 配置**
|
37
|
+
- 配置 `telebox-manager-stage` 的样式
|
38
|
+
- 添加: `defaultBoxBodyStyle` 配置
|
39
|
+
- 配置应用窗口默认 `body` 的样式
|
40
|
+
- 添加: `defaultBoxStageStyle` 配置
|
41
|
+
- 配置应用窗口默认 `stage` 也就是内容区域的样式
|
42
|
+
- 添加: `fullscreen` 配置
|
43
|
+
- 控制应用是否以全屏模式进入
|
44
|
+
- 添加: `theme` 配置
|
45
|
+
- 配置默认的颜色变量
|
46
|
+
|
47
|
+
### `manager.setContainerSizeRatio()` 行为修改
|
48
|
+
|
49
|
+
1.0 之前反复修改 `containerSizeRatio` 会导致内容一直变小
|
50
|
+
|
51
|
+
1.0 之后重复修改 `containerSizeRatio` 不会导致内容一致缩小
|
52
|
+
|
53
|
+
### baseSize
|
54
|
+
|
55
|
+
`baseSize` 主白板会去匹配内容到此大小
|
56
|
+
|
57
|
+
添加: `manager.baseSize` 属性\
|
58
|
+
添加: `manager.setBaseSize()` 方法\
|
59
|
+
添加: `baseSizeChange` 回调
|
60
|
+
|
61
|
+
### baseCamera
|
62
|
+
|
63
|
+
主白板的 `camera` 会根据 `baseSize` 的值和 `baseCamera` 的值计算一个最终值
|
64
|
+
|
65
|
+
添加: `manager.baseSize` 属性\
|
66
|
+
添加: `baseCamera` 回调
|
67
|
+
|
68
|
+
修改 `baseCamera` 依旧通过 `manager.moveCamera` 来实现
|
package/package.json
CHANGED
@@ -1,19 +1,21 @@
|
|
1
1
|
{
|
2
2
|
"name": "@netless/window-manager",
|
3
|
-
"version": "1.0.0-canary.
|
3
|
+
"version": "1.0.0-canary.61",
|
4
4
|
"description": "",
|
5
|
-
"main": "dist/index.
|
6
|
-
"module": "dist/index.
|
7
|
-
"types": "dist/index.d.ts",
|
5
|
+
"main": "dist/index.js",
|
6
|
+
"module": "dist/index.mjs",
|
7
|
+
"types": "dist/src/index.d.ts",
|
8
8
|
"repository": "netless-io/window-manager",
|
9
9
|
"scripts": {
|
10
10
|
"prettier": "prettier --write .",
|
11
|
-
"
|
11
|
+
"dev": "vite build --watch",
|
12
|
+
"build": "vite build",
|
12
13
|
"type-gen": "tsc --emitDeclarationOnly",
|
13
14
|
"predev": "yarn type-gen",
|
14
15
|
"build:lib:types": "tsc --emitDeclarationOnly",
|
15
16
|
"lint": "eslint --ext .ts,.tsx,.svelte . && prettier --check .",
|
16
|
-
"test": "vitest"
|
17
|
+
"test": "vitest",
|
18
|
+
"e2e": "playwright test"
|
17
19
|
},
|
18
20
|
"keywords": [],
|
19
21
|
"author": "",
|
@@ -23,45 +25,48 @@
|
|
23
25
|
},
|
24
26
|
"dependencies": {
|
25
27
|
"@juggle/resize-observer": "^3.3.1",
|
26
|
-
"@netless/
|
27
|
-
"
|
28
|
+
"@netless/synced-store": "^2.0.7",
|
29
|
+
"@netless/telebox-insider": "1.0.0-alpha.37",
|
30
|
+
"emittery": "^0.11.0",
|
28
31
|
"lodash": "^4.17.21",
|
29
|
-
"p-retry": "^4.6.
|
30
|
-
"side-effect-manager": "^1.1
|
32
|
+
"p-retry": "^4.6.2",
|
33
|
+
"side-effect-manager": "^1.2.1",
|
31
34
|
"uuid": "^7.0.3",
|
32
|
-
"value-enhancer": "^1.2
|
33
|
-
"video.js": ">=7"
|
35
|
+
"value-enhancer": "^1.3.2"
|
34
36
|
},
|
35
37
|
"devDependencies": {
|
36
|
-
"@netless/app-docs-viewer": "^0.
|
37
|
-
"@netless/app-
|
38
|
+
"@netless/app-docs-viewer": "^1.0.0-canary.3",
|
39
|
+
"@netless/app-plyr": "^0.2.3",
|
40
|
+
"@playwright/test": "^1.23.2",
|
38
41
|
"@rollup/plugin-commonjs": "^20.0.0",
|
39
42
|
"@rollup/plugin-node-resolve": "^13.0.4",
|
40
43
|
"@rollup/plugin-url": "^6.1.0",
|
41
|
-
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.
|
44
|
+
"@sveltejs/vite-plugin-svelte": "^1.0.0-next.49",
|
42
45
|
"@tsconfig/svelte": "^2.0.1",
|
43
46
|
"@types/debug": "^4.1.7",
|
44
47
|
"@types/lodash": "^4.14.182",
|
45
|
-
"@types/lodash-es": "^4.17.
|
46
|
-
"@types/
|
48
|
+
"@types/lodash-es": "^4.17.6",
|
49
|
+
"@types/node": "^18.0.3",
|
50
|
+
"@types/uuid": "^8.3.4",
|
47
51
|
"@typescript-eslint/eslint-plugin": "^4.30.0",
|
48
52
|
"@typescript-eslint/parser": "^4.30.0",
|
49
|
-
"@vitest/ui": "^0.14.
|
53
|
+
"@vitest/ui": "^0.14.2",
|
50
54
|
"cypress": "^8.7.0",
|
51
55
|
"dotenv": "^10.0.0",
|
52
56
|
"eslint": "^7.32.0",
|
53
57
|
"eslint-config-prettier": "^8.3.0",
|
54
58
|
"eslint-plugin-svelte3": "^3.2.0",
|
55
59
|
"jsdom": "^19.0.0",
|
56
|
-
"less": "^4.1.
|
60
|
+
"less": "^4.1.3",
|
57
61
|
"prettier": "^2.3.2",
|
58
62
|
"prettier-plugin-svelte": "^2.4.0",
|
59
63
|
"rollup-plugin-analyzer": "^4.0.0",
|
60
64
|
"rollup-plugin-styles": "^3.14.1",
|
61
65
|
"svelte": "^3.42.4",
|
62
66
|
"typescript": "^4.5.5",
|
63
|
-
"vite": "^
|
64
|
-
"
|
65
|
-
"
|
67
|
+
"vite": "^3.1.3",
|
68
|
+
"vite-plugin-dts": "^1.5.0",
|
69
|
+
"vitest": "^0.23.4",
|
70
|
+
"white-web-sdk": "^2.16.35"
|
66
71
|
}
|
67
72
|
}
|
@@ -0,0 +1,29 @@
|
|
1
|
+
import type { PlaywrightTestConfig} from '@playwright/test';
|
2
|
+
import dotenv from "dotenv";
|
3
|
+
import path from "path";
|
4
|
+
|
5
|
+
dotenv.config({ path: path.resolve(__dirname, "example", ".env") });
|
6
|
+
|
7
|
+
const config: PlaywrightTestConfig = {
|
8
|
+
forbidOnly: !!process.env.CI,
|
9
|
+
retries: process.env.CI ? 2 : 0,
|
10
|
+
use: {
|
11
|
+
trace: 'on-first-retry',
|
12
|
+
baseURL: "http://localhost:4000",
|
13
|
+
headless: true,
|
14
|
+
},
|
15
|
+
timeout: 5 * 60 * 1000,
|
16
|
+
workers: 4,
|
17
|
+
projects: [
|
18
|
+
{
|
19
|
+
name: 'chrome',
|
20
|
+
use: {
|
21
|
+
launchOptions: {
|
22
|
+
executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
23
|
+
}
|
24
|
+
},
|
25
|
+
},
|
26
|
+
],
|
27
|
+
testDir: "./e2e",
|
28
|
+
};
|
29
|
+
export default config;
|