@rickcedwhat/playwright-smart-table 6.8.2 → 6.10.0
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 +0 -2
- package/dist/engine/rowFinder.js +153 -168
- package/dist/engine/tableIteration.js +105 -123
- package/dist/engine/tableMapper.js +88 -103
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/presets/glide/columns.js +23 -32
- package/dist/presets/glide/headers.js +18 -27
- package/dist/presets/glide/index.d.ts +9 -9
- package/dist/presets/glide/index.js +24 -33
- package/dist/presets/mui.js +197 -124
- package/dist/presets/rdg.d.ts +1 -1
- package/dist/presets/rdg.js +32 -41
- package/dist/smartRow.js +163 -96
- package/dist/strategies/columns.js +2 -11
- package/dist/strategies/dedupe.js +3 -12
- package/dist/strategies/fill.js +20 -29
- package/dist/strategies/headers.js +22 -31
- package/dist/strategies/index.d.ts +4 -0
- package/dist/strategies/index.js +3 -0
- package/dist/strategies/loading.js +24 -33
- package/dist/strategies/pagination.js +21 -30
- package/dist/strategies/sorting.js +18 -31
- package/dist/strategies/stabilization.js +28 -37
- package/dist/strategies/viewport.d.ts +52 -0
- package/dist/strategies/viewport.js +123 -0
- package/dist/typeContext.d.ts +1 -1
- package/dist/typeContext.js +100 -9
- package/dist/types.d.ts +100 -9
- package/dist/useTable.js +98 -76
- package/dist/utils/debugUtils.js +5 -16
- package/dist/utils/elementTracker.js +27 -40
- package/dist/utils/mutex.js +5 -16
- package/dist/utils/navigationBarrier.js +25 -36
- package/dist/utils/paginationPath.js +102 -115
- package/dist/utils/smartRowArray.js +2 -11
- package/dist/utils.js +4 -13
- package/package.json +9 -5
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.NavigationBarrier = void 0;
|
|
13
4
|
/**
|
|
@@ -25,34 +16,32 @@ class NavigationBarrier {
|
|
|
25
16
|
* Synchronize all active rows at a specific column index.
|
|
26
17
|
* The last row to arrive will trigger the `moveAction`.
|
|
27
18
|
*/
|
|
28
|
-
sync(colIndex, moveAction) {
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
19
|
+
async sync(colIndex, moveAction) {
|
|
20
|
+
if (this.total <= 1) {
|
|
21
|
+
if (moveAction)
|
|
22
|
+
return await moveAction();
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
return new Promise((resolve) => {
|
|
26
|
+
let bucket = this.buckets.get(colIndex);
|
|
27
|
+
if (!bucket) {
|
|
28
|
+
bucket = new Set();
|
|
29
|
+
this.buckets.set(colIndex, bucket);
|
|
30
|
+
}
|
|
31
|
+
bucket.add(resolve);
|
|
32
|
+
if (bucket.size + this.finishedCount >= this.total) {
|
|
33
|
+
// Use a self-executing async function to handle the moveAction synchronously in this context
|
|
34
|
+
(async () => {
|
|
35
|
+
let result;
|
|
36
|
+
try {
|
|
37
|
+
if (moveAction)
|
|
38
|
+
result = await moveAction();
|
|
39
|
+
}
|
|
40
|
+
finally {
|
|
41
|
+
this.broadcast(colIndex, result);
|
|
42
|
+
}
|
|
43
|
+
})();
|
|
34
44
|
}
|
|
35
|
-
return new Promise((resolve) => {
|
|
36
|
-
let bucket = this.buckets.get(colIndex);
|
|
37
|
-
if (!bucket) {
|
|
38
|
-
bucket = new Set();
|
|
39
|
-
this.buckets.set(colIndex, bucket);
|
|
40
|
-
}
|
|
41
|
-
bucket.add(resolve);
|
|
42
|
-
if (bucket.size + this.finishedCount >= this.total) {
|
|
43
|
-
// Use a self-executing async function to handle the moveAction synchronously in this context
|
|
44
|
-
(() => __awaiter(this, void 0, void 0, function* () {
|
|
45
|
-
let result;
|
|
46
|
-
try {
|
|
47
|
-
if (moveAction)
|
|
48
|
-
result = yield moveAction();
|
|
49
|
-
}
|
|
50
|
-
finally {
|
|
51
|
-
this.broadcast(colIndex, result);
|
|
52
|
-
}
|
|
53
|
-
}))();
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
45
|
});
|
|
57
46
|
}
|
|
58
47
|
/**
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.planNavigationPath = planNavigationPath;
|
|
13
4
|
exports.executeNavigationWithGoToPageRetry = executeNavigationWithGoToPageRetry;
|
|
@@ -108,123 +99,119 @@ const MAX_GO_TO_PAGE_RETRIES = 200;
|
|
|
108
99
|
* steps once toward target (goNextBulk/goNext or goPreviousBulk/goPrevious), then retries.
|
|
109
100
|
* Example: from 3 to 38 with windowed goToPage → goToPage(38) false, goNextBulk(), goToPage(38) false, … goToPage(38) true.
|
|
110
101
|
*/
|
|
111
|
-
function executeNavigationWithGoToPageRetry(targetPageIndex, primitives, context, getCurrentPage, setCurrentPage) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
102
|
+
async function executeNavigationWithGoToPageRetry(targetPageIndex, primitives, context, getCurrentPage, setCurrentPage) {
|
|
103
|
+
var _a, _b;
|
|
104
|
+
if (!primitives.goToPage)
|
|
105
|
+
return;
|
|
106
|
+
for (let i = 0; i < MAX_GO_TO_PAGE_RETRIES; i++) {
|
|
107
|
+
const current = getCurrentPage();
|
|
108
|
+
if (current === targetPageIndex)
|
|
109
|
+
return;
|
|
110
|
+
const ok = await primitives.goToPage(targetPageIndex, context);
|
|
111
|
+
if (ok) {
|
|
112
|
+
setCurrentPage(targetPageIndex);
|
|
115
113
|
return;
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
114
|
+
}
|
|
115
|
+
// Step once toward target. Don't use bulk if it would overshoot and we can't step back (no goPrevious/goNext).
|
|
116
|
+
if (targetPageIndex > current) {
|
|
117
|
+
const nextBulkSize = (_a = primitives.nextBulkPages) !== null && _a !== void 0 ? _a : 1;
|
|
118
|
+
const wouldOvershoot = (current + nextBulkSize) > targetPageIndex;
|
|
119
|
+
const canStepBack = !!primitives.goPrevious;
|
|
120
|
+
const useBulk = primitives.goNextBulk && (!wouldOvershoot || canStepBack);
|
|
121
|
+
if (useBulk && primitives.goNextBulk) {
|
|
122
|
+
const result = await primitives.goNextBulk(context);
|
|
123
|
+
if (!result)
|
|
124
|
+
throw new Error('bringIntoView: goNextBulk failed during goToPage retry');
|
|
125
|
+
const jumped = typeof result === 'number' ? result : nextBulkSize;
|
|
126
|
+
setCurrentPage(getCurrentPage() + jumped);
|
|
127
|
+
}
|
|
128
|
+
else if (primitives.goNext) {
|
|
129
|
+
const stepped = await primitives.goNext(context);
|
|
130
|
+
if (!stepped)
|
|
131
|
+
throw new Error('bringIntoView: goNext failed during goToPage retry');
|
|
132
|
+
setCurrentPage(getCurrentPage() + 1);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const available = Object.keys(primitives).filter(k => primitives[k]);
|
|
136
|
+
throw new Error(`bringIntoView: goToPage(${targetPageIndex}) returned false and no goNext/goNextBulk to advance. Available primitives: ${available.join(', ')}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
const prevBulkSize = (_b = primitives.previousBulkPages) !== null && _b !== void 0 ? _b : 1;
|
|
141
|
+
const wouldOvershoot = (current - prevBulkSize) < targetPageIndex;
|
|
142
|
+
const canStepBack = !!primitives.goNext;
|
|
143
|
+
const useBulk = primitives.goPreviousBulk && (!wouldOvershoot || canStepBack);
|
|
144
|
+
if (useBulk && primitives.goPreviousBulk) {
|
|
145
|
+
const result = await primitives.goPreviousBulk(context);
|
|
146
|
+
if (!result)
|
|
147
|
+
throw new Error('bringIntoView: goPreviousBulk failed during goToPage retry');
|
|
148
|
+
const jumped = typeof result === 'number' ? result : prevBulkSize;
|
|
149
|
+
setCurrentPage(getCurrentPage() - jumped);
|
|
124
150
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
151
|
+
else if (primitives.goPrevious) {
|
|
152
|
+
const stepped = await primitives.goPrevious(context);
|
|
153
|
+
if (!stepped)
|
|
154
|
+
throw new Error('bringIntoView: goPrevious failed during goToPage retry');
|
|
155
|
+
setCurrentPage(getCurrentPage() - 1);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
const available = Object.keys(primitives).filter(k => primitives[k]);
|
|
159
|
+
throw new Error(`bringIntoView: goToPage(${targetPageIndex}) returned false and no goPrevious/goPreviousBulk to step back. Available primitives: ${available.join(', ')}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
const available = Object.keys(primitives).filter(k => primitives[k]);
|
|
164
|
+
throw new Error(`bringIntoView: failed to reach page ${targetPageIndex} after ${MAX_GO_TO_PAGE_RETRIES} goToPage retries. Available primitives: ${available.join(', ')}`);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Executes a navigation path by calling the corresponding primitives.
|
|
168
|
+
* Updates currentPageIndex via the provided setter as steps run.
|
|
169
|
+
*/
|
|
170
|
+
async function executeNavigationPath(path, primitives, context, getCurrentPage, setCurrentPage) {
|
|
171
|
+
for (const step of path) {
|
|
172
|
+
switch (step.type) {
|
|
173
|
+
case 'goToPage':
|
|
174
|
+
if (primitives.goToPage) {
|
|
175
|
+
const ok = await primitives.goToPage(step.pageIndex, context);
|
|
176
|
+
if (!ok)
|
|
177
|
+
throw new Error(`goToPage(${step.pageIndex}) failed`);
|
|
178
|
+
setCurrentPage(step.pageIndex);
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
case 'goNextBulk':
|
|
182
|
+
for (let i = 0; i < step.count && primitives.goNextBulk; i++) {
|
|
183
|
+
const result = await primitives.goNextBulk(context);
|
|
133
184
|
if (!result)
|
|
134
|
-
throw new Error('
|
|
135
|
-
const jumped = typeof result === 'number' ? result :
|
|
185
|
+
throw new Error('goNextBulk failed');
|
|
186
|
+
const jumped = typeof result === 'number' ? result : 1;
|
|
136
187
|
setCurrentPage(getCurrentPage() + jumped);
|
|
137
188
|
}
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
189
|
+
break;
|
|
190
|
+
case 'goNext':
|
|
191
|
+
for (let i = 0; i < step.count && primitives.goNext; i++) {
|
|
192
|
+
const ok = await primitives.goNext(context);
|
|
193
|
+
if (!ok)
|
|
194
|
+
throw new Error('goNext failed');
|
|
142
195
|
setCurrentPage(getCurrentPage() + 1);
|
|
143
196
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
}
|
|
149
|
-
else {
|
|
150
|
-
const prevBulkSize = (_b = primitives.previousBulkPages) !== null && _b !== void 0 ? _b : 1;
|
|
151
|
-
const wouldOvershoot = (current - prevBulkSize) < targetPageIndex;
|
|
152
|
-
const canStepBack = !!primitives.goNext;
|
|
153
|
-
const useBulk = primitives.goPreviousBulk && (!wouldOvershoot || canStepBack);
|
|
154
|
-
if (useBulk && primitives.goPreviousBulk) {
|
|
155
|
-
const result = yield primitives.goPreviousBulk(context);
|
|
197
|
+
break;
|
|
198
|
+
case 'goPreviousBulk':
|
|
199
|
+
for (let i = 0; i < step.count && primitives.goPreviousBulk; i++) {
|
|
200
|
+
const result = await primitives.goPreviousBulk(context);
|
|
156
201
|
if (!result)
|
|
157
|
-
throw new Error('
|
|
158
|
-
const jumped = typeof result === 'number' ? result :
|
|
202
|
+
throw new Error('goPreviousBulk failed');
|
|
203
|
+
const jumped = typeof result === 'number' ? result : 1;
|
|
159
204
|
setCurrentPage(getCurrentPage() - jumped);
|
|
160
205
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
206
|
+
break;
|
|
207
|
+
case 'goPrevious':
|
|
208
|
+
for (let i = 0; i < step.count && primitives.goPrevious; i++) {
|
|
209
|
+
const ok = await primitives.goPrevious(context);
|
|
210
|
+
if (!ok)
|
|
211
|
+
throw new Error('goPrevious failed');
|
|
165
212
|
setCurrentPage(getCurrentPage() - 1);
|
|
166
213
|
}
|
|
167
|
-
|
|
168
|
-
const available = Object.keys(primitives).filter(k => primitives[k]);
|
|
169
|
-
throw new Error(`bringIntoView: goToPage(${targetPageIndex}) returned false and no goPrevious/goPreviousBulk to step back. Available primitives: ${available.join(', ')}`);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
214
|
+
break;
|
|
172
215
|
}
|
|
173
|
-
|
|
174
|
-
throw new Error(`bringIntoView: failed to reach page ${targetPageIndex} after ${MAX_GO_TO_PAGE_RETRIES} goToPage retries. Available primitives: ${available.join(', ')}`);
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Executes a navigation path by calling the corresponding primitives.
|
|
179
|
-
* Updates currentPageIndex via the provided setter as steps run.
|
|
180
|
-
*/
|
|
181
|
-
function executeNavigationPath(path, primitives, context, getCurrentPage, setCurrentPage) {
|
|
182
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
-
for (const step of path) {
|
|
184
|
-
switch (step.type) {
|
|
185
|
-
case 'goToPage':
|
|
186
|
-
if (primitives.goToPage) {
|
|
187
|
-
const ok = yield primitives.goToPage(step.pageIndex, context);
|
|
188
|
-
if (!ok)
|
|
189
|
-
throw new Error(`goToPage(${step.pageIndex}) failed`);
|
|
190
|
-
setCurrentPage(step.pageIndex);
|
|
191
|
-
}
|
|
192
|
-
break;
|
|
193
|
-
case 'goNextBulk':
|
|
194
|
-
for (let i = 0; i < step.count && primitives.goNextBulk; i++) {
|
|
195
|
-
const result = yield primitives.goNextBulk(context);
|
|
196
|
-
if (!result)
|
|
197
|
-
throw new Error('goNextBulk failed');
|
|
198
|
-
const jumped = typeof result === 'number' ? result : 1;
|
|
199
|
-
setCurrentPage(getCurrentPage() + jumped);
|
|
200
|
-
}
|
|
201
|
-
break;
|
|
202
|
-
case 'goNext':
|
|
203
|
-
for (let i = 0; i < step.count && primitives.goNext; i++) {
|
|
204
|
-
const ok = yield primitives.goNext(context);
|
|
205
|
-
if (!ok)
|
|
206
|
-
throw new Error('goNext failed');
|
|
207
|
-
setCurrentPage(getCurrentPage() + 1);
|
|
208
|
-
}
|
|
209
|
-
break;
|
|
210
|
-
case 'goPreviousBulk':
|
|
211
|
-
for (let i = 0; i < step.count && primitives.goPreviousBulk; i++) {
|
|
212
|
-
const result = yield primitives.goPreviousBulk(context);
|
|
213
|
-
if (!result)
|
|
214
|
-
throw new Error('goPreviousBulk failed');
|
|
215
|
-
const jumped = typeof result === 'number' ? result : 1;
|
|
216
|
-
setCurrentPage(getCurrentPage() - jumped);
|
|
217
|
-
}
|
|
218
|
-
break;
|
|
219
|
-
case 'goPrevious':
|
|
220
|
-
for (let i = 0; i < step.count && primitives.goPrevious; i++) {
|
|
221
|
-
const ok = yield primitives.goPrevious(context);
|
|
222
|
-
if (!ok)
|
|
223
|
-
throw new Error('goPrevious failed');
|
|
224
|
-
setCurrentPage(getCurrentPage() - 1);
|
|
225
|
-
}
|
|
226
|
-
break;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
});
|
|
216
|
+
}
|
|
230
217
|
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.createSmartRowArray = createSmartRowArray;
|
|
13
4
|
/**
|
|
@@ -15,8 +6,8 @@ exports.createSmartRowArray = createSmartRowArray;
|
|
|
15
6
|
*/
|
|
16
7
|
function createSmartRowArray(rows) {
|
|
17
8
|
const arr = rows;
|
|
18
|
-
arr.toJSON = () =>
|
|
9
|
+
arr.toJSON = async () => {
|
|
19
10
|
return Promise.all(rows.map(r => r.toJSON()));
|
|
20
|
-
}
|
|
11
|
+
};
|
|
21
12
|
return arr;
|
|
22
13
|
}
|
package/dist/utils.js
CHANGED
|
@@ -1,13 +1,4 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
3
|
exports.waitForCondition = void 0;
|
|
13
4
|
/**
|
|
@@ -15,15 +6,15 @@ exports.waitForCondition = void 0;
|
|
|
15
6
|
* Replaces the dependency on 'expect(...).toPass()' to ensure compatibility
|
|
16
7
|
* with environments where 'expect' is not globally available.
|
|
17
8
|
*/
|
|
18
|
-
const waitForCondition = (predicate, timeout, page) =>
|
|
9
|
+
const waitForCondition = async (predicate, timeout, page) => {
|
|
19
10
|
const startTime = Date.now();
|
|
20
11
|
while (Date.now() - startTime < timeout) {
|
|
21
|
-
if (
|
|
12
|
+
if (await predicate()) {
|
|
22
13
|
return true;
|
|
23
14
|
}
|
|
24
15
|
// Wait 100ms before next check (Standard Polling)
|
|
25
|
-
|
|
16
|
+
await page.waitForTimeout(100).catch(() => new Promise(r => setTimeout(r, 100)));
|
|
26
17
|
}
|
|
27
18
|
return false;
|
|
28
|
-
}
|
|
19
|
+
};
|
|
29
20
|
exports.waitForCondition = waitForCondition;
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rickcedwhat/playwright-smart-table",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.10.0",
|
|
4
4
|
"description": "Smart, column-aware table interactions for Playwright",
|
|
5
5
|
"author": "Cedrick Catalan",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://rickcedwhat.github.io/playwright-smart-table/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "https://github.com/rickcedwhat/playwright-smart-table.git"
|
|
10
|
+
"url": "git+https://github.com/rickcedwhat/playwright-smart-table.git"
|
|
11
11
|
},
|
|
12
12
|
"bugs": {
|
|
13
13
|
"url": "https://github.com/rickcedwhat/playwright-smart-table/issues"
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"pretest:e2e": "npm run clean-port",
|
|
40
40
|
"posttest:e2e": "npm run clean-port",
|
|
41
41
|
"test:e2e": "npx playwright test",
|
|
42
|
+
"test:playground": "npx playwright test --config tests-external/playground/playwright.config.ts 2>&1 | tee \"tests-external/playground/logs/run-$(date +%Y%m%d-%H%M%S).log\"",
|
|
42
43
|
"dev:playground": "cd playground && npm run dev",
|
|
43
44
|
"dev:mui": "cd tests/apps/mui-datagrid && npm run dev",
|
|
44
45
|
"prepare": "husky install"
|
|
@@ -81,16 +82,19 @@
|
|
|
81
82
|
"@playwright/test": "^1.40.0"
|
|
82
83
|
},
|
|
83
84
|
"devDependencies": {
|
|
84
|
-
"@playwright/test": "^1.
|
|
85
|
+
"@playwright/test": "^1.59.1",
|
|
85
86
|
"@stryker-mutator/core": "^9.6.0",
|
|
86
87
|
"@stryker-mutator/vitest-runner": "^9.6.0",
|
|
87
|
-
"@types/node": "^25.
|
|
88
|
+
"@types/node": "^25.5.2",
|
|
88
89
|
"@vitest/coverage-v8": "^4.1.0",
|
|
89
90
|
"@vitest/ui": "^4.1.0",
|
|
90
91
|
"happy-dom": "^20.8.3",
|
|
91
92
|
"husky": "^9.1.7",
|
|
92
|
-
"typescript": "^
|
|
93
|
+
"typescript": "^6.0.2",
|
|
93
94
|
"vitepress": "^1.6.4",
|
|
94
95
|
"vitest": "^4.1.0"
|
|
96
|
+
},
|
|
97
|
+
"dependencies": {
|
|
98
|
+
"@scarf/scarf": "^1.4.0"
|
|
95
99
|
}
|
|
96
100
|
}
|