Add descriptions to plugins

This commit is contained in:
Gregory Schier
2025-07-06 12:47:13 -07:00
parent cf35658fea
commit 47722643ee
30 changed files with 150 additions and 85 deletions

48
package-lock.json generated
View File

@@ -59,7 +59,7 @@
"@tauri-apps/cli": "2.4.1", "@tauri-apps/cli": "2.4.1",
"@typescript-eslint/eslint-plugin": "^8.27.0", "@typescript-eslint/eslint-plugin": "^8.27.0",
"@typescript-eslint/parser": "^8.27.0", "@typescript-eslint/parser": "^8.27.0",
"@yaakapp/cli": "^0.1.5", "@yaakapp/cli": "^0.2.7",
"eslint": "^9.29.0", "eslint": "^9.29.0",
"eslint-config-prettier": "^10.1.5", "eslint-config-prettier": "^10.1.5",
"eslint-plugin-import": "^2.32.0", "eslint-plugin-import": "^2.32.0",
@@ -4030,26 +4030,26 @@
"link": true "link": true
}, },
"node_modules/@yaakapp/cli": { "node_modules/@yaakapp/cli": {
"version": "0.1.5", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@yaakapp/cli/-/cli-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@yaakapp/cli/-/cli-0.2.7.tgz",
"integrity": "sha512-nx9Z8FhVr8afNkeYSDKZJg0PaYlqKQK2f8zj6MykJeeafHdauJ6EuXWXCmAK6uYLjrIaZI0S63tbgFRBq4kqog==", "integrity": "sha512-YKtbBENDH+qv+2L0jJSu1a8KOCU8wpr9FpFv+mIxUOMOl709aADToASvKFTNwdG2nAPCzdF0OsFHtV6o20gurw==",
"dev": true, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"bin": { "bin": {
"yaakcli": "bin/cli.js" "yaakcli": "bin/cli.js"
}, },
"optionalDependencies": { "optionalDependencies": {
"@yaakapp/cli-darwin-arm64": "0.1.5", "@yaakapp/cli-darwin-arm64": "0.2.7",
"@yaakapp/cli-darwin-x64": "0.1.5", "@yaakapp/cli-darwin-x64": "0.2.7",
"@yaakapp/cli-linux-arm64": "0.1.5", "@yaakapp/cli-linux-arm64": "0.2.7",
"@yaakapp/cli-linux-x64": "0.1.5", "@yaakapp/cli-linux-x64": "0.2.7",
"@yaakapp/cli-win32-x64": "0.1.5" "@yaakapp/cli-win32-x64": "0.2.7"
} }
}, },
"node_modules/@yaakapp/cli-darwin-arm64": { "node_modules/@yaakapp/cli-darwin-arm64": {
"version": "0.1.5", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@yaakapp/cli-darwin-arm64/-/cli-darwin-arm64-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@yaakapp/cli-darwin-arm64/-/cli-darwin-arm64-0.2.7.tgz",
"integrity": "sha512-P66dwLDx8YWw/A9f7NlnsvnAYBwB8uAYu5gu6/dLZLmYAJ/vZ7kPiHuq1d23g4vKcsXPnjx3Djh3E44ACysMWA==", "integrity": "sha512-4mHr252cvoZoiR15n9QA2XMF03qoTS5vj4oK57ttc8Q9Vdn7ecvpKEVhqLh2VJRqcgLIbpF0H4LGZdiP66ExFQ==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"os": [ "os": [
@@ -4057,9 +4057,9 @@
] ]
}, },
"node_modules/@yaakapp/cli-darwin-x64": { "node_modules/@yaakapp/cli-darwin-x64": {
"version": "0.1.5", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@yaakapp/cli-darwin-x64/-/cli-darwin-x64-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@yaakapp/cli-darwin-x64/-/cli-darwin-x64-0.2.7.tgz",
"integrity": "sha512-PrwGW9MVJkx1zO3pCdoQFoP2dyzoczHc/ZddFZ6tLEzJu3eg/rrsDkTZfLL/7h5egjGWZKmeG3osS9uFhBU68A==", "integrity": "sha512-uLaElBT0auiFX2g9mr29Vvhn3tzO47g2DFtfRyan121E7SqeygvteRNQaE8y5teUhzj+5Ocflvf0yXNa4ahg4Q==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"os": [ "os": [
@@ -4067,9 +4067,9 @@
] ]
}, },
"node_modules/@yaakapp/cli-linux-arm64": { "node_modules/@yaakapp/cli-linux-arm64": {
"version": "0.1.5", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@yaakapp/cli-linux-arm64/-/cli-linux-arm64-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@yaakapp/cli-linux-arm64/-/cli-linux-arm64-0.2.7.tgz",
"integrity": "sha512-Pz63GBO1ikVvTKCP5qSZYLZRcepFAd05+UDFnehWsb4c1OKDsFqOMauPzpMPsCkdqsegSUku0Jly2lDfqmW/ig==", "integrity": "sha512-7ycIAnSezVabXAOcduyXDhuh7qHqDUP0dK6V9x88rElj0pwiP6NU4s15K/qbmscRnd2fjSZRXwetgounC8DEgQ==",
"cpu": [ "cpu": [
"arm64" "arm64"
], ],
@@ -4080,9 +4080,9 @@
] ]
}, },
"node_modules/@yaakapp/cli-linux-x64": { "node_modules/@yaakapp/cli-linux-x64": {
"version": "0.1.5", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@yaakapp/cli-linux-x64/-/cli-linux-x64-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@yaakapp/cli-linux-x64/-/cli-linux-x64-0.2.7.tgz",
"integrity": "sha512-YuVDWjVkPtm7JzsN8VQ9ZTKcEnS7FnJ00wdaWh7IbgoBong/l2eb9Bhfv7A9Fm33VuHnS9QhlBvDGUazmnV3Mg==", "integrity": "sha512-h81IaJJYAsZx06tRuztm6GeC+4JtsLY+0s4TW5NgMnW2/qyRwxKbVTb+V7KxngSoYpTIsD48A2rdRN8odwEg1g==",
"cpu": [ "cpu": [
"x64" "x64"
], ],
@@ -4093,9 +4093,9 @@
] ]
}, },
"node_modules/@yaakapp/cli-win32-x64": { "node_modules/@yaakapp/cli-win32-x64": {
"version": "0.1.5", "version": "0.2.7",
"resolved": "https://registry.npmjs.org/@yaakapp/cli-win32-x64/-/cli-win32-x64-0.1.5.tgz", "resolved": "https://registry.npmjs.org/@yaakapp/cli-win32-x64/-/cli-win32-x64-0.2.7.tgz",
"integrity": "sha512-w8Oo8/tI/T8cat+tZSqk4OoQZuf1epoC5LR7iuIOOPYGrdxEO2kMDe2LZiG3vnE96Zbprvk3zbdBSrVU9y3wSA==", "integrity": "sha512-66T/LXUnnmZ9FvQwRSzz/kvqc8GYvU1YXYEda21ZUiVQ5+2skMYsvpi8vtH8G0yCjZJLVtYqrc/rhaJ60CHH8w==",
"dev": true, "dev": true,
"optional": true, "optional": true,
"os": [ "os": [

View File

@@ -75,7 +75,7 @@
"@tauri-apps/cli": "2.4.1", "@tauri-apps/cli": "2.4.1",
"@typescript-eslint/eslint-plugin": "^8.27.0", "@typescript-eslint/eslint-plugin": "^8.27.0",
"@typescript-eslint/parser": "^8.27.0", "@typescript-eslint/parser": "^8.27.0",
"@yaakapp/cli": "^0.1.5", "@yaakapp/cli": "^0.2.7",
"eslint": "^9.29.0", "eslint": "^9.29.0",
"eslint-config-prettier": "^10.1.5", "eslint-config-prettier": "^10.1.5",
"eslint-plugin-import": "^2.32.0", "eslint-plugin-import": "^2.32.0",

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/action-copy-curl", "name": "@yaak/action-copy-curl",
"displayName": "Copy as Curl",
"description": "Copy request as a curl command",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/action-copy-grpcurl", "name": "@yaak/action-copy-grpcurl",
"displayName": "Copy as gRPCurl",
"description": "Copy gRPC request as a grpcurl command",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/auth-basic", "name": "@yaak/auth-basic",
"displayName": "Basic Authentication",
"description": "Authenticate requests using Basic Auth",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/auth-bearer", "name": "@yaak/auth-bearer",
"displayName": "Bearer Authentication",
"description": "Authenticate requests using bearer authentication",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/auth-jwt", "name": "@yaak/auth-jwt",
"displayName": "JWT Authentication",
"description": "Authenticate requests using JSON web tokens (JWT)",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/auth-oauth2", "name": "@yaak/auth-oauth2",
"displayName": "OAuth 2.0 Authentication",
"description": "Authenticate requests using OAuth 2.0",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/filter-jsonpath", "name": "@yaak/filter-jsonpath",
"displayName": "JSONPath Filter",
"description": "Filter JSON response data using JSONPath expressions",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/filter-xpath", "name": "@yaak/filter-xpath",
"displayName": "XPath Filter",
"description": "Filter response XML data using XPath expressions",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/importer-curl", "name": "@yaak/importer-curl",
"displayName": "cURL Importer",
"description": "Import requests from cURL commands",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/importer-insomnia", "name": "@yaak/importer-insomnia",
"displayName": "Insomnia Importer",
"description": "Import data from Insomnia",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/importer-openapi", "name": "@yaak/importer-openapi",
"displayName": "OpenAPI Importer",
"description": "Import API specifications from OpenAPI/Swagger format",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,11 +1,13 @@
{ {
"name": "@yaak/importer-postman", "name": "@yaak/importer-postman",
"displayName": "Postman Importer",
"description": "Import collections from Postman",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"main": "./build/index.js", "main": "./build/index.js",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/importer-yaak", "name": "@yaak/importer-yaak",
"displayName": "Yaak Importer",
"description": "Import data from Yaak export files",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.js", "build": "yaakcli build",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-cookie", "name": "@yaak/template-function-cookie",
"displayName": "Cookie Template Functions",
"description": "Template functions for working with cookies",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-encode", "name": "@yaak/template-function-encode",
"displayName": "Encoding Template Functions",
"description": "Template functions for encoding and decoding data",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-fs", "name": "@yaak/template-function-fs",
"displayName": "File System Template Functions",
"description": "Template functions for working with the file system",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-hash", "name": "@yaak/template-function-hash",
"displayName": "Hash Template Functions",
"description": "Template functions for generating hash values",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-json", "name": "@yaak/template-function-json",
"displayName": "JSON Template Functions",
"description": "Template functions for working with JSON data",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-prompt", "name": "@yaak/template-function-prompt",
"displayName": "Prompt Template Functions",
"description": "Template functions for prompting for user input",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-regex", "name": "@yaak/template-function-regex",
"displayName": "Regex Template Functions",
"description": "Template functions for working with regular expressions",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-request", "name": "@yaak/template-function-request",
"displayName": "Request Template Functions",
"description": "Template functions for extracting value from requests",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-response", "name": "@yaak/template-function-response",
"displayName": "Response Template Functions",
"description": "Template functions for request chaining",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-uuid", "name": "@yaak/template-function-uuid",
"displayName": "UUID Template Functions",
"description": "Template functions for generating UUIDs",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/template-function-xml", "name": "@yaak/template-function-xml",
"displayName": "XML Template Functions",
"description": "Template functions for working with XML data",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
}, },
"dependencies": { "dependencies": {

View File

@@ -1,10 +1,12 @@
{ {
"name": "@yaak/themes-yaak", "name": "@yaak/themes-yaak",
"displayName": "Yaak Themes",
"description": "Default themes for Yaak",
"private": true, "private": true,
"version": "0.0.1", "version": "0.1.0",
"scripts": { "scripts": {
"build": "yaakcli build ./src/index.ts", "build": "yaakcli build ./src/index.ts",
"dev": "yaakcli dev ./src/index.js", "dev": "yaakcli dev",
"lint": "tsc --noEmit" "lint": "tsc --noEmit"
} }
} }

View File

@@ -0,0 +1,15 @@
const { readdirSync } = require('node:fs');
const path = require('node:path');
const { execSync } = require('node:child_process');
const pluginsDir = path.join(__dirname, '..', 'plugins');
console.log('Publishing core Yaak plugins');
for (const name of readdirSync(pluginsDir)) {
const dir = path.join(pluginsDir, name);
if (name.startsWith('.')) continue;
console.log('Building plugin', dir);
execSync('npm run build', { stdio: 'inherit', cwd: dir });
execSync('yaakcli publish', { stdio: 'inherit', cwd: dir, env: { ...process.env, ENVIRONMENT: 'development' } });
}

View File

@@ -80,7 +80,7 @@ rmSync(tmpDir, { recursive: true, force: true });
function tryExecSync(cmd) { function tryExecSync(cmd) {
try { try {
return execSync(cmd).toString('utf-8'); return execSync(cmd, { stdio: 'inherit' }).toString('utf-8');
} catch (_) { } catch (_) {
return ''; return '';
} }

View File

@@ -81,7 +81,7 @@ mkdirSync(dstDir, { recursive: true });
function tryExecSync(cmd) { function tryExecSync(cmd) {
try { try {
return execSync(cmd).toString('utf-8'); return execSync(cmd, { stdio: 'inherit' }).toString('utf-8');
} catch (_) { } catch (_) {
return ''; return '';
} }