vasu-playwright-utils 1.22.1 → 1.23.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 +48 -0
- package/dist/src/vasu-playwright-lib/utils/action-utils.d.ts +16 -5
- package/dist/src/vasu-playwright-lib/utils/action-utils.d.ts.map +1 -1
- package/dist/src/vasu-playwright-lib/utils/action-utils.js +22 -8
- package/dist/src/vasu-playwright-lib/utils/action-utils.js.map +1 -1
- package/eslint.config.base.js +158 -0
- package/package.json +13 -11
- package/src/vasu-playwright-lib/utils/action-utils.ts +24 -8
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
|
|
14
14
|
- [Installation](#installation)
|
|
15
15
|
- [Usage](#usage)
|
|
16
|
+
- [ESLint](#eslint)
|
|
16
17
|
- [License](#license)
|
|
17
18
|
|
|
18
19
|
## Installation
|
|
@@ -33,6 +34,53 @@ import { click, fill } from 'vasu-playwright-utils';
|
|
|
33
34
|
// Your code here
|
|
34
35
|
```
|
|
35
36
|
|
|
37
|
+
## ESLint
|
|
38
|
+
|
|
39
|
+
This library ships a shareable ESLint config for Playwright TypeScript projects. Install the library (it includes the required ESLint plugins), then extend the config in your project and override any rules as needed.
|
|
40
|
+
|
|
41
|
+
### Using the config
|
|
42
|
+
|
|
43
|
+
1. Use **ESLint 9 flat config** (`eslint.config.js` at your project root).
|
|
44
|
+
|
|
45
|
+
2. In your `eslint.config.js`, spread the library config:
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
const playwrightLibConfig = require('vasu-playwright-utils/eslint');
|
|
49
|
+
|
|
50
|
+
module.exports = [...playwrightLibConfig];
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
3. Ensure your project has a `tsconfig.json` at the root (the config uses it for TypeScript parsing).
|
|
54
|
+
|
|
55
|
+
### Overriding rules
|
|
56
|
+
|
|
57
|
+
Add config objects after the spread to override or relax rules:
|
|
58
|
+
|
|
59
|
+
```javascript
|
|
60
|
+
const playwrightLibConfig = require('vasu-playwright-utils/eslint');
|
|
61
|
+
|
|
62
|
+
module.exports = [
|
|
63
|
+
...playwrightLibConfig,
|
|
64
|
+
// Override specific rules
|
|
65
|
+
{
|
|
66
|
+
rules: {
|
|
67
|
+
'playwright/no-focused-test': 'warn',
|
|
68
|
+
'playwright/no-wait-for-timeout': 'off',
|
|
69
|
+
'no-console': 'off',
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
// Or override only for certain files
|
|
73
|
+
{
|
|
74
|
+
files: ['tests/**/*.ts'],
|
|
75
|
+
rules: {
|
|
76
|
+
'playwright/expect-expect': 'error',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
];
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Later entries in the config array override earlier ones, so your overrides take precedence.
|
|
83
|
+
|
|
36
84
|
## Issues and Feedback
|
|
37
85
|
|
|
38
86
|
If you encounter any issues or have feedback, please [Raise an Issue](https://github.com/vasu31dev/playwright-ts-lib/issues) on GitHub.
|
|
@@ -160,11 +160,22 @@ export declare function dragAndDrop(input: string | Locator, dest: string | Loca
|
|
|
160
160
|
*/
|
|
161
161
|
export declare function doubleClick(input: string | Locator, options?: DoubleClickOptions): Promise<void>;
|
|
162
162
|
/**
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
|
|
167
|
-
|
|
163
|
+
* Triggers a file download by clicking the given element and saves the file to `savePath`.
|
|
164
|
+
*
|
|
165
|
+
* Uses `saveAs()` only (no `download.path()`), so it works locally and when connecting
|
|
166
|
+
* to a remote browser (e.g. Docker or cloud).
|
|
167
|
+
*
|
|
168
|
+
* @param {string | Locator} input - Selector or locator for the element that starts the download (e.g. download button).
|
|
169
|
+
* @param {string} savePath - Full path where the file should be saved along with file extension
|
|
170
|
+
* @returns {Promise<string>}The suggested filename from the response, or the last segment of `savePath` if empty. Use for assertions or logging.
|
|
171
|
+
* @throws If the element is not found, the click fails, the download fails, or save fails.
|
|
172
|
+
* @example
|
|
173
|
+
* const filename = await downloadFile('#download-btn', '/tmp/report.pdf');
|
|
174
|
+
* expect(filename).toBe('report.pdf');
|
|
175
|
+
*
|
|
176
|
+
* const filename = await downloadFile(myLocator, path.join(downloadDir, 'file.zip'), { timeout: 30000 });
|
|
177
|
+
*/
|
|
178
|
+
export declare function downloadFile(input: string | Locator, savePath: string, options?: ClickOptions): Promise<string>;
|
|
168
179
|
/**
|
|
169
180
|
* Uploads files to a specified element.
|
|
170
181
|
* @param {string | Locator} input - The element to upload files to.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-utils.d.ts","sourceRoot":"","sources":["../../../../src/vasu-playwright-lib/utils/action-utils.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"action-utils.d.ts","sourceRoot":"","sources":["../../../../src/vasu-playwright-lib/utils/action-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -403,20 +403,34 @@ function doubleClick(input, options) {
|
|
|
403
403
|
});
|
|
404
404
|
}
|
|
405
405
|
/**
|
|
406
|
-
*
|
|
407
|
-
*
|
|
408
|
-
*
|
|
406
|
+
* Triggers a file download by clicking the given element and saves the file to `savePath`.
|
|
407
|
+
*
|
|
408
|
+
* Uses `saveAs()` only (no `download.path()`), so it works locally and when connecting
|
|
409
|
+
* to a remote browser (e.g. Docker or cloud).
|
|
410
|
+
*
|
|
411
|
+
* @param {string | Locator} input - Selector or locator for the element that starts the download (e.g. download button).
|
|
412
|
+
* @param {string} savePath - Full path where the file should be saved along with file extension
|
|
413
|
+
* @returns {Promise<string>}The suggested filename from the response, or the last segment of `savePath` if empty. Use for assertions or logging.
|
|
414
|
+
* @throws If the element is not found, the click fails, the download fails, or save fails.
|
|
415
|
+
* @example
|
|
416
|
+
* const filename = await downloadFile('#download-btn', '/tmp/report.pdf');
|
|
417
|
+
* expect(filename).toBe('report.pdf');
|
|
418
|
+
*
|
|
419
|
+
* const filename = await downloadFile(myLocator, path.join(downloadDir, 'file.zip'), { timeout: 30000 });
|
|
409
420
|
*/
|
|
410
|
-
function downloadFile(input,
|
|
421
|
+
function downloadFile(input, savePath, options) {
|
|
411
422
|
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
412
423
|
const locator = yield getLocatorWithStableAndVisibleOptions(input, options);
|
|
413
424
|
const downloadPromise = (0, page_utils_1.getPage)().waitForEvent('download');
|
|
414
425
|
yield click(locator, options);
|
|
415
426
|
const download = yield downloadPromise;
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
427
|
+
const failure = yield download.failure();
|
|
428
|
+
if (failure) {
|
|
429
|
+
throw new Error(`Download failed: ${failure}`);
|
|
430
|
+
}
|
|
431
|
+
yield download.saveAs(savePath);
|
|
432
|
+
const suggestedFilename = download.suggestedFilename();
|
|
433
|
+
return suggestedFilename;
|
|
420
434
|
});
|
|
421
435
|
}
|
|
422
436
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-utils.js","sourceRoot":"","sources":["../../../../src/vasu-playwright-lib/utils/action-utils.ts"],"names":[],"mappings":";;AA2DA,sBAGC;AAOD,4CAyBC;AAQD,oBAGC;AAQD,oCAIC;AAQD,gCAIC;AAQD,8CAOC;AAQD,8CAEC;AASD,oDAOC;AAOD,sBAGC;AAOD,sBAGC;AAOD,0BAGC;AAQD,sCAGC;AAQD,wCAOC;AAQD,oCAGC;AAQD,sCAGC;AAeD,kCAqBC;AAQD,oCAkBC;AASD,oCAkBC;AAqBD,sBAGC;AAOD,sBAMC;AAQD,kCAQC;AAOD,kCAGC;
|
|
1
|
+
{"version":3,"file":"action-utils.js","sourceRoot":"","sources":["../../../../src/vasu-playwright-lib/utils/action-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shareable ESLint config for Playwright TypeScript projects.
|
|
3
|
+
* Single source of truth: used by this repo (via eslint.config.js) and by consumers (vasu-playwright-utils/eslint).
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* // eslint.config.js (in your project)
|
|
7
|
+
* const playwrightLibConfig = require('vasu-playwright-utils/eslint');
|
|
8
|
+
* module.exports = [
|
|
9
|
+
* ...playwrightLibConfig,
|
|
10
|
+
* { rules: { 'playwright/no-focused-test': 'warn' } },
|
|
11
|
+
* ];
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const typescript = require('@typescript-eslint/eslint-plugin');
|
|
15
|
+
const typescriptParser = require('@typescript-eslint/parser');
|
|
16
|
+
const prettier = require('eslint-plugin-prettier');
|
|
17
|
+
const importPlugin = require('eslint-plugin-import');
|
|
18
|
+
const jsdoc = require('eslint-plugin-jsdoc');
|
|
19
|
+
const playwright = require('eslint-plugin-playwright');
|
|
20
|
+
const js = require('@eslint/js');
|
|
21
|
+
|
|
22
|
+
// Works in this repo and when required from other projects (consumer's cwd)
|
|
23
|
+
const projectRoot = require('process').cwd();
|
|
24
|
+
|
|
25
|
+
module.exports = [
|
|
26
|
+
{
|
|
27
|
+
ignores: [
|
|
28
|
+
'node_modules/**',
|
|
29
|
+
'dist/**',
|
|
30
|
+
'build/**',
|
|
31
|
+
'coverage/**',
|
|
32
|
+
'.husky/**',
|
|
33
|
+
'**/*.js',
|
|
34
|
+
'package-lock.json',
|
|
35
|
+
],
|
|
36
|
+
},
|
|
37
|
+
js.configs.recommended,
|
|
38
|
+
{
|
|
39
|
+
files: ['**/*.ts'],
|
|
40
|
+
languageOptions: {
|
|
41
|
+
parser: typescriptParser,
|
|
42
|
+
parserOptions: {
|
|
43
|
+
project: './tsconfig.json',
|
|
44
|
+
tsconfigRootDir: projectRoot,
|
|
45
|
+
},
|
|
46
|
+
globals: {
|
|
47
|
+
console: 'readonly',
|
|
48
|
+
process: 'readonly',
|
|
49
|
+
Buffer: 'readonly',
|
|
50
|
+
__dirname: 'readonly',
|
|
51
|
+
__filename: 'readonly',
|
|
52
|
+
global: 'readonly',
|
|
53
|
+
module: 'readonly',
|
|
54
|
+
require: 'readonly',
|
|
55
|
+
exports: 'readonly',
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
plugins: {
|
|
59
|
+
'@typescript-eslint': typescript,
|
|
60
|
+
prettier,
|
|
61
|
+
import: importPlugin,
|
|
62
|
+
jsdoc,
|
|
63
|
+
playwright,
|
|
64
|
+
},
|
|
65
|
+
settings: { 'import/resolver': { typescript: { alwaysTryTypes: true } } },
|
|
66
|
+
rules: {
|
|
67
|
+
// Prettier Rules
|
|
68
|
+
'prettier/prettier': 'error',
|
|
69
|
+
'no-trailing-spaces': 'error',
|
|
70
|
+
'no-multiple-empty-lines': ['error', { max: 1, maxEOF: 0 }],
|
|
71
|
+
'eol-last': ['error', 'always'],
|
|
72
|
+
|
|
73
|
+
// TypeScript Rules - Base
|
|
74
|
+
...typescript.configs['eslint-recommended'].overrides[0].rules,
|
|
75
|
+
...typescript.configs.recommended.rules,
|
|
76
|
+
'@typescript-eslint/no-unsafe-assignment': 'warn',
|
|
77
|
+
'@typescript-eslint/no-unsafe-member-access': 'warn',
|
|
78
|
+
'@typescript-eslint/no-unsafe-return': 'warn',
|
|
79
|
+
'@typescript-eslint/no-unsafe-call': 'warn',
|
|
80
|
+
'@typescript-eslint/no-floating-promises': 'error',
|
|
81
|
+
'@typescript-eslint/no-unnecessary-type-assertion': 'error',
|
|
82
|
+
'@typescript-eslint/no-explicit-any': 'warn',
|
|
83
|
+
'@typescript-eslint/explicit-module-boundary-types': 'off',
|
|
84
|
+
|
|
85
|
+
// TypeScript Rules - Additional Strict Rules
|
|
86
|
+
'@typescript-eslint/no-unused-vars': [
|
|
87
|
+
'error',
|
|
88
|
+
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
|
|
89
|
+
],
|
|
90
|
+
'@typescript-eslint/no-unused-expressions': 'error',
|
|
91
|
+
'@typescript-eslint/no-empty-function': 'warn',
|
|
92
|
+
'@typescript-eslint/prefer-nullish-coalescing': 'error',
|
|
93
|
+
'@typescript-eslint/prefer-optional-chain': 'error',
|
|
94
|
+
'@typescript-eslint/prefer-as-const': 'error',
|
|
95
|
+
'@typescript-eslint/no-non-null-assertion': 'warn',
|
|
96
|
+
'@typescript-eslint/no-duplicate-enum-values': 'error',
|
|
97
|
+
'@typescript-eslint/no-inferrable-types': [
|
|
98
|
+
'error',
|
|
99
|
+
{ ignoreParameters: false, ignoreProperties: false },
|
|
100
|
+
],
|
|
101
|
+
|
|
102
|
+
// Import Rules
|
|
103
|
+
'import/no-unresolved': 'error',
|
|
104
|
+
'import/named': 'error',
|
|
105
|
+
'import/default': 'error',
|
|
106
|
+
'import/no-absolute-path': 'error',
|
|
107
|
+
'import/no-self-import': 'error',
|
|
108
|
+
'import/first': 'error',
|
|
109
|
+
'import/no-mutable-exports': 'error',
|
|
110
|
+
'sort-imports': ['error', { ignoreDeclarationSort: true }],
|
|
111
|
+
|
|
112
|
+
// General Rules - Best Practices
|
|
113
|
+
'require-await': 'off',
|
|
114
|
+
'@typescript-eslint/require-await': 'error',
|
|
115
|
+
'@typescript-eslint/await-thenable': 'error',
|
|
116
|
+
'@typescript-eslint/no-misused-promises': 'error',
|
|
117
|
+
complexity: ['warn', { max: 11 }],
|
|
118
|
+
'no-console': ['warn', { allow: ['warn', 'error', 'info'] }],
|
|
119
|
+
'no-debugger': 'error',
|
|
120
|
+
'no-var': 'error',
|
|
121
|
+
'prefer-const': 'error',
|
|
122
|
+
'prefer-template': 'error',
|
|
123
|
+
'object-shorthand': 'error',
|
|
124
|
+
'no-lonely-if': 'error',
|
|
125
|
+
'no-useless-return': 'error',
|
|
126
|
+
'no-nested-ternary': 'warn',
|
|
127
|
+
eqeqeq: ['error', 'always', { null: 'ignore' }],
|
|
128
|
+
'no-throw-literal': 'error',
|
|
129
|
+
|
|
130
|
+
// JSDoc Rules
|
|
131
|
+
'jsdoc/check-alignment': 'off',
|
|
132
|
+
'jsdoc/check-indentation': 'off',
|
|
133
|
+
|
|
134
|
+
// Playwright recommended rules
|
|
135
|
+
...playwright.configs['playwright-test'].rules,
|
|
136
|
+
|
|
137
|
+
// Playwright Rules
|
|
138
|
+
'playwright/missing-playwright-await': 'error',
|
|
139
|
+
'playwright/no-focused-test': 'error',
|
|
140
|
+
'playwright/valid-expect': 'error',
|
|
141
|
+
'playwright/prefer-web-first-assertions': 'error',
|
|
142
|
+
'playwright/no-useless-await': 'error',
|
|
143
|
+
'playwright/no-page-pause': 'error',
|
|
144
|
+
'playwright/no-element-handle': 'error',
|
|
145
|
+
'playwright/no-eval': 'error',
|
|
146
|
+
'playwright/prefer-to-be': 'error',
|
|
147
|
+
'playwright/prefer-to-contain': 'error',
|
|
148
|
+
'playwright/prefer-to-have-length': 'error',
|
|
149
|
+
'playwright/no-wait-for-timeout': 'warn',
|
|
150
|
+
'playwright/no-useless-not': 'warn',
|
|
151
|
+
'playwright/require-top-level-describe': 'off',
|
|
152
|
+
'playwright/expect-expect': 'off',
|
|
153
|
+
'playwright/no-conditional-in-test': 'off',
|
|
154
|
+
'playwright/no-skipped-test': 'off',
|
|
155
|
+
'playwright/consistent-spacing-between-blocks': 'off',
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
];
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vasu-playwright-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"description": "Playwright Typescript Library with reusable utilities",
|
|
5
5
|
"main": "./dist/src/vasu-playwright-lib/index.js",
|
|
6
6
|
"types": "./dist/src/vasu-playwright-lib/index.d.ts",
|
|
7
7
|
"exports": {
|
|
8
8
|
".": "./dist/src/vasu-playwright-lib/index.js",
|
|
9
|
+
"./eslint": "./eslint.config.base.js",
|
|
9
10
|
"./action-utils": "./dist/src/vasu-playwright-lib/utils/action-utils.js",
|
|
10
11
|
"./assert-utils": "./dist/src/vasu-playwright-lib/utils/assert-utils.js",
|
|
11
12
|
"./element-utils": "./dist/src/vasu-playwright-lib/utils/element-utils.js",
|
|
@@ -40,29 +41,30 @@
|
|
|
40
41
|
},
|
|
41
42
|
"files": [
|
|
42
43
|
"dist",
|
|
43
|
-
"src"
|
|
44
|
+
"src",
|
|
45
|
+
"eslint.config.base.js"
|
|
44
46
|
],
|
|
45
47
|
"engines": {
|
|
46
|
-
"node": ">=
|
|
48
|
+
"node": ">=20.0.0"
|
|
47
49
|
},
|
|
48
50
|
"dependencies": {
|
|
49
51
|
"@eslint/js": "^9.39.2",
|
|
50
|
-
"@types/node": "^25.
|
|
51
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
52
|
-
"@typescript-eslint/parser": "^8.
|
|
52
|
+
"@types/node": "^25.3.1",
|
|
53
|
+
"@typescript-eslint/eslint-plugin": "^8.56.1",
|
|
54
|
+
"@typescript-eslint/parser": "^8.56.1",
|
|
53
55
|
"cross-env": "^10.1.0",
|
|
54
|
-
"dotenv": "^17.
|
|
55
|
-
"eslint": "^9.39.
|
|
56
|
+
"dotenv": "^17.3.1",
|
|
57
|
+
"eslint": "^9.39.3",
|
|
56
58
|
"eslint-config-prettier": "^10.1.8",
|
|
57
59
|
"eslint-import-resolver-typescript": "^4.4.4",
|
|
58
60
|
"eslint-plugin-import": "^2.32.0",
|
|
59
|
-
"eslint-plugin-jsdoc": "^62.
|
|
60
|
-
"eslint-plugin-playwright": "^2.
|
|
61
|
+
"eslint-plugin-jsdoc": "^62.7.1",
|
|
62
|
+
"eslint-plugin-playwright": "^2.7.1",
|
|
61
63
|
"eslint-plugin-prettier": "^5.5.5",
|
|
62
64
|
"husky": "^9.1.7",
|
|
63
65
|
"lint-staged": "^16.2.7",
|
|
64
66
|
"prettier": "^3.8.1",
|
|
65
|
-
"rimraf": "^6.1.
|
|
67
|
+
"rimraf": "^6.1.3",
|
|
66
68
|
"tslib": "^2.8.1",
|
|
67
69
|
"typescript": "5.9.3",
|
|
68
70
|
"winston": "^3.19.0"
|
|
@@ -401,19 +401,35 @@ export async function doubleClick(input: string | Locator, options?: DoubleClick
|
|
|
401
401
|
}
|
|
402
402
|
|
|
403
403
|
/**
|
|
404
|
-
*
|
|
405
|
-
*
|
|
406
|
-
*
|
|
404
|
+
* Triggers a file download by clicking the given element and saves the file to `savePath`.
|
|
405
|
+
*
|
|
406
|
+
* Uses `saveAs()` only (no `download.path()`), so it works locally and when connecting
|
|
407
|
+
* to a remote browser (e.g. Docker or cloud).
|
|
408
|
+
*
|
|
409
|
+
* @param {string | Locator} input - Selector or locator for the element that starts the download (e.g. download button).
|
|
410
|
+
* @param {string} savePath - Full path where the file should be saved along with file extension
|
|
411
|
+
* @returns {Promise<string>}The suggested filename from the response, or the last segment of `savePath` if empty. Use for assertions or logging.
|
|
412
|
+
* @throws If the element is not found, the click fails, the download fails, or save fails.
|
|
413
|
+
* @example
|
|
414
|
+
* const filename = await downloadFile('#download-btn', '/tmp/report.pdf');
|
|
415
|
+
* expect(filename).toBe('report.pdf');
|
|
416
|
+
*
|
|
417
|
+
* const filename = await downloadFile(myLocator, path.join(downloadDir, 'file.zip'), { timeout: 30000 });
|
|
407
418
|
*/
|
|
408
|
-
export async function downloadFile(input: string | Locator,
|
|
419
|
+
export async function downloadFile(input: string | Locator, savePath: string, options?: ClickOptions): Promise<string> {
|
|
409
420
|
const locator = await getLocatorWithStableAndVisibleOptions(input, options);
|
|
410
421
|
const downloadPromise = getPage().waitForEvent('download');
|
|
411
422
|
await click(locator, options);
|
|
412
423
|
const download = await downloadPromise;
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
424
|
+
|
|
425
|
+
const failure = await download.failure();
|
|
426
|
+
if (failure) {
|
|
427
|
+
throw new Error(`Download failed: ${failure}`);
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
await download.saveAs(savePath);
|
|
431
|
+
const suggestedFilename = download.suggestedFilename();
|
|
432
|
+
return suggestedFilename;
|
|
417
433
|
}
|
|
418
434
|
|
|
419
435
|
/**
|